# HG changeset patch # User Christian Brabandt # Date 1509035405 -7200 # Node ID 185f8dbdcf26c600e05944d3d8348ae14dab6f92 # Parent b7686c1c66b70c2135e3f9af58fda506c3c0eb60 patch 8.0.1220: skipping empty statusline groups is not correct commit https://github.com/vim/vim/commit/235dddf1f4afe3a40047dbf2aca1bd177b7be18b Author: Bram Moolenaar Date: Thu Oct 26 18:21:24 2017 +0200 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 --- 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 --- 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 --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1220, +/**/ 1219, /**/ 1218,