summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-10-03 12:11:13 +0100
committerBram Moolenaar <Bram@vim.org>2022-10-03 12:11:13 +0100
commit8df9748edb2ac8bd025e34e06194ac210667c97a (patch)
tree995fad54ffc0479516c18392ad27c3053ab8d80f
parentb1fd26d208aadc96d3e8b9215f761150f40a9f91 (diff)
patch 9.0.0645: CTRL-Y does not stop at line 1v9.0.0645
Problem: CTRL-Y does not stop at line 1. (John Marriott) Solution: Stop at line 1 when 'smoothscroll' is not set. (closes #11261)
-rw-r--r--src/move.c8
-rw-r--r--src/testdir/test_scroll_opt.vim13
-rw-r--r--src/version.c2
3 files changed, 21 insertions, 2 deletions
diff --git a/src/move.c b/src/move.c
index dca77f787c..43e3273e2e 100644
--- a/src/move.c
+++ b/src/move.c
@@ -1485,11 +1485,14 @@ scrolldown(
else
#endif
{
- if (curwin->w_topline == 1 && curwin->w_skipcol < width1)
+ // break when at the very top
+ if (curwin->w_topline == 1
+ && (!curwin->w_p_sms || curwin->w_skipcol < width1))
break;
if (curwin->w_p_wrap && curwin->w_p_sms
- && curwin->w_skipcol >= width1)
+ && curwin->w_skipcol >= width1)
{
+ // scroll a screen line down
if (curwin->w_skipcol >= width1 + width2)
curwin->w_skipcol -= width2;
else
@@ -1499,6 +1502,7 @@ scrolldown(
}
else
{
+ // scroll a text line down
--curwin->w_topline;
curwin->w_skipcol = 0;
#ifdef FEAT_DIFF
diff --git a/src/testdir/test_scroll_opt.vim b/src/testdir/test_scroll_opt.vim
index f034d3a230..876ccf203a 100644
--- a/src/testdir/test_scroll_opt.vim
+++ b/src/testdir/test_scroll_opt.vim
@@ -37,6 +37,19 @@ func Test_reset_scroll()
quit!
endfunc
+func Test_CtrlE_CtrlY_stop_at_end()
+ enew
+ call setline(1, ['one', 'two'])
+ set number
+ exe "normal \<C-Y>"
+ call assert_equal([" 1 one "], ScreenLines(1, 10))
+ exe "normal \<C-E>\<C-E>\<C-E>"
+ call assert_equal([" 2 two "], ScreenLines(1, 10))
+
+ bwipe!
+ set nonumber
+endfunc
+
func Test_smoothscroll_CtrlE_CtrlY()
CheckScreendump
diff --git a/src/version.c b/src/version.c
index 32a9851c83..0cf367ea6f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 645,
+/**/
644,
/**/
643,