Patch 8.0.0201
Problem: When completing a group name for a highlight or syntax command
cleared groups are included.
Solution: Skip groups that have been cleared.
Files: src/syntax.c, src/testdir/test_syntax.vim
*** ../vim-8.0.0200/src/syntax.c 2017-01-17 16:27:01.617153072 +0100
--- src/syntax.c 2017-01-17 17:33:43.291038448 +0100
***************
*** 22,27 ****
--- 22,28 ----
{
char_u *sg_name; /* highlight group name */
char_u *sg_name_u; /* uppercase of sg_name */
+ int sg_cleared; /* "hi clear" was used */
/* for normal terminals */
int sg_term; /* "term=" highlighting attributes */
char_u *sg_start; /* terminal string for start highl */
***************
*** 7327,7332 ****
--- 7328,7334 ----
#ifdef FEAT_EVAL
HL_TABLE()[from_id - 1].sg_scriptID = current_SID;
#endif
+ HL_TABLE()[from_id - 1].sg_cleared = FALSE;
redraw_all_later(SOME_VALID);
}
}
***************
*** 8034,8039 ****
--- 8036,8042 ----
error = TRUE;
break;
}
+ HL_TABLE()[idx].sg_cleared = FALSE;
/*
* When highlighting has been given for a group, don't link it.
***************
*** 8171,8176 ****
--- 8174,8181 ----
static void
highlight_clear(int idx)
{
+ HL_TABLE()[idx].sg_cleared = TRUE;
+
HL_TABLE()[idx].sg_term = 0;
vim_free(HL_TABLE()[idx].sg_start);
HL_TABLE()[idx].sg_start = NULL;
***************
*** 9958,9964 ****
&& include_link != 0)
return (char_u *)"clear";
#endif
! if (idx < 0 || idx >= highlight_ga.ga_len)
return NULL;
return HL_TABLE()[idx].sg_name;
}
--- 9963,9975 ----
&& include_link != 0)
return (char_u *)"clear";
#endif
! if (idx < 0)
! return NULL;
! /* Items are never removed from the table, skip the ones that were
cleared.
! */
! while (idx < highlight_ga.ga_len && HL_TABLE()[idx].sg_cleared)
! ++idx;
! if (idx >= highlight_ga.ga_len)
return NULL;
return HL_TABLE()[idx].sg_name;
}
*** ../vim-8.0.0200/src/testdir/test_syntax.vim 2017-01-17 17:18:54.612835531
+0100
--- src/testdir/test_syntax.vim 2017-01-17 17:40:09.164519974 +0100
***************
*** 156,161 ****
--- 156,167 ----
call feedkeys(":syn sync \<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"syn sync ccomment clear fromstart linebreaks= linecont
lines= match maxlines= minlines= region', @:)
+ " Check that clearing "Aap" avoids it showing up before Boolean.
+ hi Aap ctermfg=blue
+ call feedkeys(":syn list \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_match('^"syn list Aap Boolean Character ', @:)
+ hi clear Aap
+
call feedkeys(":syn list \<C-A>\<C-B>\"\<CR>", 'tx')
call assert_match('^"syn list Boolean Character ', @:)
***************
*** 192,202 ****
call assert_match('conceal off', execute('syntax conceal'))
endif
! syntax region Tar start=/</ end=/>/
if 0
syntax region NotTest start=/</ end=/>/ contains=@Spell
endif
! call assert_match('Tar', execute('syntax'))
call assert_notmatch('NotTest', execute('syntax'))
call assert_notmatch('Spell', execute('syntax'))
--- 198,208 ----
call assert_match('conceal off', execute('syntax conceal'))
endif
! syntax region Bar start=/</ end=/>/
if 0
syntax region NotTest start=/</ end=/>/ contains=@Spell
endif
! call assert_match('Bar', execute('syntax'))
call assert_notmatch('NotTest', execute('syntax'))
call assert_notmatch('Spell', execute('syntax'))
***************
*** 206,211 ****
--- 212,219 ----
syntax rest
endif
call assert_equal(a, execute('hi Foo'))
+ hi clear Bar
+ hi clear Foo
set ft=tags
syn off
***************
*** 298,304 ****
func Test_invalid_arg()
call assert_fails('syntax case asdf', 'E390:')
! call assert_fails('syntax conceal asdf', 'E390:')
call assert_fails('syntax spell asdf', 'E390:')
endfunc
--- 306,314 ----
func Test_invalid_arg()
call assert_fails('syntax case asdf', 'E390:')
! if has('conceal')
! call assert_fails('syntax conceal asdf', 'E390:')
! endif
call assert_fails('syntax spell asdf', 'E390:')
endfunc
***************
*** 313,325 ****
func Test_syn_clear()
syntax keyword Foo foo
! syntax keyword Tar tar
call assert_match('Foo', execute('syntax'))
! call assert_match('Tar', execute('syntax'))
syn clear Foo
call assert_notmatch('Foo', execute('syntax'))
! call assert_match('Tar', execute('syntax'))
! syn clear Foo Tar
call assert_notmatch('Foo', execute('syntax'))
! call assert_notmatch('Tar', execute('syntax'))
endfunc
--- 323,337 ----
func Test_syn_clear()
syntax keyword Foo foo
! syntax keyword Bar tar
call assert_match('Foo', execute('syntax'))
! call assert_match('Bar', execute('syntax'))
syn clear Foo
call assert_notmatch('Foo', execute('syntax'))
! call assert_match('Bar', execute('syntax'))
! syn clear Foo Bar
call assert_notmatch('Foo', execute('syntax'))
! call assert_notmatch('Bar', execute('syntax'))
! hi clear Foo
! hi clear Bar
endfunc
*** ../vim-8.0.0200/src/version.c 2017-01-17 17:18:54.612835531 +0100
--- src/version.c 2017-01-17 17:43:42.819123273 +0100
***************
*** 766,767 ****
--- 766,769 ----
{ /* Add new patch number below this line */
+ /**/
+ 201,
/**/
--
GALAHAD turns back. We see from his POV the lovely ZOOT standing by him
smiling enchantingly and a number of equally delectable GIRLIES draped
around in the seductively poulticed room. They look at him smilingly and
wave.
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.