]> granicus.if.org Git - vim/commitdiff
patch 9.0.0661: multi-byte "lastline" in 'fillchars' does not work properly v9.0.0661
authorzeertzjq <zeertzjq@outlook.com>
Tue, 4 Oct 2022 19:35:37 +0000 (20:35 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 4 Oct 2022 19:35:37 +0000 (20:35 +0100)
Problem:    Multi-byte "lastline" item in 'fillchars' does not work properly
            when the window is two columns wide.
Solution:   Compute the text length correctly. (closes #11280)

src/drawscreen.c
src/testdir/dumps/Test_display_lastline_6.dump [new file with mode: 0644]
src/testdir/dumps/Test_display_lastline_euro_6.dump [new file with mode: 0644]
src/testdir/test_display.vim
src/version.c

index 3ad7e00cc79c68e6180de5dac63d2702408162fb..fe54ef5d8166db87765d20e91cc92560fa39837f 100644 (file)
@@ -2643,15 +2643,15 @@ win_update(win_T *wp)
        {
            int         scr_row = W_WINROW(wp) + wp->w_height - 1;
            int         symbol  = wp->w_fill_chars.lastline;
-           int         len;
+           int         charlen;
            char_u      fillbuf[12];  // 2 characters of 6 bytes
 
-           len =  mb_char2bytes(symbol, &fillbuf[0]);
-           len += mb_char2bytes(symbol, &fillbuf[len]);
+           charlen = mb_char2bytes(symbol, &fillbuf[0]);
+           mb_char2bytes(symbol, &fillbuf[charlen]);
 
            // Last line isn't finished: Display "@@@" in the last screen line.
            screen_puts_len(fillbuf,
-                           wp->w_width > 2 ? len : wp->w_width,
+                           (wp->w_width > 2 ? 2 : wp->w_width) * charlen,
                            scr_row, wp->w_wincol, HL_ATTR(HLF_AT));
            screen_fill(scr_row, scr_row + 1,
                    (int)wp->w_wincol + 2, (int)W_ENDCOL(wp),
diff --git a/src/testdir/dumps/Test_display_lastline_6.dump b/src/testdir/dumps/Test_display_lastline_6.dump
new file mode 100644 (file)
index 0000000..e5ede7f
--- /dev/null
@@ -0,0 +1,10 @@
+>a+0&#ffffff0@1||+1&&|a+0&&@2| @68
+|a| ||+1&&|b+0&&@71
+@2||+1&&|b+0&&@71
+@2||+1&&|b+0&&@55| @15
+|b@1||+1&&|~+0#4040ff13&| @70
+|b+0#0000000&@1||+1&&|~+0#4040ff13&| @70
+|b+0#0000000&@1||+1&&|~+0#4040ff13&| @70
+|@@1||+1#0000000&|~+0#4040ff13&| @70
+|<+3#0000000&|1| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @40|1|,|1| @11|A|l@1
+|:+0&&|2|v|s|p|l|i|t| @66
diff --git a/src/testdir/dumps/Test_display_lastline_euro_6.dump b/src/testdir/dumps/Test_display_lastline_euro_6.dump
new file mode 100644 (file)
index 0000000..80e2cbb
--- /dev/null
@@ -0,0 +1,10 @@
+>a+0&#ffffff0@1||+1&&|a+0&&@2| @68
+|a| ||+1&&|b+0&&@71
+@2||+1&&|b+0&&@71
+@2||+1&&|b+0&&@55| @15
+|b@1||+1&&|~+0#4040ff13&| @70
+|b+0#0000000&@1||+1&&|~+0#4040ff13&| @70
+|b+0#0000000&@1||+1&&|~+0#4040ff13&| @70
+|€@1||+1#0000000&|~+0#4040ff13&| @70
+|<+3#0000000&|1| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @40|1|,|1| @11|A|l@1
+|:+0&&|2|v|s|p|l|i|t| @66
index 4d2ee9f202867218c46ea55fcd60574376147906..faed0b58ef5ac408f7b96294621ac09a5f790e70 100644 (file)
@@ -419,6 +419,10 @@ func Run_Test_display_lastline(euro)
   call term_sendkeys(buf, ":3split\<CR>")
   call VerifyScreenDump(buf, $'Test_display_lastline_{a:euro}5', {})
 
+  call term_sendkeys(buf, ":close\<CR>")
+  call term_sendkeys(buf, ":2vsplit\<CR>")
+  call VerifyScreenDump(buf, $'Test_display_lastline_{a:euro}6', {})
+
   call StopVimInTerminal(buf)
 endfunc
 
index 3adb51332c2e264185ee996938e24fb36af9c84b..e9cc0ec3b49287c79accfff2e44daddf8a3ca84c 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    661,
 /**/
     660,
 /**/