From 1866265feaebda2b615fadaa9230ec45958dd210 Mon Sep 17 00:00:00 2001 From: Luke Kershaw <35707277+l-kershaw@users.noreply.github.com> Date: Fri, 16 Jul 2021 17:41:39 +0100 Subject: [PATCH] feat: Add length option for `shorten_path` (#886) * feat: add `shorten_len` option for path shortening - adds option to configure the length of shortened parts of filenames - only affects paths when "shorten" is in `path_display` * chore: revert rebase for `path.lua` to 876bed9 * refactor: replace `shorten_len` with the `shorten` key in `path_display` - also deprecates `utils.path_shorten` and passes straight to `plenary`s `Path:shorten` * feat: allow `path_display` to handle table keys, as well as strings --- doc/telescope.txt | 9 +++++++++ lua/telescope/config.lua | 10 ++++++++++ lua/telescope/utils.lua | 19 +++++++++++-------- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/doc/telescope.txt b/doc/telescope.txt index bdd25b337a..7a12c95631 100644 --- a/doc/telescope.txt +++ b/doc/telescope.txt @@ -179,6 +179,15 @@ telescope.setup({opts}) *telescope.setup()* - "shorten" only display the first character of each directory in the path + You can also specify the number of characters of each directory name + to keep by setting `path_display.shorten = num`. + e.g. for a path like + `alpha/beta/gamma/delta.txt` + setting `path_display.shorten = 1` will give a path like: + `a/b/g/delta.txt` + Similarly, `path_display.shorten = 2` will give a path like: + `al/be/ga/delta.txt` + path_display can also be set to 'hidden' string to hide file names path_display can also be set to a function for custom formatting of diff --git a/lua/telescope/config.lua b/lua/telescope/config.lua index d7962c4c63..27edc6c7a3 100644 --- a/lua/telescope/config.lua +++ b/lua/telescope/config.lua @@ -188,6 +188,15 @@ local telescope_defaults = { - "shorten" only display the first character of each directory in the path + You can also specify the number of characters of each directory name + to keep by setting `path_display.shorten = num`. + e.g. for a path like + `alpha/beta/gamma/delta.txt` + setting `path_display.shorten = 1` will give a path like: + `a/b/g/delta.txt` + Similarly, `path_display.shorten = 2` will give a path like: + `al/be/ga/delta.txt` + path_display can also be set to 'hidden' string to hide file names path_display can also be set to a function for custom formatting of @@ -202,6 +211,7 @@ local telescope_defaults = { Default: {}]] }, + borderchars = { { "─", "│", "─", "│", "╭", "╮", "╯", "╰" } }, get_status_text = { diff --git a/lua/telescope/utils.lua b/lua/telescope/utils.lua index 9238ab7e47..6e35b8165c 100644 --- a/lua/telescope/utils.lua +++ b/lua/telescope/utils.lua @@ -3,6 +3,8 @@ local has_devicons, devicons = pcall(require, 'nvim-web-devicons') local Path = require('plenary.path') local Job = require('plenary.job') +local log = require('telescope.log') + local utils = {} utils.get_separator = function() @@ -251,8 +253,9 @@ utils.diagnostics_to_tbl = function(opts) return items end -utils.path_shorten = function(file) - return Path:new(file):shorten() +utils.path_shorten = function(filename,len) + log.warn("`utils.path_shorten` is deprecated. Use `require('plenary.path').shorten`.") + return Path:new(filename):shorten(len) end utils.path_tail = (function() @@ -268,7 +271,7 @@ utils.is_path_hidden = function(opts, path_display) path_display = path_display or utils.get_default(opts.path_display, require('telescope.config').values.path_display) return path_display == nil or path_display == "hidden" or - type(path_display) ~= "table" or vim.tbl_contains(path_display, "hidden") + type(path_display) ~= "table" or vim.tbl_contains(path_display, "hidden") or path_display.hidden end utils.transform_path = function(opts, path) @@ -284,10 +287,10 @@ utils.transform_path = function(opts, path) return '' end - if vim.tbl_contains(path_display, "tail") then + if vim.tbl_contains(path_display, "tail") or path_display.tail then transformed_path = utils.path_tail(transformed_path) else - if not vim.tbl_contains(path_display, "absolute") then + if not vim.tbl_contains(path_display, "absolute") or path_display.absolute == false then local cwd if opts.cwd then cwd = opts.cwd @@ -300,8 +303,8 @@ utils.transform_path = function(opts, path) transformed_path = Path:new(transformed_path):make_relative(cwd) end - if vim.tbl_contains(path_display, "shorten") then - transformed_path = Path:new(transformed_path):shorten() + if vim.tbl_contains(path_display, "shorten") or path_display["shorten"] ~= nil then + transformed_path = Path:new(transformed_path):shorten(path_display["shorten"]) end end @@ -439,7 +442,7 @@ utils.transform_devicons = (function() end local icon, icon_highlight = devicons.get_icon(filename, string.match(filename, '%a+$'), { default = true }) - local icon_display = (icon or ' ') .. ' ' .. display + local icon_display = (icon or ' ') .. ' ' .. (display or '') if conf.color_devicons then return icon_display, icon_highlight