diff --git a/lua/buffer_manager/ui.lua b/lua/buffer_manager/ui.lua index cd4094a..71574d3 100644 --- a/lua/buffer_manager/ui.lua +++ b/lua/buffer_manager/ui.lua @@ -117,7 +117,7 @@ local function get_mark_by_name(name, specific_marks) else if config.short_file_names then ref_name = utils.get_short_file_name(mark.filename, current_short_fns) - current_short_fns[ref_name] = true + current_short_fns[ref_name:gsub('^%d+|', '')] = true elseif config.format_function then ref_name = config.format_function(mark.filename) else @@ -299,6 +299,7 @@ end function M.toggle_quick_menu() log.trace("toggle_quick_menu()") + config = buffer_manager.get_config() -- update configuration if Buffer_manager_win_id ~= nil and vim.api.nvim_win_is_valid(Buffer_manager_win_id) then if vim.api.nvim_buf_get_changedtick(vim.fn.bufnr()) > 0 then M.on_menu_save() @@ -346,7 +347,7 @@ function M.toggle_quick_menu() if not string_starts(display_filename, "term://") then if config.short_file_names then display_filename = utils.get_short_file_name(display_filename, current_short_fns) - current_short_fns[display_filename] = true + current_short_fns[display_filename:gsub('^%d+|', '')] = true elseif config.format_function then display_filename = config.format_function(display_filename) else diff --git a/lua/buffer_manager/utils.lua b/lua/buffer_manager/utils.lua index 7454fec..af7490e 100644 --- a/lua/buffer_manager/utils.lua +++ b/lua/buffer_manager/utils.lua @@ -30,6 +30,10 @@ end function M.get_short_file_name(file, current_short_fns) + local has_win = vim.fn.has('win32') == 1 + if has_win then + file = file:gsub('\\','/') + end local short_name = nil -- Get normalized file path file = M.normalize_path(file) @@ -41,29 +45,34 @@ function M.get_short_file_name(file, current_short_fns) -- insert firts char only table.insert(folders, folder) end + -- folders : table which is constitute of file path every '/' + -- why does this function call files with multiple times? -- File to string file = tostring(file) -- Count the number of slashes in the relative file path local slash_count = 0 - for _ in string.gmatch(file, "/") do + for _ in string.gmatch(file, "/") do -- he makes 'folders', but why do this? slash_count = slash_count + 1 end if slash_count == 0 then short_name = M.get_file_name(file) else -- Return the file name preceded by the number of slashes - short_name = slash_count .. "|" .. M.get_file_name(file) + short_name = slash_count .. "|" .. M.get_file_name(file) -- get file name only regardless of path end -- Check if the file name is already in the list of short file names -- If so, return the short file name with one number in front of it - local i = 1 - while key_in_table(short_name, current_short_fns) do + local i = #folders-1 + local filename = short_name + local dirname = '' + while key_in_table(short_name:gsub('^%d+|', ''), current_short_fns) do local folder = folders[i] if folder == nil then folder = i end - short_name = short_name.." ("..folder..")" - i = i + 1 + dirname = folder .. '/' .. dirname + short_name = filename .. ' (' .. dirname .. ')' + i = i - 1 end return short_name end