]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1542: line not fully displayed if it doesn't fit in the screen v9.0.1542
authorLuuk van Baal <luukvbaal@gmail.com>
Thu, 11 May 2023 17:38:14 +0000 (18:38 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 11 May 2023 17:38:14 +0000 (18:38 +0100)
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)

src/move.c
src/testdir/dumps/Test_display_cursor_long_line.dump [new file with mode: 0644]
src/testdir/test_display.vim
src/version.c

index 3e5f6d52ce2045c08358ca9c27ce1417b6b28c06..877560792a23bfc10e39939d30a9682442fae475 100644 (file)
@@ -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 (file)
index 0000000..eafad8c
--- /dev/null
@@ -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|%| 
index 6acf4e3f58d0e841a3d8928d62f7a7c2a05732c1..5b08e84e31ad51d9b046d5f9d82efbc4ee498693 100644 (file)
@@ -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
index c917be5fbd347301ac35f8b3171d91c0236f8831..4c70def7626c2840da9778be582182ee7dca50fc 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1542,
 /**/
     1541,
 /**/