From a42df5934bdc1178ed2ee8cb9c8686975b578497 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 24 Dec 2018 00:22:39 +0100 Subject: [PATCH] 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 #3690) --- src/fileio.c | 5 +++++ src/structs.h | 1 + src/testdir/test_window_cmd.vim | 37 +++++++++++++++++++++++++++++++++ src/version.c | 2 ++ 4 files changed, 45 insertions(+) diff --git a/src/fileio.c b/src/fileio.c index bf46522b9..fd8fd243f 100644 --- 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(); diff --git a/src/structs.h b/src/structs.h index 09a566571..0f37b8f66 100644 --- 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; diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim index 6d65e2b29..0980493fe 100644 --- 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 diff --git a/src/version.c b/src/version.c index 2155834db..1b9e3e0dc 100644 --- a/src/version.c +++ b/src/version.c @@ -799,6 +799,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 630, /**/ 629, /**/ -- 2.40.0