From 6417ba0c2fd2cd0b0e393e10648e834fd91f1725 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> (cherry picked from commit d95b0a5396ec3eedf91545f410567ea9445cc0b6) --- 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 dd135a8105..39c1e43162 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -5837,7 +5837,7 @@ static void wipe_dummy_buffer(buf_T *buf, char *dirname_start) } } if (!did_one) { - return; + goto fail; } } @@ -5859,7 +5859,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 5f548bdfa6..1fcab4d72c 100644 --- a/test/old/testdir/test_quickfix.vim +++ b/test/old/testdir/test_quickfix.vim @@ -6618,4 +6618,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