neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 3d5ef97a9829f8ad0ce6ae1008ee4e7533543ae8
parent ccf020d0f36ab1152448be522901bed11be0db1b
Author: luukvbaal <luukvbaal@gmail.com>
Date:   Tue, 23 Sep 2025 22:35:08 +0200

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.
Diffstat:
Msrc/nvim/ex_cmds2.c | 10++++++----
Mtest/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 @@ -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 @@ -2053,6 +2053,16 @@ vimComment xxx match /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 excludenl contains=@vim feed('<CR>') assert_alive() end) + + it('no wait return before delayed exception error message', function() + feed('ia<esc>:lua vim.cmd.quit()<CR>') + 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()