diff options
| author | Simon Hauser <Simon-Hauser@outlook.de> | 2021-06-14 21:50:46 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-14 21:50:46 +0200 |
| commit | 6ac5ee0854fe02d651cadf2fc97a2463ff92f322 (patch) | |
| tree | d6a7b492246db153e786762f9b0d650dc907ccf6 /lua/telescope/pickers.lua | |
| parent | 0c1bc129da3f684b04d72530dddaedb5255f12ef (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.lua | 40 |
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 |
