annotate src/highlight.c @ 26057:92c424550367 v8.2.3562

patch 8.2.3562: cannot add color names Commit: https://github.com/vim/vim/commit/e30d10253fa634c4f60daa798d029245f4eed393 Author: Drew Vogel <dvogel@github> Date: Sun Oct 24 20:35:07 2021 +0100 patch 8.2.3562: cannot add color names Problem: Cannot add color names. Solution: Add the v:colornames dictionary. (Drew Vogel, closes https://github.com/vim/vim/issues/8761)
author Bram Moolenaar <Bram@vim.org>
date Sun, 24 Oct 2021 21:45:04 +0200
parents 09a273f0af05
children c7e09c069ece
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2 *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4 *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
8 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
9
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
10 /*
17472
dfd87ef822aa patch 8.1.1734: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17401
diff changeset
11 * Highlighting stuff.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
12 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
13
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
14 #include "vim.h"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
15
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
16 #define SG_TERM 1 // term has been set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
17 #define SG_CTERM 2 // cterm has been set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
18 #define SG_GUI 4 // gui has been set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
19 #define SG_LINK 8 // link has been set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
20
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
21 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
22 * The "term", "cterm" and "gui" arguments can be any combination of the
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
23 * following names, separated by commas (but no spaces!).
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
24 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
25 static char *(hl_name_table[]) =
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
26 {"bold", "standout", "underline", "undercurl",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
27 "italic", "reverse", "inverse", "nocombine", "strikethrough", "NONE"};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
28 static int hl_attr_table[] =
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
29 {HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_UNDERCURL, HL_ITALIC, HL_INVERSE, HL_INVERSE, HL_NOCOMBINE, HL_STRIKETHROUGH, 0};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
30 #define ATTR_COMBINE(attr_a, attr_b) ((((attr_b) & HL_NOCOMBINE) ? attr_b : (attr_a)) | (attr_b))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
31
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
32 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
33 * Structure that stores information about a highlight group.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
34 * The ID of a highlight group is also called group ID. It is the index in
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
35 * the highlight_ga array PLUS ONE.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
36 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
37 typedef struct
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
38 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
39 char_u *sg_name; // highlight group name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
40 char_u *sg_name_u; // uppercase of sg_name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
41 int sg_cleared; // "hi clear" was used
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
42 // for normal terminals
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
43 int sg_term; // "term=" highlighting attributes
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
44 char_u *sg_start; // terminal string for start highl
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
45 char_u *sg_stop; // terminal string for stop highl
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
46 int sg_term_attr; // Screen attr for term mode
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
47 // for color terminals
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
48 int sg_cterm; // "cterm=" highlighting attr
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
49 int sg_cterm_bold; // bold attr was set for light color
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
50 int sg_cterm_fg; // terminal fg color number + 1
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
51 int sg_cterm_bg; // terminal bg color number + 1
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
52 int sg_cterm_ul; // terminal ul color number + 1
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
53 int sg_cterm_attr; // Screen attr for color term mode
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
54 // for when using the GUI
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
55 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
56 guicolor_T sg_gui_fg; // GUI foreground color handle
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
57 guicolor_T sg_gui_bg; // GUI background color handle
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
58 guicolor_T sg_gui_sp; // GUI special color handle
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
59 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
60 #ifdef FEAT_GUI
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
61 GuiFont sg_font; // GUI font handle
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
62 #ifdef FEAT_XFONTSET
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
63 GuiFontset sg_fontset; // GUI fontset handle
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
64 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
65 char_u *sg_font_name; // GUI font or fontset name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
66 int sg_gui_attr; // Screen attr for GUI mode
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
67 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
68 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
69 // Store the sp color name for the GUI or synIDattr()
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
70 int sg_gui; // "gui=" highlighting attributes
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
71 char_u *sg_gui_fg_name;// GUI foreground color name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
72 char_u *sg_gui_bg_name;// GUI background color name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
73 char_u *sg_gui_sp_name;// GUI special color name
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
74 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
75 int sg_link; // link to this highlight group ID
22308
19e0784ef769 patch 8.2.1703: ":highlight clear" does not restore default link
Bram Moolenaar <Bram@vim.org>
parents: 22288
diff changeset
76 int sg_deflink; // default link; restored in highlight_clear()
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
77 int sg_set; // combination of SG_* flags
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
78 #ifdef FEAT_EVAL
22312
e06ba60fbbd8 patch 8.2.1705: "verbose hi Name" reports incorrect info after ":hi clear"
Bram Moolenaar <Bram@vim.org>
parents: 22308
diff changeset
79 sctx_T sg_deflink_sctx; // script where the default link was set
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
80 sctx_T sg_script_ctx; // script in which the group was last set
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
81 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
82 } hl_group_T;
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
83
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
84 // highlight groups for 'highlight' option
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
85 static garray_T highlight_ga;
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
86 #define HL_TABLE() ((hl_group_T *)((highlight_ga.ga_data)))
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
87
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
88 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
89 * An attribute number is the index in attr_table plus ATTR_OFF.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
90 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
91 #define ATTR_OFF (HL_ALL + 1)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
92
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
93 static void syn_unadd_group(void);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
94 static void set_hl_attr(int idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
95 static void highlight_list_one(int id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
96 static int highlight_list_arg(int id, int didh, int type, int iarg, char_u *sarg, char *name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
97 static int syn_add_group(char_u *name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
98 static int hl_has_settings(int idx, int check_link);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
99 static void highlight_clear(int idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
100
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
101 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
102 static void gui_do_one_color(int idx, int do_menu, int do_tooltip);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
103 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
104 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
105 static int set_group_colors(char_u *name, guicolor_T *fgp, guicolor_T *bgp, int do_menu, int use_norm, int do_tooltip);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
106 static void hl_do_font(int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip, int free_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
107 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
108
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
109 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
110 * The default highlight groups. These are compiled-in for fast startup and
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
111 * they still work when the runtime files can't be found.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
112 * When making changes here, also change runtime/colors/default.vim!
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
113 * The #ifdefs are needed to reduce the amount of static data. Helps to make
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
114 * the 16 bit DOS (museum) version compile.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
115 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
116 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
117 # define CENT(a, b) b
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
118 #else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
119 # define CENT(a, b) a
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
120 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
121 static char *(highlight_init_both[]) = {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
122 CENT("ErrorMsg term=standout ctermbg=DarkRed ctermfg=White",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
123 "ErrorMsg term=standout ctermbg=DarkRed ctermfg=White guibg=Red guifg=White"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
124 CENT("IncSearch term=reverse cterm=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
125 "IncSearch term=reverse cterm=reverse gui=reverse"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
126 CENT("ModeMsg term=bold cterm=bold",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
127 "ModeMsg term=bold cterm=bold gui=bold"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
128 CENT("NonText term=bold ctermfg=Blue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
129 "NonText term=bold ctermfg=Blue gui=bold guifg=Blue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
130 CENT("StatusLine term=reverse,bold cterm=reverse,bold",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
131 "StatusLine term=reverse,bold cterm=reverse,bold gui=reverse,bold"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
132 CENT("StatusLineNC term=reverse cterm=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
133 "StatusLineNC term=reverse cterm=reverse gui=reverse"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
134 "default link EndOfBuffer NonText",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
135 CENT("VertSplit term=reverse cterm=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
136 "VertSplit term=reverse cterm=reverse gui=reverse"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
137 #ifdef FEAT_CLIPBOARD
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
138 CENT("VisualNOS term=underline,bold cterm=underline,bold",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
139 "VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
140 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
141 #ifdef FEAT_DIFF
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
142 CENT("DiffText term=reverse cterm=bold ctermbg=Red",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
143 "DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
144 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
145 CENT("PmenuSbar ctermbg=Grey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
146 "PmenuSbar ctermbg=Grey guibg=Grey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
147 CENT("TabLineSel term=bold cterm=bold",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
148 "TabLineSel term=bold cterm=bold gui=bold"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
149 CENT("TabLineFill term=reverse cterm=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
150 "TabLineFill term=reverse cterm=reverse gui=reverse"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
151 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
152 "Cursor guibg=fg guifg=bg",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
153 "lCursor guibg=fg guifg=bg", // should be different, but what?
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
154 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
155 "default link QuickFixLine Search",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
156 CENT("Normal cterm=NONE", "Normal gui=NONE"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
157 NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
158 };
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
159
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
160 // Default colors only used with a light background.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
161 static char *(highlight_init_light[]) = {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
162 CENT("Directory term=bold ctermfg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
163 "Directory term=bold ctermfg=DarkBlue guifg=Blue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
164 CENT("LineNr term=underline ctermfg=Brown",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
165 "LineNr term=underline ctermfg=Brown guifg=Brown"),
18068
1101eacc1444 patch 8.1.2029: cannot control 'cursorline' highlighting well
Bram Moolenaar <Bram@vim.org>
parents: 17809
diff changeset
166 CENT("CursorLineNr term=bold cterm=underline ctermfg=Brown",
1101eacc1444 patch 8.1.2029: cannot control 'cursorline' highlighting well
Bram Moolenaar <Bram@vim.org>
parents: 17809
diff changeset
167 "CursorLineNr term=bold cterm=underline ctermfg=Brown gui=bold guifg=Brown"),
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
168 CENT("MoreMsg term=bold ctermfg=DarkGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
169 "MoreMsg term=bold ctermfg=DarkGreen gui=bold guifg=SeaGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
170 CENT("Question term=standout ctermfg=DarkGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
171 "Question term=standout ctermfg=DarkGreen gui=bold guifg=SeaGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
172 CENT("Search term=reverse ctermbg=Yellow ctermfg=NONE",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
173 "Search term=reverse ctermbg=Yellow ctermfg=NONE guibg=Yellow guifg=NONE"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
174 #ifdef FEAT_SPELL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
175 CENT("SpellBad term=reverse ctermbg=LightRed",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
176 "SpellBad term=reverse ctermbg=LightRed guisp=Red gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
177 CENT("SpellCap term=reverse ctermbg=LightBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
178 "SpellCap term=reverse ctermbg=LightBlue guisp=Blue gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
179 CENT("SpellRare term=reverse ctermbg=LightMagenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
180 "SpellRare term=reverse ctermbg=LightMagenta guisp=Magenta gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
181 CENT("SpellLocal term=underline ctermbg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
182 "SpellLocal term=underline ctermbg=Cyan guisp=DarkCyan gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
183 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
184 CENT("PmenuThumb ctermbg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
185 "PmenuThumb ctermbg=Black guibg=Black"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
186 CENT("Pmenu ctermbg=LightMagenta ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
187 "Pmenu ctermbg=LightMagenta ctermfg=Black guibg=LightMagenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
188 CENT("PmenuSel ctermbg=LightGrey ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
189 "PmenuSel ctermbg=LightGrey ctermfg=Black guibg=Grey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
190 CENT("SpecialKey term=bold ctermfg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
191 "SpecialKey term=bold ctermfg=DarkBlue guifg=Blue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
192 CENT("Title term=bold ctermfg=DarkMagenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
193 "Title term=bold ctermfg=DarkMagenta gui=bold guifg=Magenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
194 CENT("WarningMsg term=standout ctermfg=DarkRed",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
195 "WarningMsg term=standout ctermfg=DarkRed guifg=Red"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
196 #ifdef FEAT_WILDMENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
197 CENT("WildMenu term=standout ctermbg=Yellow ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
198 "WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
199 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
200 #ifdef FEAT_FOLDING
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
201 CENT("Folded term=standout ctermbg=Grey ctermfg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
202 "Folded term=standout ctermbg=Grey ctermfg=DarkBlue guibg=LightGrey guifg=DarkBlue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
203 CENT("FoldColumn term=standout ctermbg=Grey ctermfg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
204 "FoldColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
205 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
206 #ifdef FEAT_SIGNS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
207 CENT("SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
208 "SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
209 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
210 CENT("Visual term=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
211 "Visual term=reverse guibg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
212 #ifdef FEAT_DIFF
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
213 CENT("DiffAdd term=bold ctermbg=LightBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
214 "DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
215 CENT("DiffChange term=bold ctermbg=LightMagenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
216 "DiffChange term=bold ctermbg=LightMagenta guibg=LightMagenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
217 CENT("DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
218 "DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan gui=bold guifg=Blue guibg=LightCyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
219 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
220 CENT("TabLine term=underline cterm=underline ctermfg=black ctermbg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
221 "TabLine term=underline cterm=underline ctermfg=black ctermbg=LightGrey gui=underline guibg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
222 #ifdef FEAT_SYN_HL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
223 CENT("CursorColumn term=reverse ctermbg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
224 "CursorColumn term=reverse ctermbg=LightGrey guibg=Grey90"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
225 CENT("CursorLine term=underline cterm=underline",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
226 "CursorLine term=underline cterm=underline guibg=Grey90"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
227 CENT("ColorColumn term=reverse ctermbg=LightRed",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
228 "ColorColumn term=reverse ctermbg=LightRed guibg=LightRed"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
229 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
230 #ifdef FEAT_CONCEAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
231 CENT("Conceal ctermbg=DarkGrey ctermfg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
232 "Conceal ctermbg=DarkGrey ctermfg=LightGrey guibg=DarkGrey guifg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
233 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
234 CENT("MatchParen term=reverse ctermbg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
235 "MatchParen term=reverse ctermbg=Cyan guibg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
236 #ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
237 CENT("StatusLineTerm term=reverse,bold cterm=bold ctermfg=White ctermbg=DarkGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
238 "StatusLineTerm term=reverse,bold cterm=bold ctermfg=White ctermbg=DarkGreen gui=bold guifg=bg guibg=DarkGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
239 CENT("StatusLineTermNC term=reverse ctermfg=White ctermbg=DarkGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
240 "StatusLineTermNC term=reverse ctermfg=White ctermbg=DarkGreen guifg=bg guibg=DarkGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
241 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
242 #ifdef FEAT_MENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
243 CENT("ToolbarLine term=underline ctermbg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
244 "ToolbarLine term=underline ctermbg=LightGrey guibg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
245 CENT("ToolbarButton cterm=bold ctermfg=White ctermbg=DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
246 "ToolbarButton cterm=bold ctermfg=White ctermbg=DarkGrey gui=bold guifg=White guibg=Grey40"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
247 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
248 NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
249 };
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
250
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
251 // Default colors only used with a dark background.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
252 static char *(highlight_init_dark[]) = {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
253 CENT("Directory term=bold ctermfg=LightCyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
254 "Directory term=bold ctermfg=LightCyan guifg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
255 CENT("LineNr term=underline ctermfg=Yellow",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
256 "LineNr term=underline ctermfg=Yellow guifg=Yellow"),
18068
1101eacc1444 patch 8.1.2029: cannot control 'cursorline' highlighting well
Bram Moolenaar <Bram@vim.org>
parents: 17809
diff changeset
257 CENT("CursorLineNr term=bold cterm=underline ctermfg=Yellow",
1101eacc1444 patch 8.1.2029: cannot control 'cursorline' highlighting well
Bram Moolenaar <Bram@vim.org>
parents: 17809
diff changeset
258 "CursorLineNr term=bold cterm=underline ctermfg=Yellow gui=bold guifg=Yellow"),
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
259 CENT("MoreMsg term=bold ctermfg=LightGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
260 "MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
261 CENT("Question term=standout ctermfg=LightGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
262 "Question term=standout ctermfg=LightGreen gui=bold guifg=Green"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
263 CENT("Search term=reverse ctermbg=Yellow ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
264 "Search term=reverse ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
265 CENT("SpecialKey term=bold ctermfg=LightBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
266 "SpecialKey term=bold ctermfg=LightBlue guifg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
267 #ifdef FEAT_SPELL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
268 CENT("SpellBad term=reverse ctermbg=Red",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
269 "SpellBad term=reverse ctermbg=Red guisp=Red gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
270 CENT("SpellCap term=reverse ctermbg=Blue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
271 "SpellCap term=reverse ctermbg=Blue guisp=Blue gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
272 CENT("SpellRare term=reverse ctermbg=Magenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
273 "SpellRare term=reverse ctermbg=Magenta guisp=Magenta gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
274 CENT("SpellLocal term=underline ctermbg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
275 "SpellLocal term=underline ctermbg=Cyan guisp=Cyan gui=undercurl"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
276 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
277 CENT("PmenuThumb ctermbg=White",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
278 "PmenuThumb ctermbg=White guibg=White"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
279 CENT("Pmenu ctermbg=Magenta ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
280 "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
281 CENT("PmenuSel ctermbg=Black ctermfg=DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
282 "PmenuSel ctermbg=Black ctermfg=DarkGrey guibg=DarkGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
283 CENT("Title term=bold ctermfg=LightMagenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
284 "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
285 CENT("WarningMsg term=standout ctermfg=LightRed",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
286 "WarningMsg term=standout ctermfg=LightRed guifg=Red"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
287 #ifdef FEAT_WILDMENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
288 CENT("WildMenu term=standout ctermbg=Yellow ctermfg=Black",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
289 "WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
290 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
291 #ifdef FEAT_FOLDING
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
292 CENT("Folded term=standout ctermbg=DarkGrey ctermfg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
293 "Folded term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=DarkGrey guifg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
294 CENT("FoldColumn term=standout ctermbg=DarkGrey ctermfg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
295 "FoldColumn term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=Grey guifg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
296 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
297 #ifdef FEAT_SIGNS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
298 CENT("SignColumn term=standout ctermbg=DarkGrey ctermfg=Cyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
299 "SignColumn term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=Grey guifg=Cyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
300 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
301 CENT("Visual term=reverse",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
302 "Visual term=reverse guibg=DarkGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
303 #ifdef FEAT_DIFF
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
304 CENT("DiffAdd term=bold ctermbg=DarkBlue",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
305 "DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
306 CENT("DiffChange term=bold ctermbg=DarkMagenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
307 "DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
308 CENT("DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
309 "DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan gui=bold guifg=Blue guibg=DarkCyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
310 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
311 CENT("TabLine term=underline cterm=underline ctermfg=white ctermbg=DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
312 "TabLine term=underline cterm=underline ctermfg=white ctermbg=DarkGrey gui=underline guibg=DarkGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
313 #ifdef FEAT_SYN_HL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
314 CENT("CursorColumn term=reverse ctermbg=DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
315 "CursorColumn term=reverse ctermbg=DarkGrey guibg=Grey40"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
316 CENT("CursorLine term=underline cterm=underline",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
317 "CursorLine term=underline cterm=underline guibg=Grey40"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
318 CENT("ColorColumn term=reverse ctermbg=DarkRed",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
319 "ColorColumn term=reverse ctermbg=DarkRed guibg=DarkRed"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
320 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
321 CENT("MatchParen term=reverse ctermbg=DarkCyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
322 "MatchParen term=reverse ctermbg=DarkCyan guibg=DarkCyan"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
323 #ifdef FEAT_CONCEAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
324 CENT("Conceal ctermbg=DarkGrey ctermfg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
325 "Conceal ctermbg=DarkGrey ctermfg=LightGrey guibg=DarkGrey guifg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
326 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
327 #ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
328 CENT("StatusLineTerm term=reverse,bold cterm=bold ctermfg=Black ctermbg=LightGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
329 "StatusLineTerm term=reverse,bold cterm=bold ctermfg=Black ctermbg=LightGreen gui=bold guifg=bg guibg=LightGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
330 CENT("StatusLineTermNC term=reverse ctermfg=Black ctermbg=LightGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
331 "StatusLineTermNC term=reverse ctermfg=Black ctermbg=LightGreen guifg=bg guibg=LightGreen"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
332 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
333 #ifdef FEAT_MENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
334 CENT("ToolbarLine term=underline ctermbg=DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
335 "ToolbarLine term=underline ctermbg=DarkGrey guibg=Grey50"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
336 CENT("ToolbarButton cterm=bold ctermfg=Black ctermbg=LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
337 "ToolbarButton cterm=bold ctermfg=Black ctermbg=LightGrey gui=bold guifg=Black guibg=LightGrey"),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
338 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
339 NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
340 };
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
341
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
342 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
343 * Returns the number of highlight groups.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
344 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
345 int
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
346 highlight_num_groups(void)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
347 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
348 return highlight_ga.ga_len;
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
349 }
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
350
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
351 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
352 * Returns the name of a highlight group.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
353 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
354 char_u *
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
355 highlight_group_name(int id)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
356 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
357 return HL_TABLE()[id].sg_name;
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
358 }
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
359
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
360 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
361 * Returns the ID of the link to a highlight group.
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
362 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
363 int
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
364 highlight_link_id(int id)
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
365 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
366 return HL_TABLE()[id].sg_link;
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
367 }
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
368
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
369 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
370 init_highlight(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
371 int both, // include groups where 'bg' doesn't matter
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
372 int reset) // clear group first
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
373 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
374 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
375 char **pp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
376 static int had_both = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
377 #ifdef FEAT_EVAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
378 char_u *p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
379
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
380 // Try finding the color scheme file. Used when a color file was loaded
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
381 // and 'background' or 't_Co' is changed.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
382 p = get_var_value((char_u *)"g:colors_name");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
383 if (p != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
384 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
385 // The value of g:colors_name could be freed when sourcing the script,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
386 // making "p" invalid, so copy it.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
387 char_u *copy_p = vim_strsave(p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
388 int r;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
390 if (copy_p != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
391 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
392 r = load_colors(copy_p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
393 vim_free(copy_p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
394 if (r == OK)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
395 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
396 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
397 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
398
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
399 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
400
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
401 // Didn't use a color file, use the compiled-in colors.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
402 if (both)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
403 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
404 had_both = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
405 pp = highlight_init_both;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
406 for (i = 0; pp[i] != NULL; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
407 do_highlight((char_u *)pp[i], reset, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
408 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
409 else if (!had_both)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
410 // Don't do anything before the call with both == TRUE from main().
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
411 // Not everything has been setup then, and that call will overrule
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
412 // everything anyway.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
413 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
414
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
415 if (*p_bg == 'l')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
416 pp = highlight_init_light;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
417 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
418 pp = highlight_init_dark;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
419 for (i = 0; pp[i] != NULL; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
420 do_highlight((char_u *)pp[i], reset, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
421
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
422 // Reverse looks ugly, but grey may not work for 8 colors. Thus let it
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
423 // depend on the number of colors available.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
424 // With 8 colors brown is equal to yellow, need to use black for Search fg
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
425 // to avoid Statement highlighted text disappears.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
426 // Clear the attributes, needed when changing the t_Co value.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
427 if (t_colors > 8)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
428 do_highlight((char_u *)(*p_bg == 'l'
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
429 ? "Visual cterm=NONE ctermbg=LightGrey"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
430 : "Visual cterm=NONE ctermbg=DarkGrey"), FALSE, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
431 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
432 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
433 do_highlight((char_u *)"Visual cterm=reverse ctermbg=NONE",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
434 FALSE, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
435 if (*p_bg == 'l')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
436 do_highlight((char_u *)"Search ctermfg=black", FALSE, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
437 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
438
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
439 #ifdef FEAT_SYN_HL
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
440 // If syntax highlighting is enabled load the highlighting for it.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
441 if (get_var_value((char_u *)"g:syntax_on") != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
442 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
443 static int recursive = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
444
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
445 if (recursive >= 5)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
446 emsg(_("E679: recursive loop loading syncolor.vim"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
447 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
448 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
449 ++recursive;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
450 (void)source_runtime((char_u *)"syntax/syncolor.vim", DIP_ALL);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
451 --recursive;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
452 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
453 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
454 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
455 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
456
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
457 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
458 * Load color file "name".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
459 * Return OK for success, FAIL for failure.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
460 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
461 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
462 load_colors(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
463 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
464 char_u *buf;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
465 int retval = FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
466 static int recursive = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
467
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
468 // When being called recursively, this is probably because setting
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
469 // 'background' caused the highlighting to be reloaded. This means it is
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
470 // working, thus we should return OK.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
471 if (recursive)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
472 return OK;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
473
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
474 recursive = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
475 buf = alloc(STRLEN(name) + 12);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
476 if (buf != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
477 {
26057
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
478 #ifdef FEAT_EVAL
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
479 load_default_colors_lists();
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
480 #endif
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
481 apply_autocmds(EVENT_COLORSCHEMEPRE, name,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
482 curbuf->b_fname, FALSE, curbuf);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
483 sprintf((char *)buf, "colors/%s.vim", name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
484 retval = source_runtime(buf, DIP_START + DIP_OPT);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
485 vim_free(buf);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
486 apply_autocmds(EVENT_COLORSCHEME, name, curbuf->b_fname, FALSE, curbuf);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
487 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
488 recursive = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
489
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
490 return retval;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
491 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
492
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
493 static char *(color_names[28]) = {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
494 "Black", "DarkBlue", "DarkGreen", "DarkCyan",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
495 "DarkRed", "DarkMagenta", "Brown", "DarkYellow",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
496 "Gray", "Grey", "LightGray", "LightGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
497 "DarkGray", "DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
498 "Blue", "LightBlue", "Green", "LightGreen",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
499 "Cyan", "LightCyan", "Red", "LightRed", "Magenta",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
500 "LightMagenta", "Yellow", "LightYellow", "White", "NONE"};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
501 // indices:
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
502 // 0, 1, 2, 3,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
503 // 4, 5, 6, 7,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
504 // 8, 9, 10, 11,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
505 // 12, 13,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
506 // 14, 15, 16, 17,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
507 // 18, 19, 20, 21, 22,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
508 // 23, 24, 25, 26, 27
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
509 static int color_numbers_16[28] = {0, 1, 2, 3,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
510 4, 5, 6, 6,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
511 7, 7, 7, 7,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
512 8, 8,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
513 9, 9, 10, 10,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
514 11, 11, 12, 12, 13,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
515 13, 14, 14, 15, -1};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
516 // for xterm with 88 colors...
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
517 static int color_numbers_88[28] = {0, 4, 2, 6,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
518 1, 5, 32, 72,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
519 84, 84, 7, 7,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
520 82, 82,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
521 12, 43, 10, 61,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
522 14, 63, 9, 74, 13,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
523 75, 11, 78, 15, -1};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
524 // for xterm with 256 colors...
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
525 static int color_numbers_256[28] = {0, 4, 2, 6,
20160
1acf700beb9c patch 8.2.0635: when using 256 colors DarkYellow does not show expected color
Bram Moolenaar <Bram@vim.org>
parents: 20116
diff changeset
526 1, 5, 130, 3,
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
527 248, 248, 7, 7,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
528 242, 242,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
529 12, 81, 10, 121,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
530 14, 159, 9, 224, 13,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
531 225, 11, 229, 15, -1};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
532 // for terminals with less than 16 colors...
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
533 static int color_numbers_8[28] = {0, 4, 2, 6,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
534 1, 5, 3, 3,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
535 7, 7, 7, 7,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
536 0+8, 0+8,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
537 4+8, 4+8, 2+8, 2+8,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
538 6+8, 6+8, 1+8, 1+8, 5+8,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
539 5+8, 3+8, 3+8, 7+8, -1};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
540
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
541 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
542 * Lookup the "cterm" value to be used for color with index "idx" in
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
543 * color_names[].
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
544 * "boldp" will be set to TRUE or FALSE for a foreground color when using 8
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
545 * colors, otherwise it will be unchanged.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
546 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
547 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
548 lookup_color(int idx, int foreground, int *boldp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
549 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
550 int color = color_numbers_16[idx];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
551 char_u *p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
552
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
553 // Use the _16 table to check if it's a valid color name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
554 if (color < 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
555 return -1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
556
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
557 if (t_colors == 8)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
558 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
559 // t_Co is 8: use the 8 colors table
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
560 #if defined(__QNXNTO__)
18806
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
561 // On qnx, the 8 & 16 color arrays are the same
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
562 if (STRNCMP(T_NAME, "qansi", 5) == 0)
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
563 color = color_numbers_16[idx];
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
564 else
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
565 #endif
18806
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
566 color = color_numbers_8[idx];
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
567 if (foreground)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
568 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
569 // set/reset bold attribute to get light foreground
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
570 // colors (on some terminals, e.g. "linux")
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
571 if (color & 8)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
572 *boldp = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
573 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
574 *boldp = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
575 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
576 color &= 7; // truncate to 8 colors
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
577 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
578 else if (t_colors == 16 || t_colors == 88
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
579 || t_colors >= 256)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
580 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
581 // Guess: if the termcap entry ends in 'm', it is
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
582 // probably an xterm-like terminal. Use the changed
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
583 // order for colors.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
584 if (*T_CAF != NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
585 p = T_CAF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
586 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
587 p = T_CSF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
588 if (*p != NUL && (t_colors > 256
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
589 || *(p + STRLEN(p) - 1) == 'm'))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
590 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
591 if (t_colors == 88)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
592 color = color_numbers_88[idx];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
593 else if (t_colors >= 256)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
594 color = color_numbers_256[idx];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
595 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
596 color = color_numbers_8[idx];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
597 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
598 #ifdef FEAT_TERMRESPONSE
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
599 if (t_colors >= 256 && color == 15 && is_mac_terminal)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
600 // Terminal.app has a bug: 15 is light grey. Use white
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
601 // from the color cube instead.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
602 color = 231;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
603 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
604 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
605 return color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
606 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
607
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
608 /*
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
609 * Link highlight group 'from_hg' to 'to_hg'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
610 * 'dodefault' is set to TRUE for ":highlight default link".
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
611 * 'forceit' is set to TRUE for ":higlight! link"
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
612 * 'init' is set to TRUE when initializing all the highlight groups.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
613 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
614 static void
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
615 highlight_group_link(
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
616 char_u *from_hg,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
617 int from_len,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
618 char_u *to_hg,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
619 int to_len,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
620 int dodefault,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
621 int forceit,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
622 int init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
623 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
624 int from_id;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
625 int to_id;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
626 hl_group_T *hlgroup = NULL;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
627
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
628 from_id = syn_check_group(from_hg, from_len);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
629 if (STRNCMP(to_hg, "NONE", 4) == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
630 to_id = 0;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
631 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
632 to_id = syn_check_group(to_hg, to_len);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
633
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
634 if (from_id > 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
635 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
636 hlgroup = &HL_TABLE()[from_id - 1];
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
637 if (dodefault && (forceit || hlgroup->sg_deflink == 0))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
638 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
639 hlgroup->sg_deflink = to_id;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
640 #ifdef FEAT_EVAL
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
641 hlgroup->sg_deflink_sctx = current_sctx;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
642 hlgroup->sg_deflink_sctx.sc_lnum += SOURCING_LNUM;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
643 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
644 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
645 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
646
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
647 if (from_id > 0 && (!init || hlgroup->sg_set == 0))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
648 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
649 // Don't allow a link when there already is some highlighting
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
650 // for the group, unless '!' is used
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
651 if (to_id > 0 && !forceit && !init
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
652 && hl_has_settings(from_id - 1, dodefault))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
653 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
654 if (SOURCING_NAME == NULL && !dodefault)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
655 emsg(_("E414: group has settings, highlight link ignored"));
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
656 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
657 else if (hlgroup->sg_link != to_id
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
658 #ifdef FEAT_EVAL
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
659 || hlgroup->sg_script_ctx.sc_sid != current_sctx.sc_sid
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
660 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
661 || hlgroup->sg_cleared)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
662 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
663 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
664 hlgroup->sg_set |= SG_LINK;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
665 hlgroup->sg_link = to_id;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
666 #ifdef FEAT_EVAL
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
667 hlgroup->sg_script_ctx = current_sctx;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
668 hlgroup->sg_script_ctx.sc_lnum += SOURCING_LNUM;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
669 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
670 hlgroup->sg_cleared = FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
671 redraw_all_later(SOME_VALID);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
672
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
673 // Only call highlight_changed() once after multiple changes.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
674 need_highlight_changed = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
675 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
676 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
677
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
678 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
679
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
680 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
681 * Reset all highlighting to the defaults. Removes all highlighting for the
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
682 * groups added by the user.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
683 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
684 static void
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
685 highlight_reset_all(void)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
686 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
687 int idx;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
688
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
689 #ifdef FEAT_GUI
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
690 // First, we do not destroy the old values, but allocate the new
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
691 // ones and update the display. THEN we destroy the old values.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
692 // If we destroy the old values first, then the old values
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
693 // (such as GuiFont's or GuiFontset's) will still be displayed but
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
694 // invalid because they were free'd.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
695 if (gui.in_use)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
696 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
697 # ifdef FEAT_BEVAL_TIP
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
698 gui_init_tooltip_font();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
699 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
700 # if defined(FEAT_MENU) && (defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_MOTIF))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
701 gui_init_menu_font();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
702 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
703 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
704 # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_X11)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
705 gui_mch_def_colors();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
706 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
707 # ifdef FEAT_GUI_X11
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
708 # ifdef FEAT_MENU
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
709
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
710 // This only needs to be done when there is no Menu highlight
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
711 // group defined by default, which IS currently the case.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
712 gui_mch_new_menu_colors();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
713 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
714 if (gui.in_use)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
715 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
716 gui_new_scrollbar_colors();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
717 # ifdef FEAT_BEVAL_GUI
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
718 gui_mch_new_tooltip_colors();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
719 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
720 # ifdef FEAT_MENU
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
721 gui_mch_new_menu_font();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
722 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
723 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
724 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
725
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
726 // Ok, we're done allocating the new default graphics items.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
727 // The screen should already be refreshed at this point.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
728 // It is now Ok to clear out the old data.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
729 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
730 #ifdef FEAT_EVAL
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
731 do_unlet((char_u *)"g:colors_name", TRUE);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
732 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
733 restore_cterm_colors();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
734
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
735 // Clear all default highlight groups and load the defaults.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
736 for (idx = 0; idx < highlight_ga.ga_len; ++idx)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
737 highlight_clear(idx);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
738 init_highlight(TRUE, TRUE);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
739 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
740 if (USE_24BIT)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
741 highlight_gui_started();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
742 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
743 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
744 highlight_changed();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
745 redraw_later_clear();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
746 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
747
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
748 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
749 * Set the 'term' or 'cterm' or 'gui' attributes for the highlight group at
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
750 * index 'idx'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
751 * 'key' is one of 'TERM' or 'CTERM' or 'GUI'
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
752 * 'arg' is the list of attribute names separated by comma.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
753 * 'init' is set to TRUE when initializing all the highlight groups.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
754 * Returns TRUE if the attributes are set.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
755 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
756 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
757 highlight_set_termgui_attr(int idx, char_u *key, char_u *arg, int init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
758 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
759 int attr;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
760 int off;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
761 long i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
762 int len;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
763
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
764 attr = 0;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
765 off = 0;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
766 while (arg[off] != NUL)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
767 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
768 for (i = ARRAY_LENGTH(hl_attr_table); --i >= 0; )
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
769 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
770 len = (int)STRLEN(hl_name_table[i]);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
771 if (STRNICMP(arg + off, hl_name_table[i], len) == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
772 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
773 attr |= hl_attr_table[i];
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
774 off += len;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
775 break;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
776 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
777 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
778 if (i < 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
779 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
780 semsg(_("E418: Illegal value: %s"), arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
781 return FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
782 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
783 if (arg[off] == ',') // another one follows
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
784 ++off;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
785 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
786 if (*key == 'T')
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
787 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
788 if (!init || !(HL_TABLE()[idx].sg_set & SG_TERM))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
789 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
790 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
791 HL_TABLE()[idx].sg_set |= SG_TERM;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
792 HL_TABLE()[idx].sg_term = attr;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
793 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
794 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
795 else if (*key == 'C')
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
796 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
797 if (!init || !(HL_TABLE()[idx].sg_set & SG_CTERM))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
798 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
799 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
800 HL_TABLE()[idx].sg_set |= SG_CTERM;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
801 HL_TABLE()[idx].sg_cterm = attr;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
802 HL_TABLE()[idx].sg_cterm_bold = FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
803 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
804 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
805 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
806 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
807 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
808 if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
809 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
810 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
811 HL_TABLE()[idx].sg_set |= SG_GUI;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
812 HL_TABLE()[idx].sg_gui = attr;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
813 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
814 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
815 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
816
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
817 return TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
818 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
819
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
820 #ifdef FEAT_GUI
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
821 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
822 * Set the font for the highlight group at 'idx'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
823 * 'arg' is the font name.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
824 * Returns TRUE if the font is changed.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
825 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
826 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
827 highlight_set_font(
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
828 int idx,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
829 char_u *arg,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
830 int is_normal_group,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
831 int is_menu_group,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
832 int is_tooltip_group)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
833 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
834 int did_change = FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
835
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
836 // in non-GUI fonts are simply ignored
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
837 if (HL_TABLE()[idx].sg_font_name != NULL
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
838 && STRCMP(HL_TABLE()[idx].sg_font_name, arg) == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
839 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
840 // Font name didn't change, ignore.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
841 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
842 else if (!gui.shell_created)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
843 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
844 // GUI not started yet, always accept the name.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
845 vim_free(HL_TABLE()[idx].sg_font_name);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
846 HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
847 did_change = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
848 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
849 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
850 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
851 GuiFont temp_sg_font = HL_TABLE()[idx].sg_font;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
852 # ifdef FEAT_XFONTSET
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
853 GuiFontset temp_sg_fontset = HL_TABLE()[idx].sg_fontset;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
854 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
855 // First, save the current font/fontset.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
856 // Then try to allocate the font/fontset.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
857 // If the allocation fails, HL_TABLE()[idx].sg_font OR
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
858 // sg_fontset will be set to NOFONT or NOFONTSET respectively.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
859
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
860 HL_TABLE()[idx].sg_font = NOFONT;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
861 # ifdef FEAT_XFONTSET
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
862 HL_TABLE()[idx].sg_fontset = NOFONTSET;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
863 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
864 hl_do_font(idx, arg, is_normal_group, is_menu_group,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
865 is_tooltip_group, FALSE);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
866
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
867 # ifdef FEAT_XFONTSET
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
868 if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
869 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
870 // New fontset was accepted. Free the old one, if there
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
871 // was one.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
872 gui_mch_free_fontset(temp_sg_fontset);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
873 vim_free(HL_TABLE()[idx].sg_font_name);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
874 HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
875 did_change = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
876 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
877 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
878 HL_TABLE()[idx].sg_fontset = temp_sg_fontset;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
879 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
880 if (HL_TABLE()[idx].sg_font != NOFONT)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
881 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
882 // New font was accepted. Free the old one, if there was
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
883 // one.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
884 gui_mch_free_font(temp_sg_font);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
885 vim_free(HL_TABLE()[idx].sg_font_name);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
886 HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
887 did_change = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
888 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
889 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
890 HL_TABLE()[idx].sg_font = temp_sg_font;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
891 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
892
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
893 return did_change;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
894 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
895 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
896
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
897 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
898 * Set the cterm foreground color for the highlight group at 'idx' to 'color'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
899 * Returns TRUE if the foreground color is set.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
900 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
901 static void
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
902 highlight_set_ctermfg(int idx, int color, int is_normal_group)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
903 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
904 HL_TABLE()[idx].sg_cterm_fg = color + 1;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
905 if (is_normal_group)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
906 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
907 cterm_normal_fg_color = color + 1;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
908 cterm_normal_fg_bold = (HL_TABLE()[idx].sg_cterm & HL_BOLD);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
909 #ifdef FEAT_GUI
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
910 // Don't do this if the GUI is used.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
911 if (!gui.in_use && !gui.starting)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
912 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
913 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
914 must_redraw = CLEAR;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
915 if (termcap_active && color >= 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
916 term_fg_color(color);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
917 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
918 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
919 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
920
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
921 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
922 * Set the cterm background color for the highlight group at 'idx' to 'color'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
923 * Returns TRUE if the background color is set.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
924 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
925 static void
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
926 highlight_set_ctermbg(int idx, int color, int is_normal_group)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
927 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
928 HL_TABLE()[idx].sg_cterm_bg = color + 1;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
929 if (is_normal_group)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
930 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
931 cterm_normal_bg_color = color + 1;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
932 #ifdef FEAT_GUI
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
933 // Don't mess with 'background' if the GUI is used.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
934 if (!gui.in_use && !gui.starting)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
935 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
936 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
937 must_redraw = CLEAR;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
938 if (color >= 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
939 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
940 int dark = -1;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
941
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
942 if (termcap_active)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
943 term_bg_color(color);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
944 if (t_colors < 16)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
945 dark = (color == 0 || color == 4);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
946 // Limit the heuristic to the standard 16 colors
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
947 else if (color < 16)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
948 dark = (color < 7 || color == 8);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
949 // Set the 'background' option if the value is
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
950 // wrong.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
951 if (dark != -1
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
952 && dark != (*p_bg == 'd')
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
953 && !option_was_set((char_u *)"bg"))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
954 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
955 set_option_value((char_u *)"bg", 0L,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
956 (char_u *)(dark ? "dark" : "light"), 0);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
957 reset_option_was_set((char_u *)"bg");
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
958 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
959 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
960 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
961 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
962 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
963
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
964 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
965 * Set the cterm underline color for the highlight group at 'idx' to 'color'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
966 * Returns TRUE if the underline color is set.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
967 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
968 static void
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
969 highlight_set_ctermul(int idx, int color, int is_normal_group)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
970 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
971 HL_TABLE()[idx].sg_cterm_ul = color + 1;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
972 if (is_normal_group)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
973 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
974 cterm_normal_ul_color = color + 1;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
975 #ifdef FEAT_GUI
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
976 // Don't do this if the GUI is used.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
977 if (!gui.in_use && !gui.starting)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
978 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
979 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
980 must_redraw = CLEAR;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
981 if (termcap_active && color >= 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
982 term_ul_color(color);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
983 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
984 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
985 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
986
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
987 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
988 * Set the cterm fg/bg/ul color for the highlight group at 'idx'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
989 * 'key' is one of 'CTERMFG' or 'CTERMBG' or 'CTERMUL'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
990 * 'keystart' is the color name/value.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
991 * 'arg' is the color name or the numeric value as a string.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
992 * 'is_normal_group' is set if the highlight group is 'NORMAL'
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
993 * 'init' is set to TRUE when initializing highlighting.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
994 * Called for the ":highlight" command and the "hlset()" function.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
995 *
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
996 * Returns TRUE if the color is set.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
997 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
998 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
999 highlight_set_cterm_color(
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1000 int idx,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1001 char_u *key,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1002 char_u *key_start,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1003 char_u *arg,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1004 int is_normal_group,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1005 int init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1006 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1007 int color;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1008 long i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1009 int off;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1010
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1011 if (!init || !(HL_TABLE()[idx].sg_set & SG_CTERM))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1012 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1013 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1014 HL_TABLE()[idx].sg_set |= SG_CTERM;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1015
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1016 // When setting the foreground color, and previously the "bold"
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1017 // flag was set for a light color, reset it now
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1018 if (key[5] == 'F' && HL_TABLE()[idx].sg_cterm_bold)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1019 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1020 HL_TABLE()[idx].sg_cterm &= ~HL_BOLD;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1021 HL_TABLE()[idx].sg_cterm_bold = FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1022 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1023
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1024 if (VIM_ISDIGIT(*arg))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1025 color = atoi((char *)arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1026 else if (STRICMP(arg, "fg") == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1027 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1028 if (cterm_normal_fg_color)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1029 color = cterm_normal_fg_color - 1;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1030 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1031 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1032 emsg(_("E419: FG color unknown"));
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1033 return FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1034 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1035 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1036 else if (STRICMP(arg, "bg") == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1037 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1038 if (cterm_normal_bg_color > 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1039 color = cterm_normal_bg_color - 1;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1040 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1041 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1042 emsg(_("E420: BG color unknown"));
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1043 return FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1044 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1045 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1046 else if (STRICMP(arg, "ul") == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1047 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1048 if (cterm_normal_ul_color > 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1049 color = cterm_normal_ul_color - 1;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1050 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1051 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1052 emsg(_("E453: UL color unknown"));
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1053 return FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1054 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1055 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1056 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1057 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1058 int bold = MAYBE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1059
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1060 // reduce calls to STRICMP a bit, it can be slow
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1061 off = TOUPPER_ASC(*arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1062 for (i = ARRAY_LENGTH(color_names); --i >= 0; )
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1063 if (off == color_names[i][0]
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1064 && STRICMP(arg + 1, color_names[i] + 1) == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1065 break;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1066 if (i < 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1067 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1068 semsg(_("E421: Color name or number not recognized: %s"),
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1069 key_start);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1070 return FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1071 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1072
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1073 color = lookup_color(i, key[5] == 'F', &bold);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1074
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1075 // set/reset bold attribute to get light foreground
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1076 // colors (on some terminals, e.g. "linux")
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1077 if (bold == TRUE)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1078 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1079 HL_TABLE()[idx].sg_cterm |= HL_BOLD;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1080 HL_TABLE()[idx].sg_cterm_bold = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1081 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1082 else if (bold == FALSE)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1083 HL_TABLE()[idx].sg_cterm &= ~HL_BOLD;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1084 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1085
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1086 // Add one to the argument, to avoid zero. Zero is used for
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1087 // "NONE", then "color" is -1.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1088 if (key[5] == 'F')
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1089 highlight_set_ctermfg(idx, color, is_normal_group);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1090 else if (key[5] == 'B')
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1091 highlight_set_ctermbg(idx, color, is_normal_group);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1092 else // ctermul
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1093 highlight_set_ctermul(idx, color, is_normal_group);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1094 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1095
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1096 return TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1097 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1098
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1099 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1100 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1101 * Set the GUI foreground color for the highlight group at 'idx'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1102 * Returns TRUE if the color is set.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1103 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1104 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1105 highlight_set_guifg(
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1106 int idx,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1107 char_u *arg,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1108 int is_menu_group UNUSED,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1109 int is_scrollbar_group UNUSED,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1110 int is_tooltip_group UNUSED,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1111 int *do_colors UNUSED,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1112 int init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1113 {
26014
09a273f0af05 patch 8.2.3541: compiler warning for unused variable in tiny version
Bram Moolenaar <Bram@vim.org>
parents: 26009
diff changeset
1114 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1115 long i;
26014
09a273f0af05 patch 8.2.3541: compiler warning for unused variable in tiny version
Bram Moolenaar <Bram@vim.org>
parents: 26009
diff changeset
1116 # endif
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1117 char_u **namep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1118 int did_change = FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1119
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1120 namep = &HL_TABLE()[idx].sg_gui_fg_name;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1121 if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1122 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1123 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1124 HL_TABLE()[idx].sg_set |= SG_GUI;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1125
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1126 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1127 // In GUI guifg colors are only used when recognized
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1128 i = color_name2handle(arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1129 if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !USE_24BIT)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1130 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1131 HL_TABLE()[idx].sg_gui_fg = i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1132 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1133 if (*namep == NULL || STRCMP(*namep, arg) != 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1134 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1135 vim_free(*namep);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1136 if (STRCMP(arg, "NONE") != 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1137 *namep = vim_strsave(arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1138 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1139 *namep = NULL;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1140 did_change = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1141 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1142 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1143 # ifdef FEAT_GUI_X11
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1144 if (is_menu_group && gui.menu_fg_pixel != i)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1145 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1146 gui.menu_fg_pixel = i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1147 *do_colors = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1148 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1149 if (is_scrollbar_group && gui.scroll_fg_pixel != i)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1150 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1151 gui.scroll_fg_pixel = i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1152 *do_colors = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1153 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1154 # ifdef FEAT_BEVAL_GUI
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1155 if (is_tooltip_group && gui.tooltip_fg_pixel != i)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1156 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1157 gui.tooltip_fg_pixel = i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1158 *do_colors = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1159 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1160 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1161 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1162 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1163 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1164 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1165
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1166 return did_change;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1167 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1168
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1169 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1170 * Set the GUI background color for the highlight group at 'idx'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1171 * Returns TRUE if the color is set.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1172 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1173 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1174 highlight_set_guibg(
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1175 int idx,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1176 char_u *arg,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1177 int is_menu_group UNUSED,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1178 int is_scrollbar_group UNUSED,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1179 int is_tooltip_group UNUSED,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1180 int *do_colors UNUSED,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1181 int init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1182 {
26014
09a273f0af05 patch 8.2.3541: compiler warning for unused variable in tiny version
Bram Moolenaar <Bram@vim.org>
parents: 26009
diff changeset
1183 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1184 int i;
26014
09a273f0af05 patch 8.2.3541: compiler warning for unused variable in tiny version
Bram Moolenaar <Bram@vim.org>
parents: 26009
diff changeset
1185 # endif
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1186 char_u **namep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1187 int did_change = FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1188
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1189 namep = &HL_TABLE()[idx].sg_gui_bg_name;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1190 if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1191 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1192 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1193 HL_TABLE()[idx].sg_set |= SG_GUI;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1194
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1195 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
26057
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
1196 // In GUI guibg colors are only used when recognized
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1197 i = color_name2handle(arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1198 if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !USE_24BIT)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1199 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1200 HL_TABLE()[idx].sg_gui_bg = i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1201 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1202 if (*namep == NULL || STRCMP(*namep, arg) != 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1203 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1204 vim_free(*namep);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1205 if (STRCMP(arg, "NONE") != 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1206 *namep = vim_strsave(arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1207 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1208 *namep = NULL;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1209 did_change = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1210 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1211 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1212 # ifdef FEAT_GUI_X11
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1213 if (is_menu_group && gui.menu_bg_pixel != i)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1214 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1215 gui.menu_bg_pixel = i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1216 *do_colors = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1217 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1218 if (is_scrollbar_group && gui.scroll_bg_pixel != i)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1219 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1220 gui.scroll_bg_pixel = i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1221 *do_colors = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1222 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1223 # ifdef FEAT_BEVAL_GUI
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1224 if (is_tooltip_group && gui.tooltip_bg_pixel != i)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1225 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1226 gui.tooltip_bg_pixel = i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1227 *do_colors = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1228 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1229 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1230 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1231 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1232 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1233 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1234
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1235 return did_change;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1236 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1237
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1238 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1239 * Set the GUI undercurl/strikethrough color for the highlight group at 'idx'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1240 * Returns TRUE if the color is set.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1241 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1242 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1243 highlight_set_guisp(int idx, char_u *arg, int init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1244 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1245 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1246 int i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1247 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1248 int did_change = FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1249 char_u **namep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1250
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1251 namep = &HL_TABLE()[idx].sg_gui_sp_name;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1252 if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1253 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1254 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1255 HL_TABLE()[idx].sg_set |= SG_GUI;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1256
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1257 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1258 // In GUI guisp colors are only used when recognized
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1259 i = color_name2handle(arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1260 if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !USE_24BIT)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1261 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1262 HL_TABLE()[idx].sg_gui_sp = i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1263 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1264 if (*namep == NULL || STRCMP(*namep, arg) != 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1265 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1266 vim_free(*namep);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1267 if (STRCMP(arg, "NONE") != 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1268 *namep = vim_strsave(arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1269 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1270 *namep = NULL;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1271 did_change = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1272 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1273 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1274 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1275 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1276 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1277
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1278 return did_change;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1279 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1280 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1281
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1282 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1283 * Set the start/stop terminal codes for a highlight group.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1284 * Returns TRUE if the terminal code is set.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1285 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1286 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1287 highlight_set_startstop_termcode(int idx, char_u *key, char_u *arg, int init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1288 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1289 int off;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1290 char_u buf[100];
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1291 int len;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1292 char_u *tname;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1293 char_u *p;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1294
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1295 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1296 HL_TABLE()[idx].sg_set |= SG_TERM;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1297
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1298 // The "start" and "stop" arguments can be a literal escape
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1299 // sequence, or a comma separated list of terminal codes.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1300 if (STRNCMP(arg, "t_", 2) == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1301 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1302 off = 0;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1303 buf[0] = 0;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1304 while (arg[off] != NUL)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1305 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1306 // Isolate one termcap name
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1307 for (len = 0; arg[off + len] &&
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1308 arg[off + len] != ','; ++len)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1309 ;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1310 tname = vim_strnsave(arg + off, len);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1311 if (tname == NULL) // out of memory
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1312 return FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1313 // lookup the escape sequence for the item
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1314 p = get_term_code(tname);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1315 vim_free(tname);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1316 if (p == NULL) // ignore non-existing things
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1317 p = (char_u *)"";
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1318
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1319 // Append it to the already found stuff
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1320 if ((int)(STRLEN(buf) + STRLEN(p)) >= 99)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1321 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1322 semsg(_("E422: terminal code too long: %s"), arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1323 return FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1324 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1325 STRCAT(buf, p);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1326
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1327 // Advance to the next item
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1328 off += len;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1329 if (arg[off] == ',') // another one follows
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1330 ++off;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1331 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1332 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1333 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1334 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1335 // Copy characters from arg[] to buf[], translating <> codes.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1336 for (p = arg, off = 0; off < 100 - 6 && *p; )
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1337 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1338 len = trans_special(&p, buf + off, FSK_SIMPLIFY, NULL);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1339 if (len > 0) // recognized special char
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1340 off += len;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1341 else // copy as normal char
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1342 buf[off++] = *p++;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1343 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1344 buf[off] = NUL;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1345 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1346
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1347 if (STRCMP(buf, "NONE") == 0) // resetting the value
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1348 p = NULL;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1349 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1350 p = vim_strsave(buf);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1351 if (key[2] == 'A')
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1352 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1353 vim_free(HL_TABLE()[idx].sg_start);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1354 HL_TABLE()[idx].sg_start = p;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1355 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1356 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1357 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1358 vim_free(HL_TABLE()[idx].sg_stop);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1359 HL_TABLE()[idx].sg_stop = p;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1360 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1361 return TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1362 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1363
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1364 /*
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1365 * Handle the ":highlight .." command.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1366 * When using ":hi clear" this is called recursively for each group with
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1367 * "forceit" and "init" both TRUE.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1368 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1369 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1370 do_highlight(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1371 char_u *line,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1372 int forceit,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1373 int init) // TRUE when called for initializing
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1374 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1375 char_u *name_end;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1376 char_u *linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1377 char_u *key_start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1378 char_u *arg_start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1379 char_u *key = NULL, *arg = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1380 long i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1381 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1382 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1383 hl_group_T item_before;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1384 int did_change = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1385 int dodefault = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1386 int doclear = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1387 int dolink = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1388 int error = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1389 int is_normal_group = FALSE; // "Normal" group
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1390 #ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1391 int is_menu_group = FALSE; // "Menu" group
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1392 int is_scrollbar_group = FALSE; // "Scrollbar" group
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1393 int is_tooltip_group = FALSE; // "Tooltip" group
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1394 #else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1395 # define is_menu_group 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1396 # define is_tooltip_group 0
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1397 # define is_scrollbar_group 0
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1398 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1399 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1400 int do_colors = FALSE; // need to update colors?
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1401 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1402 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1403 int did_highlight_changed = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1404 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1405
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1406 // If no argument, list current highlighting.
20113
2c23053c654a patch 8.2.0612: Vim9: no check for space before #comment
Bram Moolenaar <Bram@vim.org>
parents: 20007
diff changeset
1407 if (!init && ends_excmd2(line - 1, line))
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1408 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1409 for (i = 1; i <= highlight_ga.ga_len && !got_int; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1410 // TODO: only call when the group has attributes set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1411 highlight_list_one((int)i);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1412 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1413 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1414
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1415 // Isolate the name.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1416 name_end = skiptowhite(line);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1417 linep = skipwhite(name_end);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1418
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1419 // Check for "default" argument.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1420 if (STRNCMP(line, "default", name_end - line) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1421 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1422 dodefault = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1423 line = linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1424 name_end = skiptowhite(line);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1425 linep = skipwhite(name_end);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1426 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1427
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1428 // Check for "clear" or "link" argument.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1429 if (STRNCMP(line, "clear", name_end - line) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1430 doclear = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1431 if (STRNCMP(line, "link", name_end - line) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1432 dolink = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1433
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1434 // ":highlight {group-name}": list highlighting for one group.
20116
513c62184ed8 patch 8.2.0613: Vim9: no check for space before #comment
Bram Moolenaar <Bram@vim.org>
parents: 20113
diff changeset
1435 if (!doclear && !dolink && ends_excmd2(line, linep))
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1436 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1437 id = syn_namen2id(line, (int)(name_end - line));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1438 if (id == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1439 semsg(_("E411: highlight group not found: %s"), line);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1440 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1441 highlight_list_one(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1442 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1443 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1444
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1445 // Handle ":highlight link {from} {to}" command.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1446 if (dolink)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1447 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1448 char_u *from_start = linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1449 char_u *from_end;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1450 int from_len;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1451 char_u *to_start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1452 char_u *to_end;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1453 int to_len;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1454
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1455 from_end = skiptowhite(from_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1456 to_start = skipwhite(from_end);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1457 to_end = skiptowhite(to_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1458
20116
513c62184ed8 patch 8.2.0613: Vim9: no check for space before #comment
Bram Moolenaar <Bram@vim.org>
parents: 20113
diff changeset
1459 if (ends_excmd2(line, from_start) || ends_excmd2(line, to_start))
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1460 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1461 semsg(_("E412: Not enough arguments: \":highlight link %s\""),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1462 from_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1463 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1464 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1465
20116
513c62184ed8 patch 8.2.0613: Vim9: no check for space before #comment
Bram Moolenaar <Bram@vim.org>
parents: 20113
diff changeset
1466 if (!ends_excmd2(line, skipwhite(to_end)))
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1467 {
22288
a9ff3e0d6d54 patch 8.2.1693: "hi def" does not work for cleared highlight
Bram Moolenaar <Bram@vim.org>
parents: 21054
diff changeset
1468 semsg(_("E413: Too many arguments: \":highlight link %s\""),
a9ff3e0d6d54 patch 8.2.1693: "hi def" does not work for cleared highlight
Bram Moolenaar <Bram@vim.org>
parents: 21054
diff changeset
1469 from_start);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1470 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1471 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1472
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1473 from_len = (int)(from_end - from_start);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1474 to_len = (int)(to_end - to_start);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1475 highlight_group_link(from_start, from_len, to_start, to_len,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1476 dodefault, forceit, init);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1477 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1478 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1479
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1480 if (doclear)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1481 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1482 // ":highlight clear [group]" command.
20116
513c62184ed8 patch 8.2.0613: Vim9: no check for space before #comment
Bram Moolenaar <Bram@vim.org>
parents: 20113
diff changeset
1483 if (ends_excmd2(line, linep))
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1484 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1485 // ":highlight clear" without group name
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1486 highlight_reset_all();
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1487 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1488 }
20116
513c62184ed8 patch 8.2.0613: Vim9: no check for space before #comment
Bram Moolenaar <Bram@vim.org>
parents: 20113
diff changeset
1489 line = linep;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1490 name_end = skiptowhite(line);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1491 linep = skipwhite(name_end);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1492 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1493
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1494 // Find the group name in the table. If it does not exist yet, add it.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1495 id = syn_check_group(line, (int)(name_end - line));
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1496 if (id == 0) // failed (out of memory)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1497 return;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1498 idx = id - 1; // index is ID minus one
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1499
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1500 // Return if "default" was used and the group already has settings.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1501 if (dodefault && hl_has_settings(idx, TRUE))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1502 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1503
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1504 // Make a copy so we can check if any attribute actually changed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1505 item_before = HL_TABLE()[idx];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1506
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1507 if (STRCMP(HL_TABLE()[idx].sg_name_u, "NORMAL") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1508 is_normal_group = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1509 #ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1510 else if (STRCMP(HL_TABLE()[idx].sg_name_u, "MENU") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1511 is_menu_group = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1512 else if (STRCMP(HL_TABLE()[idx].sg_name_u, "SCROLLBAR") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1513 is_scrollbar_group = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1514 else if (STRCMP(HL_TABLE()[idx].sg_name_u, "TOOLTIP") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1515 is_tooltip_group = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1516 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1517
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1518 // Clear the highlighting for ":hi clear {group}" and ":hi clear".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1519 if (doclear || (forceit && init))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1520 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1521 highlight_clear(idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1522 if (!doclear)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1523 HL_TABLE()[idx].sg_set = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1524 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1525
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1526 if (!doclear)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1527 while (!ends_excmd2(line, linep))
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1528 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1529 key_start = linep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1530 if (*linep == '=')
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1531 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1532 semsg(_("E415: unexpected equal sign: %s"), key_start);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1533 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1534 break;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1535 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1536
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1537 // Isolate the key ("term", "ctermfg", "ctermbg", "font", "guifg"
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1538 // or "guibg").
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1539 while (*linep && !VIM_ISWHITE(*linep) && *linep != '=')
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1540 ++linep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1541 vim_free(key);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1542 key = vim_strnsave_up(key_start, linep - key_start);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1543 if (key == NULL)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1544 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1545 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1546 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1547 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1548 linep = skipwhite(linep);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1549
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1550 if (STRCMP(key, "NONE") == 0)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1551 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1552 if (!init || HL_TABLE()[idx].sg_set == 0)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1553 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1554 if (!init)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1555 HL_TABLE()[idx].sg_set |= SG_TERM+SG_CTERM+SG_GUI;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1556 highlight_clear(idx);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1557 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1558 continue;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1559 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1560
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1561 // Check for the equal sign.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1562 if (*linep != '=')
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1563 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1564 semsg(_("E416: missing equal sign: %s"), key_start);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1565 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1566 break;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1567 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1568 ++linep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1569
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1570 // Isolate the argument.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1571 linep = skipwhite(linep);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1572 if (*linep == '\'') // guifg='color name'
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1573 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1574 arg_start = ++linep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1575 linep = vim_strchr(linep, '\'');
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1576 if (linep == NULL)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1577 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1578 semsg(_(e_invarg2), key_start);
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1579 error = TRUE;
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1580 break;
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1581 }
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1582 }
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1583 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1584 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1585 arg_start = linep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1586 linep = skiptowhite(linep);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1587 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1588 if (linep == arg_start)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1589 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1590 semsg(_("E417: missing argument: %s"), key_start);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1591 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1592 break;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1593 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1594 vim_free(arg);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1595 arg = vim_strnsave(arg_start, linep - arg_start);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1596 if (arg == NULL)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1597 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1598 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1599 break;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1600 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1601 if (*linep == '\'')
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1602 ++linep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1603
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1604 // Store the argument.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1605 if (STRCMP(key, "TERM") == 0
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1606 || STRCMP(key, "CTERM") == 0
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1607 || STRCMP(key, "GUI") == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1608 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1609 if (!highlight_set_termgui_attr(idx, key, arg, init))
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1610 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1611 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1612 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1613 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1614 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1615 else if (STRCMP(key, "FONT") == 0)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1616 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1617 // in non-GUI fonts are simply ignored
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1618 #ifdef FEAT_GUI
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1619 if (highlight_set_font(idx, arg, is_normal_group,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1620 is_menu_group, is_tooltip_group))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1621 did_change = TRUE;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1622 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1623 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1624 else if (STRCMP(key, "CTERMFG") == 0
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1625 || STRCMP(key, "CTERMBG") == 0
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1626 || STRCMP(key, "CTERMUL") == 0)
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1627 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1628 if (!highlight_set_cterm_color(idx, key, key_start, arg,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1629 is_normal_group, init))
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1630 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1631 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1632 break;
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1633 }
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1634 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1635 else if (STRCMP(key, "GUIFG") == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1636 {
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1637 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1638 if (highlight_set_guifg(idx, arg, is_menu_group,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1639 is_scrollbar_group, is_tooltip_group,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1640 &do_colors, init))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1641 did_change = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1642 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1643 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1644 else if (STRCMP(key, "GUIBG") == 0)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1645 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1646 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1647 if (highlight_set_guibg(idx, arg, is_menu_group,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1648 is_scrollbar_group, is_tooltip_group,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1649 &do_colors, init))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1650 did_change = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1651 #endif
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1652 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1653 else if (STRCMP(key, "GUISP") == 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1654 {
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1655 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1656 if (highlight_set_guisp(idx, arg, init))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1657 did_change = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1658 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1659 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1660 else if (STRCMP(key, "START") == 0 || STRCMP(key, "STOP") == 0)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1661 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1662 if (!highlight_set_startstop_termcode(idx, key, arg, init))
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1663 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1664 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1665 break;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1666 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1667 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1668 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1669 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1670 semsg(_("E423: Illegal argument: %s"), key_start);
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1671 error = TRUE;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1672 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1673 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1674 HL_TABLE()[idx].sg_cleared = FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1675
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1676 // When highlighting has been given for a group, don't link it.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1677 if (!init || !(HL_TABLE()[idx].sg_set & SG_LINK))
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1678 HL_TABLE()[idx].sg_link = 0;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1679
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1680 // Continue with next argument.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1681 linep = skipwhite(linep);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1682 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1683
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1684 // If there is an error, and it's a new entry, remove it from the table.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1685 if (error && idx == highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1686 syn_unadd_group();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1687 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1688 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1689 if (is_normal_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1690 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1691 HL_TABLE()[idx].sg_term_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1692 HL_TABLE()[idx].sg_cterm_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1693 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1694 HL_TABLE()[idx].sg_gui_attr = 0;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1695 // Need to update all groups, because they might be using "bg"
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1696 // and/or "fg", which have been changed now.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1697 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1698 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1699 if (USE_24BIT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1700 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1701 highlight_gui_started();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1702 did_highlight_changed = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1703 redraw_all_later(NOT_VALID);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1704 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1705 #endif
19756
fe90a71a3fed patch 8.2.0434: MS-Windows with VTP: Normal color not working
Bram Moolenaar <Bram@vim.org>
parents: 19265
diff changeset
1706 #ifdef FEAT_VTP
fe90a71a3fed patch 8.2.0434: MS-Windows with VTP: Normal color not working
Bram Moolenaar <Bram@vim.org>
parents: 19265
diff changeset
1707 control_console_color_rgb();
fe90a71a3fed patch 8.2.0434: MS-Windows with VTP: Normal color not working
Bram Moolenaar <Bram@vim.org>
parents: 19265
diff changeset
1708 #endif
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1709 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1710 #ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1711 # ifdef FEAT_MENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1712 else if (is_menu_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1713 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1714 if (gui.in_use && do_colors)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1715 gui_mch_new_menu_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1716 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1717 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1718 else if (is_scrollbar_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1719 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1720 if (gui.in_use && do_colors)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1721 gui_new_scrollbar_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1722 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1723 set_hl_attr(idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1724 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1725 # ifdef FEAT_BEVAL_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1726 else if (is_tooltip_group)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1727 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1728 if (gui.in_use && do_colors)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1729 gui_mch_new_tooltip_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1730 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1731 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1732 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1733 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1734 set_hl_attr(idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1735 #ifdef FEAT_EVAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1736 HL_TABLE()[idx].sg_script_ctx = current_sctx;
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18953
diff changeset
1737 HL_TABLE()[idx].sg_script_ctx.sc_lnum += SOURCING_LNUM;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1738 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1739 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1740
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1741 vim_free(key);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1742 vim_free(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1743
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1744 // Only call highlight_changed() once, after a sequence of highlight
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1745 // commands, and only if an attribute actually changed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1746 if ((did_change
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1747 || memcmp(&HL_TABLE()[idx], &item_before, sizeof(item_before)) != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1748 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1749 && !did_highlight_changed
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1750 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1751 )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1752 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1753 // Do not trigger a redraw when highlighting is changed while
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1754 // redrawing. This may happen when evaluating 'statusline' changes the
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1755 // StatusLine group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1756 if (!updating_screen)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1757 redraw_all_later(NOT_VALID);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1758 need_highlight_changed = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1759 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1760 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1761
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1762 #if defined(EXITFREE) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1763 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1764 free_highlight(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1765 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1766 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1767
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1768 for (i = 0; i < highlight_ga.ga_len; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1769 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1770 highlight_clear(i);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1771 vim_free(HL_TABLE()[i].sg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1772 vim_free(HL_TABLE()[i].sg_name_u);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1773 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1774 ga_clear(&highlight_ga);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1775 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1776 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1777
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1778 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1779 * Reset the cterm colors to what they were before Vim was started, if
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1780 * possible. Otherwise reset them to zero.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1781 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1782 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1783 restore_cterm_colors(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1784 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1785 #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1786 // Since t_me has been set, this probably means that the user
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1787 // wants to use this as default colors. Need to reset default
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1788 // background/foreground colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1789 mch_set_normal_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1790 #else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1791 # ifdef VIMDLL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1792 if (!gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1793 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1794 mch_set_normal_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1795 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1796 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1797 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1798 cterm_normal_fg_color = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1799 cterm_normal_fg_bold = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1800 cterm_normal_bg_color = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1801 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1802 cterm_normal_fg_gui_color = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1803 cterm_normal_bg_gui_color = INVALCOLOR;
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1804 cterm_normal_ul_gui_color = INVALCOLOR;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1805 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1806 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1807 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1808
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1809 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1810 * Return TRUE if highlight group "idx" has any settings.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1811 * When "check_link" is TRUE also check for an existing link.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1812 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1813 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1814 hl_has_settings(int idx, int check_link)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1815 {
22288
a9ff3e0d6d54 patch 8.2.1693: "hi def" does not work for cleared highlight
Bram Moolenaar <Bram@vim.org>
parents: 21054
diff changeset
1816 return HL_TABLE()[idx].sg_cleared == 0
a9ff3e0d6d54 patch 8.2.1693: "hi def" does not work for cleared highlight
Bram Moolenaar <Bram@vim.org>
parents: 21054
diff changeset
1817 && ( HL_TABLE()[idx].sg_term_attr != 0
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1818 || HL_TABLE()[idx].sg_cterm_attr != 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1819 || HL_TABLE()[idx].sg_cterm_fg != 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1820 || HL_TABLE()[idx].sg_cterm_bg != 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1821 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1822 || HL_TABLE()[idx].sg_gui_attr != 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1823 || HL_TABLE()[idx].sg_gui_fg_name != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1824 || HL_TABLE()[idx].sg_gui_bg_name != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1825 || HL_TABLE()[idx].sg_gui_sp_name != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1826 || HL_TABLE()[idx].sg_font_name != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1827 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1828 || (check_link && (HL_TABLE()[idx].sg_set & SG_LINK)));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1829 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1830
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1831 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1832 * Clear highlighting for one group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1833 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1834 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1835 highlight_clear(int idx)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1836 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1837 HL_TABLE()[idx].sg_cleared = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1838
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1839 HL_TABLE()[idx].sg_term = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1840 VIM_CLEAR(HL_TABLE()[idx].sg_start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1841 VIM_CLEAR(HL_TABLE()[idx].sg_stop);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1842 HL_TABLE()[idx].sg_term_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1843 HL_TABLE()[idx].sg_cterm = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1844 HL_TABLE()[idx].sg_cterm_bold = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1845 HL_TABLE()[idx].sg_cterm_fg = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1846 HL_TABLE()[idx].sg_cterm_bg = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1847 HL_TABLE()[idx].sg_cterm_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1848 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1849 HL_TABLE()[idx].sg_gui = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1850 VIM_CLEAR(HL_TABLE()[idx].sg_gui_fg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1851 VIM_CLEAR(HL_TABLE()[idx].sg_gui_bg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1852 VIM_CLEAR(HL_TABLE()[idx].sg_gui_sp_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1853 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1854 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1855 HL_TABLE()[idx].sg_gui_fg = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1856 HL_TABLE()[idx].sg_gui_bg = INVALCOLOR;
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1857 HL_TABLE()[idx].sg_gui_sp = INVALCOLOR;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1858 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1859 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1860 gui_mch_free_font(HL_TABLE()[idx].sg_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1861 HL_TABLE()[idx].sg_font = NOFONT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1862 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1863 gui_mch_free_fontset(HL_TABLE()[idx].sg_fontset);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1864 HL_TABLE()[idx].sg_fontset = NOFONTSET;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1865 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1866 VIM_CLEAR(HL_TABLE()[idx].sg_font_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1867 HL_TABLE()[idx].sg_gui_attr = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1868 #endif
22312
e06ba60fbbd8 patch 8.2.1705: "verbose hi Name" reports incorrect info after ":hi clear"
Bram Moolenaar <Bram@vim.org>
parents: 22308
diff changeset
1869 // Restore default link and context if they exist. Otherwise clears.
22308
19e0784ef769 patch 8.2.1703: ":highlight clear" does not restore default link
Bram Moolenaar <Bram@vim.org>
parents: 22288
diff changeset
1870 HL_TABLE()[idx].sg_link = HL_TABLE()[idx].sg_deflink;
22312
e06ba60fbbd8 patch 8.2.1705: "verbose hi Name" reports incorrect info after ":hi clear"
Bram Moolenaar <Bram@vim.org>
parents: 22308
diff changeset
1871 #ifdef FEAT_EVAL
e06ba60fbbd8 patch 8.2.1705: "verbose hi Name" reports incorrect info after ":hi clear"
Bram Moolenaar <Bram@vim.org>
parents: 22308
diff changeset
1872 // Since we set the default link, set the location to where the default
e06ba60fbbd8 patch 8.2.1705: "verbose hi Name" reports incorrect info after ":hi clear"
Bram Moolenaar <Bram@vim.org>
parents: 22308
diff changeset
1873 // link was set.
e06ba60fbbd8 patch 8.2.1705: "verbose hi Name" reports incorrect info after ":hi clear"
Bram Moolenaar <Bram@vim.org>
parents: 22308
diff changeset
1874 HL_TABLE()[idx].sg_script_ctx = HL_TABLE()[idx].sg_deflink_sctx;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1875 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1876 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1877
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1878 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1879 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1880 * Set the normal foreground and background colors according to the "Normal"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1881 * highlighting group. For X11 also set "Menu", "Scrollbar", and
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1882 * "Tooltip" colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1883 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1884 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1885 set_normal_colors(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1886 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1887 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1888 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1889 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1890 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1891 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1892 if (set_group_colors((char_u *)"Normal",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1893 &gui.norm_pixel, &gui.back_pixel,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1894 FALSE, TRUE, FALSE))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1895 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1896 gui_mch_new_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1897 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1898 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1899 # ifdef FEAT_GUI_X11
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1900 if (set_group_colors((char_u *)"Menu",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1901 &gui.menu_fg_pixel, &gui.menu_bg_pixel,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1902 TRUE, FALSE, FALSE))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1903 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1904 # ifdef FEAT_MENU
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1905 gui_mch_new_menu_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1906 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1907 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1908 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1909 # ifdef FEAT_BEVAL_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1910 if (set_group_colors((char_u *)"Tooltip",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1911 &gui.tooltip_fg_pixel, &gui.tooltip_bg_pixel,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1912 FALSE, FALSE, TRUE))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1913 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1914 # ifdef FEAT_TOOLBAR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1915 gui_mch_new_tooltip_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1916 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1917 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1918 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1919 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1920 if (set_group_colors((char_u *)"Scrollbar",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1921 &gui.scroll_fg_pixel, &gui.scroll_bg_pixel,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1922 FALSE, FALSE, FALSE))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1923 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1924 gui_new_scrollbar_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1925 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1926 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1927 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1928 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1929 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1930 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1931 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1932 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1933 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1934 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1935 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1936
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1937 idx = syn_name2id((char_u *)"Normal") - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1938 if (idx >= 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1939 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1940 gui_do_one_color(idx, FALSE, FALSE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1941
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1942 // If the normal fg or bg color changed a complete redraw is
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1943 // required.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1944 if (cterm_normal_fg_gui_color != HL_TABLE()[idx].sg_gui_fg
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1945 || cterm_normal_bg_gui_color != HL_TABLE()[idx].sg_gui_bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1946 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1947 // if the GUI color is INVALCOLOR then we use the default cterm
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1948 // color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1949 cterm_normal_fg_gui_color = HL_TABLE()[idx].sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1950 cterm_normal_bg_gui_color = HL_TABLE()[idx].sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1951 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1952 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1953 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1954 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1955 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1956 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1957 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1958
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1959 #if defined(FEAT_GUI) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1960 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1961 * Set the colors for "Normal", "Menu", "Tooltip" or "Scrollbar".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1962 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1963 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1964 set_group_colors(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1965 char_u *name,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1966 guicolor_T *fgp,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1967 guicolor_T *bgp,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1968 int do_menu,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1969 int use_norm,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1970 int do_tooltip)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1971 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1972 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1973
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1974 idx = syn_name2id(name) - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1975 if (idx >= 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1976 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1977 gui_do_one_color(idx, do_menu, do_tooltip);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1978
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1979 if (HL_TABLE()[idx].sg_gui_fg != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1980 *fgp = HL_TABLE()[idx].sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1981 else if (use_norm)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1982 *fgp = gui.def_norm_pixel;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1983 if (HL_TABLE()[idx].sg_gui_bg != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1984 *bgp = HL_TABLE()[idx].sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1985 else if (use_norm)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1986 *bgp = gui.def_back_pixel;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1987 return TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1988 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1989 return FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1990 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1991
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1992 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1993 * Get the font of the "Normal" group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1994 * Returns "" when it's not found or not set.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1995 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1996 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1997 hl_get_font_name(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1998 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1999 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2000 char_u *s;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2001
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2002 id = syn_name2id((char_u *)"Normal");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2003 if (id > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2004 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2005 s = HL_TABLE()[id - 1].sg_font_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2006 if (s != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2007 return s;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2008 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2009 return (char_u *)"";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2010 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2011
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2012 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2013 * Set font for "Normal" group. Called by gui_mch_init_font() when a font has
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2014 * actually chosen to be used.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2015 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2016 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2017 hl_set_font_name(char_u *font_name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2018 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2019 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2020
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2021 id = syn_name2id((char_u *)"Normal");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2022 if (id > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2023 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2024 vim_free(HL_TABLE()[id - 1].sg_font_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2025 HL_TABLE()[id - 1].sg_font_name = vim_strsave(font_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2026 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2027 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2028
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2029 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2030 * Set background color for "Normal" group. Called by gui_set_bg_color()
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2031 * when the color is known.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2032 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2033 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2034 hl_set_bg_color_name(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2035 char_u *name) // must have been allocated
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2036 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2037 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2038
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2039 if (name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2040 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2041 id = syn_name2id((char_u *)"Normal");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2042 if (id > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2043 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2044 vim_free(HL_TABLE()[id - 1].sg_gui_bg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2045 HL_TABLE()[id - 1].sg_gui_bg_name = name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2046 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2047 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2048 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2049
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2050 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2051 * Set foreground color for "Normal" group. Called by gui_set_fg_color()
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2052 * when the color is known.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2053 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2054 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2055 hl_set_fg_color_name(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2056 char_u *name) // must have been allocated
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2057 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2058 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2059
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2060 if (name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2061 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2062 id = syn_name2id((char_u *)"Normal");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2063 if (id > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2064 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2065 vim_free(HL_TABLE()[id - 1].sg_gui_fg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2066 HL_TABLE()[id - 1].sg_gui_fg_name = name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2067 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2068 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2069 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2070
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2071 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2072 * Return the handle for a font name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2073 * Returns NOFONT when failed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2074 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2075 static GuiFont
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2076 font_name2handle(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2077 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2078 if (STRCMP(name, "NONE") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2079 return NOFONT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2080
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2081 return gui_mch_get_font(name, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2082 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2083
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2084 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2085 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2086 * Return the handle for a fontset name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2087 * Returns NOFONTSET when failed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2088 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2089 static GuiFontset
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2090 fontset_name2handle(char_u *name, int fixed_width)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2091 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2092 if (STRCMP(name, "NONE") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2093 return NOFONTSET;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2094
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2095 return gui_mch_get_fontset(name, TRUE, fixed_width);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2096 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2097 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2098
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2099 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2100 * Get the font or fontset for one highlight group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2101 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2102 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2103 hl_do_font(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2104 int idx,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2105 char_u *arg,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2106 int do_normal, // set normal font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2107 int do_menu UNUSED, // set menu font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2108 int do_tooltip UNUSED, // set tooltip font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2109 int free_font) // free current font/fontset
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2110 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2111 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2112 // If 'guifontset' is not empty, first try using the name as a
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2113 // fontset. If that doesn't work, use it as a font name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2114 if (*p_guifontset != NUL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2115 # ifdef FONTSET_ALWAYS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2116 || do_menu
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2117 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2118 # ifdef FEAT_BEVAL_TIP
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2119 // In Athena & Motif, the Tooltip highlight group is always a fontset
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2120 || do_tooltip
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2121 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2122 )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2123 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2124 if (free_font)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2125 gui_mch_free_fontset(HL_TABLE()[idx].sg_fontset);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2126 HL_TABLE()[idx].sg_fontset = fontset_name2handle(arg, 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2127 # ifdef FONTSET_ALWAYS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2128 || do_menu
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2129 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2130 # ifdef FEAT_BEVAL_TIP
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2131 || do_tooltip
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2132 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2133 );
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2134 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2135 if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2136 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2137 // If it worked and it's the Normal group, use it as the normal
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2138 // fontset. Same for the Menu group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2139 if (do_normal)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2140 gui_init_font(arg, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2141 # if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && defined(FEAT_MENU)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2142 if (do_menu)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2143 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2144 # ifdef FONTSET_ALWAYS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2145 gui.menu_fontset = HL_TABLE()[idx].sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2146 # else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2147 // YIKES! This is a bug waiting to crash the program
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2148 gui.menu_font = HL_TABLE()[idx].sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2149 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2150 gui_mch_new_menu_font();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2151 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2152 # ifdef FEAT_BEVAL_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2153 if (do_tooltip)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2154 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2155 // The Athena widget set cannot currently handle switching between
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2156 // displaying a single font and a fontset.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2157 // If the XtNinternational resource is set to True at widget
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2158 // creation, then a fontset is always used, otherwise an
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2159 // XFontStruct is used.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2160 gui.tooltip_fontset = (XFontSet)HL_TABLE()[idx].sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2161 gui_mch_new_tooltip_font();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2162 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2163 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2164 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2165 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2166 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2167 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2168 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2169 if (free_font)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2170 gui_mch_free_font(HL_TABLE()[idx].sg_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2171 HL_TABLE()[idx].sg_font = font_name2handle(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2172 // If it worked and it's the Normal group, use it as the
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2173 // normal font. Same for the Menu group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2174 if (HL_TABLE()[idx].sg_font != NOFONT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2175 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2176 if (do_normal)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2177 gui_init_font(arg, FALSE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2178 #ifndef FONTSET_ALWAYS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2179 # if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && defined(FEAT_MENU)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2180 if (do_menu)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2181 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2182 gui.menu_font = HL_TABLE()[idx].sg_font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2183 gui_mch_new_menu_font();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2184 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2185 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2186 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2187 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2188 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2189 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2190
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2191 #endif // FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2192
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2193 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2194 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2195 * Return the handle for a color name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2196 * Returns INVALCOLOR when failed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2197 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2198 guicolor_T
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2199 color_name2handle(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2200 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2201 if (STRCMP(name, "NONE") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2202 return INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2203
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2204 if (STRICMP(name, "fg") == 0 || STRICMP(name, "foreground") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2205 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2206 #if defined(FEAT_TERMGUICOLORS) && defined(FEAT_GUI)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2207 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2208 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2209 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2210 return gui.norm_pixel;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2211 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2212 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2213 if (cterm_normal_fg_gui_color != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2214 return cterm_normal_fg_gui_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2215 // Guess that the foreground is black or white.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2216 return GUI_GET_COLOR((char_u *)(*p_bg == 'l' ? "black" : "white"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2217 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2218 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2219 if (STRICMP(name, "bg") == 0 || STRICMP(name, "background") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2220 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2221 #if defined(FEAT_TERMGUICOLORS) && defined(FEAT_GUI)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2222 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2223 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2224 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2225 return gui.back_pixel;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2226 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2227 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2228 if (cterm_normal_bg_gui_color != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2229 return cterm_normal_bg_gui_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2230 // Guess that the background is white or black.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2231 return GUI_GET_COLOR((char_u *)(*p_bg == 'l' ? "white" : "black"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2232 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2233 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2234
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2235 return GUI_GET_COLOR(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2236 }
26057
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2237
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2238 // On MS-Windows an RGB macro is available and it produces 0x00bbggrr color
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2239 // values as used by the MS-Windows GDI api. It should be used only for
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2240 // MS-Windows GDI builds.
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2241 # if defined(RGB) && defined(MSWIN) && !defined(FEAT_GUI)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2242 # undef RGB
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2243 # endif
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2244 # ifndef RGB
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2245 # define RGB(r, g, b) ((r<<16) | (g<<8) | (b))
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2246 # endif
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2247
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2248 # ifdef VIMDLL
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2249 static guicolor_T
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2250 gui_adjust_rgb(guicolor_T c)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2251 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2252 if (gui.in_use)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2253 return c;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2254 else
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2255 return ((c & 0xff) << 16) | (c & 0x00ff00) | ((c >> 16) & 0xff);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2256 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2257 # else
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2258 # define gui_adjust_rgb(c) (c)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2259 # endif
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2260
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2261 static int
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2262 hex_digit(int c)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2263 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2264 if (isdigit(c))
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2265 return c - '0';
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2266 c = TOLOWER_ASC(c);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2267 if (c >= 'a' && c <= 'f')
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2268 return c - 'a' + 10;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2269 return 0x1ffffff;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2270 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2271
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2272 guicolor_T
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2273 decode_hex_color(char_u *hex)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2274 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2275 guicolor_T color;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2276
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2277 if (hex[0] != '#' || STRLEN(hex) != 7)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2278 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2279
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2280 // Name is in "#rrggbb" format
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2281 color = RGB(((hex_digit(hex[1]) << 4) + hex_digit(hex[2])),
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2282 ((hex_digit(hex[3]) << 4) + hex_digit(hex[4])),
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2283 ((hex_digit(hex[5]) << 4) + hex_digit(hex[6])));
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2284 if (color > 0xffffff)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2285 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2286 return gui_adjust_rgb(color);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2287 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2288
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2289 #if defined(FEAT_EVAL)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2290 // Returns the color currently mapped to the given name or INVALCOLOR if no
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2291 // such name exists in the color table. The convention is to use lowercase for
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2292 // all keys in the v:colornames dictionary. The value can be either a string in
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2293 // the form #rrggbb or a number, either of which is converted to a guicolor_T.
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2294 guicolor_T
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2295 colorname2rgb(char_u *name)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2296 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2297 dict_T *colornames_table = get_vim_var_dict(VV_COLORNAMES);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2298 char_u *lc_name;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2299 dictitem_T *colentry;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2300 char_u *colstr;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2301 varnumber_T colnum;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2302
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2303 lc_name = strlow_save(name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2304 if (lc_name == NULL)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2305 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2306
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2307 colentry = dict_find(colornames_table, lc_name, -1);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2308 vim_free(lc_name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2309 if (colentry == NULL)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2310 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2311
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2312 if (colentry->di_tv.v_type == VAR_STRING)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2313 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2314 colstr = tv_get_string_strict(&colentry->di_tv);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2315 if ((STRLEN(colstr) == 7) && (*colstr == '#'))
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2316 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2317 return decode_hex_color(colstr);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2318 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2319 else
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2320 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2321 semsg(_(e_bad_color_string_str), colstr);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2322 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2323 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2324 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2325
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2326 if (colentry->di_tv.v_type == VAR_NUMBER)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2327 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2328 colnum = tv_get_number(&colentry->di_tv);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2329 return (guicolor_T)colnum;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2330 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2331
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2332 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2333 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2334
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2335 // Maps the given name to the given color value, overwriting any current
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2336 // mapping. If allocation fails the named color will no longer exist in the
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2337 // table and the user will receive an error message.
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2338 void
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2339 save_colorname_hexstr(int r, int g, int b, char_u *name)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2340 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2341 int result;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2342 dict_T *colornames_table;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2343 dictitem_T *existing;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2344 char_u hexstr[8];
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2345
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2346 if (vim_snprintf((char *)hexstr, sizeof(hexstr),
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2347 "#%02x%02x%02x", r, g, b) < 0)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2348 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2349 semsg(_(e_cannot_allocate_color_str), name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2350 return;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2351 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2352
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2353 colornames_table = get_vim_var_dict(VV_COLORNAMES);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2354 // The colornames_table dict is safe to use here because it is allocated at
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2355 // startup in evalvars.c
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2356 existing = dict_find(colornames_table, name, -1);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2357 if (existing != NULL)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2358 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2359 dictitem_remove(colornames_table, existing);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2360 existing = NULL; // dictitem_remove freed the item
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2361 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2362
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2363 result = dict_add_string(colornames_table, (char *)name, hexstr);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2364 if (result == FAIL)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2365 semsg(_(e_cannot_allocate_color_str), name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2366 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2367
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2368 /*
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2369 * Load a default color list. Intended to support legacy color names but allows
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2370 * the user to override the color values. Only loaded once.
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2371 */
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2372 void
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2373 load_default_colors_lists()
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2374 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2375 // Lacking a default color list isn't the end of the world but it is likely
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2376 // an inconvenience so users should know when it is missing.
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2377 if (source_runtime((char_u *)"colors/lists/default.vim", DIP_ALL) != OK)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2378 msg("failed to load colors/lists/default.vim");
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2379 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2380 #endif
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2381
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2382 guicolor_T
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2383 gui_get_color_cmn(char_u *name)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2384 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2385 int i;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2386 guicolor_T color;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2387
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2388 struct rgbcolor_table_S {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2389 char_u *color_name;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2390 guicolor_T color;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2391 };
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2392
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2393 // Only non X11 colors (not present in rgb.txt) and colors in
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2394 // color_names[], useful when $VIMRUNTIME is not found,.
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2395 static struct rgbcolor_table_S rgb_table[] = {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2396 {(char_u *)"black", RGB(0x00, 0x00, 0x00)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2397 {(char_u *)"blue", RGB(0x00, 0x00, 0xFF)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2398 {(char_u *)"brown", RGB(0xA5, 0x2A, 0x2A)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2399 {(char_u *)"cyan", RGB(0x00, 0xFF, 0xFF)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2400 {(char_u *)"darkblue", RGB(0x00, 0x00, 0x8B)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2401 {(char_u *)"darkcyan", RGB(0x00, 0x8B, 0x8B)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2402 {(char_u *)"darkgray", RGB(0xA9, 0xA9, 0xA9)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2403 {(char_u *)"darkgreen", RGB(0x00, 0x64, 0x00)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2404 {(char_u *)"darkgrey", RGB(0xA9, 0xA9, 0xA9)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2405 {(char_u *)"darkmagenta", RGB(0x8B, 0x00, 0x8B)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2406 {(char_u *)"darkred", RGB(0x8B, 0x00, 0x00)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2407 {(char_u *)"darkyellow", RGB(0x8B, 0x8B, 0x00)}, // No X11
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2408 {(char_u *)"gray", RGB(0xBE, 0xBE, 0xBE)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2409 {(char_u *)"green", RGB(0x00, 0xFF, 0x00)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2410 {(char_u *)"grey", RGB(0xBE, 0xBE, 0xBE)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2411 {(char_u *)"grey40", RGB(0x66, 0x66, 0x66)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2412 {(char_u *)"grey50", RGB(0x7F, 0x7F, 0x7F)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2413 {(char_u *)"grey90", RGB(0xE5, 0xE5, 0xE5)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2414 {(char_u *)"lightblue", RGB(0xAD, 0xD8, 0xE6)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2415 {(char_u *)"lightcyan", RGB(0xE0, 0xFF, 0xFF)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2416 {(char_u *)"lightgray", RGB(0xD3, 0xD3, 0xD3)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2417 {(char_u *)"lightgreen", RGB(0x90, 0xEE, 0x90)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2418 {(char_u *)"lightgrey", RGB(0xD3, 0xD3, 0xD3)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2419 {(char_u *)"lightmagenta", RGB(0xFF, 0x8B, 0xFF)}, // No X11
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2420 {(char_u *)"lightred", RGB(0xFF, 0x8B, 0x8B)}, // No X11
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2421 {(char_u *)"lightyellow", RGB(0xFF, 0xFF, 0xE0)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2422 {(char_u *)"magenta", RGB(0xFF, 0x00, 0xFF)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2423 {(char_u *)"red", RGB(0xFF, 0x00, 0x00)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2424 {(char_u *)"seagreen", RGB(0x2E, 0x8B, 0x57)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2425 {(char_u *)"white", RGB(0xFF, 0xFF, 0xFF)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2426 {(char_u *)"yellow", RGB(0xFF, 0xFF, 0x00)},
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2427 };
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2428
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2429 color = decode_hex_color(name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2430 if (color != INVALCOLOR)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2431 return color;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2432
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2433 // Check if the name is one of the colors we know
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2434 for (i = 0; i < (int)ARRAY_LENGTH(rgb_table); i++)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2435 if (STRICMP(name, rgb_table[i].color_name) == 0)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2436 return gui_adjust_rgb(rgb_table[i].color);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2437
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2438 #if defined(FEAT_EVAL)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2439 /*
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2440 * Not a traditional color. Load additional color aliases and then consult the alias table.
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2441 */
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2442
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2443 color = colorname2rgb(name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2444 if (color == INVALCOLOR)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2445 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2446 load_default_colors_lists();
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2447 color = colorname2rgb(name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2448 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2449
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2450 return color;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2451 #else
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2452 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2453 #endif
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2454 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2455
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2456 guicolor_T
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2457 gui_get_rgb_color_cmn(int r, int g, int b)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2458 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2459 guicolor_T color = RGB(r, g, b);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2460
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2461 if (color > 0xffffff)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2462 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2463 return gui_adjust_rgb(color);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2464 }
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2465 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2466
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2467 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2468 * Table with the specifications for an attribute number.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2469 * Note that this table is used by ALL buffers. This is required because the
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2470 * GUI can redraw at any time for any buffer.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2471 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2472 static garray_T term_attr_table = {0, 0, 0, 0, NULL};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2473
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2474 #define TERM_ATTR_ENTRY(idx) ((attrentry_T *)term_attr_table.ga_data)[idx]
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2475
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2476 static garray_T cterm_attr_table = {0, 0, 0, 0, NULL};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2477
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2478 #define CTERM_ATTR_ENTRY(idx) ((attrentry_T *)cterm_attr_table.ga_data)[idx]
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2479
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2480 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2481 static garray_T gui_attr_table = {0, 0, 0, 0, NULL};
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2482
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2483 #define GUI_ATTR_ENTRY(idx) ((attrentry_T *)gui_attr_table.ga_data)[idx]
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2484 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2485
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2486 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2487 * Return the attr number for a set of colors and font.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2488 * Add a new entry to the term_attr_table, cterm_attr_table or gui_attr_table
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2489 * if the combination is new.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2490 * Return 0 for error (no more room).
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2491 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2492 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2493 get_attr_entry(garray_T *table, attrentry_T *aep)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2494 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2495 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2496 attrentry_T *taep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2497 static int recursive = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2498
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
2499 // Init the table, in case it wasn't done yet.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2500 table->ga_itemsize = sizeof(attrentry_T);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2501 table->ga_growsize = 7;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2502
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
2503 // Try to find an entry with the same specifications.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2504 for (i = 0; i < table->ga_len; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2505 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2506 taep = &(((attrentry_T *)table->ga_data)[i]);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2507 if ( aep->ae_attr == taep->ae_attr
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2508 && (
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2509 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2510 (table == &gui_attr_table
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2511 && (aep->ae_u.gui.fg_color == taep->ae_u.gui.fg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2512 && aep->ae_u.gui.bg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2513 == taep->ae_u.gui.bg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2514 && aep->ae_u.gui.sp_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2515 == taep->ae_u.gui.sp_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2516 && aep->ae_u.gui.font == taep->ae_u.gui.font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2517 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2518 && aep->ae_u.gui.fontset == taep->ae_u.gui.fontset
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2519 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2520 ))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2521 ||
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2522 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2523 (table == &term_attr_table
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2524 && (aep->ae_u.term.start == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2525 == (taep->ae_u.term.start == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2526 && (aep->ae_u.term.start == NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2527 || STRCMP(aep->ae_u.term.start,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2528 taep->ae_u.term.start) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2529 && (aep->ae_u.term.stop == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2530 == (taep->ae_u.term.stop == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2531 && (aep->ae_u.term.stop == NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2532 || STRCMP(aep->ae_u.term.stop,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2533 taep->ae_u.term.stop) == 0))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2534 || (table == &cterm_attr_table
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2535 && aep->ae_u.cterm.fg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2536 == taep->ae_u.cterm.fg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2537 && aep->ae_u.cterm.bg_color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2538 == taep->ae_u.cterm.bg_color
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2539 && aep->ae_u.cterm.ul_color
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2540 == taep->ae_u.cterm.ul_color
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2541 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2542 && aep->ae_u.cterm.fg_rgb
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2543 == taep->ae_u.cterm.fg_rgb
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2544 && aep->ae_u.cterm.bg_rgb
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2545 == taep->ae_u.cterm.bg_rgb
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2546 && aep->ae_u.cterm.ul_rgb
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2547 == taep->ae_u.cterm.ul_rgb
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2548 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2549 )))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2550
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2551 return i + ATTR_OFF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2552 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2553
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2554 if (table->ga_len + ATTR_OFF > MAX_TYPENR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2555 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
2556 // Running out of attribute entries! remove all attributes, and
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
2557 // compute new ones for all groups.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
2558 // When called recursively, we are really out of numbers.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2559 if (recursive)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2560 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2561 emsg(_("E424: Too many different highlighting attributes in use"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2562 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2563 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2564 recursive = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2565
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2566 clear_hl_tables();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2567
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2568 must_redraw = CLEAR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2569
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2570 for (i = 0; i < highlight_ga.ga_len; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2571 set_hl_attr(i);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2572
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2573 recursive = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2574 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2575
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
2576 // This is a new combination of colors and font, add an entry.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2577 if (ga_grow(table, 1) == FAIL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2578 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2579
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2580 taep = &(((attrentry_T *)table->ga_data)[table->ga_len]);
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2581 CLEAR_POINTER(taep);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2582 taep->ae_attr = aep->ae_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2583 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2584 if (table == &gui_attr_table)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2585 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2586 taep->ae_u.gui.fg_color = aep->ae_u.gui.fg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2587 taep->ae_u.gui.bg_color = aep->ae_u.gui.bg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2588 taep->ae_u.gui.sp_color = aep->ae_u.gui.sp_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2589 taep->ae_u.gui.font = aep->ae_u.gui.font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2590 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2591 taep->ae_u.gui.fontset = aep->ae_u.gui.fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2592 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2593 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2594 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2595 if (table == &term_attr_table)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2596 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2597 if (aep->ae_u.term.start == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2598 taep->ae_u.term.start = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2599 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2600 taep->ae_u.term.start = vim_strsave(aep->ae_u.term.start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2601 if (aep->ae_u.term.stop == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2602 taep->ae_u.term.stop = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2603 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2604 taep->ae_u.term.stop = vim_strsave(aep->ae_u.term.stop);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2605 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2606 else if (table == &cterm_attr_table)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2607 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2608 taep->ae_u.cterm.fg_color = aep->ae_u.cterm.fg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2609 taep->ae_u.cterm.bg_color = aep->ae_u.cterm.bg_color;
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2610 taep->ae_u.cterm.ul_color = aep->ae_u.cterm.ul_color;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2611 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2612 taep->ae_u.cterm.fg_rgb = aep->ae_u.cterm.fg_rgb;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2613 taep->ae_u.cterm.bg_rgb = aep->ae_u.cterm.bg_rgb;
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2614 taep->ae_u.cterm.ul_rgb = aep->ae_u.cterm.ul_rgb;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2615 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2616 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2617 ++table->ga_len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2618 return (table->ga_len - 1 + ATTR_OFF);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2619 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2620
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2621 #if defined(FEAT_TERMINAL) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2622 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2623 * Get an attribute index for a cterm entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2624 * Uses an existing entry when possible or adds one when needed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2625 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2626 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2627 get_cterm_attr_idx(int attr, int fg, int bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2628 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2629 attrentry_T at_en;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2630
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2631 CLEAR_FIELD(at_en);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2632 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2633 at_en.ae_u.cterm.fg_rgb = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2634 at_en.ae_u.cterm.bg_rgb = INVALCOLOR;
20673
0ebd431a2256 patch 8.2.0890: no color in terminal window when 'termguicolor' is set
Bram Moolenaar <Bram@vim.org>
parents: 20619
diff changeset
2635 at_en.ae_u.cterm.ul_rgb = INVALCOLOR;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2636 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2637 at_en.ae_attr = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2638 at_en.ae_u.cterm.fg_color = fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2639 at_en.ae_u.cterm.bg_color = bg;
20675
02f648f1c8fa patch 8.2.0891: clang warns for invalid conversion
Bram Moolenaar <Bram@vim.org>
parents: 20673
diff changeset
2640 at_en.ae_u.cterm.ul_color = 0;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2641 return get_attr_entry(&cterm_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2642 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2643 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2644
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2645 #if (defined(FEAT_TERMINAL) && defined(FEAT_TERMGUICOLORS)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2646 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2647 * Get an attribute index for a 'termguicolors' entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2648 * Uses an existing entry when possible or adds one when needed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2649 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2650 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2651 get_tgc_attr_idx(int attr, guicolor_T fg, guicolor_T bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2652 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2653 attrentry_T at_en;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2654
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2655 CLEAR_FIELD(at_en);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2656 at_en.ae_attr = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2657 if (fg == INVALCOLOR && bg == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2658 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2659 // If both GUI colors are not set fall back to the cterm colors. Helps
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2660 // if the GUI only has an attribute, such as undercurl.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2661 at_en.ae_u.cterm.fg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2662 at_en.ae_u.cterm.bg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2663 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2664 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2665 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2666 at_en.ae_u.cterm.fg_rgb = fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2667 at_en.ae_u.cterm.bg_rgb = bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2668 }
20673
0ebd431a2256 patch 8.2.0890: no color in terminal window when 'termguicolor' is set
Bram Moolenaar <Bram@vim.org>
parents: 20619
diff changeset
2669 at_en.ae_u.cterm.ul_rgb = INVALCOLOR;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2670 return get_attr_entry(&cterm_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2671 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2672 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2673
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2674 #if (defined(FEAT_TERMINAL) && defined(FEAT_GUI)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2675 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2676 * Get an attribute index for a cterm entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2677 * Uses an existing entry when possible or adds one when needed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2678 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2679 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2680 get_gui_attr_idx(int attr, guicolor_T fg, guicolor_T bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2681 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2682 attrentry_T at_en;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2683
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2684 CLEAR_FIELD(at_en);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2685 at_en.ae_attr = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2686 at_en.ae_u.gui.fg_color = fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2687 at_en.ae_u.gui.bg_color = bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2688 return get_attr_entry(&gui_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2689 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2690 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2691
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2692 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2693 * Clear all highlight tables.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2694 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2695 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2696 clear_hl_tables(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2697 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2698 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2699 attrentry_T *taep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2700
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2701 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2702 ga_clear(&gui_attr_table);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2703 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2704 for (i = 0; i < term_attr_table.ga_len; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2705 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2706 taep = &(((attrentry_T *)term_attr_table.ga_data)[i]);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2707 vim_free(taep->ae_u.term.start);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2708 vim_free(taep->ae_u.term.stop);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2709 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2710 ga_clear(&term_attr_table);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2711 ga_clear(&cterm_attr_table);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2712 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2713
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2714 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2715 * Combine special attributes (e.g., for spelling) with other attributes
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2716 * (e.g., for syntax highlighting).
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2717 * "prim_attr" overrules "char_attr".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2718 * This creates a new group when required.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2719 * Since we expect there to be few spelling mistakes we don't cache the
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2720 * result.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2721 * Return the resulting attributes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2722 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2723 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2724 hl_combine_attr(int char_attr, int prim_attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2725 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2726 attrentry_T *char_aep = NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2727 attrentry_T *spell_aep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2728 attrentry_T new_en;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2729
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2730 if (char_attr == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2731 return prim_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2732 if (char_attr <= HL_ALL && prim_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2733 return ATTR_COMBINE(char_attr, prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2734 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2735 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2736 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2737 if (char_attr > HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2738 char_aep = syn_gui_attr2entry(char_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2739 if (char_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2740 new_en = *char_aep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2741 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2742 {
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2743 CLEAR_FIELD(new_en);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2744 new_en.ae_u.gui.fg_color = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2745 new_en.ae_u.gui.bg_color = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2746 new_en.ae_u.gui.sp_color = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2747 if (char_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2748 new_en.ae_attr = char_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2749 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2750
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2751 if (prim_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2752 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2753 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2754 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2755 spell_aep = syn_gui_attr2entry(prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2756 if (spell_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2757 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2758 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2759 spell_aep->ae_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2760 if (spell_aep->ae_u.gui.fg_color != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2761 new_en.ae_u.gui.fg_color = spell_aep->ae_u.gui.fg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2762 if (spell_aep->ae_u.gui.bg_color != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2763 new_en.ae_u.gui.bg_color = spell_aep->ae_u.gui.bg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2764 if (spell_aep->ae_u.gui.sp_color != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2765 new_en.ae_u.gui.sp_color = spell_aep->ae_u.gui.sp_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2766 if (spell_aep->ae_u.gui.font != NOFONT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2767 new_en.ae_u.gui.font = spell_aep->ae_u.gui.font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2768 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2769 if (spell_aep->ae_u.gui.fontset != NOFONTSET)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2770 new_en.ae_u.gui.fontset = spell_aep->ae_u.gui.fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2771 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2772 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2773 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2774 return get_attr_entry(&gui_attr_table, &new_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2775 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2776 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2777
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2778 if (IS_CTERM)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2779 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2780 if (char_attr > HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2781 char_aep = syn_cterm_attr2entry(char_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2782 if (char_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2783 new_en = *char_aep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2784 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2785 {
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2786 CLEAR_FIELD(new_en);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2787 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2788 new_en.ae_u.cterm.bg_rgb = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2789 new_en.ae_u.cterm.fg_rgb = INVALCOLOR;
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2790 new_en.ae_u.cterm.ul_rgb = INVALCOLOR;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2791 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2792 if (char_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2793 new_en.ae_attr = char_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2794 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2795
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2796 if (prim_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2797 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2798 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2799 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2800 spell_aep = syn_cterm_attr2entry(prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2801 if (spell_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2802 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2803 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2804 spell_aep->ae_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2805 if (spell_aep->ae_u.cterm.fg_color > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2806 new_en.ae_u.cterm.fg_color = spell_aep->ae_u.cterm.fg_color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2807 if (spell_aep->ae_u.cterm.bg_color > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2808 new_en.ae_u.cterm.bg_color = spell_aep->ae_u.cterm.bg_color;
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2809 if (spell_aep->ae_u.cterm.ul_color > 0)
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2810 new_en.ae_u.cterm.ul_color = spell_aep->ae_u.cterm.ul_color;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2811 #ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2812 // If both fg and bg are not set fall back to cterm colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2813 // Helps for SpellBad which uses undercurl in the GUI.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2814 if (COLOR_INVALID(spell_aep->ae_u.cterm.fg_rgb)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2815 && COLOR_INVALID(spell_aep->ae_u.cterm.bg_rgb))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2816 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2817 if (spell_aep->ae_u.cterm.fg_color > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2818 new_en.ae_u.cterm.fg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2819 if (spell_aep->ae_u.cterm.bg_color > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2820 new_en.ae_u.cterm.bg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2821 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2822 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2823 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2824 if (spell_aep->ae_u.cterm.fg_rgb != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2825 new_en.ae_u.cterm.fg_rgb = spell_aep->ae_u.cterm.fg_rgb;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2826 if (spell_aep->ae_u.cterm.bg_rgb != INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2827 new_en.ae_u.cterm.bg_rgb = spell_aep->ae_u.cterm.bg_rgb;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2828 }
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2829 if (spell_aep->ae_u.cterm.ul_rgb != INVALCOLOR)
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2830 new_en.ae_u.cterm.ul_rgb = spell_aep->ae_u.cterm.ul_rgb;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2831 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2832 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2833 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2834 return get_attr_entry(&cterm_attr_table, &new_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2835 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2836
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2837 if (char_attr > HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2838 char_aep = syn_term_attr2entry(char_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2839 if (char_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2840 new_en = *char_aep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2841 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2842 {
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2843 CLEAR_FIELD(new_en);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2844 if (char_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2845 new_en.ae_attr = char_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2846 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2847
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2848 if (prim_attr <= HL_ALL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2849 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2850 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2851 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2852 spell_aep = syn_term_attr2entry(prim_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2853 if (spell_aep != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2854 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2855 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, spell_aep->ae_attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2856 if (spell_aep->ae_u.term.start != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2857 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2858 new_en.ae_u.term.start = spell_aep->ae_u.term.start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2859 new_en.ae_u.term.stop = spell_aep->ae_u.term.stop;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2860 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2861 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2862 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2863 return get_attr_entry(&term_attr_table, &new_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2864 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2865
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2866 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2867 attrentry_T *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2868 syn_gui_attr2entry(int attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2869 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2870 attr -= ATTR_OFF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2871 if (attr >= gui_attr_table.ga_len) // did ":syntax clear"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2872 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2873 return &(GUI_ATTR_ENTRY(attr));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2874 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2875 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2876
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2877 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2878 * Get the highlight attributes (HL_BOLD etc.) from an attribute nr.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2879 * Only to be used when "attr" > HL_ALL.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2880 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2881 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2882 syn_attr2attr(int attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2883 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2884 attrentry_T *aep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2885
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2886 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2887 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2888 aep = syn_gui_attr2entry(attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2889 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2890 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2891 if (IS_CTERM)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2892 aep = syn_cterm_attr2entry(attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2893 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2894 aep = syn_term_attr2entry(attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2895
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2896 if (aep == NULL) // highlighting not set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2897 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2898 return aep->ae_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2899 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2900
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2901
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2902 attrentry_T *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2903 syn_term_attr2entry(int attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2904 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2905 attr -= ATTR_OFF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2906 if (attr >= term_attr_table.ga_len) // did ":syntax clear"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2907 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2908 return &(TERM_ATTR_ENTRY(attr));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2909 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2910
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2911 attrentry_T *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2912 syn_cterm_attr2entry(int attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2913 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2914 attr -= ATTR_OFF;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2915 if (attr >= cterm_attr_table.ga_len) // did ":syntax clear"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2916 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2917 return &(CTERM_ATTR_ENTRY(attr));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2918 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2919
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2920 #define LIST_ATTR 1
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2921 #define LIST_STRING 2
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2922 #define LIST_INT 3
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2923
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2924 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2925 highlight_list_one(int id)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2926 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2927 hl_group_T *sgp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2928 int didh = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2929
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2930 sgp = &HL_TABLE()[id - 1]; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2931
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2932 if (message_filtered(sgp->sg_name))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2933 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2934
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2935 didh = highlight_list_arg(id, didh, LIST_ATTR,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2936 sgp->sg_term, NULL, "term");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2937 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2938 0, sgp->sg_start, "start");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2939 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2940 0, sgp->sg_stop, "stop");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2941
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2942 didh = highlight_list_arg(id, didh, LIST_ATTR,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2943 sgp->sg_cterm, NULL, "cterm");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2944 didh = highlight_list_arg(id, didh, LIST_INT,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2945 sgp->sg_cterm_fg, NULL, "ctermfg");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2946 didh = highlight_list_arg(id, didh, LIST_INT,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2947 sgp->sg_cterm_bg, NULL, "ctermbg");
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2948 didh = highlight_list_arg(id, didh, LIST_INT,
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
2949 sgp->sg_cterm_ul, NULL, "ctermul");
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2950
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2951 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2952 didh = highlight_list_arg(id, didh, LIST_ATTR,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2953 sgp->sg_gui, NULL, "gui");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2954 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2955 0, sgp->sg_gui_fg_name, "guifg");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2956 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2957 0, sgp->sg_gui_bg_name, "guibg");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2958 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2959 0, sgp->sg_gui_sp_name, "guisp");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2960 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2961 #ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2962 didh = highlight_list_arg(id, didh, LIST_STRING,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2963 0, sgp->sg_font_name, "font");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2964 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2965
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2966 if (sgp->sg_link && !got_int)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2967 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2968 (void)syn_list_header(didh, 9999, id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2969 didh = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2970 msg_puts_attr("links to", HL_ATTR(HLF_D));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2971 msg_putchar(' ');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2972 msg_outtrans(HL_TABLE()[HL_TABLE()[id - 1].sg_link - 1].sg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2973 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2974
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2975 if (!didh)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2976 highlight_list_arg(id, didh, LIST_STRING, 0, (char_u *)"cleared", "");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2977 #ifdef FEAT_EVAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2978 if (p_verbose > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2979 last_set_msg(sgp->sg_script_ctx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2980 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2981 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2982
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2983 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2984 highlight_list_arg(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2985 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2986 int didh,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2987 int type,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2988 int iarg,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2989 char_u *sarg,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2990 char *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2991 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2992 char_u buf[100];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2993 char_u *ts;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2994 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2995
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2996 if (got_int)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2997 return FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2998 if (type == LIST_STRING ? (sarg != NULL) : (iarg != 0))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2999 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3000 ts = buf;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3001 if (type == LIST_INT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3002 sprintf((char *)buf, "%d", iarg - 1);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3003 else if (type == LIST_STRING)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3004 ts = sarg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3005 else // type == LIST_ATTR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3006 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3007 buf[0] = NUL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3008 for (i = 0; hl_attr_table[i] != 0; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3009 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3010 if (iarg & hl_attr_table[i])
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3011 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3012 if (buf[0] != NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3013 vim_strcat(buf, (char_u *)",", 100);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3014 vim_strcat(buf, (char_u *)hl_name_table[i], 100);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3015 iarg &= ~hl_attr_table[i]; // don't want "inverse"
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3016 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3017 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3018 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3019
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3020 (void)syn_list_header(didh,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3021 (int)(vim_strsize(ts) + STRLEN(name) + 1), id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3022 didh = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3023 if (!got_int)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3024 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3025 if (*name != NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3026 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3027 msg_puts_attr(name, HL_ATTR(HLF_D));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3028 msg_puts_attr("=", HL_ATTR(HLF_D));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3029 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3030 msg_outtrans(ts);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3031 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3032 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3033 return didh;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3034 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3035
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3036 #if (((defined(FEAT_EVAL) || defined(FEAT_PRINTER))) && defined(FEAT_SYN_HL)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3037 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3038 * Return "1" if highlight group "id" has attribute "flag".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3039 * Return NULL otherwise.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3040 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3041 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3042 highlight_has_attr(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3043 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3044 int flag,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3045 int modec) // 'g' for GUI, 'c' for cterm, 't' for term
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3046 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3047 int attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3048
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3049 if (id <= 0 || id > highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3050 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3051
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3052 #if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3053 if (modec == 'g')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3054 attr = HL_TABLE()[id - 1].sg_gui;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3055 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3056 #endif
26009
990958e8c3a2 patch 8.2.3538: else-if indenting is confusing
Bram Moolenaar <Bram@vim.org>
parents: 26005
diff changeset
3057 {
990958e8c3a2 patch 8.2.3538: else-if indenting is confusing
Bram Moolenaar <Bram@vim.org>
parents: 26005
diff changeset
3058 if (modec == 'c')
990958e8c3a2 patch 8.2.3538: else-if indenting is confusing
Bram Moolenaar <Bram@vim.org>
parents: 26005
diff changeset
3059 attr = HL_TABLE()[id - 1].sg_cterm;
990958e8c3a2 patch 8.2.3538: else-if indenting is confusing
Bram Moolenaar <Bram@vim.org>
parents: 26005
diff changeset
3060 else
990958e8c3a2 patch 8.2.3538: else-if indenting is confusing
Bram Moolenaar <Bram@vim.org>
parents: 26005
diff changeset
3061 attr = HL_TABLE()[id - 1].sg_term;
990958e8c3a2 patch 8.2.3538: else-if indenting is confusing
Bram Moolenaar <Bram@vim.org>
parents: 26005
diff changeset
3062 }
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3063
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3064 if (attr & flag)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3065 return (char_u *)"1";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3066 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3067 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3068 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3069
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3070 #if (defined(FEAT_SYN_HL) && defined(FEAT_EVAL)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3071 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3072 * Return color name of highlight group "id".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3073 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3074 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3075 highlight_color(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3076 int id,
22446
0cdb03e73ce9 patch 8.2.1771: synIDattr() cannot get the value of ctermul
Bram Moolenaar <Bram@vim.org>
parents: 22312
diff changeset
3077 char_u *what, // "font", "fg", "bg", "sp", "ul", "fg#", "bg#" or "sp#"
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3078 int modec) // 'g' for GUI, 'c' for cterm, 't' for term
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3079 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3080 static char_u name[20];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3081 int n;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3082 int fg = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3083 int sp = FALSE;
22446
0cdb03e73ce9 patch 8.2.1771: synIDattr() cannot get the value of ctermul
Bram Moolenaar <Bram@vim.org>
parents: 22312
diff changeset
3084 int ul = FALSE;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3085 int font = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3086
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3087 if (id <= 0 || id > highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3088 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3089
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3090 if (TOLOWER_ASC(what[0]) == 'f' && TOLOWER_ASC(what[1]) == 'g')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3091 fg = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3092 else if (TOLOWER_ASC(what[0]) == 'f' && TOLOWER_ASC(what[1]) == 'o'
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3093 && TOLOWER_ASC(what[2]) == 'n' && TOLOWER_ASC(what[3]) == 't')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3094 font = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3095 else if (TOLOWER_ASC(what[0]) == 's' && TOLOWER_ASC(what[1]) == 'p')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3096 sp = TRUE;
22446
0cdb03e73ce9 patch 8.2.1771: synIDattr() cannot get the value of ctermul
Bram Moolenaar <Bram@vim.org>
parents: 22312
diff changeset
3097 else if (TOLOWER_ASC(what[0]) == 'u' && TOLOWER_ASC(what[1]) == 'l')
0cdb03e73ce9 patch 8.2.1771: synIDattr() cannot get the value of ctermul
Bram Moolenaar <Bram@vim.org>
parents: 22312
diff changeset
3098 ul = TRUE;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3099 else if (!(TOLOWER_ASC(what[0]) == 'b' && TOLOWER_ASC(what[1]) == 'g'))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3100 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3101 if (modec == 'g')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3102 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3103 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3104 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3105 // return font name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3106 if (font)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3107 return HL_TABLE()[id - 1].sg_font_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3108 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3109
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3110 // return #RRGGBB form (only possible when GUI is running)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3111 if ((USE_24BIT) && what[2] == '#')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3112 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3113 guicolor_T color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3114 long_u rgb;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3115 static char_u buf[10];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3116
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3117 if (fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3118 color = HL_TABLE()[id - 1].sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3119 else if (sp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3120 color = HL_TABLE()[id - 1].sg_gui_sp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3121 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3122 color = HL_TABLE()[id - 1].sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3123 if (color == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3124 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3125 rgb = (long_u)GUI_MCH_GET_RGB(color);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3126 sprintf((char *)buf, "#%02x%02x%02x",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3127 (unsigned)(rgb >> 16),
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3128 (unsigned)(rgb >> 8) & 255,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3129 (unsigned)rgb & 255);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3130 return buf;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3131 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3132 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3133 if (fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3134 return (HL_TABLE()[id - 1].sg_gui_fg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3135 if (sp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3136 return (HL_TABLE()[id - 1].sg_gui_sp_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3137 return (HL_TABLE()[id - 1].sg_gui_bg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3138 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3139 if (font || sp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3140 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3141 if (modec == 'c')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3142 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3143 if (fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3144 n = HL_TABLE()[id - 1].sg_cterm_fg - 1;
22446
0cdb03e73ce9 patch 8.2.1771: synIDattr() cannot get the value of ctermul
Bram Moolenaar <Bram@vim.org>
parents: 22312
diff changeset
3145 else if (ul)
0cdb03e73ce9 patch 8.2.1771: synIDattr() cannot get the value of ctermul
Bram Moolenaar <Bram@vim.org>
parents: 22312
diff changeset
3146 n = HL_TABLE()[id - 1].sg_cterm_ul - 1;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3147 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3148 n = HL_TABLE()[id - 1].sg_cterm_bg - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3149 if (n < 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3150 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3151 sprintf((char *)name, "%d", n);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3152 return name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3153 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3154 // term doesn't have color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3155 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3156 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3157 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3158
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3159 #if (defined(FEAT_SYN_HL) \
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3160 && (defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)) \
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3161 && defined(FEAT_PRINTER)) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3162 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3163 * Return color name of highlight group "id" as RGB value.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3164 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3165 long_u
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3166 highlight_gui_color_rgb(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3167 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3168 int fg) // TRUE = fg, FALSE = bg
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3169 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3170 guicolor_T color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3171
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3172 if (id <= 0 || id > highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3173 return 0L;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3174
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3175 if (fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3176 color = HL_TABLE()[id - 1].sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3177 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3178 color = HL_TABLE()[id - 1].sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3179
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3180 if (color == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3181 return 0L;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3182
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3183 return GUI_MCH_GET_RGB(color);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3184 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3185 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3186
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3187 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3188 * Output the syntax list header.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3189 * Return TRUE when started a new line.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3190 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3191 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3192 syn_list_header(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3193 int did_header, // did header already
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3194 int outlen, // length of string that comes
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3195 int id) // highlight group id
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3196 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3197 int endcol = 19;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3198 int newline = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3199 int name_col = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3200
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3201 if (!did_header)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3202 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3203 msg_putchar('\n');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3204 if (got_int)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3205 return TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3206 msg_outtrans(HL_TABLE()[id - 1].sg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3207 name_col = msg_col;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3208 endcol = 15;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3209 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3210 else if (msg_col + outlen + 1 >= Columns)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3211 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3212 msg_putchar('\n');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3213 if (got_int)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3214 return TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3215 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3216 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3217 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3218 if (msg_col >= endcol) // wrap around is like starting a new line
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3219 newline = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3220 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3221
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3222 if (msg_col >= endcol) // output at least one space
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3223 endcol = msg_col + 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3224 if (Columns <= endcol) // avoid hang for tiny window
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3225 endcol = Columns - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3226
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3227 msg_advance(endcol);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3228
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3229 // Show "xxx" with the attributes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3230 if (!did_header)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3231 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3232 if (endcol == Columns - 1 && endcol <= name_col)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3233 msg_putchar(' ');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3234 msg_puts_attr("xxx", syn_id2attr(id));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3235 msg_putchar(' ');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3236 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3237
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3238 return newline;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3239 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3240
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3241 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3242 * Set the attribute numbers for a highlight group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3243 * Called after one of the attributes has changed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3244 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3245 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3246 set_hl_attr(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3247 int idx) // index in array
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3248 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3249 attrentry_T at_en;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3250 hl_group_T *sgp = HL_TABLE() + idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3251
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3252 // The "Normal" group doesn't need an attribute number
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3253 if (sgp->sg_name_u != NULL && STRCMP(sgp->sg_name_u, "NORMAL") == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3254 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3255
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3256 #ifdef FEAT_GUI
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3257 // For the GUI mode: If there are other than "normal" highlighting
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3258 // attributes, need to allocate an attr number.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3259 if (sgp->sg_gui_fg == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3260 && sgp->sg_gui_bg == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3261 && sgp->sg_gui_sp == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3262 && sgp->sg_font == NOFONT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3263 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3264 && sgp->sg_fontset == NOFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3265 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3266 )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3267 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3268 sgp->sg_gui_attr = sgp->sg_gui;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3269 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3270 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3271 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3272 at_en.ae_attr = sgp->sg_gui;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3273 at_en.ae_u.gui.fg_color = sgp->sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3274 at_en.ae_u.gui.bg_color = sgp->sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3275 at_en.ae_u.gui.sp_color = sgp->sg_gui_sp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3276 at_en.ae_u.gui.font = sgp->sg_font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3277 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3278 at_en.ae_u.gui.fontset = sgp->sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3279 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3280 sgp->sg_gui_attr = get_attr_entry(&gui_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3281 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3282 #endif
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3283 // For the term mode: If there are other than "normal" highlighting
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3284 // attributes, need to allocate an attr number.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3285 if (sgp->sg_start == NULL && sgp->sg_stop == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3286 sgp->sg_term_attr = sgp->sg_term;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3287 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3288 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3289 at_en.ae_attr = sgp->sg_term;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3290 at_en.ae_u.term.start = sgp->sg_start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3291 at_en.ae_u.term.stop = sgp->sg_stop;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3292 sgp->sg_term_attr = get_attr_entry(&term_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3293 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3294
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3295 // For the color term mode: If there are other than "normal"
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3296 // highlighting attributes, need to allocate an attr number.
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
3297 if (sgp->sg_cterm_fg == 0 && sgp->sg_cterm_bg == 0 && sgp->sg_cterm_ul == 0
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3298 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3299 && sgp->sg_gui_fg == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3300 && sgp->sg_gui_bg == INVALCOLOR
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
3301 && sgp->sg_gui_sp == INVALCOLOR
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3302 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3303 )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3304 sgp->sg_cterm_attr = sgp->sg_cterm;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3305 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3306 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3307 at_en.ae_attr = sgp->sg_cterm;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3308 at_en.ae_u.cterm.fg_color = sgp->sg_cterm_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3309 at_en.ae_u.cterm.bg_color = sgp->sg_cterm_bg;
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
3310 at_en.ae_u.cterm.ul_color = sgp->sg_cterm_ul;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3311 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3312 # ifdef MSWIN
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3313 # ifdef VIMDLL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3314 // Only when not using the GUI.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3315 if (!gui.in_use && !gui.starting)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3316 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3317 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3318 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3319 guicolor_T fg, bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3320
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3321 id = syn_name2id((char_u *)"Normal");
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3322 if (id > 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3323 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3324 syn_id2colors(id, &fg, &bg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3325 if (sgp->sg_gui_fg == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3326 sgp->sg_gui_fg = fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3327 if (sgp->sg_gui_bg == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3328 sgp->sg_gui_bg = bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3329 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3330
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3331 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3332 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3333 at_en.ae_u.cterm.fg_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_fg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3334 at_en.ae_u.cterm.bg_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_bg);
20705
5481c982a279 patch 8.2.0906: when setting 'termguicolors' SpellBad is no longer red
Bram Moolenaar <Bram@vim.org>
parents: 20675
diff changeset
3335 // Only use the underline/undercurl color when used, it may clear the
5481c982a279 patch 8.2.0906: when setting 'termguicolors' SpellBad is no longer red
Bram Moolenaar <Bram@vim.org>
parents: 20675
diff changeset
3336 // background color if not supported.
5481c982a279 patch 8.2.0906: when setting 'termguicolors' SpellBad is no longer red
Bram Moolenaar <Bram@vim.org>
parents: 20675
diff changeset
3337 if (sgp->sg_cterm & (HL_UNDERLINE | HL_UNDERCURL))
5481c982a279 patch 8.2.0906: when setting 'termguicolors' SpellBad is no longer red
Bram Moolenaar <Bram@vim.org>
parents: 20675
diff changeset
3338 at_en.ae_u.cterm.ul_rgb = GUI_MCH_GET_RGB2(sgp->sg_gui_sp);
5481c982a279 patch 8.2.0906: when setting 'termguicolors' SpellBad is no longer red
Bram Moolenaar <Bram@vim.org>
parents: 20675
diff changeset
3339 else
5481c982a279 patch 8.2.0906: when setting 'termguicolors' SpellBad is no longer red
Bram Moolenaar <Bram@vim.org>
parents: 20675
diff changeset
3340 at_en.ae_u.cterm.ul_rgb = INVALCOLOR;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3341 if (at_en.ae_u.cterm.fg_rgb == INVALCOLOR
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3342 && at_en.ae_u.cterm.bg_rgb == INVALCOLOR)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3343 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3344 // If both fg and bg are invalid fall back to the cterm colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3345 // Helps when the GUI only uses an attribute, e.g. undercurl.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3346 at_en.ae_u.cterm.fg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3347 at_en.ae_u.cterm.bg_rgb = CTERMCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3348 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3349 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3350 sgp->sg_cterm_attr = get_attr_entry(&cterm_attr_table, &at_en);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3351 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3352 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3353
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3354 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3355 * Lookup a highlight group name and return its ID.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3356 * If it is not found, 0 is returned.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3357 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3358 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3359 syn_name2id(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3360 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3361 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3362 char_u name_u[200];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3363
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3364 // Avoid using stricmp() too much, it's slow on some systems
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3365 // Avoid alloc()/free(), these are slow too. ID names over 200 chars
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3366 // don't deserve to be found!
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3367 vim_strncpy(name_u, name, 199);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3368 vim_strup(name_u);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3369 for (i = highlight_ga.ga_len; --i >= 0; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3370 if (HL_TABLE()[i].sg_name_u != NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3371 && STRCMP(name_u, HL_TABLE()[i].sg_name_u) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3372 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3373 return i + 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3374 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3375
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3376 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3377 * Lookup a highlight group name and return its attributes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3378 * Return zero if not found.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3379 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3380 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3381 syn_name2attr(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3382 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3383 int id = syn_name2id(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3384
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3385 if (id != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3386 return syn_id2attr(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3387 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3388 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3390 #if defined(FEAT_EVAL) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3391 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3392 * Return TRUE if highlight group "name" exists.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3393 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3394 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3395 highlight_exists(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3396 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3397 return (syn_name2id(name) > 0);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3398 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3399
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3400 # if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3401 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3402 * Return the name of highlight group "id".
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3403 * When not a valid ID return an empty string.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3404 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3405 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3406 syn_id2name(int id)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3407 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3408 if (id <= 0 || id > highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3409 return (char_u *)"";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3410 return HL_TABLE()[id - 1].sg_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3411 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3412 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3413 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3414
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3415 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3416 * Like syn_name2id(), but take a pointer + length argument.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3417 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3418 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3419 syn_namen2id(char_u *linep, int len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3420 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3421 char_u *name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3422 int id = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3423
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3424 name = vim_strnsave(linep, len);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3425 if (name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3426 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3427 id = syn_name2id(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3428 vim_free(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3429 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3430 return id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3431 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3432
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3433 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3434 * Find highlight group name in the table and return its ID.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3435 * The argument is a pointer to the name and the length of the name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3436 * If it doesn't exist yet, a new entry is created.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3437 * Return 0 for failure.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3438 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3439 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3440 syn_check_group(char_u *pp, int len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3441 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3442 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3443 char_u *name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3444
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3445 name = vim_strnsave(pp, len);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3446 if (name == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3447 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3448
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3449 id = syn_name2id(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3450 if (id == 0) // doesn't exist yet
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3451 id = syn_add_group(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3452 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3453 vim_free(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3454 return id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3455 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3456
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3457 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3458 * Add new highlight group and return its ID.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3459 * "name" must be an allocated string, it will be consumed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3460 * Return 0 for failure.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3461 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3462 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3463 syn_add_group(char_u *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3464 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3465 char_u *p;
17797
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3466 char_u *name_up;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3467
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3468 // Check that the name is ASCII letters, digits and underscore.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3469 for (p = name; *p != NUL; ++p)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3470 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3471 if (!vim_isprintc(*p))
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3472 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3473 emsg(_("E669: Unprintable character in group name"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3474 vim_free(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3475 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3476 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3477 else if (!ASCII_ISALNUM(*p) && *p != '_')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3478 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3479 // This is an error, but since there previously was no check only
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3480 // give a warning.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3481 msg_source(HL_ATTR(HLF_W));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3482 msg(_("W18: Invalid character in group name"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3483 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3484 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3485 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3486
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3487 // First call for this growarray: init growing array.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3488 if (highlight_ga.ga_data == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3489 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3490 highlight_ga.ga_itemsize = sizeof(hl_group_T);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3491 highlight_ga.ga_growsize = 10;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3492 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3493
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3494 if (highlight_ga.ga_len >= MAX_HL_ID)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3495 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3496 emsg(_("E849: Too many highlight and syntax groups"));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3497 vim_free(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3498 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3499 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3500
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3501 // Make room for at least one other syntax_highlight entry.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3502 if (ga_grow(&highlight_ga, 1) == FAIL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3503 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3504 vim_free(name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3505 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3506 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3507
17797
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3508 name_up = vim_strsave_up(name);
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3509 if (name_up == NULL)
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3510 {
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3511 vim_free(name);
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3512 return 0;
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3513 }
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3514
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
3515 CLEAR_POINTER(&(HL_TABLE()[highlight_ga.ga_len]));
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3516 HL_TABLE()[highlight_ga.ga_len].sg_name = name;
17797
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3517 HL_TABLE()[highlight_ga.ga_len].sg_name_u = name_up;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3518 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3519 HL_TABLE()[highlight_ga.ga_len].sg_gui_bg = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3520 HL_TABLE()[highlight_ga.ga_len].sg_gui_fg = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3521 HL_TABLE()[highlight_ga.ga_len].sg_gui_sp = INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3522 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3523 ++highlight_ga.ga_len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3524
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3525 return highlight_ga.ga_len; // ID is index plus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3526 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3527
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3528 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3529 * When, just after calling syn_add_group(), an error is discovered, this
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3530 * function deletes the new name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3531 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3532 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3533 syn_unadd_group(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3534 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3535 --highlight_ga.ga_len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3536 vim_free(HL_TABLE()[highlight_ga.ga_len].sg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3537 vim_free(HL_TABLE()[highlight_ga.ga_len].sg_name_u);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3538 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3539
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3540 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3541 * Translate a group ID to highlight attributes.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3542 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3543 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3544 syn_id2attr(int hl_id)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3545 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3546 int attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3547 hl_group_T *sgp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3548
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3549 hl_id = syn_get_final_id(hl_id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3550 sgp = &HL_TABLE()[hl_id - 1]; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3551
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3552 #ifdef FEAT_GUI
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3553 // Only use GUI attr when the GUI is being used.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3554 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3555 attr = sgp->sg_gui_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3556 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3557 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3558 if (IS_CTERM)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3559 attr = sgp->sg_cterm_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3560 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3561 attr = sgp->sg_term_attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3562
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3563 return attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3564 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3565
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3566 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3567 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3568 * Get the GUI colors and attributes for a group ID.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3569 * NOTE: the colors will be INVALCOLOR when not set, the color otherwise.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3570 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3571 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3572 syn_id2colors(int hl_id, guicolor_T *fgp, guicolor_T *bgp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3573 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3574 hl_group_T *sgp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3575
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3576 hl_id = syn_get_final_id(hl_id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3577 sgp = &HL_TABLE()[hl_id - 1]; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3578
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3579 *fgp = sgp->sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3580 *bgp = sgp->sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3581 return sgp->sg_gui;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3582 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3583 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3584
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3585 #if (defined(MSWIN) \
19265
ce8c47ed54e5 patch 8.2.0191: cannot put a terminal in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19201
diff changeset
3586 && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL)) \
ce8c47ed54e5 patch 8.2.0191: cannot put a terminal in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19201
diff changeset
3587 && defined(FEAT_TERMGUICOLORS)) \
ce8c47ed54e5 patch 8.2.0191: cannot put a terminal in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19201
diff changeset
3588 || defined(FEAT_TERMINAL) || defined(PROTO)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3589 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3590 syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3591 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3592 hl_group_T *sgp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3593
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3594 hl_id = syn_get_final_id(hl_id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3595 sgp = &HL_TABLE()[hl_id - 1]; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3596 *fgp = sgp->sg_cterm_fg - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3597 *bgp = sgp->sg_cterm_bg - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3598 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3599 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3600
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3601 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3602 * Translate a group ID to the final group ID (following links).
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3603 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3604 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3605 syn_get_final_id(int hl_id)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3606 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3607 int count;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3608 hl_group_T *sgp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3609
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3610 if (hl_id > highlight_ga.ga_len || hl_id < 1)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3611 return 0; // Can be called from eval!!
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3612
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3613 // Follow links until there is no more.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3614 // Look out for loops! Break after 100 links.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3615 for (count = 100; --count >= 0; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3616 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3617 sgp = &HL_TABLE()[hl_id - 1]; // index is ID minus one
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3618 if (sgp->sg_link == 0 || sgp->sg_link > highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3619 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3620 hl_id = sgp->sg_link;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3621 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3622
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3623 return hl_id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3624 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3625
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3626 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3627 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3628 * Call this function just after the GUI has started.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3629 * Also called when 'termguicolors' was set, gui.in_use will be FALSE then.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3630 * It finds the font and color handles for the highlighting groups.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3631 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3632 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3633 highlight_gui_started(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3634 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3635 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3636
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3637 // First get the colors from the "Normal" and "Menu" group, if set
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3638 if (USE_24BIT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3639 set_normal_colors();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3640
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3641 for (idx = 0; idx < highlight_ga.ga_len; ++idx)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3642 gui_do_one_color(idx, FALSE, FALSE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3643
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3644 highlight_changed();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3645 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3646
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3647 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3648 gui_do_one_color(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3649 int idx,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3650 int do_menu UNUSED, // TRUE: might set the menu font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3651 int do_tooltip UNUSED) // TRUE: might set the tooltip font
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3652 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3653 int didit = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3654
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3655 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3656 # ifdef FEAT_TERMGUICOLORS
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3657 if (gui.in_use)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3658 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3659 if (HL_TABLE()[idx].sg_font_name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3660 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3661 hl_do_font(idx, HL_TABLE()[idx].sg_font_name, FALSE, do_menu,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3662 do_tooltip, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3663 didit = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3664 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3665 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3666 if (HL_TABLE()[idx].sg_gui_fg_name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3667 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3668 HL_TABLE()[idx].sg_gui_fg =
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3669 color_name2handle(HL_TABLE()[idx].sg_gui_fg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3670 didit = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3671 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3672 if (HL_TABLE()[idx].sg_gui_bg_name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3673 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3674 HL_TABLE()[idx].sg_gui_bg =
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3675 color_name2handle(HL_TABLE()[idx].sg_gui_bg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3676 didit = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3677 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3678 if (HL_TABLE()[idx].sg_gui_sp_name != NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3679 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3680 HL_TABLE()[idx].sg_gui_sp =
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3681 color_name2handle(HL_TABLE()[idx].sg_gui_sp_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3682 didit = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3683 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3684 if (didit) // need to get a new attr number
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3685 set_hl_attr(idx);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3686 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3687 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3688
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3689 #if defined(USER_HIGHLIGHT) && defined(FEAT_STL_OPT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3690 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3691 * Apply difference between User[1-9] and HLF_S to HLF_SNC, HLF_ST or HLF_STNC.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3692 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3693 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3694 combine_stl_hlt(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3695 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3696 int id_S,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3697 int id_alt,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3698 int hlcnt,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3699 int i,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3700 int hlf,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3701 int *table)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3702 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3703 hl_group_T *hlt = HL_TABLE();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3704
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3705 if (id_alt == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3706 {
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
3707 CLEAR_POINTER(&hlt[hlcnt + i]);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3708 hlt[hlcnt + i].sg_term = highlight_attr[hlf];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3709 hlt[hlcnt + i].sg_cterm = highlight_attr[hlf];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3710 # if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3711 hlt[hlcnt + i].sg_gui = highlight_attr[hlf];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3712 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3713 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3714 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3715 mch_memmove(&hlt[hlcnt + i],
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3716 &hlt[id_alt - 1],
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3717 sizeof(hl_group_T));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3718 hlt[hlcnt + i].sg_link = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3719
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3720 hlt[hlcnt + i].sg_term ^=
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3721 hlt[id - 1].sg_term ^ hlt[id_S - 1].sg_term;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3722 if (hlt[id - 1].sg_start != hlt[id_S - 1].sg_start)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3723 hlt[hlcnt + i].sg_start = hlt[id - 1].sg_start;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3724 if (hlt[id - 1].sg_stop != hlt[id_S - 1].sg_stop)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3725 hlt[hlcnt + i].sg_stop = hlt[id - 1].sg_stop;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3726 hlt[hlcnt + i].sg_cterm ^=
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3727 hlt[id - 1].sg_cterm ^ hlt[id_S - 1].sg_cterm;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3728 if (hlt[id - 1].sg_cterm_fg != hlt[id_S - 1].sg_cterm_fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3729 hlt[hlcnt + i].sg_cterm_fg = hlt[id - 1].sg_cterm_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3730 if (hlt[id - 1].sg_cterm_bg != hlt[id_S - 1].sg_cterm_bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3731 hlt[hlcnt + i].sg_cterm_bg = hlt[id - 1].sg_cterm_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3732 # if defined(FEAT_GUI) || defined(FEAT_EVAL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3733 hlt[hlcnt + i].sg_gui ^=
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3734 hlt[id - 1].sg_gui ^ hlt[id_S - 1].sg_gui;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3735 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3736 # ifdef FEAT_GUI
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3737 if (hlt[id - 1].sg_gui_fg != hlt[id_S - 1].sg_gui_fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3738 hlt[hlcnt + i].sg_gui_fg = hlt[id - 1].sg_gui_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3739 if (hlt[id - 1].sg_gui_bg != hlt[id_S - 1].sg_gui_bg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3740 hlt[hlcnt + i].sg_gui_bg = hlt[id - 1].sg_gui_bg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3741 if (hlt[id - 1].sg_gui_sp != hlt[id_S - 1].sg_gui_sp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3742 hlt[hlcnt + i].sg_gui_sp = hlt[id - 1].sg_gui_sp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3743 if (hlt[id - 1].sg_font != hlt[id_S - 1].sg_font)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3744 hlt[hlcnt + i].sg_font = hlt[id - 1].sg_font;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3745 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3746 if (hlt[id - 1].sg_fontset != hlt[id_S - 1].sg_fontset)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3747 hlt[hlcnt + i].sg_fontset = hlt[id - 1].sg_fontset;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3748 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3749 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3750 highlight_ga.ga_len = hlcnt + i + 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3751 set_hl_attr(hlcnt + i); // At long last we can apply
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3752 table[i] = syn_id2attr(hlcnt + i + 1);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3753 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3754 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3755
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3756 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3757 * Translate the 'highlight' option into attributes in highlight_attr[] and
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3758 * set up the user highlights User1..9. If FEAT_STL_OPT is in use, a set of
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3759 * corresponding highlights to use on top of HLF_SNC is computed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3760 * Called only when the 'highlight' option has been changed and upon first
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3761 * screen redraw after any :highlight command.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3762 * Return FAIL when an invalid flag is found in 'highlight'. OK otherwise.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3763 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3764 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3765 highlight_changed(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3766 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3767 int hlf;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3768 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3769 char_u *p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3770 int attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3771 char_u *end;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3772 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3773 #ifdef USER_HIGHLIGHT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3774 char_u userhl[30]; // use 30 to avoid compiler warning
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3775 # ifdef FEAT_STL_OPT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3776 int id_S = -1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3777 int id_SNC = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3778 # ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3779 int id_ST = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3780 int id_STNC = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3781 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3782 int hlcnt;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3783 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3784 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3785 static int hl_flags[HLF_COUNT] = HL_FLAGS;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3786
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3787 need_highlight_changed = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3788
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3789 // Clear all attributes.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3790 for (hlf = 0; hlf < (int)HLF_COUNT; ++hlf)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3791 highlight_attr[hlf] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3792
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3793 // First set all attributes to their default value.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3794 // Then use the attributes from the 'highlight' option.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3795 for (i = 0; i < 2; ++i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3796 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3797 if (i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3798 p = p_hl;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3799 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3800 p = get_highlight_default();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3801 if (p == NULL) // just in case
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3802 continue;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3803
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3804 while (*p)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3805 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3806 for (hlf = 0; hlf < (int)HLF_COUNT; ++hlf)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3807 if (hl_flags[hlf] == *p)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3808 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3809 ++p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3810 if (hlf == (int)HLF_COUNT || *p == NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3811 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3812
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3813 // Allow several hl_flags to be combined, like "bu" for
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3814 // bold-underlined.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3815 attr = 0;
18806
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
3816 for ( ; *p && *p != ','; ++p) // parse up to comma
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3817 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3818 if (VIM_ISWHITE(*p)) // ignore white space
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3819 continue;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3820
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3821 if (attr > HL_ALL) // Combination with ':' is not allowed.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3822 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3823
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3824 switch (*p)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3825 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3826 case 'b': attr |= HL_BOLD;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3827 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3828 case 'i': attr |= HL_ITALIC;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3829 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3830 case '-':
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3831 case 'n': // no highlighting
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3832 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3833 case 'r': attr |= HL_INVERSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3834 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3835 case 's': attr |= HL_STANDOUT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3836 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3837 case 'u': attr |= HL_UNDERLINE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3838 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3839 case 'c': attr |= HL_UNDERCURL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3840 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3841 case 't': attr |= HL_STRIKETHROUGH;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3842 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3843 case ':': ++p; // highlight group name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3844 if (attr || *p == NUL) // no combinations
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3845 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3846 end = vim_strchr(p, ',');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3847 if (end == NULL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3848 end = p + STRLEN(p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3849 id = syn_check_group(p, (int)(end - p));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3850 if (id == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3851 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3852 attr = syn_id2attr(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3853 p = end - 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3854 #if defined(FEAT_STL_OPT) && defined(USER_HIGHLIGHT)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3855 if (hlf == (int)HLF_SNC)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3856 id_SNC = syn_get_final_id(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3857 # ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3858 else if (hlf == (int)HLF_ST)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3859 id_ST = syn_get_final_id(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3860 else if (hlf == (int)HLF_STNC)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3861 id_STNC = syn_get_final_id(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3862 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3863 else if (hlf == (int)HLF_S)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3864 id_S = syn_get_final_id(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3865 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3866 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3867 default: return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3868 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3869 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3870 highlight_attr[hlf] = attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3871
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3872 p = skip_to_option_part(p); // skip comma and spaces
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3873 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3874 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3875
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3876 #ifdef USER_HIGHLIGHT
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3877 // Setup the user highlights
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3878 //
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3879 // Temporarily utilize 28 more hl entries:
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3880 // 9 for User1-User9 combined with StatusLineNC
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3881 // 9 for User1-User9 combined with StatusLineTerm
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3882 // 9 for User1-User9 combined with StatusLineTermNC
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3883 // 1 for StatusLine default
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3884 // Have to be in there simultaneously in case of table overflows in
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3885 // get_attr_entry()
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3886 # ifdef FEAT_STL_OPT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3887 if (ga_grow(&highlight_ga, 28) == FAIL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3888 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3889 hlcnt = highlight_ga.ga_len;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3890 if (id_S == -1)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3891 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3892 // Make sure id_S is always valid to simplify code below. Use the last
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3893 // entry.
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
3894 CLEAR_POINTER(&HL_TABLE()[hlcnt + 27]);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3895 HL_TABLE()[hlcnt + 18].sg_term = highlight_attr[HLF_S];
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3896 id_S = hlcnt + 19;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3897 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3898 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3899 for (i = 0; i < 9; i++)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3900 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3901 sprintf((char *)userhl, "User%d", i + 1);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3902 id = syn_name2id(userhl);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3903 if (id == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3904 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3905 highlight_user[i] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3906 # ifdef FEAT_STL_OPT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3907 highlight_stlnc[i] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3908 # ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3909 highlight_stlterm[i] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3910 highlight_stltermnc[i] = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3911 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3912 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3913 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3914 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3915 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3916 highlight_user[i] = syn_id2attr(id);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3917 # ifdef FEAT_STL_OPT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3918 combine_stl_hlt(id, id_S, id_SNC, hlcnt, i,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3919 HLF_SNC, highlight_stlnc);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3920 # ifdef FEAT_TERMINAL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3921 combine_stl_hlt(id, id_S, id_ST, hlcnt + 9, i,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3922 HLF_ST, highlight_stlterm);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3923 combine_stl_hlt(id, id_S, id_STNC, hlcnt + 18, i,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3924 HLF_STNC, highlight_stltermnc);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3925 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3926 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3927 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3928 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3929 # ifdef FEAT_STL_OPT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3930 highlight_ga.ga_len = hlcnt;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3931 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3932
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3933 #endif // USER_HIGHLIGHT
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3934
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3935 return OK;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3936 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3937
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3938 static void highlight_list(void);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3939 static void highlight_list_two(int cnt, int attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3940
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3941 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3942 * Handle command line completion for :highlight command.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3943 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3944 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3945 set_context_in_highlight_cmd(expand_T *xp, char_u *arg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3946 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3947 char_u *p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3948
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3949 // Default: expand group names
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3950 xp->xp_context = EXPAND_HIGHLIGHT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3951 xp->xp_pattern = arg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3952 include_link = 2;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3953 include_default = 1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3954
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3955 // (part of) subcommand already typed
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3956 if (*arg != NUL)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3957 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3958 p = skiptowhite(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3959 if (*p != NUL) // past "default" or group name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3960 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3961 include_default = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3962 if (STRNCMP("default", arg, p - arg) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3963 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3964 arg = skipwhite(p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3965 xp->xp_pattern = arg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3966 p = skiptowhite(arg);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3967 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3968 if (*p != NUL) // past group name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3969 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3970 include_link = 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3971 if (arg[1] == 'i' && arg[0] == 'N')
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3972 highlight_list();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3973 if (STRNCMP("link", arg, p - arg) == 0
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3974 || STRNCMP("clear", arg, p - arg) == 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3975 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3976 xp->xp_pattern = skipwhite(p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3977 p = skiptowhite(xp->xp_pattern);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3978 if (*p != NUL) // past first group name
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3979 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3980 xp->xp_pattern = skipwhite(p);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3981 p = skiptowhite(xp->xp_pattern);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3982 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3983 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3984 if (*p != NUL) // past group name(s)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3985 xp->xp_context = EXPAND_NOTHING;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3986 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3987 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3988 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3989 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3990
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3991 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3992 * List highlighting matches in a nice way.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3993 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3994 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3995 highlight_list(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3996 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3997 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3998
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3999 for (i = 10; --i >= 0; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4000 highlight_list_two(i, HL_ATTR(HLF_D));
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4001 for (i = 40; --i >= 0; )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4002 highlight_list_two(99, 0);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4003 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4004
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4005 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4006 highlight_list_two(int cnt, int attr)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4007 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4008 msg_puts_attr(&("N \bI \b! \b"[cnt / 11]), attr);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4009 msg_clr_eos();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4010 out_flush();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4011 ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4012 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4013
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4014 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4015 * Function given to ExpandGeneric() to obtain the list of group names.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4016 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4017 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4018 get_highlight_name(expand_T *xp UNUSED, int idx)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4019 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4020 return get_highlight_name_ext(xp, idx, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4021 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4022
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4023 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4024 * Obtain a highlight group name.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4025 * When "skip_cleared" is TRUE don't return a cleared entry.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4026 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4027 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4028 get_highlight_name_ext(expand_T *xp UNUSED, int idx, int skip_cleared)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4029 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4030 if (idx < 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4031 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4032
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4033 // Items are never removed from the table, skip the ones that were
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4034 // cleared.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4035 if (skip_cleared && idx < highlight_ga.ga_len && HL_TABLE()[idx].sg_cleared)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4036 return (char_u *)"";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4037
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4038 if (idx == highlight_ga.ga_len && include_none != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4039 return (char_u *)"none";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4040 if (idx == highlight_ga.ga_len + include_none && include_default != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4041 return (char_u *)"default";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4042 if (idx == highlight_ga.ga_len + include_none + include_default
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4043 && include_link != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4044 return (char_u *)"link";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4045 if (idx == highlight_ga.ga_len + include_none + include_default + 1
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4046 && include_link != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4047 return (char_u *)"clear";
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4048 if (idx >= highlight_ga.ga_len)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4049 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4050 return HL_TABLE()[idx].sg_name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4051 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4052
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4053 #if defined(FEAT_GUI) || defined(PROTO)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4054 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4055 * Free all the highlight group fonts.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4056 * Used when quitting for systems which need it.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4057 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4058 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4059 free_highlight_fonts(void)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4060 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4061 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4062
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4063 for (idx = 0; idx < highlight_ga.ga_len; ++idx)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4064 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4065 gui_mch_free_font(HL_TABLE()[idx].sg_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4066 HL_TABLE()[idx].sg_font = NOFONT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4067 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4068 gui_mch_free_fontset(HL_TABLE()[idx].sg_fontset);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4069 HL_TABLE()[idx].sg_fontset = NOFONTSET;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4070 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4071 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4072
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4073 gui_mch_free_font(gui.norm_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4074 # ifdef FEAT_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4075 gui_mch_free_fontset(gui.fontset);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4076 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4077 # ifndef FEAT_GUI_GTK
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4078 gui_mch_free_font(gui.bold_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4079 gui_mch_free_font(gui.ital_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4080 gui_mch_free_font(gui.boldital_font);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4081 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4082 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4083 #endif