fix(picker.preview): better hack to deal with buffer local option weirdness

This commit is contained in:
Folke Lemaitre 2025-09-24 18:21:05 +02:00
parent d67a47739d
commit c968d4def4
No known key found for this signature in database
GPG key ID: 9B52594D560070AB

View file

@ -33,19 +33,18 @@ local ns_loc = vim.api.nvim_create_namespace("snacks.picker.preview.loc")
vim.api.nvim_create_autocmd("BufWinEnter", { vim.api.nvim_create_autocmd("BufWinEnter", {
group = vim.api.nvim_create_augroup("snacks.picker.preview.wo", { clear = true }), group = vim.api.nvim_create_augroup("snacks.picker.preview.wo", { clear = true }),
callback = function(ev) callback = function(ev)
if not vim.b[ev.buf].snacks_previewed then local buf = ev.buf
if not vim.b[buf].snacks_previewed then
return return
end end
local reset = { "winhighlight", "cursorline", "number", "relativenumber", "signcolumn" } local win = vim.api.nvim_get_current_win()
local wo = {} ---@type table<string, any> if buf ~= vim.api.nvim_win_get_buf(win) or vim.w[win].snacks_picker_preview then
for _, k in ipairs(reset) do return
wo[k] = vim.api.nvim_get_option_value(k, { scope = "global" })
end end
for _, win in ipairs(vim.fn.win_findbuf(ev.buf)) do vim.b[buf].snacks_previewed = nil
if not Snacks.util.is_float(win) then -- only reset non-floating windows local reset = { "winhighlight", "cursorline", "number", "relativenumber", "signcolumn" }
Snacks.util.wo(win, wo) for _, k in ipairs(reset) do
vim.b[ev.buf].snacks_previewed = nil vim.api.nvim_set_option_value(k, nil, { win = win, scope = "local" })
end
end end
end, end,
}) })
@ -82,6 +81,9 @@ function M.new(picker)
winhighlight = self.winhl, winhighlight = self.winhl,
}, },
scratch_ft = "snacks_picker_preview", scratch_ft = "snacks_picker_preview",
w = {
snacks_picker_preview = true,
},
} }
) )
self.win_opts = { self.win_opts = {