Mercurial > vim
changeset 32557:e64d1fd43178 v9.0.1610
patch 9.0.1610: display is wrong when 'smoothscroll' is set
Commit: https://github.com/vim/vim/commit/d9a92dc70b20c76cef9ca186676583c92c14311c
Author: zeertzjq <zeertzjq@outlook.com>
Date: Mon Jun 5 18:41:35 2023 +0100
patch 9.0.1610: display is wrong when 'smoothscroll' is set
Problem: Display is wrong when 'smoothscroll' is set and scrolling multiple
lines.
Solution: Redraw with UPD_NOT_VALID when "skipcol" is or was set.
(closes #12490, closes #12468)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 05 Jun 2023 19:45:04 +0200 |
parents | 6059fb171e40 |
children | 34ebbd52be7e |
files | src/move.c src/testdir/dumps/Test_smooth_multi_skipcol_1.dump src/testdir/dumps/Test_smooth_multi_skipcol_2.dump src/testdir/dumps/Test_smooth_multi_skipcol_3.dump src/testdir/test_scroll_opt.vim src/version.c |
diffstat | 6 files changed, 26 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/move.c +++ b/src/move.c @@ -1786,7 +1786,6 @@ scrollup( int width1 = curwin->w_width - curwin_col_off(); int width2 = width1 + curwin_col_off2(); int size = 0; - linenr_T prev_topline = curwin->w_topline; colnr_T prev_skipcol = curwin->w_skipcol; if (do_sms) @@ -1850,10 +1849,9 @@ scrollup( } } - // TODO: is comparing w_topline with prev_topline still needed? - if (curwin->w_topline == prev_topline - || curwin->w_skipcol != prev_skipcol) - // need to redraw because wl_size of the topline may now be invalid + if (prev_skipcol > 0 || curwin->w_skipcol > 0) + // need to redraw more, because wl_size of the (new) topline may + // now be invalid redraw_later(UPD_NOT_VALID); } else
--- a/src/testdir/dumps/Test_smooth_multi_skipcol_1.dump +++ b/src/testdir/dumps/Test_smooth_multi_skipcol_1.dump @@ -2,8 +2,8 @@ | +0&&@39 |a@39 @10| @29 -@40 -@40 +|a@39 +@10| @29 @40 @40 |b@2| @36
--- a/src/testdir/dumps/Test_smooth_multi_skipcol_2.dump +++ b/src/testdir/dumps/Test_smooth_multi_skipcol_2.dump @@ -1,6 +1,6 @@ |<+0#4040ff13#ffffff0@2|a+8#0000000&@5>a| @29 -| +0&&@39 -@40 +|a+0&&@39 +@10| @29 @40 @40 |b@2| @36
new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_smooth_multi_skipcol_3.dump @@ -0,0 +1,10 @@ +|<+0#4040ff13#ffffff0@2|a+8#0000000&@5>a| @29 +| +0&&@39 +@40 +|b@2| @36 +|c@2| @36 +|~+0#4040ff13&| @38 +|~| @38 +|~| @38 +|~| @38 +| +0#0000000&@21|4|,|5|0| @9|B|o|t|
--- a/src/testdir/test_scroll_opt.vim +++ b/src/testdir/test_scroll_opt.vim @@ -798,10 +798,11 @@ func Test_smoothscroll_multi_skipcol() let lines =<< trim END setlocal cursorline scrolloff=0 smoothscroll - call setline(1, repeat([''], 9)) + call setline(1, repeat([''], 8)) call setline(3, repeat('a', 50)) - call setline(8, 'bbb') - call setline(9, 'ccc') + call setline(4, repeat('a', 50)) + call setline(7, 'bbb') + call setline(8, 'ccc') redraw END call writefile(lines, 'XSmoothMultiSkipcol', 'D') @@ -811,6 +812,9 @@ func Test_smoothscroll_multi_skipcol() call term_sendkeys(buf, "3\<C-E>") call VerifyScreenDump(buf, 'Test_smooth_multi_skipcol_2', {}) + call term_sendkeys(buf, "2\<C-E>") + call VerifyScreenDump(buf, 'Test_smooth_multi_skipcol_3', {}) + call StopVimInTerminal(buf) endfunc