summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/pickers.lua22
1 files changed, 12 insertions, 10 deletions
diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua
index a9c7fb2..9edd9e9 100644
--- a/lua/telescope/pickers.lua
+++ b/lua/telescope/pickers.lua
@@ -709,9 +709,9 @@ function Picker:delete_selection(delete_cb)
end
self:refresh()
- vim.schedule(function()
+ vim.defer_fn(function()
self.selection_strategy = original_selection_strategy
- end)
+ end, 50)
end
function Picker:set_prompt(str)
@@ -755,7 +755,16 @@ end
--- Get the row number of the current selection
---@return number
function Picker:get_selection_row()
- return self._selection_row or self.max_results
+ if self._selection_row then
+ -- If the current row is no longer selectable than reduce it to num_results - 1, so the next selectable row.
+ -- This makes selection_strategy `row` work much better if the selected row is no longer part of the output.
+ local num_results = self.manager:num_results()
+ if num_results <= self._selection_row then
+ return num_results - 1
+ end
+ return self._selection_row
+ end
+ return self.max_results
end
--- Move the current selection by `change` steps
@@ -1277,13 +1286,6 @@ function Picker:get_result_processor(find_id, prompt, status_updater)
end
self.sorter:score(prompt, entry, cb_add, cb_filter)
-
- -- Only on the first addition do we want to set the selection.
- -- This allows us to handle moving the cursor to the bottom or top of the window
- -- depending on the strategy.
- if count == 1 then
- self:_do_selection(prompt)
- end
end
end