mirror of
https://github.com/vim/vim.git
synced 2025-09-28 04:24:06 -04:00
patch 8.1.1327: unnecessary scroll after horizontal split
Problem: Unnecessary scroll after horizontal split. Solution: Don't adjust to fraction if all the text fits in the window. (Martin Kunev, closes #4367)
This commit is contained in:
@@ -743,6 +743,42 @@ func Test_relative_cursor_second_line_after_resize()
|
||||
let &so = so_save
|
||||
endfunc
|
||||
|
||||
func Test_split_noscroll()
|
||||
let so_save = &so
|
||||
new
|
||||
only
|
||||
|
||||
" Make sure windows can hold all content after split.
|
||||
for i in range(1, 20)
|
||||
wincmd +
|
||||
redraw!
|
||||
endfor
|
||||
|
||||
call setline (1, range(1, 8))
|
||||
normal 100%
|
||||
split
|
||||
|
||||
1wincmd w
|
||||
let winid1 = win_getid()
|
||||
let info1 = getwininfo(winid1)[0]
|
||||
|
||||
2wincmd w
|
||||
let winid2 = win_getid()
|
||||
let info2 = getwininfo(winid2)[0]
|
||||
|
||||
call assert_equal(1, info1.topline)
|
||||
call assert_equal(1, info2.topline)
|
||||
|
||||
" Restore original state.
|
||||
for i in range(1, 20)
|
||||
wincmd -
|
||||
redraw!
|
||||
endfor
|
||||
only!
|
||||
bwipe!
|
||||
let &so = so_save
|
||||
endfunc
|
||||
|
||||
" Tests for the winnr() function
|
||||
func Test_winnr()
|
||||
only | tabonly
|
||||
|
@@ -767,6 +767,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1327,
|
||||
/**/
|
||||
1326,
|
||||
/**/
|
||||
|
10
src/window.c
10
src/window.c
@@ -5827,9 +5827,13 @@ scroll_to_fraction(win_T *wp, int prev_height)
|
||||
int sline, line_size;
|
||||
int height = wp->w_height;
|
||||
|
||||
// Don't change w_topline when height is zero. Don't set w_topline when
|
||||
// 'scrollbind' is set and this isn't the current window.
|
||||
if (height > 0 && (!wp->w_p_scb || wp == curwin))
|
||||
// Don't change w_topline in any of these cases:
|
||||
// - window height is 0
|
||||
// - 'scrollbind' is set and this isn't the current window
|
||||
// - window height is sufficient to display the whole buffer
|
||||
if (height > 0
|
||||
&& (!wp->w_p_scb || wp == curwin)
|
||||
&& (height < wp->w_buffer->b_ml.ml_line_count))
|
||||
{
|
||||
/*
|
||||
* Find a value for w_topline that shows the cursor at the same
|
||||
|
Reference in New Issue
Block a user