From 175178e3889c13a840f036d464aee2d145157b9e Mon Sep 17 00:00:00 2001 From: Jaehaks Date: Sun, 22 Sep 2024 12:35:27 +0900 Subject: [PATCH] fix(__internal) : fix slash problem in oldfiles (#3260) * fix(__internal) : fix slash problem in oldfiles - Problems Problem with slash and backslash being mixed up is chronic issue of neovim in Windows. it makes telescope prompt perceive same path differently when it execute to oldfiles picker. some function like `nvim_buf_get_name()` or `vim.v.oldfiles` give paths which are mixed up with slash and backslash. - What it did For windows, it always needs to change slash(/) to backslash(\) when function which deal with path because entry_maker works properly only the case that path string has \ not /. - Effect 1) oldfiles picker doesn't show duplicated list 2) `defaults.path_display` configuration feature will works well at oldfiles pikcer * fix(__internal) : Repeated comments are erased --- lua/telescope/builtin/__internal.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lua/telescope/builtin/__internal.lua b/lua/telescope/builtin/__internal.lua index 3960c7bc80..c25ebc734a 100644 --- a/lua/telescope/builtin/__internal.lua +++ b/lua/telescope/builtin/__internal.lua @@ -532,12 +532,19 @@ internal.oldfiles = function(opts) local current_file = vim.api.nvim_buf_get_name(current_buffer) local results = {} + if utils.iswin then -- for slash problem in windows + current_file = current_file:gsub("/", "\\") + end + if opts.include_current_session then for _, buffer in ipairs(utils.split_lines(vim.fn.execute ":buffers! t")) do local match = tonumber(string.match(buffer, "%s*(%d+)")) local open_by_lsp = string.match(buffer, "line 0$") if match and not open_by_lsp then local file = vim.api.nvim_buf_get_name(match) + if utils.iswin then + file = file:gsub("/", "\\") + end if vim.loop.fs_stat(file) and match ~= current_buffer then table.insert(results, file) end @@ -546,6 +553,9 @@ internal.oldfiles = function(opts) end for _, file in ipairs(vim.v.oldfiles) do + if utils.iswin then + file = file:gsub("/", "\\") + end local file_stat = vim.loop.fs_stat(file) if file_stat and file_stat.type == "file" and not vim.tbl_contains(results, file) and file ~= current_file then table.insert(results, file)