highlight.h (4007B)
1 #pragma once 2 3 #include <stdbool.h> 4 5 #include "nvim/api/keysets_defs.h" // IWYU pragma: keep 6 #include "nvim/api/private/defs.h" // IWYU pragma: keep 7 #include "nvim/buffer_defs.h" 8 #include "nvim/highlight_defs.h" // IWYU pragma: keep 9 #include "nvim/macros_defs.h" 10 #include "nvim/option_vars.h" 11 #include "nvim/types_defs.h" 12 #include "nvim/ui_defs.h" // IWYU pragma: keep 13 14 EXTERN const char *hlf_names[] INIT( = { 15 [HLF_8] = "SpecialKey", 16 [HLF_EOB] = "EndOfBuffer", 17 [HLF_TERM] = "TermCursor", 18 [HLF_AT] = "NonText", 19 [HLF_D] = "Directory", 20 [HLF_OK] = "OkMsg", 21 [HLF_W] = "WarningMsg", 22 [HLF_E] = "ErrorMsg", 23 [HLF_SE] = "StderrMsg", 24 [HLF_SO] = "StdoutMsg", 25 [HLF_I] = "IncSearch", 26 [HLF_L] = "Search", 27 [HLF_LC] = "CurSearch", 28 [HLF_M] = "MoreMsg", 29 [HLF_CM] = "ModeMsg", 30 [HLF_N] = "LineNr", 31 [HLF_LNA] = "LineNrAbove", 32 [HLF_LNB] = "LineNrBelow", 33 [HLF_CLN] = "CursorLineNr", 34 [HLF_CLS] = "CursorLineSign", 35 [HLF_CLF] = "CursorLineFold", 36 [HLF_R] = "Question", 37 [HLF_S] = "StatusLine", 38 [HLF_SNC] = "StatusLineNC", 39 [HLF_C] = "WinSeparator", 40 [HLF_T] = "Title", 41 [HLF_V] = "Visual", 42 [HLF_VNC] = "VisualNC", 43 [HLF_VSP] = "VertSplit", 44 [HLF_WM] = "WildMenu", 45 [HLF_FL] = "Folded", 46 [HLF_FC] = "FoldColumn", 47 [HLF_ADD] = "DiffAdd", 48 [HLF_CHD] = "DiffChange", 49 [HLF_DED] = "DiffDelete", 50 [HLF_TXD] = "DiffText", 51 [HLF_TXA] = "DiffTextAdd", 52 [HLF_SC] = "SignColumn", 53 [HLF_CONCEAL] = "Conceal", 54 [HLF_SPB] = "SpellBad", 55 [HLF_SPC] = "SpellCap", 56 [HLF_SPR] = "SpellRare", 57 [HLF_SPL] = "SpellLocal", 58 [HLF_PNI] = "Pmenu", 59 [HLF_PSI] = "PmenuSel", 60 [HLF_PMNI] = "PmenuMatch", 61 [HLF_PMSI] = "PmenuMatchSel", 62 [HLF_PNK] = "PmenuKind", 63 [HLF_PSK] = "PmenuKindSel", 64 [HLF_PNX] = "PmenuExtra", 65 [HLF_PSX] = "PmenuExtraSel", 66 [HLF_PSB] = "PmenuSbar", 67 [HLF_PST] = "PmenuThumb", 68 [HLF_TP] = "TabLine", 69 [HLF_TPS] = "TabLineSel", 70 [HLF_TPF] = "TabLineFill", 71 [HLF_CUC] = "CursorColumn", 72 [HLF_CUL] = "CursorLine", 73 [HLF_MC] = "ColorColumn", 74 [HLF_QFL] = "QuickFixLine", 75 [HLF_0] = "Whitespace", 76 [HLF_INACTIVE] = "NormalNC", 77 [HLF_MSGSEP] = "MsgSeparator", 78 [HLF_NFLOAT] = "NormalFloat", 79 [HLF_MSG] = "MsgArea", 80 [HLF_BORDER] = "FloatBorder", 81 [HLF_WBR] = "WinBar", 82 [HLF_WBRNC] = "WinBarNC", 83 [HLF_CU] = "Cursor", 84 [HLF_BTITLE] = "FloatTitle", 85 [HLF_BFOOTER] = "FloatFooter", 86 [HLF_TS] = "StatusLineTerm", 87 [HLF_TSNC] = "StatusLineTermNC", 88 [HLF_PRE] = "PreInsert", 89 [HLF_PBR] = "PmenuBorder", 90 }); 91 92 EXTERN int highlight_attr[HLF_COUNT]; // Highl. attr for each context. 93 EXTERN int highlight_attr_last[HLF_COUNT]; // copy for detecting changed groups 94 EXTERN int highlight_user[9]; // User[1-9] attributes 95 EXTERN int highlight_stlnc[9]; // On top of user 96 EXTERN int cterm_normal_fg_color INIT( = 0); 97 EXTERN int cterm_normal_bg_color INIT( = 0); 98 EXTERN RgbValue normal_fg INIT( = -1); 99 EXTERN RgbValue normal_bg INIT( = -1); 100 EXTERN RgbValue normal_sp INIT( = -1); 101 102 EXTERN NS ns_hl_global INIT( = 0); // global highlight namespace 103 EXTERN NS ns_hl_win INIT( = -1); // highlight namespace for the current window 104 EXTERN NS ns_hl_fast INIT( = -1); // highlight namespace specified in a fast callback 105 EXTERN NS ns_hl_active INIT( = 0); // currently active/cached namespace 106 107 EXTERN int *hl_attr_active INIT( = highlight_attr); 108 109 // Enums need a typecast to be used as array index. 110 #define HL_ATTR(n) hl_attr_active[(int)(n)] 111 112 #include "highlight.h.generated.h" 113 114 static inline int win_hl_attr(win_T *wp, int hlf) 115 { 116 // wp->w_ns_hl_attr might be null if we check highlights 117 // prior to entering redraw 118 return ((wp->w_ns_hl_attr && ns_hl_fast < 0) ? wp->w_ns_hl_attr : hl_attr_active)[hlf]; 119 } 120 121 #define HL_SET_DEFAULT_COLORS(rgb_fg, rgb_bg, rgb_sp) \ 122 do { \ 123 bool dark_ = (*p_bg == 'd'); \ 124 rgb_fg = rgb_fg != -1 ? rgb_fg : (dark_ ? 0xFFFFFF : 0x000000); \ 125 rgb_bg = rgb_bg != -1 ? rgb_bg : (dark_ ? 0x000000 : 0xFFFFFF); \ 126 rgb_sp = rgb_sp != -1 ? rgb_sp : 0xFF0000; \ 127 } while (0);