Mercurial > vim
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