]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.2105: skipcol not reset when topline changed v9.0.2105
authorLuuk van Baal <luukvbaal@gmail.com>
Tue, 14 Nov 2023 16:05:18 +0000 (17:05 +0100)
committerChristian Brabandt <cb@256bit.org>
Tue, 14 Nov 2023 16:05:18 +0000 (17:05 +0100)
Problem:  Skipcol is not reset when topline changed scrolling cursor to top
Solution: reset skipcol

closes: #13528
closes: #13532

Signed-off-by: Luuk van Baal <luukvbaal@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/move.c
src/testdir/dumps/Test_smoothscroll_cursor_top.dump [new file with mode: 0644]
src/testdir/test_scroll_opt.vim
src/version.c

index bb6502467e9fe1e77ea7a2e5ff0f4c9369c4d275..ce06dc3394689ea9e4e7e660b10d187381337813 100644 (file)
@@ -2423,7 +2423,9 @@ scroll_cursor_top(int min_scroll, int always)
        }
        check_topfill(curwin, FALSE);
 #endif
-       if (curwin->w_topline == curwin->w_cursor.lnum)
+       if (curwin->w_topline != old_topline)
+           reset_skipcol();
+       else if (curwin->w_topline == curwin->w_cursor.lnum)
        {
            validate_virtcol();
            if (curwin->w_skipcol >= curwin->w_virtcol)
diff --git a/src/testdir/dumps/Test_smoothscroll_cursor_top.dump b/src/testdir/dumps/Test_smoothscroll_cursor_top.dump
new file mode 100644 (file)
index 0000000..84cc0e6
--- /dev/null
@@ -0,0 +1,12 @@
+| +0&#ffffff0@39
+|[+1&&|N|o| |N|a|m|e|]| @30
+|l+0&&|i|n|e|1| @34
+|l|i|n|e|2| @34
+>l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3
+|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3
+|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3|l|i|n|e|3| @19
+|l|i|n|e|4| @34
+|~+0#4040ff13&| @38
+|~| @38
+|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @26
+| +0&&@39
index 005e45bb5934eb9d58f22c23859f4335748f7056..d5d08a24c20d4ba573a951c5cd45c6327ab76a48 100644 (file)
@@ -909,4 +909,21 @@ func Test_smoothscroll_zero_width_scroll_cursor_bot()
   call StopVimInTerminal(buf)
 endfunc
 
+" scroll_cursor_top() should reset skipcol when it changes topline
+func Test_smoothscroll_cursor_top()
+  CheckScreendump
+
+  let lines =<< trim END
+      set smoothscroll scrolloff=2
+      new | 11resize | wincmd j
+      call setline(1, ['line1', 'line2', 'line3'->repeat(20), 'line4'])
+      exe "norm G3\<C-E>k"
+  END
+  call writefile(lines, 'XSmoothScrollCursorTop', 'D')
+  let buf = RunVimInTerminal('-u NONE -S XSmoothScrollCursorTop', #{rows: 12, cols:40})
+  call VerifyScreenDump(buf, 'Test_smoothscroll_cursor_top', {})
+
+  call StopVimInTerminal(buf)
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 8afbc403d264193521c8a2033b011615f3537517..f9d1593c0dd566e17912f4a37b3dc27d8449cf38 100644 (file)
@@ -704,6 +704,10 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2105,
+/**/
+    2104,
 /**/
     2103,
 /**/