1 #ifndef NVIM_HIGHLIGHT_DEFS_H 2 #define NVIM_HIGHLIGHT_DEFS_H 3 4 #include <inttypes.h> 5 6 #include "nvim/macros.h" 7 #include "nvim/types.h" 8 9 typedef int32_t RgbValue; 10 11 /// Highlighting attribute bits. 12 /// 13 /// sign bit should not be used here, as it identifies invalid highlight 14 typedef enum { 15 HL_INVERSE = 0x01, 16 HL_BOLD = 0x02, 17 HL_ITALIC = 0x04, 18 HL_UNDERLINE = 0x08, 19 HL_UNDERCURL = 0x10, 20 HL_STANDOUT = 0x20, 21 HL_STRIKETHROUGH = 0x40, 22 HL_NOCOMBINE = 0x80, 23 HL_BG_INDEXED = 0x0100, 24 HL_FG_INDEXED = 0x0200, 25 HL_DEFAULT = 0x0400, 26 HL_GLOBAL = 0x0800, 27 } HlAttrFlags; 28 29 /// Stores a complete highlighting entry, including colors and attributes 30 /// for both TUI and GUI. 31 typedef struct attr_entry { 32 int16_t rgb_ae_attr, cterm_ae_attr; ///< HlAttrFlags 33 RgbValue rgb_fg_color, rgb_bg_color, rgb_sp_color; 34 int cterm_fg_color, cterm_bg_color; 35 int hl_blend; 36 } HlAttrs; 37 38 #define HLATTRS_INIT (HlAttrs) { \ 39 .rgb_ae_attr = 0, \ 40 .cterm_ae_attr = 0, \ 41 .rgb_fg_color = -1, \ 42 .rgb_bg_color = -1, \ 43 .rgb_sp_color = -1, \ 44 .cterm_fg_color = 0, \ 45 .cterm_bg_color = 0, \ 46 .hl_blend = -1, \ 47 } 48 49 /// Values for index in highlight_attr[]. 50 /// When making changes, also update hlf_names below! 51 typedef enum { 52 HLF_8 = 0, // Meta & special keys listed with ":map", text that is 53 // displayed different from what it is 54 HLF_EOB, // after the last line in the buffer 55 HLF_TERM, // terminal cursor focused 56 HLF_TERMNC, // terminal cursor unfocused 57 HLF_AT, // @ characters at end of screen, characters that don't really exist in the text 58 HLF_D, // directories in CTRL-D listing 59 HLF_E, // error messages 60 HLF_I, // incremental search 61 HLF_L, // last search string 62 HLF_M, // "--More--" message 63 HLF_CM, // Mode (e.g., "-- INSERT --") 64 HLF_N, // line number for ":number" and ":#" commands 65 HLF_LNA, // LineNrAbove 66 HLF_LNB, // LineNrBelow 67 HLF_CLN, // current line number when 'cursorline' is set 68 HLF_R, // return to continue message and yes/no questions 69 HLF_S, // status lines 70 HLF_SNC, // status lines of not-current windows 71 HLF_C, // column to separate vertically split windows 72 HLF_T, // Titles for output from ":set all", ":autocmd" etc. 73 HLF_V, // Visual mode 74 HLF_VNC, // Visual mode, autoselecting and not clipboard owner 75 HLF_W, // warning messages 76 HLF_WM, // Wildmenu highlight 77 HLF_FL, // Folded line 78 HLF_FC, // Fold column 79 HLF_ADD, // Added diff line 80 HLF_CHD, // Changed diff line 81 HLF_DED, // Deleted diff line 82 HLF_TXD, // Text Changed in diff line 83 HLF_SC, // Sign column 84 HLF_CONCEAL, // Concealed text 85 HLF_SPB, // SpellBad 86 HLF_SPC, // SpellCap 87 HLF_SPR, // SpellRare 88 HLF_SPL, // SpellLocal 89 HLF_PNI, // popup menu normal item 90 HLF_PSI, // popup menu selected item 91 HLF_PSB, // popup menu scrollbar 92 HLF_PST, // popup menu scrollbar thumb 93 HLF_TP, // tabpage line 94 HLF_TPS, // tabpage line selected 95 HLF_TPF, // tabpage line filler 96 HLF_CUC, // 'cursorcolumn' 97 HLF_CUL, // 'cursorline' 98 HLF_MC, // 'colorcolumn' 99 HLF_QFL, // selected quickfix line 100 HLF_0, // Whitespace 101 HLF_INACTIVE, // NormalNC: Normal text in non-current windows 102 HLF_MSGSEP, // message separator line 103 HLF_NFLOAT, // Floating window 104 HLF_MSG, // Message area 105 HLF_BORDER, // Floating window border 106 HLF_COUNT, // MUST be the last one 107 } hlf_T; 108 109 EXTERN const char *hlf_names[] INIT(= { 110 [HLF_8] = "SpecialKey", 111 [HLF_EOB] = "EndOfBuffer", 112 [HLF_TERM] = "TermCursor", 113 [HLF_TERMNC] = "TermCursorNC", 114 [HLF_AT] = "NonText", 115 [HLF_D] = "Directory", 116 [HLF_E] = "ErrorMsg", 117 [HLF_I] = "IncSearch", 118 [HLF_L] = "Search", 119 [HLF_M] = "MoreMsg", 120 [HLF_CM] = "ModeMsg", 121 [HLF_N] = "LineNr", 122 [HLF_LNA] = "LineNrAbove", 123 [HLF_LNB] = "LineNrBelow", 124 [HLF_CLN] = "CursorLineNr", 125 [HLF_R] = "Question", 126 [HLF_S] = "StatusLine", 127 [HLF_SNC] = "StatusLineNC", 128 [HLF_C] = "VertSplit", 129 [HLF_T] = "Title", 130 [HLF_V] = "Visual", 131 [HLF_VNC] = "VisualNC", 132 [HLF_W] = "WarningMsg", 133 [HLF_WM] = "WildMenu", 134 [HLF_FL] = "Folded", 135 [HLF_FC] = "FoldColumn", 136 [HLF_ADD] = "DiffAdd", 137 [HLF_CHD] = "DiffChange", 138 [HLF_DED] = "DiffDelete", 139 [HLF_TXD] = "DiffText", 140 [HLF_SC] = "SignColumn", 141 [HLF_CONCEAL] = "Conceal", 142 [HLF_SPB] = "SpellBad", 143 [HLF_SPC] = "SpellCap", 144 [HLF_SPR] = "SpellRare", 145 [HLF_SPL] = "SpellLocal", 146 [HLF_PNI] = "Pmenu", 147 [HLF_PSI] = "PmenuSel", 148 [HLF_PSB] = "PmenuSbar", 149 [HLF_PST] = "PmenuThumb", 150 [HLF_TP] = "TabLine", 151 [HLF_TPS] = "TabLineSel", 152 [HLF_TPF] = "TabLineFill", 153 [HLF_CUC] = "CursorColumn", 154 [HLF_CUL] = "CursorLine", 155 [HLF_MC] = "ColorColumn", 156 [HLF_QFL] = "QuickFixLine", 157 [HLF_0] = "Whitespace", 158 [HLF_INACTIVE] = "NormalNC", 159 [HLF_MSGSEP] = "MsgSeparator", 160 [HLF_NFLOAT] = "NormalFloat", 161 [HLF_MSG] = "MsgArea", 162 [HLF_BORDER] = "FloatBorder", 163 }); 164 165 166 EXTERN int highlight_attr[HLF_COUNT]; // Highl. attr for each context. 167 EXTERN int highlight_attr_last[HLF_COUNT]; // copy for detecting changed groups 168 EXTERN int highlight_user[9]; // User[1-9] attributes 169 EXTERN int highlight_stlnc[9]; // On top of user 170 EXTERN int cterm_normal_fg_color INIT(= 0); 171 EXTERN int cterm_normal_bg_color INIT(= 0); 172 EXTERN RgbValue normal_fg INIT(= -1); 173 EXTERN RgbValue normal_bg INIT(= -1); 174 EXTERN RgbValue normal_sp INIT(= -1); 175 176 typedef enum { 177 kHlUnknown, 178 kHlUI, 179 kHlSyntax, 180 kHlTerminal, 181 kHlCombine, 182 kHlBlend, 183 kHlBlendThrough, 184 } HlKind; 185 186 typedef struct { 187 HlAttrs attr; 188 HlKind kind; 189 int id1; 190 int id2; 191 int winid; 192 } HlEntry; 193 194 typedef struct { 195 int ns_id; 196 int syn_id; 197 } ColorKey; 198 #define ColorKey(n, s) (ColorKey) { .ns_id = (int)(n), .syn_id = (s) } 199 200 typedef struct { 201 int attr_id; 202 int link_id; 203 int version; 204 bool is_default; 205 } ColorItem; 206 #define COLOR_ITEM_INITIALIZER { .attr_id = -1, .link_id = -1, \ 207 .version = -1, .is_default = false } 208 209 210 #endif // NVIM_HIGHLIGHT_DEFS_H 211