diff options
author | Luuk van Baal <luukvbaal@gmail.com> | 2023-05-11 18:38:14 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-05-11 18:38:14 +0100 |
commit | 6c018680be0ec25d42614a93be1ea08df29a9e2a (patch) | |
tree | 6968cb3193efec671e3637bbe92fe177c3d736e1 | |
parent | e741f039cf46ccfbdaaa274618810787129d152b (diff) |
patch 9.0.1542: line not fully displayed if it doesn't fit in the screenv9.0.1542
Problem: Line not fully displayed if it doesn't fit in the screen.
Solution: Do not reset s_skipcol if not needed. (Luuk van Baal,
closes #12376)
-rw-r--r-- | src/move.c | 9 | ||||
-rw-r--r-- | src/testdir/dumps/Test_display_cursor_long_line.dump | 8 | ||||
-rw-r--r-- | src/testdir/test_display.vim | 18 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 32 insertions, 5 deletions
diff --git a/src/move.c b/src/move.c index 3e5f6d52ce..877560792a 100644 --- a/src/move.c +++ b/src/move.c @@ -2772,11 +2772,10 @@ scroll_cursor_halfway(int atend, int prefer_above) topline = loff.lnum; int want_height; - int smooth_scroll = FALSE; - if (curwin->w_p_sms && curwin->w_p_wrap) + int do_sms = curwin->w_p_wrap && curwin->w_p_sms; + if (do_sms) { // 'smoothscroll' and 'wrap' are set - smooth_scroll = TRUE; if (atend) { want_height = (curwin->w_height - used) / 2; @@ -2790,7 +2789,7 @@ scroll_cursor_halfway(int atend, int prefer_above) { // If using smoothscroll, we can precisely scroll to the // exact point where the cursor is halfway down the screen. - if (smooth_scroll) + if (do_sms) { topline_back_winheight(&loff, FALSE); if (loff.height == MAXCOL) @@ -2892,7 +2891,7 @@ scroll_cursor_halfway(int atend, int prefer_above) curwin->w_skipcol = skipcol; redraw_later(UPD_NOT_VALID); } - else + else if (do_sms) reset_skipcol(); } } diff --git a/src/testdir/dumps/Test_display_cursor_long_line.dump b/src/testdir/dumps/Test_display_cursor_long_line.dump new file mode 100644 index 0000000000..eafad8c9d9 --- /dev/null +++ b/src/testdir/dumps/Test_display_cursor_long_line.dump @@ -0,0 +1,8 @@ +|<+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|%| diff --git a/src/testdir/test_display.vim b/src/testdir/test_display.vim index 6acf4e3f58..5b08e84e31 100644 --- a/src/testdir/test_display.vim +++ b/src/testdir/test_display.vim @@ -489,4 +489,22 @@ func Test_display_long_lastline() call StopVimInTerminal(buf) endfunc +" Moving the cursor to a line that doesn't fit in the window should show +" correctly. +func Test_display_cursor_long_line() + CheckScreendump + + let lines =<< trim END + call setline(1, ['a', 'bbbbb '->repeat(100), '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 StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index c917be5fbd..4c70def762 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1542, +/**/ 1541, /**/ 1540, |