summaryrefslogtreecommitdiff
path: root/lua/telescope/pickers.lua
diff options
context:
space:
mode:
authorSimon Hauser <Simon-Hauser@outlook.de>2021-06-14 21:50:46 +0200
committerGitHub <noreply@github.com>2021-06-14 21:50:46 +0200
commit6ac5ee0854fe02d651cadf2fc97a2463ff92f322 (patch)
treed6a7b492246db153e786762f9b0d650dc907ccf6 /lua/telescope/pickers.lua
parent0c1bc129da3f684b04d72530dddaedb5255f12ef (diff)
feat: cycle previewers with commit and bcommit already using it (#528)
- new git previewers - jump to line in bcommit previewer - vimdiff for bcommits - dynamic preview window titles - more previewers documentation Cycle previewers are not mapped yet. So you need to setup yourself: ```lua require('telescope').setup { defaults = { mappings = { i = { ["<C-s>"] = actions.cycle_previewers_next, ["<C-a>"] = actions.cycle_previewers_prev, }, }, } } ``` Co-authored-by: Thore Strassburg <thore@weilbier.net>
Diffstat (limited to 'lua/telescope/pickers.lua')
-rw-r--r--lua/telescope/pickers.lua40
1 files changed, 38 insertions, 2 deletions
diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua
index 9d1377a..a0e443a 100644
--- a/lua/telescope/pickers.lua
+++ b/lua/telescope/pickers.lua
@@ -74,7 +74,10 @@ function Picker:new(opts)
finder = opts.finder,
sorter = opts.sorter or require('telescope.sorters').empty(),
- previewer = opts.previewer,
+
+ all_previewers = opts.previewer,
+ current_previewer_index = 1,
+
default_selection_index = opts.default_selection_index,
cwd = opts.cwd,
@@ -124,6 +127,15 @@ function Picker:new(opts)
obj.get_window_options = opts.get_window_options or p_window.get_window_options
+ if obj.all_previewers ~= nil and obj.all_previewers ~= false then
+ if obj.all_previewers[1] == nil then
+ obj.all_previewers = { obj.all_previewers }
+ end
+ obj.previewer = obj.all_previewers[1]
+ else
+ obj.previewer = false
+ end
+
-- TODO: It's annoying that this is create and everything else is "new"
obj.scroller = p_scroller.create(
get_default(opts.scroll_strategy, config.values.scroll_strategy),
@@ -453,7 +465,9 @@ function Picker:find()
self.prompt_bufnr = prompt_bufnr
- local preview_border_win = preview_opts and preview_opts.border and preview_opts.border.win_id
+ local preview_border = preview_opts and preview_opts.border
+ self.preview_border = preview_border
+ local preview_border_win = (preview_border and preview_border.win_id) and preview_border.win_id
state.set_status(prompt_bufnr, setmetatable({
prompt_bufnr = prompt_bufnr,
@@ -816,9 +830,31 @@ function Picker:refresh_previewer()
self._selection_entry,
status
)
+ if self.preview_border then
+ if config.values.dynamic_preview_title == true then
+ self.preview_border:change_title(self.previewer:dynamic_title(self._selection_entry))
+ else
+ self.preview_border:change_title(self.previewer:title())
+ end
+ end
end
end
+function Picker:cycle_previewers(next)
+ local size = #self.all_previewers
+ if size == 1 then return end
+
+ self.current_previewer_index = self.current_previewer_index + next
+ if self.current_previewer_index > size then
+ self.current_previewer_index = 1
+ elseif self.current_previewer_index < 1 then
+ self.current_previewer_index = size
+ end
+
+ self.previewer = self.all_previewers[self.current_previewer_index]
+ self:refresh_previewer()
+end
+
function Picker:entry_adder(index, entry, _, insert)
if not entry then return end