diff src/buffer.c @ 12660:ac6e56d8950e v8.0.1208

patch 8.0.1208: 'statusline' drops empty group with highlight change commit https://github.com/vim/vim/commit/6b89dbb55f84c485310c8c9e094dbafe3ecbace6 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Oct 22 14:22:16 2017 +0200 patch 8.0.1208: 'statusline' drops empty group with highlight change Problem: 'statusline' drops empty group with highlight change. Solution: Do not drop an empty group if it changes highlighting. (Marius Gedminas, closes #2228)
author Christian Brabandt <cb@256bit.org>
date Sun, 22 Oct 2017 14:30:06 +0200
parents 560adb3eed8b
children e769c912fcd9
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -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
@@ -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;