neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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);