1
0
forked from aniani/vim

patch 9.0.1561: display wrong when moving cursor to above the top line

Problem:    Display wrong when moving cursor to above the top line and
            'smoothscroll' is set.
Solution:   Call adjust_skipcol() in more places and make it work better.
            (Luuk van Baal, closes #12395)
This commit is contained in:
Luuk van Baal 2023-05-15 18:17:43 +01:00 committed by Bram Moolenaar
parent f741e3ec1f
commit 798fa76dbf
10 changed files with 58 additions and 13 deletions

View File

@ -1960,12 +1960,14 @@ adjust_skipcol(void)
curwin->w_skipcol -= width2;
else
curwin->w_skipcol -= width1;
redraw_later(UPD_NOT_VALID);
scrolled = TRUE;
validate_virtcol();
}
if (scrolled)
{
validate_virtcol();
redraw_later(UPD_NOT_VALID);
return; // don't scroll in the other direction now
}
int col = curwin->w_virtcol - curwin->w_skipcol + scrolloff_cols;
int row = 0;

View File

@ -1,8 +0,0 @@
|<+0#4040ff13#ffffff0@2|b+0#0000000&@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4|
|b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@2
@2| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4|
|b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@2
@2| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4|
|b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@2
@2| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4>
@57|2|,|6|0@1| @8|5|0|%|

View File

@ -0,0 +1,8 @@
|<+0#4040ff13#ffffff0@2|b+0#0000000&@71
@75
@75
@75
@75
@75
@1>b| @72
@57|2|,|7|5|2| @8|5|0|%|

View File

@ -0,0 +1,8 @@
|<+0#4040ff13#ffffff0@2|b+0#0000000&>b@70
@75
@75
@75
@75
@75
@75
| @56|2|,|1| @10|5|0|%|

View File

@ -0,0 +1,8 @@
| +0#af5f00255#ffffff0@1|2| |b+0#0000000&| >b@68
@75
@75
@75
@75
@75
@75
| @56|2|,|3| @10|5|0|%|

View File

@ -0,0 +1,8 @@
| +0#af5f00255#ffffff0@1|2| >b+0#0000000&| |b@68
@75
@75
@75
@75
@75
@75
| @56|2|,|1| @10|5|0|%|

View File

@ -507,14 +507,29 @@ func Test_display_cursor_long_line()
CheckScreendump
let lines =<< trim END
call setline(1, ['a', 'bbbbb '->repeat(100), 'c'])
call setline(1, ['a', 'b ' .. 'bbbbb'->repeat(150), 'c'])
norm $j
END
call writefile(lines, 'XdispCursorLongline', 'D')
let buf = RunVimInTerminal('-S XdispCursorLongline', #{rows: 8})
call VerifyScreenDump(buf, 'Test_display_cursor_long_line', {})
call VerifyScreenDump(buf, 'Test_display_cursor_long_line_1', {})
" FIXME: moving the cursor above the topline does not set w_skipcol
" correctly with cpo+=n and zero scrolloff (curs_columns() extra == 1).
call term_sendkeys(buf, ":set number cpo+=n scrolloff=0\<CR>")
call term_sendkeys(buf, '$0')
call VerifyScreenDump(buf, 'Test_display_cursor_long_line_2', {})
" Going to the start of the line with "b" did not set w_skipcol correctly
" with 'smoothscroll'.
call term_sendkeys(buf, ":set smoothscroll\<CR>")
call term_sendkeys(buf, '$b')
call VerifyScreenDump(buf, 'Test_display_cursor_long_line_3', {})
" Same for "ge".
call term_sendkeys(buf, '$ge')
call VerifyScreenDump(buf, 'Test_display_cursor_long_line_4', {})
call StopVimInTerminal(buf)
endfunc

View File

@ -502,7 +502,7 @@ func Test_smoothscroll_cursor_position()
" regardless of number and cpo-=n.
setl number list listchars=precedes:< cpo-=n
call s:check_col_calc(5, 1, 1)
exe "normal 2|\<C-E>"
exe "normal 3|\<C-E>h"
call s:check_col_calc(6, 1, 18)
norm h
call s:check_col_calc(5, 2, 17)

View File

@ -472,6 +472,7 @@ bck_word(long count, int bigword, int stop)
finished:
stop = FALSE;
}
adjust_skipcol();
return OK;
}
@ -598,6 +599,7 @@ bckend_word(
return OK;
}
}
adjust_skipcol();
return OK;
}

View File

@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1561,
/**/
1560,
/**/