changeset 30635:604d7d7aa043 v9.0.0652

patch 9.0.0652: 'smoothscroll' not tested with 'number' and "n" in 'cpo' Commit: https://github.com/vim/vim/commit/b6aab8f44beb8c5d99393abdc2c9faab085c72aa Author: Bram Moolenaar <Bram@vim.org> Date: Mon Oct 3 20:01:16 2022 +0100 patch 9.0.0652: 'smoothscroll' not tested with 'number' and "n" in 'cpo' Problem: 'smoothscroll' not tested with 'number' and "n" in 'cpo'. Solution: Add tests, fix uncovered problem.
author Bram Moolenaar <Bram@vim.org>
date Mon, 03 Oct 2022 21:15:03 +0200
parents f68f43043842
children 21fb40734ad8
files src/drawline.c src/drawscreen.c src/move.c src/testdir/dumps/Test_smooth_number_1.dump src/testdir/dumps/Test_smooth_number_2.dump src/testdir/dumps/Test_smooth_number_3.dump src/testdir/dumps/Test_smooth_number_4.dump src/testdir/dumps/Test_smooth_number_5.dump src/testdir/dumps/Test_smooth_number_6.dump src/testdir/test_scroll_opt.vim src/version.c
diffstat 11 files changed, 133 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -347,8 +347,9 @@ handle_lnum_col(
 	int		num_attr UNUSED)
 {
     if ((wp->w_p_nu || wp->w_p_rnu)
-	    && (wlv->row == wlv->startrow + wlv->filler_lines
-			 || vim_strchr(p_cpo, CPO_NUMCOL) == NULL))
+	    && ((wlv->row == wlv->startrow + wlv->filler_lines
+		    && (wp->w_skipcol == 0 || wlv->row > wp->w_winrow))
+		|| vim_strchr(p_cpo, CPO_NUMCOL) == NULL))
     {
 #ifdef FEAT_SIGNS
 	// If 'signcolumn' is set to 'number' and a sign is present
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -1552,6 +1552,26 @@ win_update(win_T *wp)
     init_search_hl(wp, &screen_search_hl);
 #endif
 
+    // Make sure skipcol is valid, it depends on various options and the window
+    // width.
+    if (wp->w_skipcol > 0)
+    {
+	int w = 0;
+	int width1 = wp->w_width - win_col_off(wp);
+	int width2 = width1 + win_col_off2(wp);
+	int add = width1;
+
+	while (w < wp->w_skipcol)
+	{
+	    if (w > 0)
+		add = width2;
+	    w += add;
+	}
+	if (w != wp->w_skipcol)
+	    // always round down, the higher value may not be valid
+	    wp->w_skipcol = w - add;
+    }
+
 #ifdef FEAT_LINEBREAK
     // Force redraw when width of 'number' or 'relativenumber' column
     // changes.
--- a/src/move.c
+++ b/src/move.c
@@ -50,7 +50,7 @@ adjust_plines_for_skipcol(win_T *wp, int
     {
 	++off;
 	int skip = wp->w_skipcol - width;
-	width -= win_col_off2(wp);
+	width += win_col_off2(wp);
 	while (skip >= width)
 	{
 	    ++off;
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_smooth_number_1.dump
@@ -0,0 +1,12 @@
+| +0#af5f00255#ffffff0@1|1| |o+0#0000000&|n|e| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o
+|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o
+|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @12
+| +0#af5f00255&@1|2| |t+0#0000000&|w|o| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o
+|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @2
+| +0#af5f00255&@1|3| >l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|4| |l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|5| |l+0#0000000&|i|n|e| @31
+|~+0#4040ff13&| @38
+|~| @38
+|~| @38
+| +0#0000000&@21|3|,|1| @10|A|l@1| 
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_smooth_number_2.dump
@@ -0,0 +1,12 @@
+|<+0#4040ff13#ffffff0@2|w+0#0000000&|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o
+|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @12
+| +0#af5f00255&@1|2| |t+0#0000000&|w|o| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o
+|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @2
+| +0#af5f00255&@1|3| >l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|4| |l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|5| |l+0#0000000&|i|n|e| @31
+|~+0#4040ff13&| @38
+|~| @38
+|~| @38
+|~| @38
+| +0#0000000&@21|3|,|1| @10|A|l@1| 
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_smooth_number_3.dump
@@ -0,0 +1,12 @@
+|<+0#4040ff13#ffffff0@2|w+0#0000000&|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @12
+| +0#af5f00255&@1|2| |t+0#0000000&|w|o| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o
+|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| @2
+| +0#af5f00255&@1|3| >l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|4| |l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|5| |l+0#0000000&|i|n|e| @31
+|~+0#4040ff13&| @38
+|~| @38
+|~| @38
+|~| @38
+|~| @38
+| +0#0000000&@21|3|,|1| @10|A|l@1| 
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_smooth_number_4.dump
@@ -0,0 +1,12 @@
+|<+0#4040ff13#ffffff0@2| +0#af5f00255&|d+0#0000000&| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @4
+| +0#af5f00255&@1|2| |t+0#0000000&|w|o| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o
+| +0#af5f00255&@3|n+0#0000000&|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r
+| +0#af5f00255&@3|d+0#0000000&| @34
+| +0#af5f00255&@1|3| >l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|4| |l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|5| |l+0#0000000&|i|n|e| @31
+|~+0#4040ff13&| @38
+|~| @38
+|~| @38
+|~| @38
+|:+0#0000000&|s|e|t| |c|p|o|-|=|n| @10|3|,|1| @10|A|l@1| 
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_smooth_number_5.dump
@@ -0,0 +1,12 @@
+|<+0#4040ff13#ffffff0@2| +0#af5f00255&|r+0#0000000&|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r
+| +0#af5f00255&@3|d+0#0000000&| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @4
+| +0#af5f00255&@1|2| |t+0#0000000&|w|o| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o
+| +0#af5f00255&@3|n+0#0000000&|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r
+| +0#af5f00255&@3|d+0#0000000&| @34
+| +0#af5f00255&@1|3| >l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|4| |l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|5| |l+0#0000000&|i|n|e| @31
+|~+0#4040ff13&| @38
+|~| @38
+|~| @38
+|:+0#0000000&|s|e|t| |c|p|o|-|=|n| @10|3|,|1| @10|A|l@1| 
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_smooth_number_6.dump
@@ -0,0 +1,12 @@
+| +0#af5f00255#ffffff0@1|1| |o+0#0000000&|n|e| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o
+| +0#af5f00255&@3|r+0#0000000&|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r
+| +0#af5f00255&@3|d+0#0000000&| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| |w|o|r|d| @4
+| +0#af5f00255&@1|2| |t+0#0000000&|w|o| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o
+| +0#af5f00255&@3|n+0#0000000&|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r|d| |l|o|n|g| |w|o|r
+| +0#af5f00255&@3|d+0#0000000&| @34
+| +0#af5f00255&@1|3| >l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|4| |l+0#0000000&|i|n|e| @31
+| +0#af5f00255&@1|5| |l+0#0000000&|i|n|e| @31
+|~+0#4040ff13&| @38
+|~| @38
+|:+0#0000000&|s|e|t| |c|p|o|-|=|n| @10|3|,|1| @10|A|l@1| 
--- a/src/testdir/test_scroll_opt.vim
+++ b/src/testdir/test_scroll_opt.vim
@@ -106,6 +106,41 @@ func Test_smoothscroll_CtrlE_CtrlY()
   call StopVimInTerminal(buf)
 endfunc
 
+func Test_smoothscroll_number()
+  CheckScreendump
+
+  let lines =<< trim END
+      vim9script
+      setline(1, [
+        'one ' .. 'word '->repeat(20),
+        'two ' .. 'long word '->repeat(7),
+        'line',
+        'line',
+        'line',
+      ])
+      set smoothscroll
+      set number cpo+=n
+      :3
+  END
+  call writefile(lines, 'XSmoothNumber', 'D')
+  let buf = RunVimInTerminal('-S XSmoothNumber', #{rows: 12, cols: 40})
+
+  call VerifyScreenDump(buf, 'Test_smooth_number_1', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_smooth_number_2', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_smooth_number_3', {})
+
+  call term_sendkeys(buf, ":set cpo-=n\<CR>")
+  call VerifyScreenDump(buf, 'Test_smooth_number_4', {})
+  call term_sendkeys(buf, "\<C-Y>")
+  call VerifyScreenDump(buf, 'Test_smooth_number_5', {})
+  call term_sendkeys(buf, "\<C-Y>")
+  call VerifyScreenDump(buf, 'Test_smooth_number_6', {})
+
+  call StopVimInTerminal(buf)
+endfunc
+
 
 
 " vim: shiftwidth=2 sts=2 expandtab
--- 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 */
 /**/
+    652,
+/**/
     651,
 /**/
     650,