forked from aniani/vim
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.
This commit is contained in:
@@ -347,8 +347,9 @@ handle_lnum_col(
|
|||||||
int num_attr UNUSED)
|
int num_attr UNUSED)
|
||||||
{
|
{
|
||||||
if ((wp->w_p_nu || wp->w_p_rnu)
|
if ((wp->w_p_nu || wp->w_p_rnu)
|
||||||
&& (wlv->row == wlv->startrow + wlv->filler_lines
|
&& ((wlv->row == wlv->startrow + wlv->filler_lines
|
||||||
|| vim_strchr(p_cpo, CPO_NUMCOL) == NULL))
|
&& (wp->w_skipcol == 0 || wlv->row > wp->w_winrow))
|
||||||
|
|| vim_strchr(p_cpo, CPO_NUMCOL) == NULL))
|
||||||
{
|
{
|
||||||
#ifdef FEAT_SIGNS
|
#ifdef FEAT_SIGNS
|
||||||
// If 'signcolumn' is set to 'number' and a sign is present
|
// If 'signcolumn' is set to 'number' and a sign is present
|
||||||
|
@@ -1552,6 +1552,26 @@ win_update(win_T *wp)
|
|||||||
init_search_hl(wp, &screen_search_hl);
|
init_search_hl(wp, &screen_search_hl);
|
||||||
#endif
|
#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
|
#ifdef FEAT_LINEBREAK
|
||||||
// Force redraw when width of 'number' or 'relativenumber' column
|
// Force redraw when width of 'number' or 'relativenumber' column
|
||||||
// changes.
|
// changes.
|
||||||
|
@@ -50,7 +50,7 @@ adjust_plines_for_skipcol(win_T *wp, int n)
|
|||||||
{
|
{
|
||||||
++off;
|
++off;
|
||||||
int skip = wp->w_skipcol - width;
|
int skip = wp->w_skipcol - width;
|
||||||
width -= win_col_off2(wp);
|
width += win_col_off2(wp);
|
||||||
while (skip >= width)
|
while (skip >= width)
|
||||||
{
|
{
|
||||||
++off;
|
++off;
|
||||||
|
12
src/testdir/dumps/Test_smooth_number_1.dump
Normal file
12
src/testdir/dumps/Test_smooth_number_1.dump
Normal file
@@ -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|
|
12
src/testdir/dumps/Test_smooth_number_2.dump
Normal file
12
src/testdir/dumps/Test_smooth_number_2.dump
Normal file
@@ -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|
|
12
src/testdir/dumps/Test_smooth_number_3.dump
Normal file
12
src/testdir/dumps/Test_smooth_number_3.dump
Normal file
@@ -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|
|
12
src/testdir/dumps/Test_smooth_number_4.dump
Normal file
12
src/testdir/dumps/Test_smooth_number_4.dump
Normal file
@@ -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|
|
12
src/testdir/dumps/Test_smooth_number_5.dump
Normal file
12
src/testdir/dumps/Test_smooth_number_5.dump
Normal file
@@ -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|
|
12
src/testdir/dumps/Test_smooth_number_6.dump
Normal file
12
src/testdir/dumps/Test_smooth_number_6.dump
Normal file
@@ -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|
|
@@ -106,6 +106,41 @@ func Test_smoothscroll_CtrlE_CtrlY()
|
|||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -699,6 +699,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
652,
|
||||||
/**/
|
/**/
|
||||||
651,
|
651,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user