forked from aniani/vim
patch 8.2.3747: cannot remove highlight from an existing sign
Problem: Cannot remove highlight from an existing sign. (James McCoy) Solution: Only reject empty argument for a new sign.
This commit is contained in:
33
src/sign.c
33
src/sign.c
@@ -1078,13 +1078,28 @@ sign_define_by_name(
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
|
|
||||||
if (linehl != NULL)
|
if (linehl != NULL)
|
||||||
sp->sn_line_hl = syn_check_group(linehl, (int)STRLEN(linehl));
|
{
|
||||||
|
if (*linehl == NUL)
|
||||||
|
sp->sn_line_hl = 0;
|
||||||
|
else
|
||||||
|
sp->sn_line_hl = syn_check_group(linehl, (int)STRLEN(linehl));
|
||||||
|
}
|
||||||
|
|
||||||
if (texthl != NULL)
|
if (texthl != NULL)
|
||||||
sp->sn_text_hl = syn_check_group(texthl, (int)STRLEN(texthl));
|
{
|
||||||
|
if (*texthl == NUL)
|
||||||
|
sp->sn_text_hl = 0;
|
||||||
|
else
|
||||||
|
sp->sn_text_hl = syn_check_group(texthl, (int)STRLEN(texthl));
|
||||||
|
}
|
||||||
|
|
||||||
if (culhl != NULL)
|
if (culhl != NULL)
|
||||||
sp->sn_cul_hl = syn_check_group(culhl, (int)STRLEN(culhl));
|
{
|
||||||
|
if (*culhl == NUL)
|
||||||
|
sp->sn_cul_hl = 0;
|
||||||
|
else
|
||||||
|
sp->sn_cul_hl = syn_check_group(culhl, (int)STRLEN(culhl));
|
||||||
|
}
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@@ -1319,7 +1334,11 @@ sign_define_cmd(char_u *sign_name, char_u *cmdline)
|
|||||||
char_u *linehl = NULL;
|
char_u *linehl = NULL;
|
||||||
char_u *texthl = NULL;
|
char_u *texthl = NULL;
|
||||||
char_u *culhl = NULL;
|
char_u *culhl = NULL;
|
||||||
int failed = FALSE;
|
int failed = FALSE;
|
||||||
|
sign_T *sp_prev;
|
||||||
|
int exists;
|
||||||
|
|
||||||
|
exists = sign_find(sign_name, &sp_prev) != NULL;
|
||||||
|
|
||||||
// set values for a defined sign.
|
// set values for a defined sign.
|
||||||
for (;;)
|
for (;;)
|
||||||
@@ -1341,7 +1360,7 @@ sign_define_cmd(char_u *sign_name, char_u *cmdline)
|
|||||||
else if (STRNCMP(arg, "linehl=", 7) == 0)
|
else if (STRNCMP(arg, "linehl=", 7) == 0)
|
||||||
{
|
{
|
||||||
arg += 7;
|
arg += 7;
|
||||||
if (check_empty_group(p - arg, "linehl") == FAIL)
|
if (!exists && check_empty_group(p - arg, "linehl") == FAIL)
|
||||||
{
|
{
|
||||||
failed = TRUE;
|
failed = TRUE;
|
||||||
break;
|
break;
|
||||||
@@ -1351,7 +1370,7 @@ sign_define_cmd(char_u *sign_name, char_u *cmdline)
|
|||||||
else if (STRNCMP(arg, "texthl=", 7) == 0)
|
else if (STRNCMP(arg, "texthl=", 7) == 0)
|
||||||
{
|
{
|
||||||
arg += 7;
|
arg += 7;
|
||||||
if (check_empty_group(p - arg, "texthl") == FAIL)
|
if (!exists && check_empty_group(p - arg, "texthl") == FAIL)
|
||||||
{
|
{
|
||||||
failed = TRUE;
|
failed = TRUE;
|
||||||
break;
|
break;
|
||||||
@@ -1361,7 +1380,7 @@ sign_define_cmd(char_u *sign_name, char_u *cmdline)
|
|||||||
else if (STRNCMP(arg, "culhl=", 6) == 0)
|
else if (STRNCMP(arg, "culhl=", 6) == 0)
|
||||||
{
|
{
|
||||||
arg += 6;
|
arg += 6;
|
||||||
if (check_empty_group(p - arg, "culhl") == FAIL)
|
if (!exists && check_empty_group(p - arg, "culhl") == FAIL)
|
||||||
{
|
{
|
||||||
failed = TRUE;
|
failed = TRUE;
|
||||||
break;
|
break;
|
||||||
|
@@ -126,9 +126,34 @@ func Test_sign()
|
|||||||
call assert_fails("sign define Sign4 text= linehl=Comment", 'E239:')
|
call assert_fails("sign define Sign4 text= linehl=Comment", 'E239:')
|
||||||
call assert_fails("sign define Sign4 text=\\ ab linehl=Comment", 'E239:')
|
call assert_fails("sign define Sign4 text=\\ ab linehl=Comment", 'E239:')
|
||||||
|
|
||||||
call assert_fails("sign define Sign4 linehl=", 'E1249: Group name missing for linehl')
|
" an empty highlight argument for a new sign is an error
|
||||||
call assert_fails("sign define Sign4 culhl=", 'E1249: Group name missing for culhl')
|
call assert_fails("sign define SignX linehl=", 'E1249: Group name missing for linehl')
|
||||||
call assert_fails("sign define Sign4 texthl=", 'E1249: Group name missing for texthl')
|
call assert_fails("sign define SignX culhl=", 'E1249: Group name missing for culhl')
|
||||||
|
call assert_fails("sign define SignX texthl=", 'E1249: Group name missing for texthl')
|
||||||
|
|
||||||
|
" an empty highlight argument for an existing sign clears it
|
||||||
|
sign define SignY texthl=TextHl culhl=CulHl linehl=LineHl
|
||||||
|
let sl = sign_getdefined('SignY')[0]
|
||||||
|
call assert_equal('TextHl', sl.texthl)
|
||||||
|
call assert_equal('CulHl', sl.culhl)
|
||||||
|
call assert_equal('LineHl', sl.linehl)
|
||||||
|
|
||||||
|
sign define SignY texthl= culhl=CulHl linehl=LineHl
|
||||||
|
let sl = sign_getdefined('SignY')[0]
|
||||||
|
call assert_false(has_key(sl, 'texthl'))
|
||||||
|
call assert_equal('CulHl', sl.culhl)
|
||||||
|
call assert_equal('LineHl', sl.linehl)
|
||||||
|
|
||||||
|
sign define SignY linehl=
|
||||||
|
let sl = sign_getdefined('SignY')[0]
|
||||||
|
call assert_false(has_key(sl, 'linehl'))
|
||||||
|
call assert_equal('CulHl', sl.culhl)
|
||||||
|
|
||||||
|
sign define SignY culhl=
|
||||||
|
let sl = sign_getdefined('SignY')[0]
|
||||||
|
call assert_false(has_key(sl, 'culhl'))
|
||||||
|
|
||||||
|
sign undefine SignY
|
||||||
|
|
||||||
" define sign with whitespace
|
" define sign with whitespace
|
||||||
sign define Sign4 text=\ X linehl=Comment
|
sign define Sign4 text=\ X linehl=Comment
|
||||||
|
@@ -753,6 +753,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
3747,
|
||||||
/**/
|
/**/
|
||||||
3746,
|
3746,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user