fix(lsp): close floating preview window correctly #34946

Problem:
After 28b7c2d (found with bisect) the hover preview window does not
close when :edit'ing another file, even when you move the cursor.

Solution:
Change the BufLeave to target the original buffer, not the preview
buffer.

(cherry picked from commit ace254c9ff)
This commit is contained in:
Donatas
2025-07-16 06:12:45 +03:00
committed by github-actions[bot]
parent 407fc0bb16
commit 44b8255fa2

View File

@@ -1340,9 +1340,10 @@ end
---
---@param events table list of events
---@param winnr integer window id of preview window
---@param bufnrs table list of buffers where the preview window will remain visible
---@param floating_bufnr integer floating preview buffer
---@param bufnr integer buffer that opened the floating preview buffer
---@see autocmd-events
local function close_preview_autocmd(events, winnr, bufnrs)
local function close_preview_autocmd(events, winnr, floating_bufnr, bufnr)
local augroup = api.nvim_create_augroup('nvim.preview_window_' .. winnr, {
clear = true,
})
@@ -1351,13 +1352,13 @@ local function close_preview_autocmd(events, winnr, bufnrs)
-- the floating window buffer or the buffer that spawned it
api.nvim_create_autocmd('BufLeave', {
group = augroup,
buffer = bufnrs[1],
buffer = bufnr,
callback = function()
vim.schedule(function()
-- When jumping to the quickfix window from the preview window,
-- do not close the preview window.
if api.nvim_get_option_value('filetype', { buf = 0 }) ~= 'qf' then
close_preview_window(winnr, bufnrs)
close_preview_window(winnr, { floating_bufnr, bufnr })
end
end)
end,
@@ -1366,7 +1367,7 @@ local function close_preview_autocmd(events, winnr, bufnrs)
if #events > 0 then
api.nvim_create_autocmd(events, {
group = augroup,
buffer = bufnrs[2],
buffer = bufnr,
callback = function()
close_preview_window(winnr)
end,
@@ -1613,7 +1614,7 @@ function M.open_floating_preview(contents, syntax, opts)
'<cmd>bdelete<cr>',
{ silent = true, noremap = true, nowait = true }
)
close_preview_autocmd(opts.close_events, floating_winnr, { floating_bufnr, bufnr })
close_preview_autocmd(opts.close_events, floating_winnr, floating_bufnr, bufnr)
-- save focus_id
if opts.focus_id then