Mercurial > vim
changeset 20049:8c401bc7f32b v8.2.0580
patch 8.2.0580: window size wrong if 'ea' is off and 'splitright' is on
Commit: https://github.com/vim/vim/commit/edd327cc070d9a05c12e88bc5c43a1e2a3086ae6
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Apr 15 20:05:47 2020 +0200
patch 8.2.0580: window size wrong if 'ea' is off and 'splitright' is on
Problem: Window size wrong if 'ea' is off and 'splitright' is on and
splitting then closing a window.
Solution: Put abandoned window space in the right place. (Mark Waggoner)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 15 Apr 2020 20:15:06 +0200 |
parents | a400073354d4 |
children | dcdeba3d62cb |
files | src/testdir/test_winbuf_close.vim src/version.c src/window.c |
diffstat | 3 files changed, 35 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_winbuf_close.vim +++ b/src/testdir/test_winbuf_close.vim @@ -194,3 +194,22 @@ func Test_tabwin_close() call assert_true(v:true) %bwipe! endfunc + +" Test when closing a split window (above/below) restores space to the window +" below when 'noequalalways' and 'splitright' are set. +func Test_window_close_splitright_noequalalways() + set noequalalways + set splitright + new + let w1 = win_getid() + new + let w2 = win_getid() + execute "normal \<c-w>b" + let h = winheight(0) + let w = win_getid() + new + q + call assert_equal(h, winheight(0), "Window height does not match eight before opening and closing another window") + call assert_equal(w, win_getid(), "Did not return to original window after opening and closing a window") +endfunc +
--- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 580, +/**/ 579, /**/ 578,
--- a/src/window.c +++ b/src/window.c @@ -2967,9 +2967,22 @@ win_altframe( if (frp->fr_next == NULL) return frp->fr_prev; + // By default the next window will get the space that was abandoned by this + // window target_fr = frp->fr_next; other_fr = frp->fr_prev; - if (p_spr || p_sb) + + // If this is part of a column of windows and 'splitbelow' is true then the + // previous window will get the space. + if (frp->fr_parent != NULL && frp->fr_parent->fr_layout == FR_COL && p_sb) + { + target_fr = frp->fr_prev; + other_fr = frp->fr_next; + } + + // If this is part of a row of windows, and 'splitright' is true then the + // previous window will get the space. + if (frp->fr_parent != NULL && frp->fr_parent->fr_layout == FR_ROW && p_spr) { target_fr = frp->fr_prev; other_fr = frp->fr_next;