summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-10-03 20:01:16 +0100
committerBram Moolenaar <Bram@vim.org>2022-10-03 20:01:16 +0100
commitb6aab8f44beb8c5d99393abdc2c9faab085c72aa (patch)
treedffa0fca48cf9bb9dce8f2b5f2b32f1d96f642e8
parentf269eabc6c4f5bdcef989cd5b4b95ba8ccaa4d8a (diff)
downloadvim-git-b6aab8f44beb8c5d99393abdc2c9faab085c72aa.tar.gz
patch 9.0.0652: 'smoothscroll' not tested with 'number' and "n" in 'cpo'v9.0.0652
Problem: 'smoothscroll' not tested with 'number' and "n" in 'cpo'. Solution: Add tests, fix uncovered problem.
-rw-r--r--src/drawline.c5
-rw-r--r--src/drawscreen.c20
-rw-r--r--src/move.c2
-rw-r--r--src/testdir/dumps/Test_smooth_number_1.dump12
-rw-r--r--src/testdir/dumps/Test_smooth_number_2.dump12
-rw-r--r--src/testdir/dumps/Test_smooth_number_3.dump12
-rw-r--r--src/testdir/dumps/Test_smooth_number_4.dump12
-rw-r--r--src/testdir/dumps/Test_smooth_number_5.dump12
-rw-r--r--src/testdir/dumps/Test_smooth_number_6.dump12
-rw-r--r--src/testdir/test_scroll_opt.vim35
-rw-r--r--src/version.c2
11 files changed, 133 insertions, 3 deletions
diff --git a/src/drawline.c b/src/drawline.c
index 4d504e103..d36eee7f5 100644
--- 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
diff --git a/src/drawscreen.c b/src/drawscreen.c
index 47066995a..fa5d6683d 100644
--- 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.
diff --git a/src/move.c b/src/move.c
index 75cfadf55..39b7089b2 100644
--- a/src/move.c
+++ b/src/move.c
@@ -50,7 +50,7 @@ adjust_plines_for_skipcol(win_T *wp, int n)
{
++off;
int skip = wp->w_skipcol - width;
- width -= win_col_off2(wp);
+ width += win_col_off2(wp);
while (skip >= width)
{
++off;
diff --git a/src/testdir/dumps/Test_smooth_number_1.dump b/src/testdir/dumps/Test_smooth_number_1.dump
new file mode 100644
index 000000000..795331944
--- /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|
diff --git a/src/testdir/dumps/Test_smooth_number_2.dump b/src/testdir/dumps/Test_smooth_number_2.dump
new file mode 100644
index 000000000..110775dbd
--- /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|
diff --git a/src/testdir/dumps/Test_smooth_number_3.dump b/src/testdir/dumps/Test_smooth_number_3.dump
new file mode 100644
index 000000000..3f35de695
--- /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|
diff --git a/src/testdir/dumps/Test_smooth_number_4.dump b/src/testdir/dumps/Test_smooth_number_4.dump
new file mode 100644
index 000000000..6ea393d11
--- /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|
diff --git a/src/testdir/dumps/Test_smooth_number_5.dump b/src/testdir/dumps/Test_smooth_number_5.dump
new file mode 100644
index 000000000..4602de274
--- /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|
diff --git a/src/testdir/dumps/Test_smooth_number_6.dump b/src/testdir/dumps/Test_smooth_number_6.dump
new file mode 100644
index 000000000..bec58b5e7
--- /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|
diff --git a/src/testdir/test_scroll_opt.vim b/src/testdir/test_scroll_opt.vim
index e23068f8a..5dfc69762 100644
--- 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
diff --git a/src/version.c b/src/version.c
index c84d309e0..abc67c0c4 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 */
/**/
+ 652,
+/**/
651,
/**/
650,