From d95b0a5396ec3eedf91545f410567ea9445cc0b6 Mon Sep 17 00:00:00 2001 From: Sean Dewar <6256228+seandewar@users.noreply.github.com> Date: Sat, 10 May 2025 16:29:24 +0100 Subject: [PATCH] vim-patch:9.1.1376: quickfix dummy buffer may remain as dummy buffer Problem: when failing to wipeout a quickfix dummy buffer, it will remain as a dummy buffer, despite being kept. Solution: clear its dummy BF_DUMMY flag in this case (Sean Dewar). closes: vim/vim#17283 https://github.com/vim/vim/commit/270124f46ae6266ac7eee871e28d3072dd7d5a92 Co-authored-by: Sean Dewar <6256228+seandewar@users.noreply.github.com> --- src/nvim/quickfix.c | 8 +++++++- test/old/testdir/test_quickfix.vim | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index d4aa41c76f..49fbb84318 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -5996,7 +5996,7 @@ static void wipe_dummy_buffer(buf_T *buf, char *dirname_start) } } if (!did_one) { - return; + goto fail; } } @@ -6018,7 +6018,13 @@ static void wipe_dummy_buffer(buf_T *buf, char *dirname_start) // When autocommands/'autochdir' option changed directory: go back. restore_start_dir(dirname_start); } + + return; } + +fail: + // Keeping the buffer, remove the dummy flag. + buf->b_flags &= ~BF_DUMMY; } /// Unload the dummy buffer that load_dummy_buffer() created. Restores diff --git a/test/old/testdir/test_quickfix.vim b/test/old/testdir/test_quickfix.vim index 130062a39d..000526780f 100644 --- a/test/old/testdir/test_quickfix.vim +++ b/test/old/testdir/test_quickfix.vim @@ -6799,4 +6799,23 @@ func Test_vimgrep_dummy_buffer_crash() %bw! endfunc +func Test_vimgrep_dummy_buffer_keep() + augroup DummyKeep + autocmd! + " Trigger a wipe of the dummy buffer by aborting script processing. Prevent + " wiping it by splitting it from the autocmd window into an only window. + autocmd BufReadCmd * ++once let s:dummy_buf = bufnr() + \| tab split | call interrupt() + augroup END + + call assert_fails('vimgrep /./ .') + call assert_equal(1, bufexists(s:dummy_buf)) + " Ensure it's no longer considered a dummy; should be able to switch to it. + execute s:dummy_buf 'sbuffer' + + unlet! s:dummy_buf + autocmd! DummyKeep + %bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab