vim-patch:8.1.1347: fractional scroll position not restored after closing window

Problem:    Fractional scroll position not restored after closing window.
Solution:   Do restore fraction if topline is not one.
bd2d68c2f4
This commit is contained in:
Jan Edmund Lazo 2019-05-18 18:54:25 -04:00
parent 6ed20ff25c
commit 90c2abc53f
No known key found for this signature in database
GPG Key ID: 64915E6E9F735B15
2 changed files with 18 additions and 17 deletions

View File

@ -758,15 +758,7 @@ endfunc
func Test_split_noscroll() func Test_split_noscroll()
let so_save = &so let so_save = &so
new enew
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)) call setline(1, range(1, 8))
normal 100% normal 100%
split split
@ -782,12 +774,20 @@ func Test_split_noscroll()
call assert_equal(1, info1.topline) call assert_equal(1, info1.topline)
call assert_equal(1, info2.topline) call assert_equal(1, info2.topline)
" Restore original state. " window that fits all lines by itself, but not when split: closing other
for i in range(1, 20) " window should restore fraction.
wincmd -
redraw!
endfor
only! only!
call setline(1, range(1, &lines - 10))
exe &lines / 4
let winid1 = win_getid()
let info1 = getwininfo(winid1)[0]
call assert_equal(1, info1.topline)
new
redraw
close
let info1 = getwininfo(winid1)[0]
call assert_equal(1, info1.topline)
bwipe! bwipe!
let &so = so_save let &so = so_save
endfunc endfunc

View File

@ -5613,10 +5613,11 @@ void scroll_to_fraction(win_T *wp, int prev_height)
// Don't change w_topline in any of these cases: // Don't change w_topline in any of these cases:
// - window height is 0 // - window height is 0
// - 'scrollbind' is set and this isn't the current window // - 'scrollbind' is set and this isn't the current window
// - window height is sufficient to display the whole buffer // - window height is sufficient to display the whole buffer and first line
// is visible.
if (height > 0 if (height > 0
&& (!wp->w_p_scb || wp == curwin) && (!wp->w_p_scb || wp == curwin)
&& (height < wp->w_buffer->b_ml.ml_line_count) && (height < wp->w_buffer->b_ml.ml_line_count || wp->w_topline > 1)
) { ) {
/* /*
* Find a value for w_topline that shows the cursor at the same * Find a value for w_topline that shows the cursor at the same