feat: smart path (#914)
path_display = { "smart" }
Co-authored-by: Deniz <deniz@admentum.se>
Co-authored-by: Simon Hauser <Simon-Hauser@outlook.de>
This commit is contained in:
@@ -201,6 +201,8 @@ telescope.setup({opts}) *telescope.setup()*
|
||||
- "hidden" hide file names
|
||||
- "tail" only display the file name, and not the path
|
||||
- "absolute" display absolute paths
|
||||
- "smart" remove as much from the path as possible to only show
|
||||
the difference between the displayed paths
|
||||
- "shorten" only display the first character of each directory in
|
||||
the path
|
||||
|
||||
@@ -917,6 +919,7 @@ builtin.lsp_type_definitions({opts}) *builtin.lsp_type_definitions()*
|
||||
{jump_type} (string) how to goto definition if there is only one,
|
||||
values: "tab", "split", "vsplit", "never"
|
||||
|
||||
|
||||
builtin.lsp_implementations({opts}) *builtin.lsp_implementations()*
|
||||
Goto the implementation of the word under the cursor if there's only one,
|
||||
otherwise show all options in Telescope
|
||||
|
||||
@@ -201,6 +201,8 @@ local telescope_defaults = {
|
||||
- "hidden" hide file names
|
||||
- "tail" only display the file name, and not the path
|
||||
- "absolute" display absolute paths
|
||||
- "smart" remove as much from the path as possible to only show
|
||||
the difference between the displayed paths
|
||||
- "shorten" only display the first character of each directory in
|
||||
the path
|
||||
|
||||
|
||||
@@ -261,6 +261,48 @@ utils.path_shorten = function(filename, len)
|
||||
return Path:new(filename):shorten(len)
|
||||
end
|
||||
|
||||
utils.path_smart = (function()
|
||||
local paths = {}
|
||||
return function(filepath)
|
||||
local final = filepath
|
||||
if #paths ~= 0 then
|
||||
local dirs = vim.split(filepath, "/")
|
||||
local max = 1
|
||||
for _, p in pairs(paths) do
|
||||
if #p > 0 and p ~= filepath then
|
||||
local _dirs = vim.split(p, "/")
|
||||
for i = 1, math.min(#dirs, #_dirs) do
|
||||
if (dirs[i] ~= _dirs[i]) and i > max then
|
||||
max = i
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if #dirs ~= 0 then
|
||||
if max == 1 and #dirs >= 2 then
|
||||
max = #dirs - 2
|
||||
end
|
||||
final = ""
|
||||
for k, v in pairs(dirs) do
|
||||
if k >= max - 1 then
|
||||
final = final .. (#final > 0 and "/" or "") .. v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not paths[filepath] then
|
||||
paths[filepath] = ""
|
||||
table.insert(paths, filepath)
|
||||
end
|
||||
if final and final ~= filepath then
|
||||
return "../" .. final
|
||||
else
|
||||
return filepath
|
||||
end
|
||||
end
|
||||
end)()
|
||||
|
||||
utils.path_tail = (function()
|
||||
local os_sep = utils.get_separator()
|
||||
local match_string = "[^" .. os_sep .. "]*$"
|
||||
@@ -300,6 +342,8 @@ utils.transform_path = function(opts, path)
|
||||
elseif type(path_display) == "table" then
|
||||
if vim.tbl_contains(path_display, "tail") or path_display.tail then
|
||||
transformed_path = utils.path_tail(transformed_path)
|
||||
elseif vim.tbl_contains(path_display, "smart") or path_display.smart then
|
||||
transformed_path = utils.path_smart(transformed_path)
|
||||
else
|
||||
if not vim.tbl_contains(path_display, "absolute") or path_display.absolute == false then
|
||||
local cwd
|
||||
|
||||
Reference in New Issue
Block a user