]> granicus.if.org Git - vim/commitdiff
patch 9.0.0789: dummy buffer ends up in a window v9.0.0789
authorBram Moolenaar <Bram@vim.org>
Tue, 18 Oct 2022 16:05:54 +0000 (17:05 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 18 Oct 2022 16:05:54 +0000 (17:05 +0100)
Problem:    Dummy buffer ends up in a window.
Solution:   Disallow navigating to a dummy buffer.

src/buffer.c
src/testdir/test_autocmd.vim
src/version.c

index 0849b70997ad28d5b30240d0dacf4dfd9d6ef99e..5a4825feb283baed7889beac2b84c38debf6e391 100644 (file)
@@ -1351,6 +1351,13 @@ do_buffer_ext(
     if ((flags & DOBUF_NOPOPUP) && bt_popup(buf) && !bt_terminal(buf))
        return OK;
 #endif
+    if ((action == DOBUF_GOTO || action == DOBUF_SPLIT)
+                                                 && (buf->b_flags & BF_DUMMY))
+    {
+       // disallow navigating to the dummy buffer
+       semsg(_(e_buffer_nr_does_not_exist), count);
+       return FAIL;
+    }
 
 #ifdef FEAT_GUI
     need_mouse_correct = TRUE;
index 0706e73070a00d644b036226cbc6b3cdc3304d68..6ba1b02dffbdff2100a34ee722fd2a9671d22086 100644 (file)
@@ -3857,4 +3857,24 @@ func Test_autocmd_delete()
   call assert_true(autocmd_delete([test_null_dict()]))
 endfunc
 
+func Test_autocmd_split_dummy()
+  " Autocommand trying to split a window containing a dummy buffer.
+  auto BufReadPre * exe "sbuf " .. expand("<abuf>") 
+  " Avoid the "W11" prompt
+  au FileChangedShell * let v:fcs_choice = 'reload'
+  func Xautocmd_changelist()
+    cal writefile(['Xtestfile2:4:4'], 'Xerr')
+    edit Xerr
+    lex 'Xtestfile2:4:4'
+  endfunc
+  call Xautocmd_changelist()
+  call assert_fails('call Xautocmd_changelist()', 'E86:')
+
+  au! BufReadPre
+  au! FileChangedShell
+  delfunc Xautocmd_changelist
+  bwipe! Xerr
+  call delete('Xerr')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 1c511f94b589893232126a7e24f9aa24ea3fa445..05e619f06aed7b48b3abaff6f7a086750058d322 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    789,
 /**/
     788,
 /**/