summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2023-05-11 18:38:14 +0100
committerBram Moolenaar <Bram@vim.org>2023-05-11 18:38:14 +0100
commit6c018680be0ec25d42614a93be1ea08df29a9e2a (patch)
tree6968cb3193efec671e3637bbe92fe177c3d736e1
parente741f039cf46ccfbdaaa274618810787129d152b (diff)
downloadvim-git-6c018680be0ec25d42614a93be1ea08df29a9e2a.tar.gz
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.c9
-rw-r--r--src/testdir/dumps/Test_display_cursor_long_line.dump8
-rw-r--r--src/testdir/test_display.vim18
-rw-r--r--src/version.c2
4 files changed, 32 insertions, 5 deletions
diff --git a/src/move.c b/src/move.c
index 3e5f6d52c..877560792 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 000000000..eafad8c9d
--- /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 6acf4e3f5..5b08e84e3 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 c917be5fb..4c70def76 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,