changeset 22288:a9ff3e0d6d54 v8.2.1693

patch 8.2.1693: "hi def" does not work for cleared highlight Commit: https://github.com/vim/vim/commit/05eb5b9cae123b138bbd23cc77e50657ece6b4ad Author: Bram Moolenaar <Bram@vim.org> Date: Wed Sep 16 15:43:21 2020 +0200 patch 8.2.1693: "hi def" does not work for cleared highlight Problem: "hi def" does not work for cleared highlight. Solution: Check the "sg_cleared" flag. (Maxim Kim, closes https://github.com/vim/vim/issues/6956, closes #4405)
author Bram Moolenaar <Bram@vim.org>
date Wed, 16 Sep 2020 15:45:05 +0200
parents 5f6279cda301
children 16d0d731599b
files src/highlight.c src/testdir/test_highlight.vim src/version.c
diffstat 3 files changed, 38 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -729,7 +729,8 @@ do_highlight(
 
 	if (!ends_excmd2(line, skipwhite(to_end)))
 	{
-	    semsg(_("E413: Too many arguments: \":highlight link %s\""), from_start);
+	    semsg(_("E413: Too many arguments: \":highlight link %s\""),
+								   from_start);
 	    return;
 	}
 
@@ -1629,7 +1630,8 @@ restore_cterm_colors(void)
     static int
 hl_has_settings(int idx, int check_link)
 {
-    return (   HL_TABLE()[idx].sg_term_attr != 0
+    return HL_TABLE()[idx].sg_cleared == 0
+	 && (  HL_TABLE()[idx].sg_term_attr != 0
 	    || HL_TABLE()[idx].sg_cterm_attr != 0
 	    || HL_TABLE()[idx].sg_cterm_fg != 0
 	    || HL_TABLE()[idx].sg_cterm_bg != 0
--- a/src/testdir/test_highlight.vim
+++ b/src/testdir/test_highlight.vim
@@ -832,4 +832,36 @@ func Test_highlight_term_attr()
   hi clear
 endfunc
 
+" Test default highlighting is restored
+func Test_highlight_restore_defaults()
+  hi! link TestLink Identifier
+  hi! TestHi ctermbg=red
+
+  let hlTestLinkPre = HighlightArgs('TestLink')
+  let hlTestHiPre = HighlightArgs('TestHi')
+
+  " Test colorscheme
+  hi clear
+  if exists('syntax_on')
+    syntax reset
+  endif
+  let g:colors_name = 'test'
+  hi! link TestLink ErrorMsg
+  hi! TestHi ctermbg=green
+
+  " Restore default highlighting
+  colorscheme default
+  syntax on
+  " 'default' should work no matter if highlight group was cleared
+  hi def link TestLink Identifier
+  hi def TestHi ctermbg=red
+
+  let hlTestLinkPost = HighlightArgs('TestLink')
+  let hlTestHiPost = HighlightArgs('TestHi')
+
+  call assert_equal(hlTestLinkPre, hlTestLinkPost)
+  call assert_equal(hlTestHiPre, hlTestHiPost)
+  hi clear
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1693,
+/**/
     1692,
 /**/
     1691,