aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/syntax.c54
1 files changed, 33 insertions, 21 deletions
diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c
index ea6dc435df..e3aa898bea 100644
--- a/src/nvim/syntax.c
+++ b/src/nvim/syntax.c
@@ -6823,18 +6823,22 @@ void do_highlight(const char *line, const bool forceit, const bool init)
}
}
} else if (strcmp(key, "GUIFG") == 0) {
+ char_u **const namep = &HL_TABLE()[idx].sg_rgb_fg_name;
+
if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI)) {
if (!init) {
HL_TABLE()[idx].sg_set |= SG_GUI;
}
- xfree(HL_TABLE()[idx].sg_rgb_fg_name);
- if (strcmp(arg, "NONE") != 0) {
- HL_TABLE()[idx].sg_rgb_fg_name = (char_u *)xstrdup((char *)arg);
- HL_TABLE()[idx].sg_rgb_fg = name_to_color((const char_u *)arg);
- } else {
- HL_TABLE()[idx].sg_rgb_fg_name = NULL;
- HL_TABLE()[idx].sg_rgb_fg = -1;
+ if (*namep == NULL || STRCMP(*namep, arg) != 0) {
+ xfree(*namep);
+ if (strcmp(arg, "NONE") != 0) {
+ *namep = (char_u *)xstrdup(arg);
+ HL_TABLE()[idx].sg_rgb_fg = name_to_color((char_u *)arg);
+ } else {
+ *namep = NULL;
+ HL_TABLE()[idx].sg_rgb_fg = -1;
+ }
}
}
@@ -6842,18 +6846,22 @@ void do_highlight(const char *line, const bool forceit, const bool init)
normal_fg = HL_TABLE()[idx].sg_rgb_fg;
}
} else if (STRCMP(key, "GUIBG") == 0) {
+ char_u **const namep = &HL_TABLE()[idx].sg_rgb_bg_name;
+
if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI)) {
if (!init) {
HL_TABLE()[idx].sg_set |= SG_GUI;
}
- xfree(HL_TABLE()[idx].sg_rgb_bg_name);
- if (STRCMP(arg, "NONE") != 0) {
- HL_TABLE()[idx].sg_rgb_bg_name = (char_u *)xstrdup((char *)arg);
- HL_TABLE()[idx].sg_rgb_bg = name_to_color((const char_u *)arg);
- } else {
- HL_TABLE()[idx].sg_rgb_bg_name = NULL;
- HL_TABLE()[idx].sg_rgb_bg = -1;
+ if (*namep == NULL || STRCMP(*namep, arg) != 0) {
+ xfree(*namep);
+ if (STRCMP(arg, "NONE") != 0) {
+ *namep = (char_u *)xstrdup(arg);
+ HL_TABLE()[idx].sg_rgb_bg = name_to_color((char_u *)arg);
+ } else {
+ *namep = NULL;
+ HL_TABLE()[idx].sg_rgb_bg = -1;
+ }
}
}
@@ -6861,18 +6869,22 @@ void do_highlight(const char *line, const bool forceit, const bool init)
normal_bg = HL_TABLE()[idx].sg_rgb_bg;
}
} else if (strcmp(key, "GUISP") == 0) {
+ char_u **const namep = &HL_TABLE()[idx].sg_rgb_sp_name;
+
if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI)) {
if (!init) {
HL_TABLE()[idx].sg_set |= SG_GUI;
}
- xfree(HL_TABLE()[idx].sg_rgb_sp_name);
- if (strcmp(arg, "NONE") != 0) {
- HL_TABLE()[idx].sg_rgb_sp_name = (char_u *)xstrdup((char *)arg);
- HL_TABLE()[idx].sg_rgb_sp = name_to_color((const char_u *)arg);
- } else {
- HL_TABLE()[idx].sg_rgb_sp_name = NULL;
- HL_TABLE()[idx].sg_rgb_sp = -1;
+ if (*namep == NULL || STRCMP(*namep, arg) != 0) {
+ xfree(*namep);
+ if (strcmp(arg, "NONE") != 0) {
+ *namep = (char_u *)xstrdup(arg);
+ HL_TABLE()[idx].sg_rgb_sp = name_to_color((char_u *)arg);
+ } else {
+ *namep = NULL;
+ HL_TABLE()[idx].sg_rgb_sp = -1;
+ }
}
}