vim-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 vim/vim#6956,
            closes vim/vim#4405)
05eb5b9cae
This commit is contained in:
Andy K. Massimino
2021-03-04 00:39:40 -05:00
parent 8f4b9b8b7d
commit 4e6b31d978
2 changed files with 40 additions and 7 deletions

View File

@@ -7076,13 +7076,14 @@ void restore_cterm_colors(void)
*/
static int hl_has_settings(int idx, int check_link)
{
return HL_TABLE()[idx].sg_attr != 0
|| HL_TABLE()[idx].sg_cterm_fg != 0
|| HL_TABLE()[idx].sg_cterm_bg != 0
|| HL_TABLE()[idx].sg_rgb_fg_name != NULL
|| HL_TABLE()[idx].sg_rgb_bg_name != NULL
|| HL_TABLE()[idx].sg_rgb_sp_name != NULL
|| (check_link && (HL_TABLE()[idx].sg_set & SG_LINK));
return HL_TABLE()[idx].sg_cleared == 0
&& (HL_TABLE()[idx].sg_attr != 0
|| HL_TABLE()[idx].sg_cterm_fg != 0
|| HL_TABLE()[idx].sg_cterm_bg != 0
|| HL_TABLE()[idx].sg_rgb_fg_name != NULL
|| HL_TABLE()[idx].sg_rgb_bg_name != NULL
|| HL_TABLE()[idx].sg_rgb_sp_name != NULL
|| (check_link && (HL_TABLE()[idx].sg_set & SG_LINK)));
}
/*

View File

@@ -623,4 +623,36 @@ func Test_xxlast_highlight_RGB_color()
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