diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-05-18 15:36:11 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-05-18 15:36:11 +0200 |
commit | bd2d68c2f42c7689f681aeaf82606d17f8a0312f (patch) | |
tree | ef5f2d054266de7545c4e9317abb5cea5d080940 | |
parent | 7f3a28490abb7c495239fc438825e3d1aaafa76d (diff) | |
download | vim-git-bd2d68c2f42c7689f681aeaf82606d17f8a0312f.tar.gz |
patch 8.1.1347: fractional scroll position not restored after closing windowv8.1.1347
Problem: Fractional scroll position not restored after closing window.
Solution: Do restore fraction if topline is not one.
-rw-r--r-- | src/testdir/test_window_cmd.vim | 30 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/window.c | 5 |
3 files changed, 20 insertions, 17 deletions
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim index c7be133b5..b3eecd705 100644 --- a/src/testdir/test_window_cmd.vim +++ b/src/testdir/test_window_cmd.vim @@ -745,16 +745,8 @@ 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)) + enew + call setline(1, range(1, 8)) normal 100% split @@ -769,12 +761,20 @@ func Test_split_noscroll() call assert_equal(1, info1.topline) call assert_equal(1, info2.topline) - " Restore original state. - for i in range(1, 20) - wincmd - - redraw! - endfor + " window that fits all lines by itself, but not when split: closing other + " window should restore fraction. 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! let &so = so_save endfunc diff --git a/src/version.c b/src/version.c index fc1a5d56f..6166c157c 100644 --- a/src/version.c +++ b/src/version.c @@ -768,6 +768,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1347, +/**/ 1346, /**/ 1345, diff --git a/src/window.c b/src/window.c index f03198919..fd732f22d 100644 --- a/src/window.c +++ b/src/window.c @@ -5830,10 +5830,11 @@ scroll_to_fraction(win_T *wp, int prev_height) // 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 + // - window height is sufficient to display the whole buffer and first line + // is visible. if (height > 0 && (!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 |