changeset 15241:83ff85896a14 v8.1.0630

patch 8.1.0630: "wincmd p" does not work after using an autocmd window commit https://github.com/vim/vim/commit/a42df5934bdc1178ed2ee8cb9c8686975b578497 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Dec 24 00:22:39 2018 +0100 patch 8.1.0630: "wincmd p" does not work after using an autocmd window Problem: "wincmd p" does not work after using an autocmd window. Solution: Store "prevwin" in aco_save_T. (Christian Brabandt, closes https://github.com/vim/vim/issues/3690)
author Bram Moolenaar <Bram@vim.org>
date Mon, 24 Dec 2018 00:30:07 +0100
parents acb5c50fc222
children 8765531f63d2
files src/fileio.c src/structs.h src/testdir/test_window_cmd.vim src/version.c
diffstat 4 files changed, 45 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -9017,6 +9017,7 @@ aucmd_prepbuf(
 
     aco->save_curwin = curwin;
     aco->save_curbuf = curbuf;
+    aco->save_prevwin = prevwin;
     if (win != NULL)
     {
 	/* There is a window for "buf" in the current tab page, make it the
@@ -9127,6 +9128,8 @@ win_found:
 	else
 	    /* Hmm, original window disappeared.  Just use the first one. */
 	    curwin = firstwin;
+	if (win_valid(aco->save_prevwin))
+	    prevwin = aco->save_prevwin;
 #ifdef FEAT_EVAL
 	vars_clear(&aucmd_win->w_vars->dv_hashtab);  /* free all w: variables */
 	hash_init(&aucmd_win->w_vars->dv_hashtab);   /* re-use the hashtab */
@@ -9177,6 +9180,8 @@ win_found:
 
 	    curwin = aco->save_curwin;
 	    curbuf = curwin->w_buffer;
+	    if (win_valid(aco->save_prevwin))
+		prevwin = aco->save_prevwin;
 	    /* In case the autocommand move the cursor to a position that that
 	     * not exist in curbuf. */
 	    check_cursor();
--- a/src/structs.h
+++ b/src/structs.h
@@ -3252,6 +3252,7 @@ typedef struct
     int		use_aucmd_win;	/* using aucmd_win */
     win_T	*save_curwin;	/* saved curwin */
     win_T	*new_curwin;	/* new curwin */
+    win_T	*save_prevwin;	/* saved prevwin */
     bufref_T	new_curbuf;	/* new curbuf */
     char_u	*globaldir;	/* saved value of globaldir */
 } aco_save_T;
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -578,4 +578,41 @@ func Test_winrestcmd()
   only
 endfunc
 
+function! Fun_RenewFile()
+  sleep 2
+  silent execute '!echo "1" > tmp.txt'
+  sp
+  wincmd p
+  edit! tmp.txt
+endfunction
+
+func Test_window_prevwin()
+  " Can we make this work on MS-Windows?
+  if !has('unix')
+    return
+  endif
+
+  set hidden autoread
+  call writefile(['2'], 'tmp.txt')
+  new tmp.txt
+  q
+  " Need to wait a bit for the timestamp to be older.
+  call Fun_RenewFile()
+  call assert_equal(2, winnr())
+  wincmd p
+  call assert_equal(1, winnr())
+  wincmd p
+  q
+  call Fun_RenewFile()
+  call assert_equal(2, winnr())
+  wincmd p
+  call assert_equal(1, winnr())
+  wincmd p
+  " reset
+  q
+  call delete('tmp.txt')
+  set hidden&vim autoread&vim
+  delfunc Fun_RenewFile
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -800,6 +800,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    630,
+/**/
     629,
 /**/
     628,