Skip to content

Commit

Permalink
patch 8.0.1208: 'statusline' drops empty group with highlight change
Browse files Browse the repository at this point in the history
Problem:    'statusline' drops empty group with highlight change.
Solution:   Do not drop an empty group if it changes highlighting. (Marius
            Gedminas, closes #2228)
  • Loading branch information
brammool committed Oct 22, 2017
1 parent 67435d9 commit 6b89dbb
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 4 deletions.
17 changes: 14 additions & 3 deletions src/buffer.c
Expand Up @@ -3883,6 +3883,8 @@ build_stl_str_hl(
int width;
int itemcnt;
int curitem;
int group_end_userhl;
int group_start_userhl;
int groupitem[STL_MAX_ITEM];
int groupdepth;
struct stl_item
Expand Down Expand Up @@ -4023,11 +4025,20 @@ build_stl_str_hl(
if (curitem > groupitem[groupdepth] + 1
&& item[groupitem[groupdepth]].minwid == 0)
{
/* remove group if all items are empty */
/* remove group if all items are empty and highlight group
* doesn't change */
group_start_userhl = group_end_userhl = 0;
for (n = 0; n < groupitem[groupdepth]; n++)
if (item[n].type == Highlight)
group_start_userhl = item[n].minwid;
for (n = groupitem[groupdepth] + 1; n < curitem; n++)
if (item[n].type == Normal || item[n].type == Highlight)
{
if (item[n].type == Normal)
break;
if (n == curitem)
if (item[n].type == Highlight)
group_end_userhl = item[n].minwid;
}
if (n == curitem && group_start_userhl == group_end_userhl)
{
p = t;
l = 0;
Expand Down
65 changes: 64 additions & 1 deletion src/testdir/test_statusline.vim
Expand Up @@ -5,7 +5,6 @@
" %N
" %T
" %X
" %*

source view_util.vim

Expand Down Expand Up @@ -249,6 +248,70 @@ func Test_statusline()
call assert_equal(sa1, sa3)
call assert_notequal(sa1, sa2)

" An empty group that contains highlight changes
let g:a = ''
set statusline=ab%(cd%1*%{g:a}%*%)de
call assert_match('^abde\s*$', s:get_statusline())
let sa1=screenattr(&lines - 1, 1)
let sa2=screenattr(&lines - 1, 4)
call assert_equal(sa1, sa2)
let g:a = 'X'
call assert_match('^abcdXde\s*$', s:get_statusline())
let sa1=screenattr(&lines - 1, 1)
let sa2=screenattr(&lines - 1, 5)
let sa3=screenattr(&lines - 1, 7)
call assert_equal(sa1, sa3)
call assert_notequal(sa1, sa2)

let g:a = ''
set statusline=ab%1*%(cd%*%{g:a}%1*%)de
call assert_match('^abde\s*$', s:get_statusline())
let sa1=screenattr(&lines - 1, 1)
let sa2=screenattr(&lines - 1, 4)
call assert_notequal(sa1, sa2)
let g:a = 'X'
call assert_match('^abcdXde\s*$', s:get_statusline())
let sa1=screenattr(&lines - 1, 1)
let sa2=screenattr(&lines - 1, 3)
let sa3=screenattr(&lines - 1, 5)
let sa4=screenattr(&lines - 1, 7)
call assert_notequal(sa1, sa2)
call assert_equal(sa1, sa3)
call assert_equal(sa2, sa4)

" An empty group that contains highlight changes and doesn't reset them
let g:a = ''
set statusline=ab%(cd%1*%{g:a}%)de
call assert_match('^abcdde\s*$', s:get_statusline())
let sa1=screenattr(&lines - 1, 1)
let sa2=screenattr(&lines - 1, 5)
call assert_notequal(sa1, sa2)
let g:a = 'X'
call assert_match('^abcdXde\s*$', s:get_statusline())
let sa1=screenattr(&lines - 1, 1)
let sa2=screenattr(&lines - 1, 5)
let sa3=screenattr(&lines - 1, 7)
call assert_notequal(sa1, sa2)
call assert_equal(sa2, sa3)

let g:a = ''
set statusline=ab%1*%(cd%*%{g:a}%)de
call assert_match('^abcdde\s*$', s:get_statusline())
let sa1=screenattr(&lines - 1, 1)
let sa2=screenattr(&lines - 1, 3)
let sa3=screenattr(&lines - 1, 5)
call assert_notequal(sa1, sa2)
call assert_equal(sa1, sa3)
let g:a = 'X'
call assert_match('^abcdXde\s*$', s:get_statusline())
let sa1=screenattr(&lines - 1, 1)
let sa2=screenattr(&lines - 1, 3)
let sa3=screenattr(&lines - 1, 5)
let sa4=screenattr(&lines - 1, 7)
call assert_notequal(sa1, sa2)
call assert_equal(sa1, sa3)
call assert_equal(sa1, sa4)

" %%: a percent sign.
set statusline=10%%
call assert_match('^10%\s*$', s:get_statusline())
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -761,6 +761,8 @@ static char *(features[]) =

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

0 comments on commit 6b89dbb

Please sign in to comment.