aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/syntax.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/syntax.c')
-rw-r--r--src/nvim/syntax.c48
1 files changed, 20 insertions, 28 deletions
diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c
index 6787ca8080..3980a4d8e6 100644
--- a/src/nvim/syntax.c
+++ b/src/nvim/syntax.c
@@ -45,6 +45,7 @@
#include "nvim/strings.h"
#include "nvim/syntax_defs.h"
#include "nvim/term.h"
+#include "nvim/ui.h"
#include "nvim/os/os.h"
#include "nvim/os/time.h"
@@ -223,8 +224,6 @@ struct name_list {
#define ATTR_OFF (HL_ALL + 1)
-#define SYN_NAMELEN 50 /* maximum length of a syntax name */
-
static char *(spo_name_tab[SPO_COUNT]) =
{"ms=", "me=", "hs=", "he=", "rs=", "re=", "lc="};
@@ -4900,7 +4899,7 @@ static char_u *get_syn_pattern(char_u *arg, synpat_T *ci)
ci->sp_off_flags |= (1 << idx);
if (idx == SPO_LC_OFF) { /* lc=99 */
end += 3;
- *p = getdigits(&end);
+ *p = getdigits_int(&end);
/* "lc=" offset automatically sets "ms=" offset */
if (!(ci->sp_off_flags & (1 << SPO_MS_OFF))) {
@@ -4911,10 +4910,10 @@ static char_u *get_syn_pattern(char_u *arg, synpat_T *ci)
end += 4;
if (*end == '+') {
++end;
- *p = getdigits(&end); /* positive offset */
+ *p = getdigits_int(&end); /* positive offset */
} else if (*end == '-') {
++end;
- *p = -getdigits(&end); /* negative offset */
+ *p = -getdigits_int(&end); /* negative offset */
}
}
if (*end != ',')
@@ -4980,7 +4979,7 @@ static void syn_cmd_sync(exarg_T *eap, int syncing)
illegal = TRUE;
break;
}
- n = getdigits(&arg_end);
+ n = getdigits_long(&arg_end);
if (!eap->skip) {
if (key[4] == 'B')
curwin->w_s->b_syn_sync_linebreaks = n;
@@ -6036,6 +6035,7 @@ int load_colors(char_u *name)
apply_autocmds(EVENT_COLORSCHEME, name, curbuf->b_fname, FALSE, curbuf);
recursive = FALSE;
+ ui_refresh();
return retval;
}
@@ -6070,8 +6070,6 @@ do_highlight (
int error = FALSE;
int color;
int is_normal_group = FALSE; /* "Normal" group */
-# define is_menu_group 0
-# define is_tooltip_group 0
/*
* If no argument, list current highlighting.
@@ -6407,12 +6405,6 @@ do_highlight (
4+8, 4+8, 2+8, 2+8,
6+8, 6+8, 1+8, 1+8, 5+8,
5+8, 3+8, 3+8, 7+8, -1};
-#if defined(__QNXNTO__)
- static int *color_numbers_8_qansi = color_numbers_8;
- /* On qnx, the 8 & 16 color arrays are the same */
- if (STRNCMP(T_NAME, "qansi", 5) == 0)
- color_numbers_8_qansi = color_numbers_16;
-#endif
/* reduce calls to STRICMP a bit, it can be slow */
off = TOUPPER_ASC(*arg);
@@ -6433,11 +6425,7 @@ do_highlight (
if (color >= 0) {
if (t_colors == 8) {
/* t_Co is 8: use the 8 colors table */
-#if defined(__QNXNTO__)
- color = color_numbers_8_qansi[i];
-#else
color = color_numbers_8[i];
-#endif
if (key[5] == 'F') {
/* set/reset bold attribute to get light foreground
* colors (on some terminals, e.g. "linux") */
@@ -6448,8 +6436,7 @@ do_highlight (
HL_TABLE()[idx].sg_cterm &= ~HL_BOLD;
}
color &= 7; /* truncate to 8 colors */
- } else if (t_colors == 16 || t_colors == 88
- || t_colors == 256) {
+ } else if (t_colors == 16 || t_colors == 88 || t_colors == 256) {
/*
* Guess: if the termcap entry ends in 'm', it is
* probably an xterm-like terminal. Use the changed
@@ -6459,7 +6446,7 @@ do_highlight (
p = T_CAF;
else
p = T_CSF;
- if (*p != NUL && *(p + STRLEN(p) - 1) == 'm')
+ if (abstract_ui || (*p != NUL && *(p + STRLEN(p) - 1) == 'm'))
switch (t_colors) {
case 16:
color = color_numbers_8[i];
@@ -6593,7 +6580,7 @@ do_highlight (
* Copy characters from arg[] to buf[], translating <> codes.
*/
for (p = arg, off = 0; off < 100 - 6 && *p; ) {
- len = trans_special(&p, buf + off, FALSE);
+ len = (int)trans_special(&p, buf + off, FALSE);
if (len > 0) /* recognized special char */
off += len;
else /* copy as normal char */
@@ -6642,6 +6629,10 @@ do_highlight (
if (is_normal_group) {
HL_TABLE()[idx].sg_term_attr = 0;
HL_TABLE()[idx].sg_cterm_attr = 0;
+ if (abstract_ui) {
+ // If the normal group has changed, it is simpler to refresh every UI
+ ui_refresh();
+ }
} else
set_hl_attr(idx);
HL_TABLE()[idx].sg_scriptID = current_SID;
@@ -6654,7 +6645,7 @@ do_highlight (
need_highlight_changed = TRUE;
}
-#if defined(EXITFREE) || defined(PROTO)
+#if defined(EXITFREE)
void free_highlight(void)
{
for (int i = 0; i < highlight_ga.ga_len; ++i) {
@@ -6870,7 +6861,7 @@ int hl_combine_attr(int char_attr, int prim_attr)
if (char_attr <= HL_ALL && prim_attr <= HL_ALL)
return char_attr | prim_attr;
- if (t_colors > 1) {
+ if (abstract_ui || t_colors > 1) {
if (char_attr > HL_ALL)
char_aep = syn_cterm_attr2entry(char_attr);
if (char_aep != NULL)
@@ -6934,7 +6925,7 @@ int syn_attr2attr(int attr)
{
attrentry_T *aep;
- if (t_colors > 1)
+ if (abstract_ui || t_colors > 1)
aep = syn_cterm_attr2entry(attr);
else
aep = syn_term_attr2entry(attr);
@@ -7204,9 +7195,10 @@ set_hl_attr (
* For the color term mode: If there are other than "normal"
* highlighting attributes, need to allocate an attr number.
*/
- if (sgp->sg_cterm_fg == 0 && sgp->sg_cterm_bg == 0)
+ if (sgp->sg_cterm_fg == 0 && sgp->sg_cterm_bg == 0
+ && sgp->sg_rgb_fg == -1 && sgp->sg_rgb_bg == -1) {
sgp->sg_cterm_attr = sgp->sg_cterm;
- else {
+ } else {
at_en.ae_attr = abstract_ui ? sgp->sg_gui : sgp->sg_cterm;
at_en.ae_u.cterm.fg_color = sgp->sg_cterm_fg;
at_en.ae_u.cterm.bg_color = sgp->sg_cterm_bg;
@@ -7361,7 +7353,7 @@ int syn_id2attr(int hl_id)
hl_id = syn_get_final_id(hl_id);
sgp = &HL_TABLE()[hl_id - 1]; /* index is ID minus one */
- if (t_colors > 1)
+ if (abstract_ui || t_colors > 1)
attr = sgp->sg_cterm_attr;
else
attr = sgp->sg_term_attr;