Mercurial > vim
diff src/sign.c @ 26432:99a512bd8423 v8.2.3747
patch 8.2.3747: cannot remove highlight from an existing sign
Commit: https://github.com/vim/vim/commit/0bac5fc5e125b7aa0f3b596c9b7f4381279e6688
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Dec 5 17:45:49 2021 +0000
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 05 Dec 2021 19:00:04 +0100 |
parents | f6ca4276c4cc |
children | f612c41cfd94 |
line wrap: on
line diff
--- a/src/sign.c +++ b/src/sign.c @@ -1078,13 +1078,28 @@ sign_define_by_name( return FAIL; 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) - 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) - 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; } @@ -1319,7 +1334,11 @@ sign_define_cmd(char_u *sign_name, char_ char_u *linehl = NULL; char_u *texthl = 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. for (;;) @@ -1341,7 +1360,7 @@ sign_define_cmd(char_u *sign_name, char_ else if (STRNCMP(arg, "linehl=", 7) == 0) { arg += 7; - if (check_empty_group(p - arg, "linehl") == FAIL) + if (!exists && check_empty_group(p - arg, "linehl") == FAIL) { failed = TRUE; break; @@ -1351,7 +1370,7 @@ sign_define_cmd(char_u *sign_name, char_ else if (STRNCMP(arg, "texthl=", 7) == 0) { arg += 7; - if (check_empty_group(p - arg, "texthl") == FAIL) + if (!exists && check_empty_group(p - arg, "texthl") == FAIL) { failed = TRUE; break; @@ -1361,7 +1380,7 @@ sign_define_cmd(char_u *sign_name, char_ else if (STRNCMP(arg, "culhl=", 6) == 0) { arg += 6; - if (check_empty_group(p - arg, "culhl") == FAIL) + if (!exists && check_empty_group(p - arg, "culhl") == FAIL) { failed = TRUE; break;