diff options
-rw-r--r-- | src/nvim/window.c | 4 | ||||
-rw-r--r-- | test/old/testdir/test_window_cmd.vim | 58 |
2 files changed, 62 insertions, 0 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index bb630f6217..c123de0f77 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -4738,10 +4738,14 @@ static void win_enter_ext(win_T *const wp, const int flags) if (wp->w_buffer != curbuf) { buf_copy_options(wp->w_buffer, BCO_ENTER | BCO_NOHELP); } + if (!curwin_invalid) { prevwin = curwin; // remember for CTRL-W p curwin->w_redr_status = true; + } else if (wp == prevwin) { + prevwin = NULL; // don't want it to be the new curwin } + curwin = wp; curbuf = wp->w_buffer; diff --git a/test/old/testdir/test_window_cmd.vim b/test/old/testdir/test_window_cmd.vim index 152d1bacc7..da1711a0a1 100644 --- a/test/old/testdir/test_window_cmd.vim +++ b/test/old/testdir/test_window_cmd.vim @@ -113,6 +113,64 @@ func Test_window_quit() bw Xa Xb endfunc +func Test_window_curwin_not_prevwin() + botright split + call assert_equal(2, winnr()) + call assert_equal(1, winnr('#')) + quit + call assert_equal(1, winnr()) + call assert_equal(0, winnr('#')) + + botright split + botright split + call assert_equal(3, winnr()) + call assert_equal(2, winnr('#')) + 1quit + call assert_equal(2, winnr()) + call assert_equal(1, winnr('#')) + + botright split + call assert_equal(1, tabpagenr()) + call assert_equal(3, winnr()) + call assert_equal(2, winnr('#')) + wincmd T + call assert_equal(2, tabpagenr()) + call assert_equal(1, winnr()) + call assert_equal(0, winnr('#')) + tabfirst + call assert_equal(1, tabpagenr()) + call assert_equal(2, winnr()) + call assert_equal(0, winnr('#')) + + tabonly + botright split + wincmd t + wincmd p + call assert_equal(3, winnr()) + call assert_equal(1, winnr('#')) + quit + call assert_equal(2, winnr()) + call assert_equal(1, winnr('#')) + + botright split + wincmd t + wincmd p + call assert_equal(1, tabpagenr()) + call assert_equal(3, winnr()) + call assert_equal(1, winnr('#')) + wincmd T + call assert_equal(2, tabpagenr()) + call assert_equal(1, winnr()) + call assert_equal(0, winnr('#')) + tabfirst + call assert_equal(1, tabpagenr()) + call assert_equal(2, winnr()) + call assert_equal(1, winnr('#')) + + tabonly + only +endfunc + func Test_window_horizontal_split() call assert_equal(1, winnr('$')) 3wincmd s |