changeset 19354:1d3b2ce65ae0 v8.2.0235

patch 8.2.0235: draw error when an empty group is removed from 'statusline' Commit: https://github.com/vim/vim/commit/dbe5d361feb65137099644329cf0ecfd4a945a14 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Feb 8 18:35:31 2020 +0100 patch 8.2.0235: draw error when an empty group is removed from 'statusline' Problem: Draw error when an empty group is removed from 'statusline'. Solution: Do not use highlighting from a removed group.
author Bram Moolenaar <Bram@vim.org>
date Sat, 08 Feb 2020 18:45:03 +0100
parents bf41a107b72a
children c8aabac6f164
files src/buffer.c src/testdir/dumps/Test_statusline_1.dump src/testdir/test_statusline.vim src/version.c
diffstat 4 files changed, 36 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -4216,6 +4216,10 @@ build_stl_str_hl(
 		{
 		    p = t;
 		    l = 0;
+		    // do not use the highlighting from the removed group
+		    for (n = groupitem[groupdepth] + 1; n < curitem; n++)
+			if (item[n].type == Highlight)
+			    item[n].type = Empty;
 		}
 	    }
 	    if (l > item[groupitem[groupdepth]].maxwid)
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_statusline_1.dump
@@ -0,0 +1,10 @@
+> +0&#ffffff0@49
+|~+0#4040ff13&| @48
+|~| @48
+|~| @48
+|~| @48
+|~| @48
+|~| @48
+|~| @48
+| +3#0000000&|Q|≡| @46
+| +0&&@49
--- a/src/testdir/test_statusline.vim
+++ b/src/testdir/test_statusline.vim
@@ -8,6 +8,7 @@
 
 source view_util.vim
 source check.vim
+source screendump.vim
 
 func s:get_statusline()
   return ScreenLines(&lines - 1, &columns)[0]
@@ -393,3 +394,22 @@ func Test_statusline_visual()
   bwipe! x1
   bwipe! x2
 endfunc
+
+func Test_statusline_removed_group()
+  CheckScreendump
+
+  let lines =<< trim END
+    scriptencoding utf-8
+    set laststatus=2
+    let &statusline = '%#StatColorHi2#%(✓%#StatColorHi2#%) Q≡'
+  END
+  call writefile(lines, 'XTest_statusline')
+
+  let buf = RunVimInTerminal('-S XTest_statusline', {'rows': 10, 'cols': 50})
+  call term_wait(buf, 100)
+  call VerifyScreenDump(buf, 'Test_statusline_1', {})
+
+  " clean up
+  call StopVimInTerminal(buf)
+  call delete('XTest_statusline')
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    235,
+/**/
     234,
 /**/
     233,