Skip to content

Commit

Permalink
patch 9.0.1672: tabline highlight wrong after truncated double width …
Browse files Browse the repository at this point in the history
…label

Problem:    Tabline highlight wrong after truncated double width label.
Solution:   Fill up half a double width character later. (closes vim#12614)
  • Loading branch information
zeertzjq authored and brammool committed Jul 1, 2023
1 parent e7d9ca2 commit d392a74
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 10 deletions.
18 changes: 9 additions & 9 deletions src/buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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++)
{
Expand All @@ -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;
}
Expand Down
26 changes: 25 additions & 1 deletion src/testdir/test_tabline.vim
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ func Test_tabline_empty_group()
tabnew
redraw!

tabclose
bw!
set tabline=
endfunc

Expand Down Expand Up @@ -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
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1672,
/**/
1671,
/**/
Expand Down

0 comments on commit d392a74

Please sign in to comment.