1
0
forked from aniani/vim

patch 9.0.1491: wrong scrolling with ls=0 and :botright split

Problem:    Wrong scrolling with ls=0 and :botright split.
Solution:   Add statusline before calling frame_new_height(). (closes #12299)
This commit is contained in:
zeertzjq
2023-04-26 19:01:44 +01:00
committed by Bram Moolenaar
parent 73916bac5a
commit fbf2071ac9
3 changed files with 25 additions and 9 deletions

View File

@@ -19,6 +19,24 @@ func Test_window_cmd_ls0_with_split()
set ls&vim set ls&vim
endfunc endfunc
func Test_window_cmd_ls0_split_scrolling()
CheckRunVimInTerminal
let lines =<< trim END
set laststatus=0
call setline(1, range(1, 100))
normal! G
END
call writefile(lines, 'XTestLs0SplitScrolling', 'D')
let buf = RunVimInTerminal('-S XTestLs0SplitScrolling', #{rows: 10})
call term_sendkeys(buf, ":botright split\<CR>")
call WaitForAssert({-> assert_match('Bot$', term_getline(buf, 5))})
call assert_equal('100', term_getline(buf, 4))
call StopVimInTerminal(buf)
endfunc
func Test_window_cmd_cmdwin_with_vsp() func Test_window_cmd_cmdwin_with_vsp()
let efmt = 'Expected 0 but got %d (in ls=%d, %s window)' let efmt = 'Expected 0 but got %d (in ls=%d, %s window)'
for v in range(0, 2) for v in range(0, 2)

View File

@@ -695,6 +695,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 */
/**/
1491,
/**/ /**/
1490, 1490,
/**/ /**/

View File

@@ -1307,6 +1307,7 @@ win_split_ins(
// "new_size" of the current window goes to the new window, use // "new_size" of the current window goes to the new window, use
// one row for the status line // one row for the status line
win_new_height(wp, new_size); win_new_height(wp, new_size);
int old_status_height = oldwin->w_status_height;
if (flags & (WSP_TOP | WSP_BOT)) if (flags & (WSP_TOP | WSP_BOT))
{ {
int new_fr_height = curfrp->fr_height - new_size int new_fr_height = curfrp->fr_height - new_size
@@ -1314,6 +1315,8 @@ win_split_ins(
if (!((flags & WSP_BOT) && p_ls == 0)) if (!((flags & WSP_BOT) && p_ls == 0))
new_fr_height -= STATUS_HEIGHT; new_fr_height -= STATUS_HEIGHT;
if (flags & WSP_BOT)
frame_add_statusline(curfrp);
frame_new_height(curfrp, new_fr_height, flags & WSP_TOP, FALSE); frame_new_height(curfrp, new_fr_height, flags & WSP_TOP, FALSE);
} }
else else
@@ -1328,12 +1331,10 @@ win_split_ins(
{ {
wp->w_winrow = oldwin->w_winrow + VISIBLE_HEIGHT(oldwin) wp->w_winrow = oldwin->w_winrow + VISIBLE_HEIGHT(oldwin)
+ STATUS_HEIGHT; + STATUS_HEIGHT;
wp->w_status_height = oldwin->w_status_height; wp->w_status_height = old_status_height;
if (!(flags & WSP_BOT)) if (!(flags & WSP_BOT))
oldwin->w_status_height = STATUS_HEIGHT; oldwin->w_status_height = STATUS_HEIGHT;
} }
if (flags & WSP_BOT)
frame_add_statusline(curfrp);
frame_fix_height(wp); frame_fix_height(wp);
frame_fix_height(oldwin); frame_fix_height(oldwin);
} }
@@ -3791,12 +3792,7 @@ frame_add_statusline(frame_T *frp)
if (frp->fr_layout == FR_LEAF) if (frp->fr_layout == FR_LEAF)
{ {
wp = frp->fr_win; wp = frp->fr_win;
if (wp->w_status_height == 0) wp->w_status_height = STATUS_HEIGHT;
{
if (wp->w_height > 0) // don't make it negative
--wp->w_height;
wp->w_status_height = STATUS_HEIGHT;
}
} }
else if (frp->fr_layout == FR_ROW) else if (frp->fr_layout == FR_ROW)
{ {