mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	Merge pull request #16845 from seandewar/floaty-aucmd-win
fix(aucmd_win): ensure aucmd_win stays floating
This commit is contained in:
		| @@ -4242,7 +4242,7 @@ static void win_move_into_split(win_T *wp, win_T *targetwin, int size, int flags | |||||||
|   int height = wp->w_height; |   int height = wp->w_height; | ||||||
|   win_T *oldwin = curwin; |   win_T *oldwin = curwin; | ||||||
|  |  | ||||||
|   if (wp == targetwin) { |   if (wp == targetwin || wp == aucmd_win) { | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -958,6 +958,11 @@ int win_split_ins(int size, int flags, win_T *new_wp, int dir) | |||||||
|   int wmh1; |   int wmh1; | ||||||
|   bool did_set_fraction = false; |   bool did_set_fraction = false; | ||||||
|  |  | ||||||
|  |   // aucmd_win should always remain floating | ||||||
|  |   if (new_wp != NULL && new_wp == aucmd_win) { | ||||||
|  |     return FAIL; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   if (flags & WSP_TOP) { |   if (flags & WSP_TOP) { | ||||||
|     oldwin = firstwin; |     oldwin = firstwin; | ||||||
|   } else if (flags & WSP_BOT || curwin->w_floating) { |   } else if (flags & WSP_BOT || curwin->w_floating) { | ||||||
| @@ -1833,6 +1838,9 @@ static void win_totop(int size, int flags) | |||||||
|     beep_flush(); |     beep_flush(); | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  |   if (curwin == aucmd_win) { | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   if (curwin->w_floating) { |   if (curwin->w_floating) { | ||||||
|     ui_comp_remove_grid(&curwin->w_grid_alloc); |     ui_comp_remove_grid(&curwin->w_grid_alloc); | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ local helpers = require('test.functional.helpers')(after_each) | |||||||
| local Screen = require('test.functional.ui.screen') | local Screen = require('test.functional.ui.screen') | ||||||
|  |  | ||||||
| local assert_visible = helpers.assert_visible | local assert_visible = helpers.assert_visible | ||||||
|  | local assert_alive = helpers.assert_alive | ||||||
| local dedent = helpers.dedent | local dedent = helpers.dedent | ||||||
| local eq = helpers.eq | local eq = helpers.eq | ||||||
| local eval = helpers.eval | local eval = helpers.eval | ||||||
| @@ -13,6 +14,7 @@ local funcs = helpers.funcs | |||||||
| local expect = helpers.expect | local expect = helpers.expect | ||||||
| local command = helpers.command | local command = helpers.command | ||||||
| local exc_exec = helpers.exc_exec | local exc_exec = helpers.exc_exec | ||||||
|  | local exec_lua = helpers.exec_lua | ||||||
| local curbufmeths = helpers.curbufmeths | local curbufmeths = helpers.curbufmeths | ||||||
| local source = helpers.source | local source = helpers.source | ||||||
|  |  | ||||||
| @@ -333,6 +335,68 @@ describe('autocmd', function() | |||||||
|       pcall_err(command, "call nvim_set_current_win(g:winid)")) |       pcall_err(command, "call nvim_set_current_win(g:winid)")) | ||||||
|   end) |   end) | ||||||
|  |  | ||||||
|  |   it("`aucmd_win` cannot be changed into a normal window #13699", function() | ||||||
|  |     local screen = Screen.new(50, 10) | ||||||
|  |     screen:attach() | ||||||
|  |     screen:set_default_attr_ids { | ||||||
|  |       [1] = {bold = true, foreground = Screen.colors.Blue1}, | ||||||
|  |       [2] = {reverse = true}, | ||||||
|  |       [3] = {bold = true, reverse = true}, | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     -- Create specific layout and ensure it's left unchanged. | ||||||
|  |     -- Use nvim_buf_call on a hidden buffer so aucmd_win is used. | ||||||
|  |     exec_lua [[ | ||||||
|  |       vim.cmd "wincmd s | wincmd _" | ||||||
|  |       _G.buf = vim.api.nvim_create_buf(true, true) | ||||||
|  |       vim.api.nvim_buf_call(_G.buf, function() vim.cmd "wincmd J" end) | ||||||
|  |     ]] | ||||||
|  |     screen:expect [[ | ||||||
|  |       ^                                                  | | ||||||
|  |       {1:~                                                 }| | ||||||
|  |       {1:~                                                 }| | ||||||
|  |       {1:~                                                 }| | ||||||
|  |       {1:~                                                 }| | ||||||
|  |       {1:~                                                 }| | ||||||
|  |       {3:[No Name]                                         }| | ||||||
|  |                                                         | | ||||||
|  |       {2:[No Name]                                         }| | ||||||
|  |                                                         | | ||||||
|  |     ]] | ||||||
|  |     -- This used to crash after making aucmd_win a normal window via the above. | ||||||
|  |     exec_lua [[ | ||||||
|  |       vim.cmd "tabnew | tabclose # | wincmd s | wincmd _" | ||||||
|  |       vim.api.nvim_buf_call(_G.buf, function() vim.cmd "wincmd K" end) | ||||||
|  |     ]] | ||||||
|  |     assert_alive() | ||||||
|  |     screen:expect_unchanged() | ||||||
|  |  | ||||||
|  |     -- Ensure splitting still works from inside the aucmd_win. | ||||||
|  |     exec_lua [[vim.api.nvim_buf_call(_G.buf, function() vim.cmd "split" end)]] | ||||||
|  |     screen:expect [[ | ||||||
|  |       ^                                                  | | ||||||
|  |       {1:~                                                 }| | ||||||
|  |       {3:[No Name]                                         }| | ||||||
|  |                                                         | | ||||||
|  |       {1:~                                                 }| | ||||||
|  |       {2:[Scratch]                                         }| | ||||||
|  |                                                         | | ||||||
|  |       {1:~                                                 }| | ||||||
|  |       {2:[No Name]                                         }| | ||||||
|  |                                                         | | ||||||
|  |     ]] | ||||||
|  |  | ||||||
|  |     -- After all of our messing around, aucmd_win should still be floating. | ||||||
|  |     -- Use :only to ensure _G.buf is hidden again (so the aucmd_win is used). | ||||||
|  |     eq("editor", exec_lua [[ | ||||||
|  |       vim.cmd "only" | ||||||
|  |       vim.api.nvim_buf_call(_G.buf, function() | ||||||
|  |         _G.config = vim.api.nvim_win_get_config(0) | ||||||
|  |       end) | ||||||
|  |       return _G.config.relative | ||||||
|  |     ]]) | ||||||
|  |   end) | ||||||
|  |  | ||||||
|   it(':doautocmd does not warn "No matching autocommands" #10689', function() |   it(':doautocmd does not warn "No matching autocommands" #10689', function() | ||||||
|     local screen = Screen.new(32, 3) |     local screen = Screen.new(32, 3) | ||||||
|     screen:attach() |     screen:attach() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 bfredl
					bfredl