From 3d5ef97a9829f8ad0ce6ae1008ee4e7533543ae8 Mon Sep 17 00:00:00 2001 From: luukvbaal Date: Tue, 23 Sep 2025 22:35:08 +0200 Subject: [PATCH] fix(message): no wait return for delayed exception error #35881 Problem: Wait return for delayed exception error message. Solution: Check that error was actually shown. --- src/nvim/ex_cmds2.c | 10 ++++++---- test/functional/ui/messages_spec.lua | 10 ++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c index 0cc2fe3f8c..22dd51b249 100644 --- a/src/nvim/ex_cmds2.c +++ b/src/nvim/ex_cmds2.c @@ -388,10 +388,12 @@ bool check_changed_any(bool hidden, bool unload) msg_col = 0; msg_didout = false; } - if ((buf->terminal && channel_job_running((uint64_t)buf->b_p_channel)) - ? semsg(_("E947: Job still running in buffer \"%s\""), buf->b_fname) - : semsg(_("E162: No write since last change for buffer \"%s\""), - buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname)) { + if (((buf->terminal && channel_job_running((uint64_t)buf->b_p_channel)) + ? semsg(_("E947: Job still running in buffer \"%s\""), buf->b_fname) + : semsg(_("E162: No write since last change for buffer \"%s\""), + buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname)) + // Only makes sense if error is shown, which cause_errthrow() may prevent. + && msg_didany) { int save = no_wait_return; no_wait_return = false; wait_return(false); diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua index b3d4cb8110..103d9655c0 100644 --- a/test/functional/ui/messages_spec.lua +++ b/test/functional/ui/messages_spec.lua @@ -2053,6 +2053,16 @@ vimComment xxx match /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 excludenl contains=@vim feed('') assert_alive() end) + + it('no wait return before delayed exception error message', function() + feed('ia:lua vim.cmd.quit()') + screen:expect({ + any = { + '{9:.*Vim:E37: No write since.*}', + '{6:Press ENTER or type command to continue}^', + }, + }) + end) end) it('calling screenstring() after redrawing between messages without UI #20999', function()