mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 04:17:01 +00:00 
			
		
		
		
	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.
			
			
This commit is contained in:
		| @@ -1418,9 +1418,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, | ||||
|   }) | ||||
| @@ -1429,13 +1430,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, | ||||
| @@ -1444,7 +1445,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, | ||||
| @@ -1690,7 +1691,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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Donatas
					Donatas