From: Bram Moolenaar Date: Thu, 26 Oct 2017 16:21:24 +0000 (+0200) Subject: patch 8.0.1220: skipping empty statusline groups is not correct X-Git-Tag: v8.0.1220 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=235dddf1f4afe3a40047dbf2aca1bd177b7be18b;p=vim patch 8.0.1220: skipping empty statusline groups is not correct Problem: Skipping empty statusline groups is not correct. Solution: Also set group_end_userhl. (itchyny) --- diff --git a/src/buffer.c b/src/buffer.c index 0d69b9d66..dad910388 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -4028,9 +4028,14 @@ build_stl_str_hl( /* 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++) + for (n = groupitem[groupdepth] - 1; n >= 0; n--) + { if (item[n].type == Highlight) - group_start_userhl = item[n].minwid; + { + group_start_userhl = group_end_userhl = item[n].minwid; + break; + } + } for (n = groupitem[groupdepth] + 1; n < curitem; n++) { if (item[n].type == Normal) diff --git a/src/testdir/test_statusline.vim b/src/testdir/test_statusline.vim index de943f246..eafbecdf6 100644 --- a/src/testdir/test_statusline.vim +++ b/src/testdir/test_statusline.vim @@ -312,6 +312,12 @@ func Test_statusline() call assert_equal(sa1, sa3) call assert_equal(sa1, sa4) + let g:a = '' + set statusline=%#Error#{%(\ %{g:a}\ %)} + call assert_match('^{}\s*$', s:get_statusline()) + let g:a = 'X' + call assert_match('^{ X }\s*$', s:get_statusline()) + " %%: a percent sign. set statusline=10%% call assert_match('^10%\s*$', s:get_statusline()) diff --git a/src/version.c b/src/version.c index 7f72146ea..a3b48b52f 100644 --- a/src/version.c +++ b/src/version.c @@ -761,6 +761,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1220, /**/ 1219, /**/