mirror of
https://github.com/neovim/neovim.git
synced 2025-10-16 23:06:14 +00:00
vim-patch:8.0.0678 closing a window does not trigger resizing
Closes #6748
Problem: When 'equalalways' is set and closing a window in a separate
frame, not all window sizes are adjusted. (Glacambre)
Solution: Resize all windows if the new current window is not in the same
frame as the closed window. (closes vim/vim#1707)
8eeeba8c02
This commit is contained in:

committed by
James McCoy

parent
30cb66e8ba
commit
f0a9b7ff63
@@ -336,6 +336,50 @@ func Test_window_width()
|
||||
bw Xa Xb Xc
|
||||
endfunc
|
||||
|
||||
func Test_equalalways_on_close()
|
||||
set equalalways
|
||||
vsplit
|
||||
windo split
|
||||
split
|
||||
wincmd J
|
||||
" now we have a frame top-left with two windows, a frame top-right with two
|
||||
" windows and a frame at the bottom, full-width.
|
||||
let height_1 = winheight(1)
|
||||
let height_2 = winheight(2)
|
||||
let height_3 = winheight(3)
|
||||
let height_4 = winheight(4)
|
||||
" closing the bottom window causes all windows to be resized.
|
||||
close
|
||||
call assert_notequal(height_1, winheight(1))
|
||||
call assert_notequal(height_2, winheight(2))
|
||||
call assert_notequal(height_3, winheight(3))
|
||||
call assert_notequal(height_4, winheight(4))
|
||||
call assert_equal(winheight(1), winheight(3))
|
||||
call assert_equal(winheight(2), winheight(4))
|
||||
|
||||
1wincmd w
|
||||
split
|
||||
4wincmd w
|
||||
resize + 5
|
||||
" left column has three windows, equalized heights.
|
||||
" right column has two windows, top one a bit higher
|
||||
let height_1 = winheight(1)
|
||||
let height_2 = winheight(2)
|
||||
let height_4 = winheight(4)
|
||||
let height_5 = winheight(5)
|
||||
3wincmd w
|
||||
" closing window in left column equalizes heights in left column but not in
|
||||
" the right column
|
||||
close
|
||||
call assert_notequal(height_1, winheight(1))
|
||||
call assert_notequal(height_2, winheight(2))
|
||||
call assert_equal(height_4, winheight(3))
|
||||
call assert_equal(height_5, winheight(4))
|
||||
|
||||
only
|
||||
set equalalways&
|
||||
endfunc
|
||||
|
||||
func Test_window_jump_tag()
|
||||
help
|
||||
/iccf
|
||||
|
@@ -274,7 +274,7 @@ static const int included_patches[] = {
|
||||
// 681,
|
||||
// 680,
|
||||
// 679,
|
||||
// 678,
|
||||
678,
|
||||
// 677,
|
||||
// 676,
|
||||
// 675,
|
||||
|
@@ -1878,6 +1878,7 @@ int win_close(win_T *win, int free_buf)
|
||||
int dir;
|
||||
int help_window = FALSE;
|
||||
tabpage_T *prev_curtab = curtab;
|
||||
frame_T *win_frame = win->w_frame;
|
||||
|
||||
if (last_window()) {
|
||||
EMSG(_("E444: Cannot close last window"));
|
||||
@@ -2027,7 +2028,9 @@ int win_close(win_T *win, int free_buf)
|
||||
check_cursor();
|
||||
}
|
||||
if (p_ea && (*p_ead == 'b' || *p_ead == dir)) {
|
||||
win_equal(curwin, true, dir);
|
||||
// If the frame of the closed window contains the new current window,
|
||||
// only resize that frame. Otherwise resize all windows.
|
||||
win_equal(curwin, curwin->w_frame->fr_parent == win_frame->fr_parent, dir);
|
||||
} else {
|
||||
win_comp_pos();
|
||||
}
|
||||
|
Reference in New Issue
Block a user