annotate src/highlight.c @ 33613:31fb1a760ad6 v9.0.2050

patch 9.0.2050: Vim9: crash with deferred function call and exception Commit: https://github.com/vim/vim/commit/c59c1e0d88651a71ece7366e418f1253abbe2a28 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Thu Oct 19 10:52:34 2023 +0200 patch 9.0.2050: Vim9: crash with deferred function call and exception Problem: Vim9: crash with deferred function call and exception Solution: Save and restore exception state Crash when a deferred function is called after an exception and another exception is thrown closes: #13376 closes: #13377 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
author Christian Brabandt <cb@256bit.org>
date Thu, 19 Oct 2023 11:00:07 +0200
parents 95db67c7b754
children 1629cc65d78d
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
26454
9998318235cd patch 8.2.3757: an overlong highlight group name is silently truncated
Bram Moolenaar <Bram@vim.org>
parents: 26274
diff changeset
21 #define MAX_SYN_NAME 200
9998318235cd patch 8.2.3757: an overlong highlight group name is silently truncated
Bram Moolenaar <Bram@vim.org>
parents: 26274
diff changeset
22
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
23 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
24 * 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
25 * 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
26 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
27 static char *(hl_name_table[]) =
29328
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
28 {"bold", "standout", "underline",
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
29 "undercurl", "underdouble", "underdotted", "underdashed",
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
30 "italic", "reverse", "inverse", "nocombine", "strikethrough", "NONE"};
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
31 static int hl_attr_table[] =
29328
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
32 {HL_BOLD, HL_STANDOUT, HL_UNDERLINE,
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
33 HL_UNDERCURL, HL_UNDERDOUBLE, HL_UNDERDOTTED, HL_UNDERDASHED,
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
34 HL_ITALIC, HL_INVERSE, HL_INVERSE, HL_NOCOMBINE, HL_STRIKETHROUGH, 0};
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
35 // length of all attribute names, plus commas, together (and a bit more)
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
36 #define MAX_ATTR_LEN 120
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
37
27752
c1d1639b52dd patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents: 27032
diff changeset
38 #define ATTR_COMBINE(attr_a, attr_b) ((((attr_b) & HL_NOCOMBINE) ? (attr_b) : (attr_a)) | (attr_b))
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
39
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
40 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
41 * 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
42 * 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
43 * 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
44 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
45 typedef struct
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
46 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
47 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
48 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
49 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
50 // 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
51 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
52 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
53 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
54 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
55 // 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
56 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
57 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
58 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
59 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
60 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
61 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
62 // 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
63 #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
64 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
65 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
66 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
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 #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
69 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
70 #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
71 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
72 #endif
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_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
74 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
75 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
76 #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
77 // 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
78 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
79 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
80 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
81 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
82 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
83 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
84 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
85 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
86 #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
87 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
88 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
89 #endif
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
90 } 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
91
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
92 // 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
93 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
94 #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
95
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
96 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
97 * 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
98 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
99 #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
100
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
101 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
102 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
103 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
104 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
105 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
106 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
107 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
108
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
109 #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
110 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
111 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
112 #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
113 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
114 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
115 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
116
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
117 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
118 * 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
119 * 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
120 * 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
121 * 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
122 * 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
123 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
124 #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
125 # 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
126 #else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
127 # 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
128 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
129 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
130 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
131 "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
132 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
133 "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
134 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
135 "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
136 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
137 "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
138 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
139 "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
140 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
141 "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
142 "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
143 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
144 "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
145 #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
146 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
147 "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
148 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
149 #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
150 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
151 "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
152 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
153 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
154 "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
155 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
156 "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
157 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
158 "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
159 #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
160 "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
161 "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
162 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
163 "default link QuickFixLine Search",
26266
365e7f083f02 patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents: 26193
diff changeset
164 "default link CursorLineSign SignColumn",
365e7f083f02 patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents: 26193
diff changeset
165 "default link CursorLineFold FoldColumn",
28399
d395fadbaf67 patch 8.2.4724: current instance of last search pattern not easily spotted
Bram Moolenaar <Bram@vim.org>
parents: 28315
diff changeset
166 "default link CurSearch Search",
32132
059e89bf9316 patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents: 32009
diff changeset
167 "default link PmenuKind Pmenu",
059e89bf9316 patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents: 32009
diff changeset
168 "default link PmenuKindSel PmenuSel",
059e89bf9316 patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents: 32009
diff changeset
169 "default link PmenuExtra Pmenu",
059e89bf9316 patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents: 32009
diff changeset
170 "default link PmenuExtraSel PmenuSel",
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
171 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
172 NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
173 };
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
174
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
175 // 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
176 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
177 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
178 "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
179 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
180 "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
181 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
182 "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
183 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
184 "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
185 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
186 "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
187 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
188 "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
189 #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
190 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
191 "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
192 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
193 "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
194 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
195 "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
196 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
197 "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
198 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
199 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
200 "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
201 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
202 "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
203 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
204 "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
205 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
206 "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
207 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
208 "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
209 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
210 "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
211 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
212 "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
213 #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
214 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
215 "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
216 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
217 "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
218 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
219 #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
220 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
221 "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
222 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
223 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
224 "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
225 #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
226 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
227 "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
228 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
229 "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
230 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
231 "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
232 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
233 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
234 "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
235 #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
236 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
237 "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
238 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
239 "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
240 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
241 "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
242 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
243 #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
244 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
245 "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
246 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
247 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
248 "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
249 #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
250 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
251 "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
252 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
253 "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
254 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
255 #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
256 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
257 "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
258 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
259 "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
260 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
261 NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
262 };
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
263
17494
c8df7f8ccdf8 patch 8.1.1745: compiler warning for unused argument
Bram Moolenaar <Bram@vim.org>
parents: 17490
diff changeset
264 // 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
265 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
266 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
267 "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
268 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
269 "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
270 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
271 "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
272 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
273 "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
274 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
275 "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
276 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
277 "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
278 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
279 "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
280 #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
281 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
282 "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
283 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
284 "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
285 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
286 "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
287 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
288 "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
289 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
290 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
291 "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
292 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
293 "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
294 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
295 "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
296 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
297 "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
298 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
299 "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
300 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
301 "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
302 #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
303 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
304 "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
305 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
306 "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
307 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
308 #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
309 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
310 "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
311 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
312 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
313 "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
314 #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
315 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
316 "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
317 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
318 "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
319 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
320 "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
321 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
322 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
323 "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
324 #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
325 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
326 "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
327 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
328 "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
329 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
330 "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
331 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
332 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
333 "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
334 #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
335 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
336 "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
337 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
338 #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
339 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
340 "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
341 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
342 "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
343 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
344 #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
345 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
346 "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
347 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
348 "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
349 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
350 NULL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
351 };
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
352
27018
268f6a3511df patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents: 26962
diff changeset
353 #if defined(FEAT_SYN_HL) || defined(PROTO)
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
354 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
355 * 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
356 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
357 int
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
358 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
359 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
360 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
361 }
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 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
364 * 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
365 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
366 char_u *
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
367 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
368 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
369 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
370 }
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
371
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
372 /*
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
373 * 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
374 */
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
375 int
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
376 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
377 {
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
378 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
379 }
27018
268f6a3511df patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents: 26962
diff changeset
380 #endif
17401
5462bb963075 patch 8.1.1699: highlight_ga can be local instead of global
Bram Moolenaar <Bram@vim.org>
parents: 17389
diff changeset
381
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
382 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
383 init_highlight(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
384 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
385 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
386 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
387 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
388 char **pp;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
389 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
390 #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
391 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
392
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
393 // 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
394 // 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
395 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
396 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
397 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
398 // 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
399 // 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
400 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
401 int r;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
402
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
403 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
404 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
405 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
406 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
407 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
408 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
409 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
410 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
411
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
412 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
413
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
414 // 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
415 if (both)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
416 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
417 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
418 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
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 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
423 // 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
424 // 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
425 // everything anyway.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
426 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
427
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
428 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
429 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
430 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
431 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
432 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
433 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
434
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
435 // 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
436 // 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
437 // 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
438 // 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
439 // 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
440 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
441 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
442 ? "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
443 : "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
444 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
445 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
446 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
447 FALSE, TRUE);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
448 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
449 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
450 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
451
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
452 #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
453 // 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
454 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
455 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
456 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
457
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
458 if (recursive >= 5)
26952
b34ddbca305c patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26915
diff changeset
459 emsg(_(e_recursive_loop_loading_syncolor_vim));
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
460 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
461 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
462 ++recursive;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
463 (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
464 --recursive;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
465 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
466 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
467 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
468 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
469
27032
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
470 #if defined(FEAT_EVAL) && (defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS))
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
471 /*
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
472 * Load a default color list. Intended to support legacy color names but allows
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
473 * the user to override the color values. Only loaded once.
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
474 */
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
475 static void
32009
4545f58c8490 patch 9.0.1336: functions without arguments are not always declared properly
Bram Moolenaar <Bram@vim.org>
parents: 31667
diff changeset
476 load_default_colors_lists(void)
27032
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
477 {
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
478 // Lacking a default color list isn't the end of the world but it is likely
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
479 // an inconvenience so users should know when it is missing.
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
480 if (source_runtime((char_u *)"colors/lists/default.vim", DIP_ALL) != OK)
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
481 msg("failed to load colors/lists/default.vim");
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
482 }
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
483 #endif
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
484
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
485 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
486 * 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
487 * 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
488 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
489 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
490 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
491 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
492 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
493 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
494 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
495
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
496 // 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
497 // '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
498 // 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
499 if (recursive)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
500 return OK;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
501
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
502 recursive = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
503 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
504 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
505 {
26059
c7e09c069ece patch 8.2.3563: build failure with +eval but without GUI or +termguicolors
Bram Moolenaar <Bram@vim.org>
parents: 26057
diff changeset
506 #if defined(FEAT_EVAL) && (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
507 load_default_colors_lists();
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
508 #endif
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
509 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
510 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
511 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
512 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
513 vim_free(buf);
30011
b8abb8908801 patch 9.0.0343: ColorScheme autocommand triggered when colorscheme not found
Bram Moolenaar <Bram@vim.org>
parents: 30005
diff changeset
514 if (retval == OK)
b8abb8908801 patch 9.0.0343: ColorScheme autocommand triggered when colorscheme not found
Bram Moolenaar <Bram@vim.org>
parents: 30005
diff changeset
515 apply_autocmds(EVENT_COLORSCHEME, name, curbuf->b_fname,
b8abb8908801 patch 9.0.0343: ColorScheme autocommand triggered when colorscheme not found
Bram Moolenaar <Bram@vim.org>
parents: 30005
diff changeset
516 FALSE, curbuf);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
517 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
518 recursive = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
519
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
520 return retval;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
521 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
522
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
523 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
524 "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
525 "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
526 "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
527 "DarkGray", "DarkGrey",
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
528 "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
529 "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
530 "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
531 // indices:
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
532 // 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
533 // 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
534 // 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
535 // 12, 13,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
536 // 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
537 // 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
538 // 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
539 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
540 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
541 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
542 8, 8,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
543 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
544 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
545 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
546 // 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
547 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
548 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
549 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
550 82, 82,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
551 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
552 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
553 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
554 // 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
555 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
556 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
557 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
558 242, 242,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
559 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
560 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
561 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
562 // 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
563 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
564 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
565 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
566 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
567 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
568 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
569 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
570
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
571 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
572 * 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
573 * color_names[].
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
574 * "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
575 * 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
576 */
29320
a74398c432a4 patch 9.0.0003: functions are global while they could be local
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
577 static int
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
578 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
579 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
580 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
581 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
582
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
583 // 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
584 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
585 return -1;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
586
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
587 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
588 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
589 // 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
590 #if defined(__QNXNTO__)
18806
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
591 // 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
592 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
593 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
594 else
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
595 #endif
18806
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
596 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
597 if (foreground)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
598 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
599 // 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
600 // 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
601 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
602 *boldp = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
603 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
604 *boldp = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
605 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
606 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
607 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
608 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
609 || 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
610 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
611 // 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
612 // 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
613 // 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
614 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
615 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
616 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
617 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
618 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
619 || *(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
620 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
621 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
622 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
623 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
624 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
625 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
626 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
627 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
628 #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
629 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
630 // 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
631 // 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
632 color = 231;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
633 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
634 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
635 return color;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
636 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
637
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
638 /*
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
639 * 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
640 * 'dodefault' is set to TRUE for ":highlight default link".
30986
360f286b5869 patch 9.0.0828: various typos
Bram Moolenaar <Bram@vim.org>
parents: 30053
diff changeset
641 * 'forceit' is set to TRUE for ":highlight! link"
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
642 * '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
643 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
644 static void
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
645 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
646 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
647 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
648 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
649 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
650 int dodefault,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
651 int forceit,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
652 int init)
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 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
655 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
656 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
657
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
658 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
659 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
660 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
661 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
662 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
663
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
664 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
665 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
666 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
667 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
668 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
669 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
670 #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
671 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
672 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
673 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
674 }
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 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
678 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
679 // 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
680 // 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
681 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
682 && 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
683 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
684 if (SOURCING_NAME == NULL && !dodefault)
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
685 emsg(_(e_group_has_settings_highlight_link_ignored));
26005
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 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
688 #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
689 || 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
690 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
691 || 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
692 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
693 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
694 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
695 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
696 #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
697 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
698 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
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 hlgroup->sg_cleared = FALSE;
29732
89e1d67814a9 patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents: 29726
diff changeset
701 redraw_all_later(UPD_SOME_VALID);
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
702
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
703 // 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
704 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
705 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
706 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
707
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
708 }
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 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
711 * 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
712 * 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
713 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
714 static void
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
715 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
716 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
717 int idx;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
718
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
719 #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
720 // 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
721 // 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
722 // 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
723 // (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
724 // 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
725 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
726 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
727 # 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
728 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
729 # endif
28315
62cc3b60493b patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents: 27752
diff changeset
730 # if defined(FEAT_MENU) && defined(FEAT_GUI_MOTIF)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
731 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
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 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
734 # 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
735 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
736 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
737 # 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
738 # 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
739
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
740 // 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
741 // 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
742 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
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 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
745 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
746 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
747 # 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
748 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
749 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
750 # 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
751 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
752 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
753 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
754 # endif
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 // 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
757 // 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
758 // 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
759 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
760 #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
761 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
762 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
763 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
764
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
765 // 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
766 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
767 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
768 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
769 #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
770 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
771 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
772 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
773 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
774 highlight_changed();
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
775 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
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 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
779 * 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
780 * index 'idx'.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
781 * '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
782 * '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
783 * '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
784 * 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
785 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
786 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
787 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
788 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
789 int attr;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
790 int off;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
791 long i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
792 int len;
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 attr = 0;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
795 off = 0;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
796 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
797 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
798 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
799 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
800 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
801 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
802 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
803 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
804 off += len;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
805 break;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
806 }
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 (i < 0)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
809 {
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
810 semsg(_(e_illegal_value_str), arg);
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
811 return FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
812 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
813 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
814 ++off;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
815 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
816 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
817 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
818 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
819 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
820 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
821 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
822 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
823 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
824 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
825 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
826 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
827 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
828 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
829 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
830 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
831 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
832 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
833 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
834 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
835 #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
836 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
837 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
838 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
839 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
840 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
841 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
842 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
843 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
844 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
845 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
846
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
847 return 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
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
850 #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
851 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
852 * 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
853 * '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
854 * 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
855 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
856 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
857 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
858 int idx,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
859 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
860 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
861 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
862 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
863 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
864 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
865
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
866 // 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
867 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
868 && 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
869 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
870 // 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
871 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
872 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
873 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
874 // 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
875 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
876 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
877 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
878 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
879 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
880 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
881 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
882 # 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
883 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
884 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
885 // 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
886 // 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
887 // 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
888 // 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
889
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 = NOFONT;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
891 # 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
892 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
893 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
894 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
895 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
896
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
897 # 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
898 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
899 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
900 // 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
901 // was one.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
902 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
903 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
904 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
905 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
906 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
907 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
908 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
909 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
910 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
911 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
912 // 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
913 // one.
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
914 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
915 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
916 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
917 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
918 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
919 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
920 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
921 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
922
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
923 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
924 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
925 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
926
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
927 /*
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
928 * Set the cterm foreground color for the Normal highlight group to "color" and
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
929 * the bold attribute to "bold".
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
930 */
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
931 static void
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
932 hl_set_ctermfg_normal_group(int color, int bold)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
933 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
934 cterm_normal_fg_color = color + 1;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
935 cterm_normal_fg_bold = bold;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
936 #ifdef FEAT_GUI
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
937 // Don't do this if the GUI is used.
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
938 if (!gui.in_use && !gui.starting)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
939 #endif
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
940 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
941 set_must_redraw(UPD_CLEAR);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
942 if (termcap_active && color >= 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
943 term_fg_color(color);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
944 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
945 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
946
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
947 /*
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
948 * 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
949 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
950 static void
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
951 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
952 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
953 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
954 if (is_normal_group)
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
955 hl_set_ctermfg_normal_group(color,
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
956 (HL_TABLE()[idx].sg_cterm & HL_BOLD));
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
957 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
958
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
959 /*
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
960 * Set the cterm background color for the Normal highlight group to "color".
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
961 */
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
962 static void
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
963 hl_set_ctermbg_normal_group(int color)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
964 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
965 cterm_normal_bg_color = color + 1;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
966 #ifdef FEAT_GUI
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
967 // Don't mess with 'background' if the GUI is used.
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
968 if (!gui.in_use && !gui.starting)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
969 #endif
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
970 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
971 set_must_redraw(UPD_CLEAR);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
972 if (color >= 0)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
973 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
974 int dark = -1;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
975
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
976 if (termcap_active)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
977 term_bg_color(color);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
978 if (t_colors < 16)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
979 dark = (color == 0 || color == 4);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
980 // Limit the heuristic to the standard 16 colors
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
981 else if (color < 16)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
982 dark = (color < 7 || color == 8);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
983 // Set the 'background' option if the value is
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
984 // wrong.
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
985 if (dark != -1
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
986 && dark != (*p_bg == 'd')
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
987 && !option_was_set((char_u *)"bg"))
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
988 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
989 set_option_value_give_err((char_u *)"bg",
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
990 0L, (char_u *)(dark ? "dark" : "light"), 0);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
991 reset_option_was_set((char_u *)"bg");
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
992 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
993 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
994 }
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
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 * 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
999 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1000 static void
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1001 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
1002 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1003 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
1004 if (is_normal_group)
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1005 hl_set_ctermbg_normal_group(color);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1006 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1007
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1008 /*
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1009 * Set the cterm underline color for the Normal highlight group to "color".
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1010 */
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1011 static void
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1012 hl_set_ctermul_normal_group(int color)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1013 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1014 cterm_normal_ul_color = color + 1;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1015 #ifdef FEAT_GUI
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1016 // Don't do this if the GUI is used.
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1017 if (!gui.in_use && !gui.starting)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1018 #endif
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1019 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1020 set_must_redraw(UPD_CLEAR);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1021 if (termcap_active && color >= 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1022 term_ul_color(color);
26005
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 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1025
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1026 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1027 * 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
1028 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1029 static void
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1030 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
1031 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1032 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
1033 if (is_normal_group)
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1034 hl_set_ctermul_normal_group(color);
26005
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
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 * 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
1039 * '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
1040 * '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
1041 * '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
1042 * '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
1043 * '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
1044 * 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
1045 *
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1046 * 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
1047 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1048 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1049 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
1050 int idx,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1051 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
1052 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
1053 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
1054 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
1055 int init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1056 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1057 int color;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1058 long i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1059 int off;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1060
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1061 if (init && (HL_TABLE()[idx].sg_set & SG_CTERM))
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1062 return FALSE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1063
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1064 if (!init)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1065 HL_TABLE()[idx].sg_set |= SG_CTERM;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1066
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1067 // When setting the foreground color, and previously the "bold"
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1068 // flag was set for a light color, reset it now
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1069 if (key[5] == 'F' && HL_TABLE()[idx].sg_cterm_bold)
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1070 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1071 HL_TABLE()[idx].sg_cterm &= ~HL_BOLD;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1072 HL_TABLE()[idx].sg_cterm_bold = FALSE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1073 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1074
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1075 if (VIM_ISDIGIT(*arg))
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1076 color = atoi((char *)arg);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1077 else if (STRICMP(arg, "fg") == 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1078 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1079 if (cterm_normal_fg_color)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1080 color = cterm_normal_fg_color - 1;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1081 else
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1082 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1083 emsg(_(e_fg_color_unknown));
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1084 return FALSE;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1085 }
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1086 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1087 else if (STRICMP(arg, "bg") == 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1088 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1089 if (cterm_normal_bg_color > 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1090 color = cterm_normal_bg_color - 1;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1091 else
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1092 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1093 emsg(_(e_bg_color_unknown));
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1094 return FALSE;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1095 }
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1096 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1097 else if (STRICMP(arg, "ul") == 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1098 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1099 if (cterm_normal_ul_color > 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1100 color = cterm_normal_ul_color - 1;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1101 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1102 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1103 emsg(_(e_ul_color_unknown));
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1104 return FALSE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1105 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1106 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1107 else
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1108 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1109 int bold = MAYBE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1110
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1111 // reduce calls to STRICMP a bit, it can be slow
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1112 off = TOUPPER_ASC(*arg);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1113 for (i = ARRAY_LENGTH(color_names); --i >= 0; )
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1114 if (off == color_names[i][0]
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1115 && STRICMP(arg + 1, color_names[i] + 1) == 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1116 break;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1117 if (i < 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1118 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1119 semsg(_(e_color_name_or_number_not_recognized_str), key_start);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1120 return FALSE;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1121 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1122
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1123 color = lookup_color(i, key[5] == 'F', &bold);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1124
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1125 // set/reset bold attribute to get light foreground
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1126 // colors (on some terminals, e.g. "linux")
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1127 if (bold == TRUE)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1128 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1129 HL_TABLE()[idx].sg_cterm |= HL_BOLD;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1130 HL_TABLE()[idx].sg_cterm_bold = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1131 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1132 else if (bold == FALSE)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1133 HL_TABLE()[idx].sg_cterm &= ~HL_BOLD;
26005
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
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1136 // Add one to the argument, to avoid zero. Zero is used for
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1137 // "NONE", then "color" is -1.
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1138 if (key[5] == 'F')
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1139 highlight_set_ctermfg(idx, color, is_normal_group);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1140 else if (key[5] == 'B')
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1141 highlight_set_ctermbg(idx, color, is_normal_group);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1142 else // ctermul
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1143 highlight_set_ctermul(idx, color, is_normal_group);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1144
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1145 return TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1146 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1147
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1148 #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
1149 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1150 * 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
1151 * 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
1152 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1153 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1154 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
1155 int idx,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1156 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
1157 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
1158 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
1159 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
1160 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
1161 int init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1162 {
26014
09a273f0af05 patch 8.2.3541: compiler warning for unused variable in tiny version
Bram Moolenaar <Bram@vim.org>
parents: 26009
diff changeset
1163 # 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
1164 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
1165 # endif
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1166 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
1167 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
1168
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1169 if (init && (HL_TABLE()[idx].sg_set & SG_GUI))
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1170 return FALSE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1171
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1172 namep = &HL_TABLE()[idx].sg_gui_fg_name;
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1173 if (!init)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1174 HL_TABLE()[idx].sg_set |= SG_GUI;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1175
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1176 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1177 // In GUI guifg colors are only used when recognized
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1178 i = color_name2handle(arg);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1179 if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !USE_24BIT)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1180 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1181 HL_TABLE()[idx].sg_gui_fg = i;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1182 # endif
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1183 if (*namep == NULL || STRCMP(*namep, arg) != 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1184 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1185 vim_free(*namep);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1186 if (STRCMP(arg, "NONE") != 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1187 *namep = vim_strsave(arg);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1188 else
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1189 *namep = NULL;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1190 did_change = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1191 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1192 # 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
1193 # ifdef FEAT_GUI_X11
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1194 if (is_menu_group && gui.menu_fg_pixel != i)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1195 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1196 gui.menu_fg_pixel = i;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1197 *do_colors = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1198 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1199 if (is_scrollbar_group && gui.scroll_fg_pixel != i)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1200 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1201 gui.scroll_fg_pixel = i;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1202 *do_colors = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1203 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1204 # ifdef FEAT_BEVAL_GUI
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1205 if (is_tooltip_group && gui.tooltip_fg_pixel != i)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1206 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1207 gui.tooltip_fg_pixel = i;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1208 *do_colors = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1209 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1210 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1211 # endif
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1212 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1213 # endif
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 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
1216 }
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 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1219 * 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
1220 * 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
1221 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1222 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1223 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
1224 int idx,
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1225 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
1226 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
1227 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
1228 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
1229 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
1230 int init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1231 {
26014
09a273f0af05 patch 8.2.3541: compiler warning for unused variable in tiny version
Bram Moolenaar <Bram@vim.org>
parents: 26009
diff changeset
1232 # 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
1233 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
1234 # endif
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1235 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
1236 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
1237
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1238 if (init && (HL_TABLE()[idx].sg_set & SG_GUI))
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1239 return FALSE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1240
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1241 namep = &HL_TABLE()[idx].sg_gui_bg_name;
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1242 if (!init)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1243 HL_TABLE()[idx].sg_set |= SG_GUI;
26005
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)
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1246 // In GUI guibg colors are only used when recognized
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1247 i = color_name2handle(arg);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1248 if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !USE_24BIT)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1249 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1250 HL_TABLE()[idx].sg_gui_bg = i;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1251 # endif
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1252 if (*namep == NULL || STRCMP(*namep, arg) != 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1253 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1254 vim_free(*namep);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1255 if (STRCMP(arg, "NONE") != 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1256 *namep = vim_strsave(arg);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1257 else
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1258 *namep = NULL;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1259 did_change = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1260 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1261 # 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
1262 # ifdef FEAT_GUI_X11
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1263 if (is_menu_group && gui.menu_bg_pixel != i)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1264 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1265 gui.menu_bg_pixel = i;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1266 *do_colors = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1267 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1268 if (is_scrollbar_group && gui.scroll_bg_pixel != i)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1269 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1270 gui.scroll_bg_pixel = i;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1271 *do_colors = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1272 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1273 # ifdef FEAT_BEVAL_GUI
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1274 if (is_tooltip_group && gui.tooltip_bg_pixel != i)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1275 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1276 gui.tooltip_bg_pixel = i;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1277 *do_colors = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1278 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1279 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1280 # endif
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1281 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1282 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1283
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1284 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
1285 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1286
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1287 /*
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1288 * 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
1289 * 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
1290 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1291 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1292 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
1293 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1294 # 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
1295 int i;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1296 # endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1297 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
1298 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
1299
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1300 if (init && (HL_TABLE()[idx].sg_set & SG_GUI))
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1301 return FALSE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1302
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1303 namep = &HL_TABLE()[idx].sg_gui_sp_name;
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1304 if (!init)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1305 HL_TABLE()[idx].sg_set |= SG_GUI;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1306
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1307 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1308 // In GUI guisp colors are only used when recognized
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1309 i = color_name2handle(arg);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1310 if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !USE_24BIT)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1311 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1312 HL_TABLE()[idx].sg_gui_sp = i;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1313 # endif
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1314 if (*namep == NULL || STRCMP(*namep, arg) != 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1315 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1316 vim_free(*namep);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1317 if (STRCMP(arg, "NONE") != 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1318 *namep = vim_strsave(arg);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1319 else
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1320 *namep = NULL;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1321 did_change = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1322 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1323 # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
1324 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1325 # endif
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 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
1328 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1329 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1330
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 * 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
1333 * 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
1334 */
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1335 static int
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1336 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
1337 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1338 int off;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1339 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
1340 int len;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1341 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
1342 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
1343
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1344 if (!init)
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1345 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
1346
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1347 // 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
1348 // 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
1349 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
1350 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1351 off = 0;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1352 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
1353 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
1354 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1355 // 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
1356 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
1357 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
1358 ;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1359 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
1360 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
1361 return FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1362 // 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
1363 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
1364 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
1365 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
1366 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
1367
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1368 // 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
1369 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
1370 {
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1371 semsg(_(e_terminal_code_too_long_str), arg);
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1372 return FALSE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1373 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1374 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
1375
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1376 // 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
1377 off += len;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1378 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
1379 ++off;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1380 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1381 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1382 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1383 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1384 // 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
1385 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
1386 {
28668
53c608c7ea9e patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents: 28457
diff changeset
1387 len = trans_special(&p, buf + off, FSK_SIMPLIFY, FALSE, NULL);
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1388 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
1389 off += len;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1390 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
1391 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
1392 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1393 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
1394 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1395
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1396 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
1397 p = NULL;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1398 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1399 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
1400 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
1401 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1402 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
1403 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
1404 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1405 else
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1406 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1407 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
1408 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
1409 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1410 return TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1411 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1412
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1413 /*
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1414 * 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
1415 * 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
1416 * "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
1417 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1418 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1419 do_highlight(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1420 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
1421 int forceit,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1422 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
1423 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1424 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
1425 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
1426 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
1427 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
1428 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
1429 long i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1430 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1431 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1432 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
1433 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
1434 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
1435 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
1436 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
1437 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
1438 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
1439 #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
1440 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
1441 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
1442 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
1443 #else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1444 # 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
1445 # 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
1446 # 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
1447 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1448 #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
1449 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
1450 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1451 #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
1452 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
1453 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1454
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1455 // 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
1456 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
1457 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1458 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
1459 // 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
1460 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
1461 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1462 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1463
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1464 // 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
1465 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
1466 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
1467
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1468 // 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
1469 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
1470 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1471 dodefault = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1472 line = linep;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1473 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
1474 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
1475 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1476
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1477 // 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
1478 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
1479 doclear = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1480 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
1481 dolink = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1482
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1483 // ":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
1484 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
1485 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1486 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
1487 if (id == 0)
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1488 semsg(_(e_highlight_group_name_not_found_str), line);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1489 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1490 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
1491 return;
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 // 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
1495 if (dolink)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1496 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1497 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
1498 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
1499 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
1500 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
1501 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
1502 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
1503
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1504 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
1505 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
1506 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
1507
20116
513c62184ed8 patch 8.2.0613: Vim9: no check for space before #comment
Bram Moolenaar <Bram@vim.org>
parents: 20113
diff changeset
1508 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
1509 {
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1510 semsg(_(e_not_enough_arguments_highlight_link_str), 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
1511 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1512 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1513
20116
513c62184ed8 patch 8.2.0613: Vim9: no check for space before #comment
Bram Moolenaar <Bram@vim.org>
parents: 20113
diff changeset
1514 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
1515 {
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1516 semsg(_(e_too_many_arguments_highlight_link_str), 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
1517 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1518 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1519
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1520 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
1521 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
1522 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
1523 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
1524 return;
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
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1527 if (doclear)
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 // ":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
1530 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
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 // ":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
1533 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
1534 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1535 }
20116
513c62184ed8 patch 8.2.0613: Vim9: no check for space before #comment
Bram Moolenaar <Bram@vim.org>
parents: 20113
diff changeset
1536 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
1537 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
1538 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
1539 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1540
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1541 // 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
1542 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
1543 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
1544 return;
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1545 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
1546
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1547 // 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
1548 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
1549 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1550
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1551 // 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
1552 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
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 (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
1555 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
1556 #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
1557 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
1558 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
1559 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
1560 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
1561 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
1562 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
1563 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1564
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1565 // 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
1566 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
1567 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1568 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
1569 if (!doclear)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1570 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
1571 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1572
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1573 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
1574 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
1575 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1576 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
1577 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
1578 {
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1579 semsg(_(e_unexpected_equal_sign_str), key_start);
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1580 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1581 break;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1582 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1583
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1584 // 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
1585 // or "guibg").
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1586 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
1587 ++linep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1588 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
1589 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
1590 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
1591 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1592 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1593 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1594 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1595 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
1596
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1597 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
1598 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1599 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
1600 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1601 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
1602 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
1603 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
1604 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1605 continue;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1606 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1607
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1608 // 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
1609 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
1610 {
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1611 semsg(_(e_missing_equal_sign_str_2), key_start);
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1612 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1613 break;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1614 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1615 ++linep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1616
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1617 // 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
1618 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
1619 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
1620 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1621 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
1622 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
1623 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
1624 {
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26454
diff changeset
1625 semsg(_(e_invalid_argument_str), 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
1626 error = TRUE;
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1627 break;
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1628 }
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1629 }
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1630 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1631 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1632 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
1633 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
1634 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1635 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
1636 {
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1637 semsg(_(e_missing_argument_str), key_start);
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1638 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1639 break;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1640 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1641 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
1642 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
1643 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
1644 {
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1645 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1646 break;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1647 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1648 if (*linep == '\'')
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1649 ++linep;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1650
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1651 // 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
1652 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
1653 || 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
1654 || 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
1655 {
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_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
1657 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1658 error = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1659 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1660 }
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 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
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 // 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
1665 #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
1666 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
1667 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
1668 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
1669 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1670 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1671 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
1672 || 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
1673 || 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
1674 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1675 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
1676 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
1677 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1678 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1679 break;
20619
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1680 }
68c206d3a251 patch 8.2.0863: cannot set a separate color for underline/undercurl
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1681 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1682 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
1683 {
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1684 #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
1685 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
1686 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
1687 &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
1688 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
1689 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1690 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1691 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
1692 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1693 #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
1694 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
1695 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
1696 &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
1697 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
1698 #endif
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1699 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1700 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
1701 {
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1702 #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
1703 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
1704 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
1705 #endif
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1706 }
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1707 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
1708 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1709 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
1710 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1711 error = TRUE;
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1712 break;
17389
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 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1715 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1716 {
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
1717 semsg(_(e_illegal_argument_str_3), key_start);
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1718 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
1719 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1720 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1721 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
1722
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1723 // 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
1724 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
1725 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
1726
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1727 // 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
1728 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
1729 }
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1730
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
1731 // 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
1732 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
1733 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
1734 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1735 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1736 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
1737 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1738 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
1739 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
1740 #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
1741 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
1742 // 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
1743 // 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
1744 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1745 #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
1746 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
1747 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1748 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
1749 did_highlight_changed = TRUE;
29732
89e1d67814a9 patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents: 29726
diff changeset
1750 redraw_all_later(UPD_NOT_VALID);
17389
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 #endif
19756
fe90a71a3fed patch 8.2.0434: MS-Windows with VTP: Normal color not working
Bram Moolenaar <Bram@vim.org>
parents: 19265
diff changeset
1753 #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
1754 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
1755 #endif
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1756 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1757 #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
1758 # 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
1759 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
1760 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1761 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
1762 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
1763 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1764 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1765 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
1766 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1767 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
1768 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
1769 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1770 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
1771 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1772 # 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
1773 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
1774 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1775 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
1776 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
1777 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1778 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1779 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1780 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1781 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
1782 #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
1783 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
1784 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
1785 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1786 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1787
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1788 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
1789 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
1790
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1791 // 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
1792 // 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
1793 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
1794 || 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
1795 #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
1796 && !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
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 )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1799 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1800 // 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
1801 // 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
1802 // StatusLine group.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1803 if (!updating_screen)
29732
89e1d67814a9 patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents: 29726
diff changeset
1804 redraw_all_later(UPD_NOT_VALID);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1805 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
1806 }
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 #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
1810 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1811 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
1812 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1813 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1814
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1815 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
1816 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1817 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
1818 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
1819 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
1820 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1821 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
1822 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1823 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1824
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1825 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1826 * 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
1827 * 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
1828 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1829 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1830 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
1831 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1832 #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
1833 // 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
1834 // 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
1835 // 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
1836 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
1837 #else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1838 # ifdef VIMDLL
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1839 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
1840 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1841 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
1842 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1843 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1844 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1845 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
1846 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
1847 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
1848 # 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
1849 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
1850 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
1851 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
1852 # endif
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 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1855
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1856 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1857 * 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
1858 * 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
1859 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1860 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1861 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
1862 {
22288
a9ff3e0d6d54 patch 8.2.1693: "hi def" does not work for cleared highlight
Bram Moolenaar <Bram@vim.org>
parents: 21054
diff changeset
1863 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
1864 && ( 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
1865 || 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
1866 || 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
1867 || 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
1868 #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
1869 || 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
1870 || 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
1871 || 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
1872 || 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
1873 || 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
1874 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1875 || (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
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 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1879 * 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
1880 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1881 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1882 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
1883 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1884 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
1885
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1886 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
1887 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
1888 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
1889 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
1890 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
1891 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
1892 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
1893 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
1894 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
1895 #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
1896 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
1897 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
1898 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
1899 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
1900 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1901 #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
1902 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
1903 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
1904 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
1905 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1906 #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
1907 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
1908 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
1909 # 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
1910 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
1911 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
1912 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1913 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
1914 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
1915 #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
1916 // 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
1917 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
1918 #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
1919 // 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
1920 // 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
1921 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
1922 #endif
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
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1925 #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
1926 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1927 * 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
1928 * 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
1929 * "Tooltip" colors.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1930 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1931 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1932 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
1933 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1934 # 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
1935 # 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
1936 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
1937 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1938 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1939 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
1940 &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
1941 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
1942 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1943 gui_mch_new_colors();
29812
68ef14b21d01 patch 9.0.0245: mechanism to prevent recursive screen updating is incomplete
Bram Moolenaar <Bram@vim.org>
parents: 29732
diff changeset
1944 set_must_redraw(UPD_CLEAR);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1945 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1946 # 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
1947 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
1948 &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
1949 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
1950 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1951 # 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
1952 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
1953 # endif
29812
68ef14b21d01 patch 9.0.0245: mechanism to prevent recursive screen updating is incomplete
Bram Moolenaar <Bram@vim.org>
parents: 29732
diff changeset
1954 set_must_redraw(UPD_CLEAR);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1955 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1956 # 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
1957 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
1958 &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
1959 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
1960 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1961 # 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
1962 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
1963 # endif
29812
68ef14b21d01 patch 9.0.0245: mechanism to prevent recursive screen updating is incomplete
Bram Moolenaar <Bram@vim.org>
parents: 29732
diff changeset
1964 set_must_redraw(UPD_CLEAR);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1965 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1966 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1967 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
1968 &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
1969 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
1970 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1971 gui_new_scrollbar_colors();
29812
68ef14b21d01 patch 9.0.0245: mechanism to prevent recursive screen updating is incomplete
Bram Moolenaar <Bram@vim.org>
parents: 29732
diff changeset
1972 set_must_redraw(UPD_CLEAR);
17389
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 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1975 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1976 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1977 # 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
1978 # 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
1979 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1980 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1981 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1982 int idx;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1983
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1984 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
1985 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
1986 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1987 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
1988
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1989 // 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
1990 // required.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1991 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
1992 || 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
1993 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1994 // 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
1995 // color
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1996 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
1997 cterm_normal_bg_gui_color = HL_TABLE()[idx].sg_gui_bg;
29812
68ef14b21d01 patch 9.0.0245: mechanism to prevent recursive screen updating is incomplete
Bram Moolenaar <Bram@vim.org>
parents: 29732
diff changeset
1998 set_must_redraw(UPD_CLEAR);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1999 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2000 }
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 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2003 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2004 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2005
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2006 #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
2007 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2008 * 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
2009 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2010 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2011 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
2012 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
2013 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
2014 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
2015 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
2016 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
2017 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
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 idx;
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 idx = syn_name2id(name) - 1;
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2022 if (idx < 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2023 return FALSE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2024
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2025 gui_do_one_color(idx, do_menu, do_tooltip);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2026
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2027 if (HL_TABLE()[idx].sg_gui_fg != INVALCOLOR)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2028 *fgp = HL_TABLE()[idx].sg_gui_fg;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2029 else if (use_norm)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2030 *fgp = gui.def_norm_pixel;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2031 if (HL_TABLE()[idx].sg_gui_bg != INVALCOLOR)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2032 *bgp = HL_TABLE()[idx].sg_gui_bg;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2033 else if (use_norm)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2034 *bgp = gui.def_back_pixel;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2035 return TRUE;
17389
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
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 * 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
2040 * 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
2041 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2042 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2043 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
2044 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2045 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2046 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
2047
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2048 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
2049 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
2050 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2051 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
2052 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
2053 return s;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2054 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2055 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
2056 }
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 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2059 * 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
2060 * 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
2061 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2062 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2063 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
2064 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2065 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2066
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2067 id = syn_name2id((char_u *)"Normal");
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2068 if (id <= 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2069 return;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2070
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2071 vim_free(HL_TABLE()[id - 1].sg_font_name);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2072 HL_TABLE()[id - 1].sg_font_name = vim_strsave(font_name);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2073 }
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 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2076 * 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
2077 * 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
2078 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2079 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2080 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
2081 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
2082 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2083 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2084
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2085 if (name == NULL)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2086 return;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2087
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2088 id = syn_name2id((char_u *)"Normal");
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2089 if (id <= 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2090 return;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2091
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2092 vim_free(HL_TABLE()[id - 1].sg_gui_bg_name);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2093 HL_TABLE()[id - 1].sg_gui_bg_name = name;
17389
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
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 * 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
2098 * 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
2099 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2100 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2101 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
2102 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
2103 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2104 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2105
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2106 if (name == NULL)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2107 return;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2108
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2109 id = syn_name2id((char_u *)"Normal");
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2110 if (id <= 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2111 return;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2112
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2113 vim_free(HL_TABLE()[id - 1].sg_gui_fg_name);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2114 HL_TABLE()[id - 1].sg_gui_fg_name = name;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2115 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2116
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2117 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2118 * 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
2119 * 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
2120 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2121 static GuiFont
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2122 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
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 (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
2125 return NOFONT;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2126
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2127 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
2128 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2129
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_XFONTSET
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2131 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2132 * 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
2133 * 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
2134 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2135 static GuiFontset
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2136 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
2137 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2138 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
2139 return NOFONTSET;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2140
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2141 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
2142 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2143 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2144
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2145 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2146 * 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
2147 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2148 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2149 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
2150 int idx,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2151 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
2152 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
2153 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
2154 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
2155 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
2156 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2157 # 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
2158 // 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
2159 // 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
2160 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
2161 # 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
2162 || do_menu
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 # ifdef FEAT_BEVAL_TIP
28315
62cc3b60493b patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents: 27752
diff changeset
2165 // In Motif, the Tooltip highlight group is always a fontset
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2166 || do_tooltip
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 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2170 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
2171 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
2172 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
2173 # 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
2174 || do_menu
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2175 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2176 # 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
2177 || do_tooltip
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2178 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2179 );
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2180 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2181 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
2182 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2183 // 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
2184 // 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
2185 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
2186 gui_init_font(arg, TRUE);
28315
62cc3b60493b patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents: 27752
diff changeset
2187 # if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2188 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
2189 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2190 # 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
2191 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
2192 # else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2193 // 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
2194 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
2195 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2196 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
2197 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2198 # 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
2199 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
2200 {
28315
62cc3b60493b patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents: 27752
diff changeset
2201 // The Athena widget set could not handle switching between
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2202 // 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
2203 // 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
2204 // 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
2205 // 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
2206 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
2207 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
2208 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2209 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2210 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2211 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2212 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2213 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2214 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2215 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
2216 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
2217 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
2218 // 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
2219 // 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
2220 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
2221 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2222 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
2223 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
2224 #ifndef FONTSET_ALWAYS
28315
62cc3b60493b patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents: 27752
diff changeset
2225 # if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2226 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
2227 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2228 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
2229 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
2230 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2231 # endif
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 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2236
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2237 #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
2238
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2239 #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
2240 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2241 * 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
2242 * 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
2243 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2244 guicolor_T
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2245 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
2246 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2247 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
2248 return INVALCOLOR;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2249
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2250 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
2251 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2252 #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
2253 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
2254 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2255 #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
2256 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
2257 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2258 #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
2259 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
2260 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
2261 // 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
2262 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
2263 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2264 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2265 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
2266 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2267 #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
2268 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
2269 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2270 #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
2271 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
2272 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2273 #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
2274 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
2275 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
2276 // 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
2277 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
2278 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2279 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2280
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2281 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
2282 }
26057
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2283
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2284 // 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
2285 // 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
2286 // MS-Windows GDI builds.
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2287 # 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
2288 # undef RGB
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2289 # endif
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2290 # ifndef RGB
27752
c1d1639b52dd patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents: 27032
diff changeset
2291 # define RGB(r, g, b) (((r)<<16) | ((g)<<8) | (b))
26057
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2292 # endif
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2293
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2294 # ifdef VIMDLL
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2295 static guicolor_T
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2296 gui_adjust_rgb(guicolor_T c)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2297 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2298 if (gui.in_use)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2299 return c;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2300 else
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2301 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
2302 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2303 # else
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2304 # define gui_adjust_rgb(c) (c)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2305 # endif
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 static int
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2308 hex_digit(int c)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2309 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2310 if (isdigit(c))
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2311 return c - '0';
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2312 c = TOLOWER_ASC(c);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2313 if (c >= 'a' && c <= 'f')
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2314 return c - 'a' + 10;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2315 return 0x1ffffff;
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
27032
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
2318 static guicolor_T
26057
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2319 decode_hex_color(char_u *hex)
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 guicolor_T color;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2322
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2323 if (hex[0] != '#' || STRLEN(hex) != 7)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2324 return INVALCOLOR;
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 // Name is in "#rrggbb" format
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2327 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
2328 ((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
2329 ((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
2330 if (color > 0xffffff)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2331 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2332 return gui_adjust_rgb(color);
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
26059
c7e09c069ece patch 8.2.3563: build failure with +eval but without GUI or +termguicolors
Bram Moolenaar <Bram@vim.org>
parents: 26057
diff changeset
2335 #ifdef FEAT_EVAL
26057
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2336 // 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
2337 // 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
2338 // 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
2339 // the form #rrggbb or a number, either of which is converted to a guicolor_T.
27032
18cafa092e8d patch 8.2.4045: some global functions are only used in one file
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
2340 static guicolor_T
26057
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2341 colorname2rgb(char_u *name)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2342 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2343 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
2344 char_u *lc_name;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2345 dictitem_T *colentry;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2346 char_u *colstr;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2347 varnumber_T colnum;
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 lc_name = strlow_save(name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2350 if (lc_name == NULL)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2351 return INVALCOLOR;
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 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
2354 vim_free(lc_name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2355 if (colentry == NULL)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2356 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2357
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2358 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
2359 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2360 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
2361 if ((STRLEN(colstr) == 7) && (*colstr == '#'))
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 return decode_hex_color(colstr);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2364 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2365 else
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 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
2368 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2369 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2370 }
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 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
2373 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2374 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
2375 return (guicolor_T)colnum;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2376 }
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2377
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2378 return INVALCOLOR;
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
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2381 #endif
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2382
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2383 guicolor_T
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2384 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
2385 {
28809
d0241e74bfdb patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents: 28706
diff changeset
2386 int i;
26057
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2387 guicolor_T color;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2388
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2389 struct rgbcolor_table_S {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2390 char_u *color_name;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2391 guicolor_T color;
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
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2394 // 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
2395 // 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
2396 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
2397 {(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
2398 {(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
2399 {(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
2400 {(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
2401 {(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
2402 {(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
2403 {(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
2404 {(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
2405 {(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
2406 {(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
2407 {(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
2408 {(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
2409 {(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
2410 {(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
2411 {(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
2412 {(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
2413 {(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
2414 {(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
2415 {(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
2416 {(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
2417 {(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
2418 {(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
2419 {(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
2420 {(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
2421 {(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
2422 {(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
2423 {(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
2424 {(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
2425 {(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
2426 {(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
2427 {(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
2428 };
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2429
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2430 color = decode_hex_color(name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2431 if (color != INVALCOLOR)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2432 return color;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2433
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2434 // 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
2435 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
2436 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
2437 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
2438
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2439 #if defined(FEAT_EVAL)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2440 /*
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2441 * 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
2442 */
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2443
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2444 color = colorname2rgb(name);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2445 if (color == INVALCOLOR)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2446 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2447 load_default_colors_lists();
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2448 color = colorname2rgb(name);
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
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2451 return color;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2452 #else
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2453 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2454 #endif
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
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2457 guicolor_T
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2458 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
2459 {
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2460 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
2461
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2462 if (color > 0xffffff)
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2463 return INVALCOLOR;
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2464 return gui_adjust_rgb(color);
92c424550367 patch 8.2.3562: cannot add color names
Bram Moolenaar <Bram@vim.org>
parents: 26014
diff changeset
2465 }
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2466 #endif
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 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2469 * 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
2470 * 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
2471 * 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
2472 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2473 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
2474
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2475 #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
2476
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2477 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
2478
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2479 #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
2480
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2481 #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
2482 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
2483
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2484 #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
2485 #endif
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 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2488 * 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
2489 * 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
2490 * 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
2491 * 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
2492 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2493 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2494 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
2495 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2496 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2497 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
2498 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
2499
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
2500 // 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
2501 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
2502 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
2503
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
2504 // 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
2505 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
2506 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2507 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
2508 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
2509 && (
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2510 #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
2511 (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
2512 && (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
2513 && 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
2514 == 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
2515 && 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
2516 == 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
2517 && 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
2518 # 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
2519 && 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
2520 # endif
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 ||
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2523 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2524 (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
2525 && (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
2526 == (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
2527 && (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
2528 || 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
2529 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
2530 && (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
2531 == (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
2532 && (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
2533 || 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
2534 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
2535 || (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
2536 && 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
2537 == 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
2538 && 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
2539 == 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
2540 && 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
2541 == 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
2542 #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
2543 && 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
2544 == 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
2545 && 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
2546 == 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
2547 && 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
2548 == 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
2549 #endif
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
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2552 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
2553 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2554
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2555 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
2556 {
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
2557 // 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
2558 // 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
2559 // 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
2560 if (recursive)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2561 {
26913
d4e61d61afd9 patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
2562 emsg(_(e_too_many_different_highlighting_attributes_in_use));
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2563 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2564 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2565 recursive = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2566
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2567 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
2568
29812
68ef14b21d01 patch 9.0.0245: mechanism to prevent recursive screen updating is incomplete
Bram Moolenaar <Bram@vim.org>
parents: 29732
diff changeset
2569 set_must_redraw(UPD_CLEAR);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2570
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2571 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
2572 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
2573
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2574 recursive = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2575 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2576
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
2577 // 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
2578 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
2579 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2580
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2581 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
2582 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
2583 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
2584 #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
2585 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
2586 {
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.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
2588 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
2589 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
2590 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
2591 # 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
2592 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
2593 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2594 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2595 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2596 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
2597 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2598 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
2599 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
2600 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2601 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
2602 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
2603 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
2604 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2605 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
2606 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2607 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
2608 {
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.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
2610 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
2611 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
2612 #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
2613 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
2614 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
2615 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
2616 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2617 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2618 ++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
2619 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
2620 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2621
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2622 #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
2623 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2624 * 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
2625 * 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
2626 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2627 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2628 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
2629 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2630 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
2631
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2632 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
2633 #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
2634 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
2635 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
2636 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
2637 #endif
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_attr = attr;
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.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
2640 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
2641 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
2642 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
2643 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2644 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2645
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2646 #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
2647 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2648 * 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
2649 * 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
2650 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2651 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2652 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
2653 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2654 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
2655
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2656 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
2657 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
2658 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
2659 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2660 // 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
2661 // 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
2662 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
2663 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
2664 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2665 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2666 {
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.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
2668 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
2669 }
20673
0ebd431a2256 patch 8.2.0890: no color in terminal window when 'termguicolor' is set
Bram Moolenaar <Bram@vim.org>
parents: 20619
diff changeset
2670 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
2671 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
2672 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2673 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2674
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2675 #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
2676 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2677 * 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
2678 * 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
2679 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2680 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2681 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
2682 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2683 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
2684
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2685 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
2686 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
2687 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
2688 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
2689 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
2690 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2691 #endif
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 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2694 * 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
2695 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2696 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2697 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
2698 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2699 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2700 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
2701
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2702 #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
2703 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
2704 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2705 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
2706 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2707 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
2708 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
2709 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
2710 }
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(&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
2712 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
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 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2716 * 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
2717 * (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
2718 * "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
2719 * 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
2720 * 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
2721 * result.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2722 * 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
2723 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2724 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2725 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
2726 {
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 *char_aep = NULL;
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2728 attrentry_T *prim_aep;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2729 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
2730
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2731 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
2732 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
2733 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
2734 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
2735 #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
2736 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
2737 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2738 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
2739 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
2740 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
2741 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
2742 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2743 {
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2744 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
2745 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
2746 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
2747 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
2748 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
2749 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
2750 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2751
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2752 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
2753 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
2754 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2755 {
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2756 prim_aep = syn_gui_attr2entry(prim_attr);
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2757 if (prim_aep != NULL)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2758 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2759 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr,
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2760 prim_aep->ae_attr);
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2761 if (prim_aep->ae_u.gui.fg_color != INVALCOLOR)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2762 new_en.ae_u.gui.fg_color = prim_aep->ae_u.gui.fg_color;
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2763 if (prim_aep->ae_u.gui.bg_color != INVALCOLOR)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2764 new_en.ae_u.gui.bg_color = prim_aep->ae_u.gui.bg_color;
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2765 if (prim_aep->ae_u.gui.sp_color != INVALCOLOR)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2766 new_en.ae_u.gui.sp_color = prim_aep->ae_u.gui.sp_color;
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2767 if (prim_aep->ae_u.gui.font != NOFONT)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2768 new_en.ae_u.gui.font = prim_aep->ae_u.gui.font;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2769 # ifdef FEAT_XFONTSET
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2770 if (prim_aep->ae_u.gui.fontset != NOFONTSET)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2771 new_en.ae_u.gui.fontset = prim_aep->ae_u.gui.fontset;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2772 # endif
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 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2775 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
2776 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2777 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2778
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2779 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
2780 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2781 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
2782 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
2783 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
2784 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
2785 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2786 {
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2787 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
2788 #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
2789 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
2790 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
2791 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
2792 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2793 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
2794 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
2795 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2796
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2797 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
2798 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
2799 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2800 {
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2801 prim_aep = syn_cterm_attr2entry(prim_attr);
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2802 if (prim_aep != NULL)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2803 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2804 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr,
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2805 prim_aep->ae_attr);
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2806 if (prim_aep->ae_u.cterm.fg_color > 0)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2807 new_en.ae_u.cterm.fg_color = prim_aep->ae_u.cterm.fg_color;
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2808 if (prim_aep->ae_u.cterm.bg_color > 0)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2809 new_en.ae_u.cterm.bg_color = prim_aep->ae_u.cterm.bg_color;
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2810 if (prim_aep->ae_u.cterm.ul_color > 0)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2811 new_en.ae_u.cterm.ul_color = prim_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
2812 #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
2813 // 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
2814 // Helps for SpellBad which uses undercurl in the GUI.
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2815 if (COLOR_INVALID(prim_aep->ae_u.cterm.fg_rgb)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2816 && COLOR_INVALID(prim_aep->ae_u.cterm.bg_rgb))
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2817 {
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2818 if (prim_aep->ae_u.cterm.fg_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
2819 new_en.ae_u.cterm.fg_rgb = CTERMCOLOR;
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2820 if (prim_aep->ae_u.cterm.bg_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
2821 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
2822 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2823 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2824 {
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2825 if (prim_aep->ae_u.cterm.fg_rgb != INVALCOLOR)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2826 new_en.ae_u.cterm.fg_rgb = prim_aep->ae_u.cterm.fg_rgb;
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2827 if (prim_aep->ae_u.cterm.bg_rgb != INVALCOLOR)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2828 new_en.ae_u.cterm.bg_rgb = prim_aep->ae_u.cterm.bg_rgb;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2829 }
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2830 if (prim_aep->ae_u.cterm.ul_rgb != INVALCOLOR)
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2831 new_en.ae_u.cterm.ul_rgb = prim_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
2832 #endif
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 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2835 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
2836 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2837
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2838 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
2839 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
2840 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
2841 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
2842 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2843 {
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
2844 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
2845 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
2846 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
2847 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2848
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2849 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
2850 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
2851 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2852 {
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2853 prim_aep = syn_term_attr2entry(prim_attr);
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2854 if (prim_aep != NULL)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2855 {
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2856 new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, prim_aep->ae_attr);
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2857 if (prim_aep->ae_u.term.start != NULL)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2858 {
29726
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2859 new_en.ae_u.term.start = prim_aep->ae_u.term.start;
74b522939a3d patch 9.0.0203: confusing variable name
Bram Moolenaar <Bram@vim.org>
parents: 29698
diff changeset
2860 new_en.ae_u.term.stop = prim_aep->ae_u.term.stop;
17389
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 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2864 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
2865 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2866
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2867 #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
2868 attrentry_T *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2869 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
2870 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2871 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
2872 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
2873 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2874 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
2875 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2876 #endif
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 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2879 * 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
2880 * 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
2881 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2882 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2883 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
2884 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2885 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
2886
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2887 #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
2888 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
2889 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
2890 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2891 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2892 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
2893 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
2894 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2895 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
2896
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2897 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
2898 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2899 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
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
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2903 attrentry_T *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2904 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
2905 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2906 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
2907 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
2908 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2909 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
2910 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2911
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2912 attrentry_T *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2913 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
2914 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2915 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
2916 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
2917 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2918 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
2919 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2920
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_ATTR 1
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_STRING 2
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2923 #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
2924
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2925 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2926 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
2927 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2928 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
2929 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
2930
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2931 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
2932
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2933 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
2934 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2935
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2936 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
2937 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
2938 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
2939 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
2940 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
2941 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
2942
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2943 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
2944 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
2945 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
2946 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
2947 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
2948 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
2949 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
2950 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
2951
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2952 #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
2953 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
2954 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
2955 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
2956 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
2957 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
2958 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
2959 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
2960 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
2961 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2962 #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
2963 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
2964 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
2965 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2966
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2967 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
2968 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2969 (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
2970 didh = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2971 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
2972 msg_putchar(' ');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2973 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
2974 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2975
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2976 if (!didh)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2977 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
2978 #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
2979 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
2980 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
2981 #endif
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
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2984 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2985 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
2986 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2987 int didh,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2988 int type,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2989 int iarg,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2990 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
2991 char *name)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2992 {
29328
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
2993 char_u buf[MAX_ATTR_LEN];
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2994 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
2995 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2996
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2997 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
2998 return FALSE;
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
2999
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3000 if (type == LIST_STRING ? (sarg == NULL) : (iarg == 0))
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3001 return didh;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3002
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3003 ts = buf;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3004 if (type == LIST_INT)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3005 sprintf((char *)buf, "%d", iarg - 1);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3006 else if (type == LIST_STRING)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3007 ts = sarg;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3008 else // type == LIST_ATTR
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3009 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3010 buf[0] = NUL;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3011 for (i = 0; hl_attr_table[i] != 0; ++i)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3012 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3013 if (iarg & hl_attr_table[i])
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3014 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3015 if (buf[0] != NUL)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3016 vim_strcat(buf, (char_u *)",", MAX_ATTR_LEN);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3017 vim_strcat(buf, (char_u *)hl_name_table[i], MAX_ATTR_LEN);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3018 iarg &= ~hl_attr_table[i]; // don't want "inverse"
17389
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 }
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3021 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3022
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3023 (void)syn_list_header(didh,
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3024 (int)(vim_strsize(ts) + STRLEN(name) + 1), id);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3025 didh = TRUE;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3026 if (!got_int)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3027 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3028 if (*name != NUL)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3029 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3030 msg_puts_attr(name, HL_ATTR(HLF_D));
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3031 msg_puts_attr("=", HL_ATTR(HLF_D));
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3032 }
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3033 msg_outtrans(ts);
17389
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 return didh;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3036 }
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 #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
3039 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3040 * 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
3041 * 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
3042 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3043 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3044 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
3045 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3046 int flag,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3047 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
3048 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3049 int attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3050
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3051 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
3052 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3053
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3054 #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
3055 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
3056 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
3057 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3058 #endif
26009
990958e8c3a2 patch 8.2.3538: else-if indenting is confusing
Bram Moolenaar <Bram@vim.org>
parents: 26005
diff changeset
3059 {
990958e8c3a2 patch 8.2.3538: else-if indenting is confusing
Bram Moolenaar <Bram@vim.org>
parents: 26005
diff changeset
3060 if (modec == 'c')
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_cterm;
990958e8c3a2 patch 8.2.3538: else-if indenting is confusing
Bram Moolenaar <Bram@vim.org>
parents: 26005
diff changeset
3062 else
990958e8c3a2 patch 8.2.3538: else-if indenting is confusing
Bram Moolenaar <Bram@vim.org>
parents: 26005
diff changeset
3063 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
3064 }
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3065
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3066 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
3067 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
3068 return NULL;
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 #endif
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 #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
3073 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3074 * 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
3075 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3076 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3077 highlight_color(
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3078 int id,
22446
0cdb03e73ce9 patch 8.2.1771: synIDattr() cannot get the value of ctermul
Bram Moolenaar <Bram@vim.org>
parents: 22312
diff changeset
3079 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
3080 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
3081 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3082 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
3083 int n;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3084 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
3085 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
3086 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
3087 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
3088
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3089 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
3090 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3091
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3092 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
3093 fg = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3094 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
3095 && 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
3096 font = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3097 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
3098 sp = TRUE;
22446
0cdb03e73ce9 patch 8.2.1771: synIDattr() cannot get the value of ctermul
Bram Moolenaar <Bram@vim.org>
parents: 22312
diff changeset
3099 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
3100 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
3101 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
3102 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3103 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
3104 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3105 # 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
3106 # 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
3107 // 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
3108 if (font)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3109 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
3110 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3111
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3112 // 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
3113 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
3114 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3115 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
3116 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
3117 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
3118
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3119 if (fg)
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_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3121 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
3122 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
3123 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3124 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
3125 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
3126 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3127 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
3128 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
3129 (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
3130 (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
3131 (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
3132 return buf;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3133 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3134 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3135 if (fg)
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_fg_name);
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3137 if (sp)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3138 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
3139 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
3140 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3141 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
3142 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3143 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
3144 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3145 if (fg)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3146 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
3147 else if (ul)
0cdb03e73ce9 patch 8.2.1771: synIDattr() cannot get the value of ctermul
Bram Moolenaar <Bram@vim.org>
parents: 22312
diff changeset
3148 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
3149 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3150 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
3151 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
3152 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3153 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
3154 return name;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3155 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3156 // 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
3157 return NULL;
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 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3160
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3161 #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
3162 && (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
3163 && 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
3164 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3165 * 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
3166 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3167 long_u
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3168 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
3169 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3170 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
3171 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3172 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
3173
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3174 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
3175 return 0L;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3176
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3177 if (fg)
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_fg;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3179 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3180 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
3181
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3182 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
3183 return 0L;
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 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
3186 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3187 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3188
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3189 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3190 * 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
3191 * 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
3192 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3193 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3194 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
3195 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
3196 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
3197 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
3198 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3199 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
3200 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
3201 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
3202
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3203 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
3204 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3205 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
3206 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
3207 return TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3208 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
3209 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
3210 endcol = 15;
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 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
3213 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3214 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
3215 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
3216 return TRUE;
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 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3219 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3220 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
3221 newline = FALSE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3222 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3223
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3224 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
3225 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
3226 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
3227 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
3228
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3229 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
3230
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3231 // 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
3232 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
3233 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3234 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
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 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
3237 msg_putchar(' ');
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3238 }
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 return newline;
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
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3243 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3244 * 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
3245 * 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
3246 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3247 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3248 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
3249 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
3250 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3251 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
3252 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
3253
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3254 // 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
3255 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
3256 return;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3257
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3258 #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
3259 // 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
3260 // 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
3261 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
3262 && 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
3263 && 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
3264 && 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
3265 # 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
3266 && 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
3267 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3268 )
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 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
3271 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3272 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3273 {
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_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
3275 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
3276 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
3277 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
3278 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
3279 # 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
3280 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
3281 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3282 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
3283 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3284 #endif
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3285 // 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
3286 // 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
3287 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
3288 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
3289 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3290 {
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_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
3292 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
3293 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
3294 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
3295 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3296
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3297 // 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
3298 // 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
3299 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
3300 # 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
3301 && 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
3302 && 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
3303 && 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
3304 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3305 )
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3306 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
3307 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3308 {
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_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
3310 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
3311 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
3312 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
3313 # 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
3314 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
3315 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
3316 // 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
3317 // background color if not supported.
29328
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
3318 if (sgp->sg_cterm & (HL_UNDERLINE | HL_UNDERCURL
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
3319 | HL_UNDERDOUBLE | HL_UNDERDOTTED | HL_UNDERDASHED))
20705
5481c982a279 patch 8.2.0906: when setting 'termguicolors' SpellBad is no longer red
Bram Moolenaar <Bram@vim.org>
parents: 20675
diff changeset
3320 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
3321 else
5481c982a279 patch 8.2.0906: when setting 'termguicolors' SpellBad is no longer red
Bram Moolenaar <Bram@vim.org>
parents: 20675
diff changeset
3322 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
3323 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
3324 && 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
3325 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3326 // 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
3327 // 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
3328 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
3329 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
3330 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3331 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3332 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
3333 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3334 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3335
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3336 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3337 * 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
3338 * 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
3339 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3340 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3341 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
3342 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3343 int i;
26454
9998318235cd patch 8.2.3757: an overlong highlight group name is silently truncated
Bram Moolenaar <Bram@vim.org>
parents: 26274
diff changeset
3344 char_u name_u[MAX_SYN_NAME + 1];
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3345
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3346 // 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
3347 // 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
3348 // don't deserve to be found!
26454
9998318235cd patch 8.2.3757: an overlong highlight group name is silently truncated
Bram Moolenaar <Bram@vim.org>
parents: 26274
diff changeset
3349 vim_strncpy(name_u, name, MAX_SYN_NAME);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3350 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
3351 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
3352 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
3353 && 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
3354 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3355 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
3356 }
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 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3359 * 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
3360 * 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
3361 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3362 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3363 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
3364 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3365 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
3366
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3367 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
3368 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
3369 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3370 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3371
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3372 #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
3373 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3374 * 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
3375 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3376 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3377 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
3378 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3379 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
3380 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3381
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3382 # 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
3383 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3384 * 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
3385 * 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
3386 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3387 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3388 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
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 (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
3391 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
3392 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
3393 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3394 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3395 #endif
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 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3398 * 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
3399 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3400 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3401 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
3402 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3403 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
3404 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
3405
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3406 name = vim_strnsave(linep, len);
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3407 if (name == NULL)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3408 return 0;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3409
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3410 id = syn_name2id(name);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3411 vim_free(name);
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3412 return id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3413 }
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 * 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
3417 * 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
3418 * 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
3419 * 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
3420 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3421 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3422 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
3423 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3424 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3425 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
3426
26454
9998318235cd patch 8.2.3757: an overlong highlight group name is silently truncated
Bram Moolenaar <Bram@vim.org>
parents: 26274
diff changeset
3427 if (len > MAX_SYN_NAME)
9998318235cd patch 8.2.3757: an overlong highlight group name is silently truncated
Bram Moolenaar <Bram@vim.org>
parents: 26274
diff changeset
3428 {
9998318235cd patch 8.2.3757: an overlong highlight group name is silently truncated
Bram Moolenaar <Bram@vim.org>
parents: 26274
diff changeset
3429 emsg(_(e_highlight_group_name_too_long));
9998318235cd patch 8.2.3757: an overlong highlight group name is silently truncated
Bram Moolenaar <Bram@vim.org>
parents: 26274
diff changeset
3430 return 0;
9998318235cd patch 8.2.3757: an overlong highlight group name is silently truncated
Bram Moolenaar <Bram@vim.org>
parents: 26274
diff changeset
3431 }
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3432 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
3433 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
3434 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3435
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3436 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
3437 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
3438 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
3439 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3440 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
3441 return id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3442 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3443
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 * 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
3446 * "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
3447 * 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
3448 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3449 static int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3450 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
3451 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3452 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
3453 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
3454
32916
dcab5385dd02 patch 9.0.1767: '.-' no allowed in highlight group names
Christian Brabandt <cb@256bit.org>
parents: 32132
diff changeset
3455 // Check that the name is valid (ASCII letters, digits, underscores, dots, or hyphens).
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3456 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
3457 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3458 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
3459 {
26952
b34ddbca305c patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26915
diff changeset
3460 emsg(_(e_unprintable_character_in_group_name));
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3461 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
3462 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3463 }
32916
dcab5385dd02 patch 9.0.1767: '.-' no allowed in highlight group names
Christian Brabandt <cb@256bit.org>
parents: 32132
diff changeset
3464 else if (!ASCII_ISALNUM(*p) && *p != '_' && *p != '.' && *p != '-')
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3465 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3466 // 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
3467 // 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
3468 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
3469 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
3470 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3471 }
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
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3474 // 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
3475 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
3476 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3477 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
3478 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
3479 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3480
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3481 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
3482 {
26962
85866e069c24 patch 8.2.4010: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26952
diff changeset
3483 emsg(_(e_too_many_highlight_and_syntax_groups));
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3484 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
3485 return 0;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3486 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3487
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3488 // 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
3489 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
3490 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3491 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
3492 return 0;
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
17797
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3495 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
3496 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
3497 {
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3498 vim_free(name);
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3499 return 0;
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3500 }
ec1717981acf patch 8.1.1895: using NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
3501
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
3502 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
3503 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
3504 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
3505 #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
3506 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
3507 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
3508 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
3509 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3510 ++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
3511
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3512 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
3513 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3514
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3515 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3516 * 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
3517 * 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
3518 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3519 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3520 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
3521 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3522 --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
3523 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
3524 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
3525 }
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 * Translate a group ID to highlight attributes.
29698
b944b7fb563b patch 9.0.0189: invalid memory access for text prop without highlight
Bram Moolenaar <Bram@vim.org>
parents: 29442
diff changeset
3529 * "hl_id" must be valid: > 0, caller must check.
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3530 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3531 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3532 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
3533 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3534 int attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3535 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
3536
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3537 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
3538 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
3539
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3540 #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
3541 // 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
3542 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
3543 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
3544 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3545 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3546 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
3547 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
3548 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3549 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
3550
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3551 return attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3552 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3553
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3554 #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
3555 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3556 * 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
3557 * 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
3558 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3559 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3560 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
3561 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3562 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
3563
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3564 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
3565 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
3566
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3567 *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
3568 *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
3569 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
3570 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3571 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3572
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3573 #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
3574 && (!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
3575 && 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
3576 || 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
3577 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3578 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
3579 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3580 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
3581
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3582 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
3583 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
3584 *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
3585 *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
3586 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3587 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3588
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3589 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3590 * 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
3591 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3592 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3593 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
3594 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3595 int count;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3596 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
3597
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3598 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
3599 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
3600
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3601 // 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
3602 // 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
3603 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
3604 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3605 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
3606 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
3607 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3608 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
3609 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3610
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3611 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
3612 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3613
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3614 #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
3615 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3616 * 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
3617 * 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
3618 * 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
3619 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3620 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3621 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
3622 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3623 int idx;
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 // 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
3626 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
3627 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
3628
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3629 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
3630 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
3631
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3632 highlight_changed();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3633 }
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 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3636 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
3637 int idx,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3638 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
3639 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
3640 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3641 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
3642
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3643 # 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
3644 # 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
3645 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
3646 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3647 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
3648 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3649 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
3650 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
3651 didit = TRUE;
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 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3654 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
3655 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3656 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
3657 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
3658 didit = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3659 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3660 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
3661 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3662 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
3663 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
3664 didit = TRUE;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3665 }
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_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
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_sp =
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_sp_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 (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
3673 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
3674 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3675 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3676
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3677 #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
3678 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3679 * 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
3680 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3681 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3682 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
3683 int id,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3684 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
3685 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
3686 int hlcnt,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3687 int i,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3688 int hlf,
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3689 int *table)
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 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
3692
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3693 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
3694 {
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
3695 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
3696 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
3697 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
3698 # 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
3699 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
3700 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3701 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3702 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3703 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
3704 &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
3705 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
3706 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
3707
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 ^=
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3709 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
3710 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
3711 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
3712 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
3713 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
3714 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
3715 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
3716 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
3717 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
3718 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
3719 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
3720 # 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
3721 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
3722 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
3723 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3724 # 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
3725 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
3726 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
3727 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
3728 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
3729 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
3730 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
3731 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
3732 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
3733 # 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
3734 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
3735 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
3736 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3737 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3738 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
3739 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
3740 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
3741 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3742 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3743
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3744 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3745 * 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
3746 * 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
3747 * 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
3748 * 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
3749 * 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
3750 * 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
3751 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3752 int
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3753 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
3754 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3755 int hlf;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3756 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3757 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
3758 int attr;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3759 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
3760 int id;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3761 #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
3762 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
3763 # 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
3764 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
3765 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
3766 # 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
3767 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
3768 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
3769 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3770 int hlcnt;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3771 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3772 #endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3773 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
3774
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3775 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
3776
26193
c83460a14407 patch 8.2.3628: looking terminal colors is a bit slow
Bram Moolenaar <Bram@vim.org>
parents: 26145
diff changeset
3777 #ifdef FEAT_TERMINAL
c83460a14407 patch 8.2.3628: looking terminal colors is a bit slow
Bram Moolenaar <Bram@vim.org>
parents: 26145
diff changeset
3778 term_update_colors_all();
c83460a14407 patch 8.2.3628: looking terminal colors is a bit slow
Bram Moolenaar <Bram@vim.org>
parents: 26145
diff changeset
3779 term_update_wincolor_all();
c83460a14407 patch 8.2.3628: looking terminal colors is a bit slow
Bram Moolenaar <Bram@vim.org>
parents: 26145
diff changeset
3780 #endif
c83460a14407 patch 8.2.3628: looking terminal colors is a bit slow
Bram Moolenaar <Bram@vim.org>
parents: 26145
diff changeset
3781
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3782 // 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
3783 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
3784 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
3785
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3786 // 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
3787 // 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
3788 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
3789 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3790 if (i)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3791 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
3792 else
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3793 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
3794 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
3795 continue;
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 while (*p)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3798 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3799 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
3800 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
3801 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3802 ++p;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3803 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
3804 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3805
26005
8fceae196d4f patch 8.2.3536: the do_highlight() function is way too long
Bram Moolenaar <Bram@vim.org>
parents: 25965
diff changeset
3806 // 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
3807 // 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
3808 attr = 0;
18806
e966de1d0376 patch 8.1.2391: cannot build when __QNXNTO__ is defined
Bram Moolenaar <Bram@vim.org>
parents: 18498
diff changeset
3809 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
3810 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3811 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
3812 continue;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3813
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3814 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
3815 return FAIL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3816
33399
95db67c7b754 patch 9.0.1958: cannot complete option values
Christian Brabandt <cb@256bit.org>
parents: 32916
diff changeset
3817 // Note: Keep this in sync with expand_set_highlight().
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3818 switch (*p)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3819 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3820 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
3821 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3822 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
3823 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3824 case '-':
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3825 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
3826 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3827 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
3828 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3829 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
3830 break;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3831 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
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 '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
3834 break;
29328
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
3835 case '2': attr |= HL_UNDERDOUBLE;
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
3836 break;
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
3837 case 'd': attr |= HL_UNDERDOTTED;
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
3838 break;
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
3839 case '=': attr |= HL_UNDERDASHED;
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
3840 break;
17389
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
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3955 if (*arg == NUL)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3956 return;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3957
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3958 // (part of) subcommand already typed
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3959 p = skiptowhite(arg);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3960 if (*p == NUL)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3961 return;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3962
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3963 // past "default" or group name
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3964 include_default = 0;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3965 if (STRNCMP("default", arg, p - arg) == 0)
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3966 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3967 arg = skipwhite(p);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3968 xp->xp_pattern = arg;
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3969 p = skiptowhite(arg);
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3970 }
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3971 if (*p == NUL)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3972 return;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3973
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3974 // past group name
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3975 include_link = 0;
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3976 if (arg[1] == 'i' && arg[0] == 'N')
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3977 highlight_list();
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3978 if (STRNCMP("link", arg, p - arg) == 0
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3979 || STRNCMP("clear", arg, p - arg) == 0)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3980 {
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3981 xp->xp_pattern = skipwhite(p);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3982 p = skiptowhite(xp->xp_pattern);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3983 if (*p != NUL) // past first group name
17389
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3984 {
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3985 xp->xp_pattern = skipwhite(p);
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3986 p = skiptowhite(xp->xp_pattern);
17389
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 }
31667
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3989 if (*p != NUL) // past group name(s)
b89cfd86e18e patch 9.0.1166: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31602
diff changeset
3990 xp->xp_context = EXPAND_NOTHING;
17389
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
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 * 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
3995 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3996 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3997 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
3998 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3999 int i;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4000
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 = 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
4002 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
4003 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
4004 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
4005 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4006
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4007 static void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4008 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
4009 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4010 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
4011 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
4012 out_flush();
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4013 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
4014 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4015
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 * 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
4018 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4019 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4020 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
4021 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4022 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
4023 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4024
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4025 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4026 * 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
4027 * 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
4028 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4029 char_u *
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4030 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
4031 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4032 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
4033 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4034
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4035 // 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
4036 // cleared.
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4037 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
4038 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
4039
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 != 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 *)"none";
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 != 0)
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4043 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
4044 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
4045 && 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
4046 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
4047 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
4048 && 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
4049 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
4050 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
4051 return NULL;
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4052 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
4053 }
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 #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
4056 /*
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4057 * 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
4058 * 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
4059 */
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4060 void
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4061 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
4062 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4063 int 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 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
4066 {
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4067 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
4068 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
4069 # 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
4070 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
4071 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
4072 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4073 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4074
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_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
4076 # 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
4077 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
4078 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4079 # 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
4080 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
4081 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
4082 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
4083 # endif
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4084 }
635d7f5010b8 patch 8.1.1693: syntax coloring and highlighting is in one big file
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4085 #endif
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4086
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4087 #if defined(FEAT_EVAL) || defined(PROTO)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4088 /*
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4089 * Convert each of the highlight attribute bits (bold, standout, underline,
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4090 * etc.) set in 'hlattr' into a separate boolean item in a Dictionary with
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4091 * the attribute name as the key.
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4092 */
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4093 static dict_T *
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4094 highlight_get_attr_dict(int hlattr)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4095 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4096 dict_T *dict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4097 int i;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4098
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4099 dict = dict_alloc();
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4100 if (dict == NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4101 return NULL;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4102
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4103 for (i = 0; hl_attr_table[i] != 0; ++i)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4104 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4105 if (hlattr & hl_attr_table[i])
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4106 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4107 dict_add_bool(dict, hl_name_table[i], VVAL_TRUE);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4108 hlattr &= ~hl_attr_table[i]; // don't want "inverse"
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4109 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4110 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4111
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4112 return dict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4113 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4114
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4115 /*
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4116 * Return the attributes of the highlight group at index 'hl_idx' as a
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4117 * Dictionary. If 'resolve_link' is TRUE, then resolves the highlight group
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4118 * links recursively.
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4119 */
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4120 static dict_T *
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4121 highlight_get_info(int hl_idx, int resolve_link)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4122 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4123 dict_T *dict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4124 hl_group_T *sgp;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4125 dict_T *attr_dict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4126 int hlgid;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4127
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4128 dict = dict_alloc();
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4129 if (dict == NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4130 return dict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4131
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4132 sgp = &HL_TABLE()[hl_idx];
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4133 // highlight group id is 1-based
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4134 hlgid = hl_idx + 1;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4135
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4136 if (dict_add_string(dict, "name", sgp->sg_name) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4137 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4138 if (dict_add_number(dict, "id", hlgid) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4139 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4140
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4141 if (sgp->sg_link && resolve_link)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4142 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4143 // resolve the highlight group link recursively
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4144 while (sgp->sg_link)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4145 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4146 hlgid = sgp->sg_link;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4147 sgp = &HL_TABLE()[sgp->sg_link - 1];
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4148 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4149 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4150
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4151 if (sgp->sg_term != 0)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4152 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4153 attr_dict = highlight_get_attr_dict(sgp->sg_term);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4154 if (attr_dict != NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4155 if (dict_add_dict(dict, "term", attr_dict) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4156 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4157 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4158 if (sgp->sg_start != NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4159 if (dict_add_string(dict, "start", sgp->sg_start) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4160 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4161 if (sgp->sg_stop != NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4162 if (dict_add_string(dict, "stop", sgp->sg_stop) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4163 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4164 if (sgp->sg_cterm != 0)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4165 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4166 attr_dict = highlight_get_attr_dict(sgp->sg_cterm);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4167 if (attr_dict != NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4168 if (dict_add_dict(dict, "cterm", attr_dict) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4169 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4170 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4171 if (sgp->sg_cterm_fg != 0)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4172 if (dict_add_string(dict, "ctermfg",
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4173 highlight_color(hlgid, (char_u *)"fg", 'c')) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4174 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4175 if (sgp->sg_cterm_bg != 0)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4176 if (dict_add_string(dict, "ctermbg",
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4177 highlight_color(hlgid, (char_u *)"bg", 'c')) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4178 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4179 if (sgp->sg_cterm_ul != 0)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4180 if (dict_add_string(dict, "ctermul",
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4181 highlight_color(hlgid, (char_u *)"ul", 'c')) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4182 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4183 if (sgp->sg_gui != 0)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4184 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4185 attr_dict = highlight_get_attr_dict(sgp->sg_gui);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4186 if (attr_dict != NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4187 if (dict_add_dict(dict, "gui", attr_dict) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4188 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4189 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4190 if (sgp->sg_gui_fg_name != NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4191 if (dict_add_string(dict, "guifg",
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4192 highlight_color(hlgid, (char_u *)"fg", 'g')) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4193 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4194 if (sgp->sg_gui_bg_name != NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4195 if (dict_add_string(dict, "guibg",
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4196 highlight_color(hlgid, (char_u *)"bg", 'g')) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4197 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4198 if (sgp->sg_gui_sp_name != NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4199 if (dict_add_string(dict, "guisp",
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4200 highlight_color(hlgid, (char_u *)"sp", 'g')) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4201 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4202 # ifdef FEAT_GUI
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4203 if (sgp->sg_font_name != NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4204 if (dict_add_string(dict, "font", sgp->sg_font_name) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4205 goto error;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4206 # endif
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4207 if (sgp->sg_link)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4208 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4209 char_u *link;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4210
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4211 link = HL_TABLE()[sgp->sg_link - 1].sg_name;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4212 if (link != NULL && dict_add_string(dict, "linksto", link) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4213 goto error;
26145
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4214
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4215 if (sgp->sg_deflink)
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4216 dict_add_bool(dict, "default", VVAL_TRUE);
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4217 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4218 if (dict_len(dict) == 2)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4219 // If only 'name' is present, then the highlight group is cleared.
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4220 dict_add_bool(dict, "cleared", VVAL_TRUE);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4221
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4222 return dict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4223
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4224 error:
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4225 vim_free(dict);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4226 return NULL;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4227 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4228
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4229 /*
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4230 * "hlget([name])" function
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4231 * Return the attributes of a specific highlight group (if specified) or all
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4232 * the highlight groups.
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4233 */
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4234 void
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4235 f_hlget(typval_T *argvars, typval_T *rettv)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4236 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4237 list_T *list;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4238 dict_T *dict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4239 int i;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4240 char_u *hlarg = NULL;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4241 int resolve_link = FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4242
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4243 if (rettv_list_alloc(rettv) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4244 return;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4245
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4246 if (check_for_opt_string_arg(argvars, 0) == FAIL
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4247 || (argvars[0].v_type != VAR_UNKNOWN
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4248 && check_for_opt_bool_arg(argvars, 1) == FAIL))
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4249 return;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4250
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4251 if (argvars[0].v_type != VAR_UNKNOWN)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4252 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4253 // highlight group name supplied
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4254 hlarg = tv_get_string_chk(&argvars[0]);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4255 if (hlarg == NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4256 return;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4257
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4258 if (argvars[1].v_type != VAR_UNKNOWN)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4259 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4260 int error = FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4261
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4262 resolve_link = tv_get_bool_chk(&argvars[1], &error);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4263 if (error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4264 return;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4265 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4266 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4267
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4268 list = rettv->vval.v_list;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4269 for (i = 0; i < highlight_ga.ga_len && !got_int; ++i)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4270 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4271 if (hlarg == NULL || STRICMP(hlarg, HL_TABLE()[i].sg_name) == 0)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4272 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4273 dict = highlight_get_info(i, resolve_link);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4274 if (dict != NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4275 list_append_dict(list, dict);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4276 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4277 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4278 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4279
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4280 /*
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4281 * Returns the string value at 'dict[key]'. Returns NULL, if 'key' is not in
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4282 * 'dict' or the value is not a string type. If the value is not a string type
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4283 * or is NULL, then 'error' is set to TRUE.
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4284 */
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4285 static char_u *
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4286 hldict_get_string(dict_T *dict, char_u *key, int *error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4287 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4288 dictitem_T *di;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4289
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4290 *error = FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4291 di = dict_find(dict, key, -1);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4292 if (di == NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4293 return NULL;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4294
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4295 if (di->di_tv.v_type != VAR_STRING || di->di_tv.vval.v_string == NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4296 {
26877
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
4297 emsg(_(e_string_required));
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4298 *error = TRUE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4299 return NULL;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4300 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4301
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4302 return di->di_tv.vval.v_string;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4303 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4304
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4305 /*
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4306 * Convert the highlight attribute Dictionary at 'dict[key]' into a string
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4307 * value in 'attr_str' of length 'len'. Returns FALSE if 'dict[key]' is not a
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4308 * Dictionary or is NULL.
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4309 */
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4310 static int
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4311 hldict_attr_to_str(
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4312 dict_T *dict,
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4313 char_u *key,
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4314 char_u *attr_str,
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4315 size_t len)
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4316 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4317 dictitem_T *di;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4318 dict_T *attrdict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4319 int i;
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4320 char_u *p;
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4321 size_t sz;
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4322
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4323 attr_str[0] = NUL;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4324 di = dict_find(dict, key, -1);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4325 if (di == NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4326 return TRUE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4327
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4328 if (di->di_tv.v_type != VAR_DICT || di->di_tv.vval.v_dict == NULL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4329 {
26877
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
4330 emsg(_(e_dictionary_required));
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4331 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4332 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4333
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4334 attrdict = di->di_tv.vval.v_dict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4335
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4336 // If the attribute dict is empty, then return NONE to clear the attributes
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4337 if (dict_len(attrdict) == 0)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4338 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4339 vim_strcat(attr_str, (char_u *)"NONE", len);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4340 return TRUE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4341 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4342
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4343 p = attr_str;
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4344 for (i = 0; i < (int)ARRAY_LENGTH(hl_name_table); i++)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4345 {
29442
827d9f2b7a71 patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents: 29328
diff changeset
4346 if (dict_get_bool(attrdict, hl_name_table[i], VVAL_FALSE) == VVAL_TRUE)
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4347 {
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4348 if (p != attr_str && (size_t)(p - attr_str + 2) < len)
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4349 STRCPY(p, (char_u *)",");
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4350 sz = STRLEN(hl_name_table[i]);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4351 if (p - attr_str + sz + 1 < len)
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4352 {
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4353 STRCPY(p, (char_u *)hl_name_table[i]);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4354 p += sz;
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4355 }
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4356 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4357 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4358
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4359 return TRUE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4360 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4361
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4362 // Temporary buffer used to store the command string produced by hlset().
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4363 // IObuff cannot be used for this as the error messages produced by hlset()
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4364 // internally use IObuff.
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4365 #define HLSETBUFSZ 512
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4366 static char_u hlsetBuf[HLSETBUFSZ + 1];
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4367
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4368 /*
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4369 * Add the highlight attribute "attr" of length "attrlen" and "value" at
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4370 * "dptr", which points into "hlsetBuf".
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4371 * Returns the updated pointer.
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4372 */
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4373 static char_u *
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4374 add_attr_and_value(char_u *dptr, char_u *attr, int attrlen, char_u *value)
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4375 {
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4376 size_t vallen;
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4377
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4378 // Do nothing if the value is not specified or is empty
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4379 if (value == NULL || *value == NUL)
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4380 return dptr;
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4381
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4382 vallen = STRLEN(value);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4383 if (dptr + attrlen + vallen + 1 < hlsetBuf + HLSETBUFSZ)
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4384 {
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4385 STRCPY(dptr, attr);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4386 dptr += attrlen;
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4387 STRCPY(dptr, value);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4388 dptr += vallen;
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4389 }
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4390
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4391 return dptr;
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4392 }
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4393
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4394 /*
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4395 * Add or update a highlight group using 'dict' items. Returns TRUE if
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4396 * successfully updated the highlight group.
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4397 */
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4398 static int
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4399 hlg_add_or_update(dict_T *dict)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4400 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4401 char_u *name;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4402 int error;
29328
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
4403 char_u term_attr[MAX_ATTR_LEN];
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
4404 char_u cterm_attr[MAX_ATTR_LEN];
60977de70684 patch 9.0.0007: no support for double, dotted and dashed underlines
Bram Moolenaar <Bram@vim.org>
parents: 29320
diff changeset
4405 char_u gui_attr[MAX_ATTR_LEN];
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4406 char_u *start;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4407 char_u *stop;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4408 char_u *ctermfg;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4409 char_u *ctermbg;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4410 char_u *ctermul;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4411 char_u *guifg;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4412 char_u *guibg;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4413 char_u *guisp;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4414 # ifdef FEAT_GUI
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4415 char_u *font;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4416 # endif
26145
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4417 int forceit = FALSE;
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4418 int dodefault = FALSE;
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4419 int done = FALSE;
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4420 char_u *p;
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4421
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4422 name = hldict_get_string(dict, (char_u *)"name", &error);
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4423 if (name == NULL || *name == NUL || error)
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4424 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4425
29442
827d9f2b7a71 patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents: 29328
diff changeset
4426 if (dict_get_bool(dict, "force", VVAL_FALSE) == VVAL_TRUE)
26145
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4427 forceit = TRUE;
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4428
29442
827d9f2b7a71 patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents: 29328
diff changeset
4429 if (dict_get_bool(dict, "default", VVAL_FALSE) == VVAL_TRUE)
26145
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4430 dodefault = TRUE;
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4431
28315
62cc3b60493b patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents: 27752
diff changeset
4432 if (dict_has_key(dict, "cleared"))
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4433 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4434 varnumber_T cleared;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4435
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4436 // clear a highlight group
29442
827d9f2b7a71 patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents: 29328
diff changeset
4437 cleared = dict_get_bool(dict, "cleared", FALSE);
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4438 if (cleared == TRUE)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4439 {
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4440 vim_snprintf((char *)hlsetBuf, HLSETBUFSZ, "clear %s", name);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4441 do_highlight(hlsetBuf, forceit, FALSE);
26145
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4442 done = TRUE;
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4443 }
26145
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4444 }
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4445
28315
62cc3b60493b patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents: 27752
diff changeset
4446 if (dict_has_key(dict, "linksto"))
26145
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4447 {
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4448 char_u *linksto;
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4449
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4450 // link highlight groups
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4451 linksto = hldict_get_string(dict, (char_u *)"linksto", &error);
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4452 if (linksto == NULL || *linksto == NUL || error)
26145
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4453 return FALSE;
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4454
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4455 vim_snprintf((char *)hlsetBuf, HLSETBUFSZ, "%slink %s %s",
26145
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4456 dodefault ? "default " : "", name, linksto);
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4457 do_highlight(hlsetBuf, forceit, FALSE);
26145
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4458
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4459 done = TRUE;
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4460 }
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4461
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4462 // If 'cleared' or 'linksto' are specified, then don't process the other
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4463 // attributes.
3da380450cce patch 8.2.3605: cannot clear and unlinke a highlight group with hlset()
Bram Moolenaar <Bram@vim.org>
parents: 26115
diff changeset
4464 if (done)
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4465 return TRUE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4466
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4467 start = hldict_get_string(dict, (char_u *)"start", &error);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4468 if (error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4469 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4470
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4471 stop = hldict_get_string(dict, (char_u *)"stop", &error);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4472 if (error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4473 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4474
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4475 if (!hldict_attr_to_str(dict, (char_u *)"term", term_attr,
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4476 sizeof(term_attr)))
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4477 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4478
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4479 if (!hldict_attr_to_str(dict, (char_u *)"cterm", cterm_attr,
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4480 sizeof(cterm_attr)))
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4481 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4482
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4483 ctermfg = hldict_get_string(dict, (char_u *)"ctermfg", &error);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4484 if (error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4485 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4486
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4487 ctermbg = hldict_get_string(dict, (char_u *)"ctermbg", &error);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4488 if (error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4489 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4490
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4491 ctermul = hldict_get_string(dict, (char_u *)"ctermul", &error);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4492 if (error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4493 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4494
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4495 if (!hldict_attr_to_str(dict, (char_u *)"gui", gui_attr, sizeof(gui_attr)))
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4496 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4497
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4498 guifg = hldict_get_string(dict, (char_u *)"guifg", &error);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4499 if (error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4500 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4501
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4502 guibg = hldict_get_string(dict, (char_u *)"guibg", &error);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4503 if (error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4504 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4505
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4506 guisp = hldict_get_string(dict, (char_u *)"guisp", &error);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4507 if (error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4508 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4509
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4510 # ifdef FEAT_GUI
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4511 font = hldict_get_string(dict, (char_u *)"font", &error);
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4512 if (error)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4513 return FALSE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4514 # endif
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4515
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4516 // If none of the attributes are specified, then do nothing.
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4517 if (term_attr[0] == NUL && start == NULL && stop == NULL
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4518 && cterm_attr[0] == NUL && ctermfg == NULL && ctermbg == NULL
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4519 && ctermul == NULL && gui_attr[0] == NUL
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4520 # ifdef FEAT_GUI
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4521 && font == NULL
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4522 # endif
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4523 && guifg == NULL && guibg == NULL && guisp == NULL
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4524 )
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4525 return TRUE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4526
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4527 hlsetBuf[0] = NUL;
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4528 p = hlsetBuf;
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4529 if (dodefault)
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4530 p = add_attr_and_value(p, (char_u *)"default", 7, (char_u *)" ");
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4531 p = add_attr_and_value(p, (char_u *)"", 0, name);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4532 p = add_attr_and_value(p, (char_u *)" term=", 6, term_attr);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4533 p = add_attr_and_value(p, (char_u *)" start=", 7, start);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4534 p = add_attr_and_value(p, (char_u *)" stop=", 6, stop);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4535 p = add_attr_and_value(p, (char_u *)" cterm=", 7, cterm_attr);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4536 p = add_attr_and_value(p, (char_u *)" ctermfg=", 9, ctermfg);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4537 p = add_attr_and_value(p, (char_u *)" ctermbg=", 9, ctermbg);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4538 p = add_attr_and_value(p, (char_u *)" ctermul=", 9, ctermul);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4539 p = add_attr_and_value(p, (char_u *)" gui=", 5, gui_attr);
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4540 # ifdef FEAT_GUI
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4541 p = add_attr_and_value(p, (char_u *)" font=", 6, font);
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4542 # endif
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4543 p = add_attr_and_value(p, (char_u *)" guifg=", 7, guifg);
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4544 p = add_attr_and_value(p, (char_u *)" guibg=", 7, guibg);
30053
f5cbf8a4043d patch 9.0.0364: clang static analyzer gives warnings
Bram Moolenaar <Bram@vim.org>
parents: 30011
diff changeset
4545 (void)add_attr_and_value(p, (char_u *)" guisp=", 7, guisp);
26274
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4546
84eb3e0ad3f4 patch 8.2.3668: messages may be corrupted
Bram Moolenaar <Bram@vim.org>
parents: 26266
diff changeset
4547 do_highlight(hlsetBuf, forceit, FALSE);
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4548
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4549 return TRUE;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4550 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4551
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4552 /*
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4553 * "hlset([{highlight_attr}])" function
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4554 * Add or modify highlight groups
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4555 */
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4556 void
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4557 f_hlset(typval_T *argvars, typval_T *rettv)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4558 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4559 listitem_T *li;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4560 dict_T *dict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4561
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4562 rettv->vval.v_number = -1;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4563
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4564 if (check_for_list_arg(argvars, 0) == FAIL)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4565 return;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4566
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4567 FOR_ALL_LIST_ITEMS(argvars->vval.v_list, li)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4568 {
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4569 if (li->li_tv.v_type != VAR_DICT)
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4570 {
26877
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
4571 emsg(_(e_dictionary_required));
26089
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4572 return;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4573 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4574
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4575 dict = li->li_tv.vval.v_dict;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4576 if (!hlg_add_or_update(dict))
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4577 return;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4578 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4579
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4580 rettv->vval.v_number = 0;
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4581 }
c544eacaf066 patch 8.2.3578: manipulating highlighting is complicated
Bram Moolenaar <Bram@vim.org>
parents: 26059
diff changeset
4582 #endif