mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.0.0678: closing a window does not trigger resizing
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 #1707)
This commit is contained in:
parent
1814183b86
commit
8eeeba8c02
@ -318,6 +318,50 @@ func Test_window_width()
|
|||||||
bw Xa Xb Xc
|
bw Xa Xb Xc
|
||||||
endfunc
|
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()
|
func Test_window_jump_tag()
|
||||||
help
|
help
|
||||||
/iccf
|
/iccf
|
||||||
|
@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
678,
|
||||||
/**/
|
/**/
|
||||||
677,
|
677,
|
||||||
/**/
|
/**/
|
||||||
|
@ -2282,6 +2282,7 @@ win_close(win_T *win, int free_buf)
|
|||||||
int dir;
|
int dir;
|
||||||
int help_window = FALSE;
|
int help_window = FALSE;
|
||||||
tabpage_T *prev_curtab = curtab;
|
tabpage_T *prev_curtab = curtab;
|
||||||
|
frame_T *win_frame = win->w_frame;
|
||||||
|
|
||||||
if (last_window())
|
if (last_window())
|
||||||
{
|
{
|
||||||
@ -2459,7 +2460,10 @@ win_close(win_T *win, int free_buf)
|
|||||||
check_cursor();
|
check_cursor();
|
||||||
}
|
}
|
||||||
if (p_ea && (*p_ead == 'b' || *p_ead == dir))
|
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
|
else
|
||||||
win_comp_pos();
|
win_comp_pos();
|
||||||
if (close_curwin)
|
if (close_curwin)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user