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>
This commit is contained in:
Simon Hauser
2021-06-14 21:50:46 +02:00
committed by GitHub
parent 0c1bc129da
commit 6ac5ee0854
11 changed files with 566 additions and 76 deletions

View File

@@ -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