aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSean Dewar <seandewar@users.noreply.github.com>2024-02-04 01:50:49 +0000
committerSean Dewar <6256228+seandewar@users.noreply.github.com>2024-03-08 22:37:32 +0000
commit233649bc757743f7677b2ae414779192a94aa2ae (patch)
tree0e5d9ce3efc872bb528514cf99744ba2b120f371 /test
parentbcb70eeac48040fd6d6bfc20cf7fb6f41374a67c (diff)
downloadrneovim-233649bc757743f7677b2ae414779192a94aa2ae.tar.gz
rneovim-233649bc757743f7677b2ae414779192a94aa2ae.tar.bz2
rneovim-233649bc757743f7677b2ae414779192a94aa2ae.zip
fix(api): win_set_config fires unnecessary autocmds
Problem: win_set_config should have the observable effect of moving an existing window to another place, but instead fires autocommands as if a new window was created and entered (and does not fire autocommands reflecting a "return" to the original window). Solution: do not fire win_enter-related autocommands when splitting the window, but continue to fire them when entering the window that fills the new space when moving a window to a different tabpage, as the new curwin changes. Also, remove "++once" from the WinEnter autocmd in the other test, as omitting it also crashed Nvim before this fix.
Diffstat (limited to 'test')
-rw-r--r--test/functional/api/window_spec.lua34
1 files changed, 33 insertions, 1 deletions
diff --git a/test/functional/api/window_spec.lua b/test/functional/api/window_spec.lua
index a812d502eb..3914090814 100644
--- a/test/functional/api/window_spec.lua
+++ b/test/functional/api/window_spec.lua
@@ -1668,7 +1668,7 @@ describe('API/win', function()
command('split | tabnew')
local w = api.nvim_get_current_win()
local t = api.nvim_get_current_tabpage()
- command('tabfirst | autocmd WinEnter * ++once quit')
+ command('tabfirst | autocmd WinEnter * quit')
api.nvim_win_set_config(0, { win = w, split = 'left' })
-- New tabpage is now the only one, as WinEnter closed the new curwin in the original.
eq(t, api.nvim_get_current_tabpage())
@@ -1684,6 +1684,38 @@ describe('API/win', function()
pcall_err(api.nvim_win_set_config, 0, { win = w, split = 'left' })
)
end)
+
+ it('expected autocmds when moving window to other tabpage', function()
+ local new_curwin = api.nvim_get_current_win()
+ command('split')
+ local win = api.nvim_get_current_win()
+ command('tabnew')
+ local parent = api.nvim_get_current_win()
+ exec([[
+ tabfirst
+ let result = []
+ autocmd WinEnter * let result += ["Enter", win_getid()]
+ autocmd WinLeave * let result += ["Leave", win_getid()]
+ autocmd WinNew * let result += ["New", win_getid()]
+ ]])
+ api.nvim_win_set_config(0, { win = parent, split = 'left' })
+ -- Shouldn't see WinNew, as we're not creating any new windows, just moving existing ones.
+ eq({ 'Leave', win, 'Enter', new_curwin }, eval('result'))
+ end)
+
+ it('no autocmds when moving window within same tabpage', function()
+ local parent = api.nvim_get_current_win()
+ exec([[
+ split
+ let result = []
+ autocmd WinEnter * let result += ["Enter", win_getid()]
+ autocmd WinLeave * let result += ["Leave", win_getid()]
+ autocmd WinNew * let result += ["New", win_getid()]
+ ]])
+ api.nvim_win_set_config(0, { win = parent, split = 'left' })
+ -- Shouldn't see any of those events, as we remain in the same window.
+ eq({}, eval('result'))
+ end)
end)
describe('get_config', function()