aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/syntax.c
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-07-06 09:05:59 -0400
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-07-06 09:31:39 -0400
commit6012e4a52c298bf2ced3dbadd8e43dc0f1db79ad (patch)
treee0b03c50cf67205e5cffe69fa4639c912ea6e511 /src/nvim/syntax.c
parent5dc5db1557dd438f205698a31b85a83708e3b48f (diff)
downloadrneovim-6012e4a52c298bf2ced3dbadd8e43dc0f1db79ad.tar.gz
rneovim-6012e4a52c298bf2ced3dbadd8e43dc0f1db79ad.tar.bz2
rneovim-6012e4a52c298bf2ced3dbadd8e43dc0f1db79ad.zip
vim-patch:8.0.1146: redraw when highlight is set with same names
Problem: Redraw when highlight is set with same names. (Ozaki Kiichi) Solution: Only free and save a name when it changed. (closes vim/vim#2120) https://github.com/vim/vim/commit/452030e530aad9b08fcfa71737d098b33c752b85
Diffstat (limited to 'src/nvim/syntax.c')
-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;
+ }
}
}