From ba52c70a60fb7e34a1512355ace2cd984705b7c6 Mon Sep 17 00:00:00 2001 From: Simon Hauser Date: Fri, 13 Nov 2020 16:20:09 +0100 Subject: [PATCH] fix: selection_strategies row and follow (#218) --- lua/telescope/entry_manager.lua | 4 ++-- lua/telescope/pickers.lua | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lua/telescope/entry_manager.lua b/lua/telescope/entry_manager.lua index d53586e..fea0b7a 100644 --- a/lua/telescope/entry_manager.lua +++ b/lua/telescope/entry_manager.lua @@ -53,7 +53,7 @@ function EntryManager:new(max_results, set_entry, info) local existing_entry = v.entry -- FIXME: This has the problem of assuming that display will not be the same for two different entries. - if existing_entry.display == entry.display then + if existing_entry == entry then return k end end @@ -110,7 +110,7 @@ function EntryManager:insert(picker, index, entry) -- and then shift all the corresponding items one place. local next_entry, last_score repeat - self.info.inserted = self.info.inserted + 1 + self.info.inserted = self.info.inserted + 1 next_entry = self.entry_state[index] self.set_entry(picker, index, entry.entry, entry.score) diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua index fea687d..43d3b96 100644 --- a/lua/telescope/pickers.lua +++ b/lua/telescope/pickers.lua @@ -683,8 +683,14 @@ function Picker:set_selection(row) row = self:_handle_scroll_strategy(row) if not self:can_select_row(row) then - log.debug("Cannot select row:", row, self.manager:num_results(), self.max_results) - return + -- If the current selected row exceeds number of currently displayed + -- elements we have to reset it. Affectes sorting_strategy = 'row'. + if not self:can_select_row(self:get_selection_row()) then + row = self:get_row(self.manager:num_results()) + else + log.debug("Cannot select row:", row, self.manager:num_results(), self.max_results) + return + end end -- local entry = self.manager:get_entry(self.max_results - row + 1)