diff options
| author | Luke Kershaw <35707277+l-kershaw@users.noreply.github.com> | 2021-11-15 21:32:02 +0000 |
|---|---|---|
| committer | Luke Kershaw <35707277+l-kershaw@users.noreply.github.com> | 2021-11-18 19:44:12 +0000 |
| commit | edcf07cf885f86c08c5b15f333b7c82b15c3527b (patch) | |
| tree | 4d2638cfb6f401660ab5317f535ceb274cd60e7f /lua/telescope/pickers.lua | |
| parent | b952c2f852de1ec5ce7306ccd9262c97e27902d2 (diff) | |
feat: layout actions (#1383)
Co-authored-by: johnybx <johnybx@users.noreply.github.com>
Diffstat (limited to 'lua/telescope/pickers.lua')
| -rw-r--r-- | lua/telescope/pickers.lua | 46 |
1 files changed, 12 insertions, 34 deletions
diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua index 76e6136..b626c46 100644 --- a/lua/telescope/pickers.lua +++ b/lua/telescope/pickers.lua @@ -104,6 +104,8 @@ function Picker:new(opts) layout_strategy = layout_strategy, layout_config = config.smarter_depth_2_extend(opts.layout_config or {}, config.values.layout_config or {}), + __cycle_layout_list = get_default(opts.cycle_layout_list, config.values.cycle_layout_list), + window = { winblend = get_default( opts.winblend, @@ -330,6 +332,7 @@ function Picker:find() end local results_win, results_opts, results_border_win = self:_create_window("", popup_opts.results, true) + local results_bufnr = a.nvim_win_get_buf(results_win) self.results_bufnr = results_bufnr @@ -572,9 +575,9 @@ function Picker:recalculate_layout() -- self.max_results = popup_opts.results.height end -local update_scroll = function(win, oldinfo, oldcursor, strategy, max_results) +local update_scroll = function(win, oldinfo, oldcursor, strategy, buf_maxline) if strategy == "ascending" then - vim.api.nvim_win_set_cursor(win, { max_results, 0 }) + vim.api.nvim_win_set_cursor(win, { buf_maxline, 0 }) vim.api.nvim_win_set_cursor(win, { oldinfo.topline, 0 }) vim.api.nvim_win_set_cursor(win, oldcursor) elseif strategy == "descending" then @@ -586,34 +589,15 @@ local update_scroll = function(win, oldinfo, oldcursor, strategy, max_results) end end -function Picker:toggle_preview() - local status = state.get_status(self.prompt_bufnr) - - if self.previewer and status.preview_win then - self.hidden_previewer = self.previewer - self.previewer = nil - elseif self.hidden_previewer and not status.preview_win then - self.previewer = self.hidden_previewer - self.hidden_previewer = nil - else - return - end - - local oldinfo = vim.fn.getwininfo(status.results_win)[1] - local oldcursor = vim.api.nvim_win_get_cursor(status.results_win) - +function Picker:full_layout_update() + local oldinfo = vim.fn.getwininfo(self.results_win)[1] + local oldcursor = vim.api.nvim_win_get_cursor(self.results_win) self:recalculate_layout() self:refresh_previewer() - update_scroll(status.results_win, oldinfo, oldcursor, self.sorting_strategy, self.max_results) -end -function Picker:toggle_padding() - -- if padding ~= 0 - -- 1. Save `height` and `width` of picker - -- 2. Set both to `{padding = 0}` - -- else - -- 1. Lookup previous `height` and `width` of picker - -- 2. Set both to previous values + -- update scrolled position + local buf_maxline = #vim.api.nvim_buf_get_lines(self.results_bufnr, 0, -1, false) + update_scroll(self.results_win, oldinfo, oldcursor, self.sorting_strategy, buf_maxline) end -- TODO: update multi-select with the correct tag name when available @@ -1310,13 +1294,7 @@ function pickers.on_resize_window(prompt_bufnr) local status = state.get_status(prompt_bufnr) local picker = status.picker - local oldinfo = vim.fn.getwininfo(status.results_win)[1] - local oldcursor = vim.api.nvim_win_get_cursor(status.results_win) - picker:recalculate_layout() - picker:refresh_previewer() - - -- update scrolled position - update_scroll(status.results_win, oldinfo, oldcursor, picker.sorting_strategy, picker.max_results) + picker:full_layout_update() end --- Get the prompt text without the prompt prefix. |
