changeset 33341:3dd54b0dab14 v9.0.1934

patch 9.0.1934: :bwipe fails after switching window from aucmd_win. Commit: https://github.com/vim/vim/commit/46bdae036ac4121e305fc3ed4ef3f9fc928dcb25 Author: zeertzjq <zeertzjq@outlook.com> Date: Sun Sep 24 23:16:08 2023 +0200 patch 9.0.1934: :bwipe fails after switching window from aucmd_win. Problem: :bwipe fails after switching window from aucmd_win. Solution: Decrement b_nwindows after switching back to aucmd_win. closes: #13160 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
author Christian Brabandt <cb@256bit.org>
date Sun, 24 Sep 2023 23:30:04 +0200
parents 6ea17e0f7de4
children bc1076074f49
files src/autocmd.c src/testdir/test_autocmd.vim src/version.c
diffstat 3 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -1635,7 +1635,6 @@ aucmd_restbuf(
     {
 	win_T *awp = aucmd_win[aco->use_aucmd_win_idx].auc_win;
 
-	--curbuf->b_nwindows;
 	// Find "awp", it can't be closed, but it may be in another tab
 	// page. Do not trigger autocommands here.
 	block_autocmds();
@@ -1656,8 +1655,8 @@ aucmd_restbuf(
 	    }
 	}
 win_found:
+	--curbuf->b_nwindows;
 #ifdef FEAT_JOB_CHANNEL
-	;
 	int save_stop_insert_mode = stop_insert_mode;
 	// May need to stop Insert mode if we were in a prompt buffer.
 	leaving_window(curwin);
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -3630,11 +3630,22 @@ func Test_closing_autocmd_window()
   END
   call v9.CheckScriptFailure(lines, 'E814:')
   au! BufEnter
-  only!
   bwipe Xa.txt
   bwipe Xb.txt
 endfunc
 
+func Test_switch_window_in_autocmd_window()
+  edit Xa.txt
+  tabnew Xb.txt
+  autocmd BufEnter Xa.txt wincmd w
+  doautoall BufEnter
+  au! BufEnter
+  bwipe Xa.txt
+  call assert_false(bufexists('Xa.txt'))
+  bwipe Xb.txt
+  call assert_false(bufexists('Xb.txt'))
+endfunc
+
 func Test_bufwipeout_changes_window()
   " This should not crash, but we don't have any expectations about what
   " happens, changing window in BufWipeout has unpredictable results.
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1934,
+/**/
     1933,
 /**/
     1932,