Mercurial > vim
changeset 32543:ca42967a3253 v9.0.1603
patch 9.0.1603: display wrong if scrolling multiple lines with 'smoothscroll'
Commit: https://github.com/vim/vim/commit/3c802277604a6b21110e41bedfe4c937ba7c2b7d
Author: zeertzjq <zeertzjq@outlook.com>
Date: Sat Jun 3 22:08:33 2023 +0100
patch 9.0.1603: display wrong if scrolling multiple lines with 'smoothscroll'
Problem: Display wrong when scrolling multiple lines with 'smoothscroll'
set.
Solution: Redraw when w_skipcol changed. (closes #12477, closes #12468)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 03 Jun 2023 23:15:04 +0200 |
parents | a046ef26570d |
children | 0f2e024cea33 |
files | src/move.c src/testdir/dumps/Test_smooth_multi_skipcol_1.dump src/testdir/dumps/Test_smooth_multi_skipcol_2.dump src/testdir/test_scroll_opt.vim src/version.c |
diffstat | 5 files changed, 49 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/move.c +++ b/src/move.c @@ -1785,6 +1785,7 @@ scrollup( 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) size = linetabsize(curwin, curwin->w_topline); @@ -1847,8 +1848,9 @@ scrollup( } } - if (curwin->w_topline == prev_topline) - // need to redraw even though w_topline didn't change + if (curwin->w_topline == prev_topline + || curwin->w_skipcol != prev_skipcol) + // need to redraw because wl_size of the topline may now be invalid redraw_later(UPD_NOT_VALID); } else
new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_smooth_multi_skipcol_1.dump @@ -0,0 +1,10 @@ +> +8&#ffffff0@39 +| +0&&@39 +|a@39 +@10| @29 +@40 +@40 +@40 +@40 +|b@2| @36 +@22|1|,|0|-|1| @8|T|o|p|
new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_smooth_multi_skipcol_2.dump @@ -0,0 +1,10 @@ +|<+0#4040ff13#ffffff0@2|a+8#0000000&@5>a| @29 +| +0&&@39 +@40 +@40 +@40 +|b@2| @36 +|c@2| @36 +|~+0#4040ff13&| @38 +|~| @38 +| +0#0000000&@21|3|,|5|0| @9|B|o|t|
--- a/src/testdir/test_scroll_opt.vim +++ b/src/testdir/test_scroll_opt.vim @@ -777,7 +777,7 @@ func Test_smoothscroll_incsearch() call setline(14, 'bbbb') END call writefile(lines, 'XSmoothIncsearch', 'D') - let buf = RunVimInTerminal('-S XSmoothIncsearch', #{rows: 8, cols:40}) + let buf = RunVimInTerminal('-S XSmoothIncsearch', #{rows: 8, cols: 40}) call term_sendkeys(buf, "/b") call VerifyScreenDump(buf, 'Test_smooth_incsearch_1', {}) @@ -792,4 +792,26 @@ func Test_smoothscroll_incsearch() call StopVimInTerminal(buf) endfunc +" Test scrolling multiple lines and stopping at non-zero skipcol. +func Test_smoothscroll_multi_skipcol() + CheckScreendump + + let lines =<< trim END + setlocal cursorline scrolloff=0 smoothscroll + call setline(1, repeat([''], 9)) + call setline(3, repeat('a', 50)) + call setline(8, 'bbb') + call setline(9, 'ccc') + redraw + END + call writefile(lines, 'XSmoothMultiSkipcol', 'D') + let buf = RunVimInTerminal('-S XSmoothMultiSkipcol', #{rows: 10, cols: 40}) + call VerifyScreenDump(buf, 'Test_smooth_multi_skipcol_1', {}) + + call term_sendkeys(buf, "3\<C-E>") + call VerifyScreenDump(buf, 'Test_smooth_multi_skipcol_2', {}) + + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab