]> granicus.if.org Git - vim/commitdiff
patch 8.2.1693: "hi def" does not work for cleared highlight v8.2.1693
authorBram Moolenaar <Bram@vim.org>
Wed, 16 Sep 2020 13:43:21 +0000 (15:43 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 16 Sep 2020 13:43:21 +0000 (15:43 +0200)
Problem:    "hi def" does not work for cleared highlight.
Solution:   Check the "sg_cleared" flag. (Maxim Kim, closes #6956,
            closes #4405)

src/highlight.c
src/testdir/test_highlight.vim
src/version.c

index 6ddd44a827dff2505007f647f25cb44c6fc06db2..0175079245aa2af9e7da200161414ea3f2752bce 100644 (file)
@@ -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
index 4f2e238e45ac5899b4f79099c9bb924cd32823b5..5db2c57cb8b5aed89f363f08d673410f91fad9f1 100644 (file)
@@ -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
index d1ce8f0400283651846c2054e17f2524dc66e091..dab2bd8e27fba07d2eb40c41accef29c30453092 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1693,
 /**/
     1692,
 /**/