]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1672: tabline highlight wrong after truncated double width label v9.0.1672
authorzeertzjq <zeertzjq@outlook.com>
Sat, 1 Jul 2023 19:24:40 +0000 (20:24 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 1 Jul 2023 19:24:40 +0000 (20:24 +0100)
Problem:    Tabline highlight wrong after truncated double width label.
Solution:   Fill up half a double width character later. (closes #12614)

src/buffer.c
src/testdir/test_tabline.vim
src/version.c

index 330b3b98f6a93262c4b3bce9053df9bc4843ce72..14eac92b972a89792e5a53ba06184b2472e02fc1 100644 (file)
@@ -502,7 +502,7 @@ can_unload_buffer(buf_T *buf)
  * It can be:
  * 0                   buffer becomes hidden
  * DOBUF_UNLOAD                buffer is unloaded
- * DOBUF_DELETE                buffer is unloaded and removed from buffer list
+ * DOBUF_DEL           buffer is unloaded and removed from buffer list
  * DOBUF_WIPE          buffer is unloaded and really deleted
  * DOBUF_WIPE_REUSE    idem, and add to buf_reuse list
  * When doing all but the first one on the current buffer, the caller should
@@ -5108,14 +5108,6 @@ build_stl_str_hl(
            STRMOVE(s + 1, p);
            *s = '<';
 
-           // Fill up for half a double-wide character.
-           while (++width < maxwidth)
-           {
-               s = s + STRLEN(s);
-               MB_CHAR2BYTES(fillchar, s);
-               *s = NUL;
-           }
-
            --n;        // count the '<'
            for (; l < itemcnt; l++)
            {
@@ -5124,6 +5116,14 @@ build_stl_str_hl(
                else
                    stl_items[l].stl_start = s;
            }
+
+           // Fill up for half a double-wide character.
+           while (++width < maxwidth)
+           {
+               s = s + STRLEN(s);
+               MB_CHAR2BYTES(fillchar, s);
+               *s = NUL;
+           }
        }
        width = maxwidth;
     }
index 09adf2f68fe16c100b779cb0dda32e0cb9a51159..3cba2aab47278a68b920415118b75ed9e2d3b343 100644 (file)
@@ -133,7 +133,7 @@ func Test_tabline_empty_group()
   tabnew
   redraw!
 
-  tabclose
+  bw!
   set tabline=
 endfunc
 
@@ -202,4 +202,28 @@ func Test_tabline_showcmd()
   call StopVimInTerminal(buf)
 endfunc
 
+func TruncTabLine()
+  return '%1T口口%2Ta' .. repeat('b', &columns - 4) .. '%999X%#TabLine#c'
+endfunc
+
+" Test 'tabline' with truncated double-width label at the start.
+func Test_tabline_truncated_double_width()
+  tabnew
+  redraw
+  call assert_match('X$', Screenline(1))
+  let attr_TabLineFill = screenattr(1, &columns - 1)
+  let attr_TabLine = screenattr(1, &columns)
+  call assert_notequal(attr_TabLine, attr_TabLineFill)
+
+  set tabline=%!TruncTabLine()
+  redraw
+  call assert_equal('<a' .. repeat('b', &columns - 4) .. 'c', Screenline(1))
+  call assert_equal(attr_TabLineFill, screenattr(1, &columns - 2))
+  call assert_equal(attr_TabLine, screenattr(1, &columns - 1))
+  call assert_equal(attr_TabLine, screenattr(1, &columns))
+
+  bw!
+  set tabline=
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index b21e5a6a86b9971a83e708b56b822c3d348ef877..876e20c274954275089040af11c7f21a5836322c 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1672,
 /**/
     1671,
 /**/