diff options
Diffstat (limited to 'runtime/lua/vim')
-rw-r--r-- | runtime/lua/vim/lsp/util.lua | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua index ef177e903f..307a55c2a2 100644 --- a/runtime/lua/vim/lsp/util.lua +++ b/runtime/lua/vim/lsp/util.lua @@ -1622,23 +1622,24 @@ function M.open_floating_preview(contents, syntax, opts) api.nvim_win_set_var(floating_winnr, opts.focus_id, bufnr) end api.nvim_buf_set_var(bufnr, 'lsp_floating_preview', floating_winnr) + api.nvim_win_set_var(floating_winnr, 'lsp_floating_bufnr', bufnr) end - local augroup_name = ('nvim.closing_floating_preview_%d'):format(floating_winnr) - local ok = - pcall(api.nvim_get_autocmds, { group = augroup_name, pattern = tostring(floating_winnr) }) - if not ok then - api.nvim_create_autocmd('WinClosed', { - group = api.nvim_create_augroup(augroup_name, {}), - pattern = tostring(floating_winnr), - callback = function() - if api.nvim_buf_is_valid(bufnr) then - vim.b[bufnr].lsp_floating_preview = nil - end - api.nvim_del_augroup_by_name(augroup_name) - end, - }) - end + api.nvim_create_autocmd('WinClosed', { + group = api.nvim_create_augroup('nvim.closing_floating_preview', { clear = true }), + callback = function(args) + local winid = tonumber(args.match) + local ok, preview_bufnr = pcall(api.nvim_win_get_var, winid, 'lsp_floating_bufnr') + if + ok + and api.nvim_buf_is_valid(preview_bufnr) + and winid == vim.b[preview_bufnr].lsp_floating_preview + then + vim.b[bufnr].lsp_floating_preview = nil + return true + end + end, + }) vim.wo[floating_winnr].foldenable = false -- Disable folding. vim.wo[floating_winnr].wrap = opts.wrap -- Soft wrapping. |