diff --git a/doc/telescope.txt b/doc/telescope.txt index e6a2a5e..501c2e3 100644 --- a/doc/telescope.txt +++ b/doc/telescope.txt @@ -2179,14 +2179,14 @@ actions.close({prompt_bufnr}) *telescope.actions.close()* {prompt_bufnr} (number) The prompt bufnr -actions._close({prompt_bufnr}, {keepinsert}) *telescope.actions._close()* - Close the Telescope window and specify if you want to keep insert mode or - not +actions._close({prompt_bufnr}) *telescope.actions._close()* + Close the Telescope window, usually used within an action + Deprecated and no longer needed, does the same as + |telescope.actions.close|. Might be removed in the future Parameters: ~ - {prompt_bufnr} (number) The prompt bufnr - {keepinsert} (boolean) Remain in INSERT mode if true + {prompt_bufnr} (number) The prompt bufnr actions.edit_command_line({prompt_bufnr}) *telescope.actions.edit_command_line()* diff --git a/lua/telescope/actions/init.lua b/lua/telescope/actions/init.lua index 4c3b42a..95f2ce4 100644 --- a/lua/telescope/actions/init.lua +++ b/lua/telescope/actions/init.lua @@ -343,28 +343,26 @@ end --- Close the Telescope window, usually used within an action ---@param prompt_bufnr number: The prompt bufnr actions.close = function(prompt_bufnr) - actions._close(prompt_bufnr, false) -end - ---- Close the Telescope window and specify if you want to keep insert mode or not ----@param prompt_bufnr number: The prompt bufnr ----@param keepinsert boolean: Remain in INSERT mode if true -actions._close = function(prompt_bufnr, keepinsert) action_state.get_current_history():reset() local picker = action_state.get_current_picker(prompt_bufnr) local prompt_win = state.get_status(prompt_bufnr).prompt_win local original_win_id = picker.original_win_id actions.close_pum(prompt_bufnr) - if not keepinsert then - vim.cmd [[stopinsert]] - end vim.api.nvim_win_close(prompt_win, true) pcall(vim.cmd, string.format([[silent bdelete! %s]], prompt_bufnr)) pcall(a.nvim_set_current_win, original_win_id) end +--- Close the Telescope window, usually used within an action
+--- Deprecated and no longer needed, does the same as |telescope.actions.close|. Might be removed in the future +---@deprecated +---@param prompt_bufnr number: The prompt bufnr +actions._close = function(prompt_bufnr) + actions.close(prompt_bufnr) +end + local set_edit_line = function(prompt_bufnr, fname, prefix, postfix) postfix = vim.F.if_nil(postfix, "") local selection = action_state.get_selected_entry() @@ -460,7 +458,7 @@ end ---@param prompt_bufnr number: The prompt bufnr actions.insert_symbol_i = function(prompt_bufnr) local symbol = action_state.get_selected_entry().value[1] - actions._close(prompt_bufnr, true) + actions.close(prompt_bufnr) vim.schedule(function() vim.cmd [[startinsert]] vim.api.nvim_put({ symbol }, "", true, true) diff --git a/lua/telescope/builtin/internal.lua b/lua/telescope/builtin/internal.lua index 1421775..e3bcdce 100644 --- a/lua/telescope/builtin/internal.lua +++ b/lua/telescope/builtin/internal.lua @@ -178,9 +178,10 @@ internal.pickers = function(opts) actions.select_default:replace(function(prompt_bufnr) local current_picker = action_state.get_current_picker(prompt_bufnr) local selection_index = current_picker:get_index(current_picker:get_selection_row()) - actions._close(prompt_bufnr, cached_pickers[selection_index].initial_mode == "insert") + actions.close(prompt_bufnr) opts.cache_picker = opts._cache_picker opts["cache_index"] = selection_index + opts["initial_mode"] = cached_pickers[selection_index].initial_mode internal.resume(opts) end) map("i", "", actions.remove_selected_picker) diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua index 4555ffb..97e5ec6 100644 --- a/lua/telescope/pickers.lua +++ b/lua/telescope/pickers.lua @@ -432,21 +432,19 @@ function Picker:find() pcall(a.nvim_buf_set_option, prompt_bufnr, "filetype", "TelescopePrompt") pcall(a.nvim_buf_set_option, results_bufnr, "filetype", "TelescopeResults") - -- TODO(async): I wonder if this should actually happen _before_ we nvim_buf_attach. - -- This way the buffer would always start with what we think it should when we start the loop. - if self.initial_mode == "insert" or self.initial_mode == "normal" then - -- required for set_prompt to work adequately - vim.cmd [[startinsert!]] - if self.default_text then - self:set_prompt(self.default_text) - end - if self.initial_mode == "normal" then - -- otherwise (i) insert mode exitted faster than `picker:set_prompt`; (ii) cursor on wrong pos - await_schedule(function() - vim.cmd [[stopinsert]] - end) - end - else + if self.default_text then + self:set_prompt(self.default_text) + end + + if self.initial_mode == "insert" then + vim.schedule(function() + -- startinsert! did not reliable do `A` no idea why, i even looked at the source code + -- Example: live_grep -> type something -> quit -> Telescope pickers -> resume -> cursor of by one + if vim.fn.mode() ~= "i" then + vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("A", true, false, true), "n", true) + end + end) + elseif self.initial_mode ~= "normal" then error("Invalid setting for initial_mode: " .. self.initial_mode) end @@ -722,10 +720,8 @@ function Picker:delete_selection(delete_cb) end, 50) end -function Picker:set_prompt(str) - -- TODO(conni2461): As soon as prompt_buffers are fix use this: - -- vim.api.nvim_buf_set_lines(self.prompt_bufnr, 0, 1, false, { str }) - vim.api.nvim_feedkeys(str, "n", false) +function Picker:set_prompt(text) + self:reset_prompt(text) end --- Closes the windows for the prompt, results and preview @@ -890,7 +886,6 @@ end function Picker:reset_prompt(text) local prompt_text = self.prompt_prefix .. (text or "") vim.api.nvim_buf_set_lines(self.prompt_bufnr, 0, -1, false, { prompt_text }) - self:_reset_prefix_color(self._current_prefix_hl_group) if text then @@ -1223,7 +1218,7 @@ end --- Close all open Telescope pickers function Picker:close_existing_pickers() for _, prompt_bufnr in ipairs(state.get_existing_prompts()) do - pcall(actions._close, prompt_bufnr, true) + pcall(actions.close, prompt_bufnr) end end @@ -1529,7 +1524,6 @@ function Picker:_resume_picker() self.cache_picker.is_cached = false -- if text changed, required to set anew to restart finder; otherwise hl and selection if self.cache_picker.cached_prompt ~= self.default_text then - self:reset_prompt() self:set_prompt(self.default_text) else -- scheduling required to apply highlighting and selection appropriately diff --git a/plugin/telescope.vim b/plugin/telescope.vim index 9128c45..506f9ee 100644 --- a/plugin/telescope.vim +++ b/plugin/telescope.vim @@ -1,5 +1,5 @@ if !has('nvim-0.7.0') - echoerr "Telescope.nvim requires at least nvim-0.7.0. See `:h telescope.changelog-1549`" + echoerr "Telescope.nvim requires at least nvim-0.7.0. See `:h telescope.changelog-1851`" finish end