From a1aec79cb1abc5630f941bafbe83f6e00dcff316 Mon Sep 17 00:00:00 2001 From: fdschmidt93 <39233597+fdschmidt93@users.noreply.github.com> Date: Sun, 22 May 2022 12:08:07 +0200 Subject: [PATCH] feat: none strategy & control attachment (#1867) --- doc/telescope.txt | 1 + lua/telescope/config.lua | 3 ++- lua/telescope/pickers.lua | 24 +++++++++++++++++++++--- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/doc/telescope.txt b/doc/telescope.txt index 0b769ee..43a5ccc 100644 --- a/doc/telescope.txt +++ b/doc/telescope.txt @@ -142,6 +142,7 @@ telescope.setup({opts}) *telescope.setup()* - "follow" - "row" - "closest" + - "none" *telescope.defaults.scroll_strategy* scroll_strategy: ~ diff --git a/lua/telescope/config.lua b/lua/telescope/config.lua index 88f8a59..9da8b97 100644 --- a/lua/telescope/config.lua +++ b/lua/telescope/config.lua @@ -182,7 +182,8 @@ append( - "reset" (default) - "follow" - "row" - - "closest"]] + - "closest" + - "none"]] ) append( diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua index 12d6209..d7ee32d 100644 --- a/lua/telescope/pickers.lua +++ b/lua/telescope/pickers.lua @@ -83,6 +83,7 @@ function Picker:new(opts) _original_mode = vim.api.nvim_get_mode().mode, debounce = get_default(tonumber(opts.debounce), nil), + _finder_attached = true, default_text = opts.default_text, get_status_text = get_default(opts.get_status_text, config.values.get_status_text), _on_input_filter_cb = opts.on_input_filter_cb or function() end, @@ -505,10 +506,12 @@ function Picker:find() -- Register attach vim.api.nvim_buf_attach(prompt_bufnr, false, { on_lines = function(...) - find_id = self:_next_find_id() + if self._finder_attached then + find_id = self:_next_find_id() - status_updater { completed = false } - self._on_lines(...) + status_updater { completed = false } + self._on_lines(...) + end end, on_detach = function() @@ -1365,6 +1368,16 @@ function Picker:_do_selection(prompt) else self:set_selection(self:get_reset_row()) end + elseif selection_strategy == "none" then + if self._selection_entry then + local old_entry, old_row = self._selection_entry, self._selection_row + self:reset_selection() -- required to reset selection before updating prefix + if old_row >= 0 then + self:update_prefix(old_entry, old_row) + self.highlighter:hi_multiselect(old_row, self:is_multi_selected(old_entry)) + end + end + return else error("Unknown selection strategy: " .. selection_strategy) end @@ -1495,6 +1508,11 @@ function Picker:_reset_highlights() vim.api.nvim_buf_clear_namespace(self.results_bufnr, ns_telescope_matching, 0, -1) end +-- Toggles whether finder is attached to prompt buffer input +function Picker:_toggle_finder_attach() + self._finder_attached = not self._finder_attached +end + function Picker:_detach() self.finder:close()