changeset 12684:185f8dbdcf26 v8.0.1220

patch 8.0.1220: skipping empty statusline groups is not correct commit https://github.com/vim/vim/commit/235dddf1f4afe3a40047dbf2aca1bd177b7be18b Author: Bram Moolenaar <Bram@vim.org> 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)
author Christian Brabandt <cb@256bit.org>
date Thu, 26 Oct 2017 18:30:05 +0200
parents b7686c1c66b7
children 7f73fbae6771
files src/buffer.c src/testdir/test_statusline.vim src/version.c
diffstat 3 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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())
--- 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,