summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-05-18 15:36:11 +0200
committerBram Moolenaar <Bram@vim.org>2019-05-18 15:36:11 +0200
commitbd2d68c2f42c7689f681aeaf82606d17f8a0312f (patch)
treeef5f2d054266de7545c4e9317abb5cea5d080940
parent7f3a28490abb7c495239fc438825e3d1aaafa76d (diff)
downloadvim-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.vim30
-rw-r--r--src/version.c2
-rw-r--r--src/window.c5
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