commit 1256daeead27722263614c1e57899dff6d802b98
parent 15d57ab0ba5e0031072cfa41fd83817a9ac60483
Author: luukvbaal <luukvbaal@gmail.com>
Date: Wed, 30 Jul 2025 01:03:38 +0200
fix(extui): ensure windows are valid in scheduled on_key (#35106)
Diffstat:
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/runtime/lua/vim/_extui/messages.lua b/runtime/lua/vim/_extui/messages.lua
@@ -491,9 +491,12 @@ function M.set_pos(type)
return
end
vim.schedule(function()
- api.nvim_win_set_config(win, save_config)
+ if api.nvim_win_is_valid(win) then
+ api.nvim_win_set_config(win, save_config)
+ end
cmd_on_key = nil
local entered = api.nvim_get_current_win() == win
+ ext.check_targets()
-- Show or clear the message depending on if the pager was opened.
if entered or not api.nvim_win_get_config(ext.wins.pager).hide then
M.virt.msg[M.virt.idx.spill][1] = nil
@@ -502,6 +505,7 @@ function M.set_pos(type)
api.nvim_command('norm! g<') -- User entered the cmdline window: open the pager.
end
elseif ext.cfg.msg.target == 'cmd' and ext.cmd.level <= 0 then
+ ext.check_targets()
set_virttext('msg')
end
api.nvim__redraw({ flush = true }) -- NOTE: redundant unless cmdline was opened.
diff --git a/test/functional/ui/messages2_spec.lua b/test/functional/ui/messages2_spec.lua
@@ -217,4 +217,21 @@ describe('messages2', function()
{9:E354: Invalid register name: '^@'} |
]])
end)
+
+ it('hit-enter prompt does not error for invalid window #35095', function()
+ command('echo "foo\nbar"')
+ screen:expect([[
+ ^ |
+ {1:~ }|*10
+ {3:─────────────────────────────────────────────────────}|
+ foo |
+ bar |
+ ]])
+ feed('<C-w>o')
+ screen:expect([[
+ ^ |
+ {1:~ }|*12
+ foo [+1] |
+ ]])
+ end)
end)