patch 9.1.1297: Ctrl-D scrolling can get stuck
Problem: cursor_correct() calculates a valid cursor position which
is later changed by update_topline() and causes Ctrl-D
scrolling to be stuck (Daniel Steinberg, after v9.1.0258).
Solution: Update the valid cursor position before validating topline
(Luuk van Baal).
fixes: #17106
closes: #17110
Signed-off-by: Luuk van Baal <luukvbaal@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/move.c b/src/move.c
index 5d34947..f4bce40 100644
--- a/src/move.c
+++ b/src/move.c
@@ -3120,6 +3120,7 @@
~(VALID_WROW|VALID_WCOL|VALID_CHEIGHT|VALID_CROW);
}
}
+ check_cursor_moved(curwin);
curwin->w_valid |= VALID_TOPLINE;
}
diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim
index 35c290c..aa24bce 100644
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -4326,4 +4326,23 @@
bwipe!
endfunc
+" Test for Ctrl-D with 'scrolloff' and narrow window does not get stuck.
+func Test_scroll_longline_scrolloff()
+ 11new
+ 36vsplit
+ set scrolloff=5
+
+ call setline(1, ['']->repeat(5))
+ call setline(6, ['foo'->repeat(20)]->repeat(2))
+ call setline(8, ['bar'->repeat(30)])
+ call setline(9, ['']->repeat(5))
+ exe "normal! \<C-D>"
+ call assert_equal(6, line('w0'))
+ exe "normal! \<C-D>"
+ call assert_equal(7, line('w0'))
+
+ set scrolloff&
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab nofoldenable
diff --git a/src/version.c b/src/version.c
index 6f3f241..e95226c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1297,
+/**/
1296,
/**/
1295,