diff options
| author | fdschmidt93 <39233597+fdschmidt93@users.noreply.github.com> | 2021-09-10 13:21:04 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-10 13:21:04 +0200 |
| commit | 1c35ea319e847e07653cde5bb817daba8dd83a70 (patch) | |
| tree | 91f4baa096c89d970d97653d4199ba1802250093 /lua | |
| parent | b4d6eb9a232dab48ce658470a980e7a15edb500f (diff) | |
fix: stale lnum in buffer previewer (#1229)
* fix: lnum to jump to might be stale eg when resuming buffer picker after changes
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/telescope/make_entry.lua | 5 | ||||
| -rw-r--r-- | lua/telescope/previewers/buffer_previewer.lua | 17 |
2 files changed, 14 insertions, 8 deletions
diff --git a/lua/telescope/make_entry.lua b/lua/telescope/make_entry.lua index f6fed2d..beb7e18 100644 --- a/lua/telescope/make_entry.lua +++ b/lua/telescope/make_entry.lua @@ -452,6 +452,7 @@ function make_entry.gen_from_buffer(opts) local readonly = vim.api.nvim_buf_get_option(entry.bufnr, "readonly") and "=" or " " local changed = entry.info.changed == 1 and "+" or " " local indicator = entry.flag .. hidden .. readonly .. changed + local line_count = vim.api.nvim_buf_line_count(entry.bufnr) return { valid = true, @@ -462,8 +463,8 @@ function make_entry.gen_from_buffer(opts) bufnr = entry.bufnr, filename = bufname, - - lnum = entry.info.lnum ~= 0 and entry.info.lnum or 1, + -- account for potentially stale lnum as getbufinfo might not be updated or from resuming buffers picker + lnum = entry.info.lnum ~= 0 and math.max(math.min(entry.info.lnum, line_count), 1) or 1, indicator = indicator, } end diff --git a/lua/telescope/previewers/buffer_previewer.lua b/lua/telescope/previewers/buffer_previewer.lua index a80a17e..a4da833 100644 --- a/lua/telescope/previewers/buffer_previewer.lua +++ b/lua/telescope/previewers/buffer_previewer.lua @@ -956,12 +956,13 @@ end, {}) previewers.buffers = defaulter(function(opts) opts = opts or {} local cwd = opts.cwd or vim.loop.cwd() - local previewer_active = true -- decouple provider from preview_win + local previewer_active -- decouple provider from preview_win return Previewer:new { title = function() return "Buffers" end, setup = function(_, status) + previewer_active = true local win_id = status.picker.original_win_id -- required because of see `:h local-options` as -- buffers not yet attached to a current window take the options from the `minimal` popup ... @@ -1030,16 +1031,20 @@ previewers.buffers = defaulter(function(opts) preview_fn = function(self, entry, status) if vim.api.nvim_buf_is_valid(entry.bufnr) then vim.api.nvim_win_set_buf(status.preview_win, entry.bufnr) + self.state.bufnr = entry.bufnr vim.api.nvim_win_set_option(status.preview_win, "winhl", "Normal:TelescopePreviewNormal") vim.api.nvim_win_set_option(status.preview_win, "signcolumn", "no") vim.api.nvim_win_set_option(status.preview_win, "foldlevel", 100) vim.api.nvim_win_set_option(status.preview_win, "wrap", false) - self.state.bufnr = entry.bufnr - if not entry.col then - local _, col = unpack(vim.api.nvim_win_get_cursor(status.preview_win)) - entry.col = col + 1 - end + if self.state.previewed_buffers[entry.bufnr] ~= true then + if entry.lnum then + local lnum, col = unpack(vim.api.nvim_win_get_cursor(status.preview_win)) + entry.lnum = lnum + if not entry.col then + entry.col = col + 1 + end + end self.state.previewed_buffers[entry.bufnr] = true end end |
