diff --git a/lua/telescope/actions/set.lua b/lua/telescope/actions/set.lua index 81f9bc5..85d2923 100644 --- a/lua/telescope/actions/set.lua +++ b/lua/telescope/actions/set.lua @@ -12,7 +12,6 @@ local a = vim.api -local log = require "telescope.log" local Path = require "plenary.path" local state = require "telescope.state" @@ -129,19 +128,22 @@ action_set.edit = function(prompt_bufnr, command) vim.api.nvim_buf_set_option(entry_bufnr, "buflisted", true) end edit_buffer(command, entry_bufnr) + require("telescope.actions.utils").__jump_to(row, col) else -- check if we didn't pick a different buffer -- prevents restarting lsp server if vim.api.nvim_buf_get_name(0) ~= filename or command ~= "edit" then filename = Path:new(vim.fn.fnameescape(filename)):normalize(vim.loop.cwd()) - pcall(vim.cmd, string.format("%s %s", command, filename)) - end - end - - if row and col then - local ok, err_msg = pcall(a.nvim_win_set_cursor, 0, { row, col }) - if not ok then - log.debug("Failed to move to cursor:", err_msg, row, col) + -- Make sure we wait till we are back in insert mode before opening the file + -- This fixes foldes + vim.cmd(string.format( + [[%s :lua require("telescope.actions.utils").__open_file_at("%s", "%s", %s, %s)]], + "autocmd InsertLeave * ++once ++nested", -- open file as soon as we have left insert mode (fixes folding) + command, + filename, + row, + col + )) end end end diff --git a/lua/telescope/actions/utils.lua b/lua/telescope/actions/utils.lua index 4d0c17d..01d9e79 100644 --- a/lua/telescope/actions/utils.lua +++ b/lua/telescope/actions/utils.lua @@ -6,6 +6,7 @@ --- Generally used from within other |telescope.actions| ---@brief ]] +local log = require "telescope.log" local action_state = require "telescope.actions.state" local utils = {} @@ -102,4 +103,22 @@ function utils.get_registered_mappings(prompt_bufnr) return ret end +--- Internal function for autocmd +--- Please dont call (subject to change) +function utils.__jump_to(row, col) + if row and col then + local ok, err_msg = pcall(vim.api.nvim_win_set_cursor, 0, { row, col }) + if not ok then + log.debug("Failed to move to cursor:", err_msg, row, col) + end + end +end + +--- Internal function for autocmd +--- Please dont call (subject to change) +function utils.__open_file_at(command, filename, row, col) + vim.cmd(string.format([[:%s %s]], command, filename)) + utils.__jump_to(row, col) +end + return utils