]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1376: quickfix dummy buffer may remain as dummy buffer v9.1.1376
authorSean Dewar <6256228+seandewar@users.noreply.github.com>
Sat, 10 May 2025 12:33:28 +0000 (14:33 +0200)
committerChristian Brabandt <cb@256bit.org>
Sat, 10 May 2025 12:33:28 +0000 (14:33 +0200)
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: #17283

Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/quickfix.c
src/testdir/test_quickfix.vim
src/version.c

index 9fe79784fb741c33f5984f5a54ea70e135d471d1..9c5ad9381a52c457f5584f5b5311c703de7d7b45 100644 (file)
@@ -7078,7 +7078,7 @@ wipe_dummy_buffer(buf_T *buf, char_u *dirname_start)
                    break;
                }
        if (!did_one)
-           return;
+           goto fail;
     }
 
     if (curbuf != buf && buf->b_nwindows == 0) // safety check
@@ -7102,7 +7102,13 @@ wipe_dummy_buffer(buf_T *buf, char_u *dirname_start)
        if (dirname_start != NULL)
            // 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;
 }
 
 /*
index df4cc80112887fb9e6bf14ab4d693999da7fe5fe..fe85887e59ae1312a2635fc15f12ecc723f3e765 100644 (file)
@@ -6921,4 +6921,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
index 11d75207a7597cf107e2066de9f9ead52be004f4..7547f0a58cf22df1a63d7d020c5ff873e5760cdd 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1376,
 /**/
     1375,
 /**/