Skip to content

Instantly share code, notes, and snippets.

@spiderman-idog
Last active August 29, 2022 22:26
Show Gist options
  • Save spiderman-idog/6861267116b9de6fdec030b670ab012d to your computer and use it in GitHub Desktop.
Save spiderman-idog/6861267116b9de6fdec030b670ab012d to your computer and use it in GitHub Desktop.
Quick edit of the PaperColor vim theme to make it look like hallski/spacedust-theme, if the theme looks kinda off to you, try toggling the background or setting the theme to spacedust again
" Theme: Spacedust
" Source: https://gist.github.com/Helaxious/6861267116b9de6fdec030b670ab012d
let s:version = '0.9.x'
" Note on navigating this source code:
" - Use folding feature to collapse/uncollapse blocks of marked code
" zM to fold all markers in this file to see the structure of the source code
" zR to unfold all recursively
" za to toggle a fold
" See: http://vim.wikia.com/wiki/Folding
" - The main section is at the end where the functions are called in order.
" Theme Repository: {{{
let s:themes = {}
" }}}
fun! s:register_default_theme()
" Theme name should be lowercase
let s:themes['default'] = {
\ 'maintainer' : 'Nikyle Nguyen <me@Nikyle.com>',
\ 'source' : 'http://github.com/NLKNguyen/papercolor-theme',
\ 'description' : 'The original Spacedust Theme, inspired by Google Material Design',
\ 'options' : {
\ 'allow_bold': 1
\ }
\ }
let s:themes['default'].dark = {
\ 'NO_CONVERSION': 1,
\ 'TEST_256_COLOR_CONSISTENCY' : 1,
\ 'palette' : {
\ 'color00' : ['#041e23', '234'],
\ 'color01' : ['#E35B00', '125'],
\ 'color02' : ['#4A9D8F', '70'],
\ 'color03' : ['#4A9D8F', '179'],
\ 'color04' : ['#041E23', '74'],
\ 'color05' : ['#6E5346', '244'],
\ 'color06' : ['#E35B00', '173'],
\ 'color07' : ['#ECF0C1', '252'],
\ 'color08' : ['#585858', '240'],
\ 'color09' : ['#E35B00', '71'],
\ 'color10' : ['#008080', '148'],
\ 'color11' : ['#009FC5', '140'],
\ 'color12' : ['#CB7636', '214'],
\ 'color13' : ['#4A9D8F', '205'],
\ 'color14' : ['#EBC562', '37'],
\ 'color15' : ['#09699D', '66'],
\ 'color16' : ['#CB7636', '74'],
\ 'color17' : ['#4A9D8F', '178'],
\ 'cursor_fg' : ['#1c1c1c', '234'],
\ 'cursor_bg' : ['#c6c6c6', '251'],
\ 'cursorline' : ['#0F2930', '236'],
\ 'cursorcolumn' : ['#303030', '236'],
\ 'cursorlinenr_fg' : ['#EBC562', '226'],
\ 'cursorlinenr_bg' : ['#0F2930', '234'],
\ 'popupmenu_fg' : ['#c6c6c6', '251'],
\ 'popupmenu_bg' : ['#303030', '236'],
\ 'search_fg' : ['#000000', '16'],
\ 'search_bg' : ['#00875f', '29'],
\ 'linenumber_fg' : ['#244F61', '240'],
\ 'linenumber_bg' : ['#0F2930', '234'],
\ 'vertsplit_fg' : ['#5f8787', '66'],
\ 'vertsplit_bg' : ['#1c1c1c', '234'],
\ 'statusline_active_fg' : ['#1c1c1c', '234'],
\ 'statusline_active_bg' : ['#5f8787', '66'],
\ 'statusline_inactive_fg' : ['#bcbcbc', '250'],
\ 'statusline_inactive_bg' : ['#3a3a3a', '237'],
\ 'todo_fg' : ['#ff8700', '208'],
\ 'todo_bg' : ['#1c1c1c', '234'],
\ 'error_fg' : ['#af005f', '125'],
\ 'error_bg' : ['#5f0000', '52'],
\ 'matchparen_bg' : ['#4e4e4e', '239'],
\ 'matchparen_fg' : ['#c6c6c6', '251'],
\ 'visual_fg' : ['#ECF0C1', '16'],
\ 'visual_bg' : ['#06496F', '103'],
\ 'folded_fg' : ['#CB7636', '177'],
\ 'folded_bg' : ['#0f2930', '53'],
\ 'wildmenu_fg': ['#1c1c1c', '234'],
\ 'wildmenu_bg': ['#afd700', '148'],
\ 'spellbad': ['#5f0000', '52'],
\ 'spellcap': ['#5f005f', '53'],
\ 'spellrare': ['#005f00', '22'],
\ 'spelllocal': ['#00005f', '17'],
\ 'diffadd_fg': ['#87d700', '112'],
\ 'diffadd_bg': ['#005f00', '22'],
\ 'diffdelete_fg': ['#af005f', '125'],
\ 'diffdelete_bg': ['#5f0000', '52'],
\ 'difftext_fg': ['#5fffff', '87'],
\ 'difftext_bg': ['#008787', '30'],
\ 'diffchange_fg': ['#d0d0d0', '252'],
\ 'diffchange_bg': ['#005f5f', '23'],
\ 'tabline_bg': ['#262626', '235'],
\ 'tabline_active_fg': ['#121212', '233'],
\ 'tabline_active_bg': ['#00afaf', '37'],
\ 'tabline_inactive_fg': ['#bcbcbc', '250'],
\ 'tabline_inactive_bg': ['#585858', '240'],
\ 'buftabline_bg': ['#262626', '235'],
\ 'buftabline_current_fg': ['#121212', '233'],
\ 'buftabline_current_bg': ['#00afaf', '37'],
\ 'buftabline_active_fg': ['#00afaf', '37'],
\ 'buftabline_active_bg': ['#585858', '240'],
\ 'buftabline_inactive_fg': ['#bcbcbc', '250'],
\ 'buftabline_inactive_bg': ['#585858', '240']
\ }
\ }
endfun
" ============================ THEME REGISTER =================================
" Acquire Theme Data: {{{
" Brief:
" Function to get theme information and store in variables for other
" functions to use
"
" Require:
" s:themes <dictionary> collection of all theme palettes
"
" Require Optionally:
" {g:Spacedust_Theme_[s:theme_name]} <dictionary> user custom theme palette
" g:Spacedust_Theme_Options <dictionary> user options
"
" Expose:
" s:theme_name <string> the name of the selected theme
" s:selected_theme <dictionary> the selected theme object (contains palette, etc.)
" s:selected_variant <string> 'light' or 'dark'
" s:palette <dictionary> the palette of selected theme
" s:options <dictionary> user options
fun! s:acquire_theme_data()
" Get theme name: {{{
let s:theme_name = 'default'
if exists("g:Spacedust_Theme") " Users expressed theme preference
let lowercase_theme_name = tolower(g:Spacedust_Theme)
if lowercase_theme_name !=? 'default'
let theme_identifier = 'Spacedust_' . lowercase_theme_name
let autoload_function = theme_identifier . '#register'
call {autoload_function}()
let theme_variable = 'g:' . theme_identifier
if exists(theme_variable)
let s:theme_name = lowercase_theme_name
let s:themes[s:theme_name] = {theme_variable}
endif
endif
endif
" }}}
if s:theme_name ==? 'default'
" Either no other theme is specified or they failed to load
" Defer loading default theme until now
call s:register_default_theme()
endif
let s:selected_theme = s:themes[s:theme_name]
" Get Theme Variant: either dark or light {{{
let s:selected_variant = 'dark'
let s:is_dark=(&background == 'dark')
if s:is_dark
if has_key(s:selected_theme, 'dark')
let s:selected_variant = 'dark'
else " in case the theme only provides the other variant
let s:selected_variant = 'light'
endif
else " is light background
if has_key(s:selected_theme, 'light')
let s:selected_variant = 'light'
else " in case the theme only provides the other variant
let s:selected_variant = 'dark'
endif
endif
let s:palette = s:selected_theme[s:selected_variant].palette
" Systematic User-Config Options: {{{
" Example config in .vimrc
" let g:Spacedust_Theme_Options = {
" \ 'theme': {
" \ 'default': {
" \ 'allow_bold': 1,
" \ 'allow_italic': 0,
" \ 'transparent_background': 1
" \ }
" \ },
" \ 'language': {
" \ 'python': {
" \ 'highlight_builtins' : 1
" \ },
" \ 'c': {
" \ 'highlight_builtins' : 1
" \ },
" \ 'cpp': {
" \ 'highlight_standard_library': 1
" \ }
" \ }
" \ }
"
let s:options = {}
if exists("g:Spacedust_Theme_Options")
let s:options = g:Spacedust_Theme_Options
endif
" }}}
" }}}
endfun
" }}}
" Identify Color Mode: {{{
fun! s:identify_color_mode()
let s:MODE_16_COLOR = 0
let s:MODE_256_COLOR = 1
let s:MODE_GUI_COLOR = 2
if has("gui_running") || has('termguicolors') && &termguicolors || has('nvim') && $NVIM_TUI_ENABLE_TRUE_COLOR
let s:mode = s:MODE_GUI_COLOR
elseif (&t_Co >= 256)
let s:mode = s:MODE_256_COLOR
else
let s:mode = s:MODE_16_COLOR
endif
endfun
" }}}
" ============================ OPTION HANDLER =================================
" Generate Them Option Variables: {{{
fun! s:generate_theme_option_variables()
" 0. All possible theme option names must be registered here
let l:available_theme_options = [
\ 'allow_bold',
\ 'allow_italic',
\ 'transparent_background',
\ ]
" 1. Generate variables and set to default value
for l:option in l:available_theme_options
let s:{'themeOpt_' . l:option} = 0
endfor
let s:themeOpt_override = {} " special case, this has to be a dictionary
" 2. Reassign value to the above variables based on theme settings
" 2.1 In case the theme has top-level options
if has_key(s:selected_theme, 'options')
let l:theme_options = s:selected_theme['options']
for l:opt_name in keys(l:theme_options)
let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name]
" echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name}
endfor
endif
" 2.2 In case the theme has specific variant options
if has_key(s:selected_theme[s:selected_variant], 'options')
let l:theme_options = s:selected_theme[s:selected_variant]['options']
for l:opt_name in keys(l:theme_options)
let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name]
" echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name}
endfor
endif
" 3. Reassign value to the above variables which the user customizes
" Part of user-config options
let s:theme_options = {}
if has_key(s:options, 'theme')
let s:theme_options = s:options['theme']
endif
" 3.1 In case user sets for a theme without specifying which variant
if has_key(s:theme_options, s:theme_name)
let l:theme_options = s:theme_options[s:theme_name]
for l:opt_name in keys(l:theme_options)
let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name]
" echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name}
endfor
endif
" 3.2 In case user sets for a specific variant of a theme
" Create the string that the user might have set for this theme variant
" for example, 'default.dark'
let l:specific_theme_variant = s:theme_name . '.' . s:selected_variant
if has_key(s:theme_options, l:specific_theme_variant)
let l:theme_options = s:theme_options[l:specific_theme_variant]
for l:opt_name in keys(l:theme_options)
let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name]
" echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name}
endfor
endif
endfun
" }}}
" Check If Theme Has Hint: {{{
"
" Brief:
" Function to Check if the selected theme and variant has a hint
"
" Details:
" A hint is a known key that has value 1
" It is not part of theme design but is used for technical purposes
"
" Example:
" If a theme has hint 'NO_CONVERSION', then we can assume that every
" color value is a complete pair, so we don't have to check.
fun! s:theme_has_hint(hint)
return has_key(s:selected_theme[s:selected_variant], a:hint) &&
\ s:selected_theme[s:selected_variant][a:hint] == 1
endfun
" }}}
" Set Overriding Colors: {{{
fun! s:set_overriding_colors()
if s:theme_has_hint('NO_CONVERSION')
" s:convert_colors will not do anything, so we take care of conversion
" for the overriding colors that need to be converted
if s:mode == s:MODE_GUI_COLOR
" if GUI color is not provided, convert from 256 color that must be available
if !empty(s:themeOpt_override)
call s:load_256_to_GUI_converter()
endif
for l:color in keys(s:themeOpt_override)
let l:value = s:themeOpt_override[l:color]
if l:value[0] == ''
let l:value[0] = s:to_HEX[l:value[1]]
endif
let s:palette[l:color] = l:value
endfor
elseif s:mode == s:MODE_256_COLOR
" if 256 color is not provided, convert from GUI color that must be available
if !empty(s:themeOpt_override)
call s:load_GUI_to_256_converter()
endif
for l:color in keys(s:themeOpt_override)
let l:value = s:themeOpt_override[l:color]
if l:value[1] == ''
let l:value[1] = s:to_256(l:value[0])
endif
let s:palette[l:color] = l:value
endfor
endif
else " simply set the colors and let s:convert_colors() take care of conversion
for l:color in keys(s:themeOpt_override)
let s:palette[l:color] = s:themeOpt_override[l:color]
endfor
endif
endfun
" }}}
" Generate Language Option Variables: {{{
" Brief:
" Function to generate language option variables so that there is no need to
" look up from the dictionary every time the option value is checked in the
" function s:apply_syntax_highlightings()
"
" Require:
" s:options <dictionary> user options
"
" Require Optionally:
" g:Spacedust_Theme_Options <dictionary> user option config in .vimrc
"
" Expose:
" s:langOpt_[LANGUAGE]__[OPTION] <any> variables for language options
"
" Example:
" g:Spacedust_Theme_Options has something like this:
" 'language': {
" \ 'python': {
" \ 'highlight_builtins': 1
" \ }
" }
" The following variable will be generated:
" s:langOpt_python__highlight_builtins = 1
fun! s:generate_language_option_variables()
" 0. All possible theme option names must be registered here
let l:available_language_options = [
\ 'c__highlight_builtins',
\ 'cpp__highlight_standard_library',
\ 'python__highlight_builtins'
\ ]
" 1. Generate variables and set to default value
for l:option in l:available_language_options
let s:{'langOpt_' . l:option} = 0
endfor
" Part of user-config options
if has_key(s:options, 'language')
let l:language_options = s:options['language']
" echo l:language_options
for l:lang in keys(l:language_options)
let l:options = l:language_options[l:lang]
" echo l:lang
" echo l:options
for l:option in keys(l:options)
let s:{'langOpt_' . l:lang . '__' . l:option} = l:options[l:option]
" echo 's:langOpt_' . l:lang . '__' . l:option . ' = ' . l:options[l:option]
endfor
endfor
endif
endfun
" }}}
" =========================== COLOR CONVERTER =================================
fun! s:load_GUI_to_256_converter()
" GUI-color To 256-color: {{{
" Returns an approximate grey index for the given grey level
fun! s:grey_number(x)
if &t_Co == 88
if a:x < 23
return 0
elseif a:x < 69
return 1
elseif a:x < 103
return 2
elseif a:x < 127
return 3
elseif a:x < 150
return 4
elseif a:x < 173
return 5
elseif a:x < 196
return 6
elseif a:x < 219
return 7
elseif a:x < 243
return 8
else
return 9
endif
else
if a:x < 14
return 0
else
let l:n = (a:x - 8) / 10
let l:m = (a:x - 8) % 10
if l:m < 5
return l:n
else
return l:n + 1
endif
endif
endif
endfun
" Returns the actual grey level represented by the grey index
fun! s:grey_level(n)
if &t_Co == 88
if a:n == 0
return 0
elseif a:n == 1
return 46
elseif a:n == 2
return 92
elseif a:n == 3
return 115
elseif a:n == 4
return 139
elseif a:n == 5
return 162
elseif a:n == 6
return 185
elseif a:n == 7
return 208
elseif a:n == 8
return 231
else
return 255
endif
else
if a:n == 0
return 0
else
return 8 + (a:n * 10)
endif
endif
endfun
" Returns the palette index for the given grey index
fun! s:grey_colour(n)
if &t_Co == 88
if a:n == 0
return 16
elseif a:n == 9
return 79
else
return 79 + a:n
endif
else
if a:n == 0
return 16
elseif a:n == 25
return 231
else
return 231 + a:n
endif
endif
endfun
" Returns an approximate colour index for the given colour level
fun! s:rgb_number(x)
if &t_Co == 88
if a:x < 69
return 0
elseif a:x < 172
return 1
elseif a:x < 230
return 2
else
return 3
endif
else
if a:x < 75
return 0
else
let l:n = (a:x - 55) / 40
let l:m = (a:x - 55) % 40
if l:m < 20
return l:n
else
return l:n + 1
endif
endif
endif
endfun
" Returns the actual colour level for the given colour index
fun! s:rgb_level(n)
if &t_Co == 88
if a:n == 0
return 0
elseif a:n == 1
return 139
elseif a:n == 2
return 205
else
return 255
endif
else
if a:n == 0
return 0
else
return 55 + (a:n * 40)
endif
endif
endfun
" Returns the palette index for the given R/G/B colour indices
fun! s:rgb_colour(x, y, z)
if &t_Co == 88
return 16 + (a:x * 16) + (a:y * 4) + a:z
else
return 16 + (a:x * 36) + (a:y * 6) + a:z
endif
endfun
" Returns the palette index to approximate the given R/G/B colour levels
fun! s:colour(r, g, b)
" Get the closest grey
let l:gx = s:grey_number(a:r)
let l:gy = s:grey_number(a:g)
let l:gz = s:grey_number(a:b)
" Get the closest colour
let l:x = s:rgb_number(a:r)
let l:y = s:rgb_number(a:g)
let l:z = s:rgb_number(a:b)
if l:gx == l:gy && l:gy == l:gz
" There are two possibilities
let l:dgr = s:grey_level(l:gx) - a:r
let l:dgg = s:grey_level(l:gy) - a:g
let l:dgb = s:grey_level(l:gz) - a:b
let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
let l:dr = s:rgb_level(l:gx) - a:r
let l:dg = s:rgb_level(l:gy) - a:g
let l:db = s:rgb_level(l:gz) - a:b
let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
if l:dgrey < l:drgb
" Use the grey
return s:grey_colour(l:gx)
else
" Use the colour
return s:rgb_colour(l:x, l:y, l:z)
endif
else
" Only one possibility
return s:rgb_colour(l:x, l:y, l:z)
endif
endfun
" Returns the palette index to approximate the '#rrggbb' hex string
fun! s:to_256(rgb)
let l:r = ("0x" . strpart(a:rgb, 1, 2)) + 0
let l:g = ("0x" . strpart(a:rgb, 3, 2)) + 0
let l:b = ("0x" . strpart(a:rgb, 5, 2)) + 0
return s:colour(l:r, l:g, l:b)
endfun
" }}}
endfun
fun! s:load_256_to_GUI_converter()
" 256-color To GUI-color: {{{
""" Xterm 256 color dictionary
" See: http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html
"
let s:to_HEX = {
\ '00': '#000000', '01': '#800000', '02': '#008000', '03': '#808000', '04': '#000080',
\ '05': '#800080', '06': '#008080', '07': '#c0c0c0', '08': '#808080', '09': '#ff0000',
\ '10': '#00ff00', '11': '#ffff00', '12': '#0000ff', '13': '#ff00ff', '14': '#00ffff',
\ '15': '#ffffff', '16': '#000000', '17': '#00005f', '18': '#000087', '19': '#0000af',
\ '20': '#0000d7', '21': '#0000ff', '22': '#005f00', '23': '#005f5f', '24': '#005f87',
\ '25': '#005faf', '26': '#005fd7', '27': '#005fff', '28': '#008700', '29': '#00875f',
\ '30': '#008787', '31': '#0087af', '32': '#0087d7', '33': '#0087ff', '34': '#00af00',
\ '35': '#00af5f', '36': '#00af87', '37': '#00afaf', '38': '#00afd7', '39': '#00afff',
\ '40': '#00d700', '41': '#00d75f', '42': '#00d787', '43': '#00d7af', '44': '#00d7d7',
\ '45': '#00d7ff', '46': '#00ff00', '47': '#00ff5f', '48': '#00ff87', '49': '#00ffaf',
\ '50': '#00ffd7', '51': '#00ffff', '52': '#5f0000', '53': '#5f005f', '54': '#5f0087',
\ '55': '#5f00af', '56': '#5f00d7', '57': '#5f00ff', '58': '#5f5f00', '59': '#5f5f5f',
\ '60': '#5f5f87', '61': '#5f5faf', '62': '#5f5fd7', '63': '#5f5fff', '64': '#5f8700',
\ '65': '#5f875f', '66': '#5f8787', '67': '#5f87af', '68': '#5f87d7', '69': '#5f87ff',
\ '70': '#5faf00', '71': '#5faf5f', '72': '#5faf87', '73': '#5fafaf', '74': '#5fafd7',
\ '75': '#5fafff', '76': '#5fd700', '77': '#5fd75f', '78': '#5fd787', '79': '#5fd7af',
\ '80': '#5fd7d7', '81': '#5fd7ff', '82': '#5fff00', '83': '#5fff5f', '84': '#5fff87',
\ '85': '#5fffaf', '86': '#5fffd7', '87': '#5fffff', '88': '#870000', '89': '#87005f',
\ '90': '#870087', '91': '#8700af', '92': '#8700d7', '93': '#8700ff', '94': '#875f00',
\ '95': '#875f5f', '96': '#875f87', '97': '#875faf', '98': '#875fd7', '99': '#875fff',
\ '100': '#878700', '101': '#87875f', '102': '#878787', '103': '#8787af', '104': '#8787d7',
\ '105': '#8787ff', '106': '#87af00', '107': '#87af5f', '108': '#87af87', '109': '#87afaf',
\ '110': '#87afd7', '111': '#87afff', '112': '#87d700', '113': '#87d75f', '114': '#87d787',
\ '115': '#87d7af', '116': '#87d7d7', '117': '#87d7ff', '118': '#87ff00', '119': '#87ff5f',
\ '120': '#87ff87', '121': '#87ffaf', '122': '#87ffd7', '123': '#87ffff', '124': '#af0000',
\ '125': '#af005f', '126': '#af0087', '127': '#af00af', '128': '#af00d7', '129': '#af00ff',
\ '130': '#af5f00', '131': '#af5f5f', '132': '#af5f87', '133': '#af5faf', '134': '#af5fd7',
\ '135': '#af5fff', '136': '#af8700', '137': '#af875f', '138': '#af8787', '139': '#af87af',
\ '140': '#af87d7', '141': '#af87ff', '142': '#afaf00', '143': '#afaf5f', '144': '#afaf87',
\ '145': '#afafaf', '146': '#afafd7', '147': '#afafff', '148': '#afd700', '149': '#afd75f',
\ '150': '#afd787', '151': '#afd7af', '152': '#afd7d7', '153': '#afd7ff', '154': '#afff00',
\ '155': '#afff5f', '156': '#afff87', '157': '#afffaf', '158': '#afffd7', '159': '#afffff',
\ '160': '#d70000', '161': '#d7005f', '162': '#d70087', '163': '#d700af', '164': '#d700d7',
\ '165': '#d700ff', '166': '#d75f00', '167': '#d75f5f', '168': '#d75f87', '169': '#d75faf',
\ '170': '#d75fd7', '171': '#d75fff', '172': '#d78700', '173': '#d7875f', '174': '#d78787',
\ '175': '#d787af', '176': '#d787d7', '177': '#d787ff', '178': '#d7af00', '179': '#d7af5f',
\ '180': '#d7af87', '181': '#d7afaf', '182': '#d7afd7', '183': '#d7afff', '184': '#d7d700',
\ '185': '#d7d75f', '186': '#d7d787', '187': '#d7d7af', '188': '#d7d7d7', '189': '#d7d7ff',
\ '190': '#d7ff00', '191': '#d7ff5f', '192': '#d7ff87', '193': '#d7ffaf', '194': '#d7ffd7',
\ '195': '#d7ffff', '196': '#ff0000', '197': '#ff005f', '198': '#ff0087', '199': '#ff00af',
\ '200': '#ff00d7', '201': '#ff00ff', '202': '#ff5f00', '203': '#ff5f5f', '204': '#ff5f87',
\ '205': '#ff5faf', '206': '#ff5fd7', '207': '#ff5fff', '208': '#ff8700', '209': '#ff875f',
\ '210': '#ff8787', '211': '#ff87af', '212': '#ff87d7', '213': '#ff87ff', '214': '#ffaf00',
\ '215': '#ffaf5f', '216': '#ffaf87', '217': '#ffafaf', '218': '#ffafd7', '219': '#ffafff',
\ '220': '#ffd700', '221': '#ffd75f', '222': '#ffd787', '223': '#ffd7af', '224': '#ffd7d7',
\ '225': '#ffd7ff', '226': '#ffff00', '227': '#ffff5f', '228': '#ffff87', '229': '#ffffaf',
\ '230': '#ffffd7', '231': '#ffffff', '232': '#080808', '233': '#121212', '234': '#1c1c1c',
\ '235': '#262626', '236': '#303030', '237': '#3a3a3a', '238': '#444444', '239': '#4e4e4e',
\ '240': '#585858', '241': '#626262', '242': '#6c6c6c', '243': '#767676', '244': '#808080',
\ '245': '#8a8a8a', '246': '#949494', '247': '#9e9e9e', '248': '#a8a8a8', '249': '#b2b2b2',
\ '250': '#bcbcbc', '251': '#c6c6c6', '252': '#d0d0d0', '253': '#dadada', '254': '#e4e4e4',
\ '255': '#eeeeee' }
" }}}
endfun
" ========================== ENVIRONMENT ADAPTER ==============================
" Set Format Attributes: {{{
fun! s:set_format_attributes()
" These are the default
if s:mode == s:MODE_GUI_COLOR
let s:ft_bold = " cterm=bold gui=bold "
let s:ft_none = " cterm=none gui=none "
let s:ft_reverse = " cterm=reverse gui=reverse "
let s:ft_italic = " cterm=italic gui=italic "
let s:ft_italic_bold = " cterm=italic,bold gui=italic,bold "
elseif s:mode == s:MODE_256_COLOR
let s:ft_bold = " cterm=bold "
let s:ft_none = " cterm=none "
let s:ft_reverse = " cterm=reverse "
let s:ft_italic = " cterm=italic "
let s:ft_italic_bold = " cterm=italic,bold "
else
let s:ft_bold = ""
let s:ft_none = " cterm=none "
let s:ft_reverse = " cterm=reverse "
let s:ft_italic = ""
let s:ft_italic_bold = ""
endif
" Unless instructed otherwise either by theme setting or user overriding
if s:themeOpt_allow_bold == 0
let s:ft_bold = ""
endif
if s:themeOpt_allow_italic == 0
let s:ft_italic = ""
let s:ft_italic_bold = s:ft_bold
endif
endfun
" }}}
" Convert Colors If Needed: {{{
fun! s:convert_colors()
if s:theme_has_hint('NO_CONVERSION')
return
endif
if s:mode == s:MODE_GUI_COLOR
" if GUI color is not provided, convert from 256 color that must be available
call s:load_256_to_GUI_converter()
for l:color in keys(s:palette)
let l:value = s:palette[l:color]
if l:value[0] == ''
let l:value[0] = s:to_HEX[l:value[1]]
endif
let s:palette[l:color] = l:value
endfor
elseif s:mode == s:MODE_256_COLOR
" if 256 color is not provided, convert from GUI color that must be available
call s:load_GUI_to_256_converter()
for l:color in keys(s:palette)
let l:value = s:palette[l:color]
if l:value[1] == ''
let l:value[1] = s:to_256(l:value[0])
endif
let s:palette[l:color] = l:value
endfor
endif
" otherwise use the terminal colors and none of the theme colors are used
endfun
" }}}
" ============================ COLOR POPULARIZER ===============================
" Set Color Variables: {{{
fun! s:set_color_variables()
" Helper: {{{
" -------
" Function to dynamically generate variables that store the color strings
" for setting highlighting. Each color name will have 2 variables with prefix
" s:fg_ and s:bg_. For example:
" if a:color_name is 'Normal' and a:color_value is ['#000000', '0', 'Black'],
" the following 2 variables will be created:
" s:fg_Normal that stores the string ' guifg=#000000 '
" s:bg_Normal that stores the string ' guibg=#000000 '
" Depending on the color mode, ctermfg and ctermbg will be either 0 or Black
"
" Rationale:
" The whole purpose is for speed. We generate these ahead of time so that we
" don't have to do look up or do any if-branch when we set the highlightings.
"
" Furthermore, multiple function definitions for each mode actually reduces
" the need for multiple if-branches inside a single function. This is not
" pretty, but Vim Script is slow, so reducing if-branches in function that is
" often called helps speeding things up quite a bit. Think of this like macro.
"
" If you are familiar with the old code base (v0.9 and ealier), this way of
" generate variables dramatically reduces the loading speed.
" None of previous optimization tricks gets anywhere near this.
if s:mode == s:MODE_GUI_COLOR
fun! s:create_color_variables(color_name, rich_color, term_color)
let {'s:fg_' . a:color_name} = ' guifg=' . a:rich_color[0] . ' '
let {'s:bg_' . a:color_name} = ' guibg=' . a:rich_color[0] . ' '
let {'s:sp_' . a:color_name} = ' guisp=' . a:rich_color[0] . ' '
endfun
elseif s:mode == s:MODE_256_COLOR
fun! s:create_color_variables(color_name, rich_color, term_color)
let {'s:fg_' . a:color_name} = ' ctermfg=' . a:rich_color[1] . ' '
let {'s:bg_' . a:color_name} = ' ctermbg=' . a:rich_color[1] . ' '
let {'s:sp_' . a:color_name} = ''
endfun
else
fun! s:create_color_variables(color_name, rich_color, term_color)
let {'s:fg_' . a:color_name} = ' ctermfg=' . a:term_color . ' '
let {'s:bg_' . a:color_name} = ' ctermbg=' . a:term_color . ' '
let {'s:sp_' . a:color_name} = ''
endfun
endif
" }}}
" Color value format: Array [<GUI COLOR/HEX >, <256-Base>, <16-Base>]
" 16-Base is terminal's native color palette that can be alternated through
" the terminal settings. The 16-color names are according to `:h cterm-colors`
" BASIC COLORS:
" color00-15 are required by all themes.
" These are also how the terminal color palette for the target theme should be.
" See README for theme design guideline
"
" An example format of the below variable's value: ['#262626', '234', 'Black']
" Where the 1st value is HEX color for GUI Vim, 2nd value is for 256-color terminal,
" and the color name on the right is for 16-color terminal (the actual terminal colors
" can be different from what the color names suggest). See :h cterm-colors
"
" Depending on the provided color palette and current Vim, the 1st and 2nd
" parameter might not exist, for example, on 16-color terminal, the variables below
" only store the color names to use the terminal color palette which is the only
" thing available therefore no need for GUI-color or 256-color.
let color00 = get(s:palette, 'color00')
let color01 = get(s:palette, 'color01')
let color02 = get(s:palette, 'color02')
let color03 = get(s:palette, 'color03')
let color04 = get(s:palette, 'color04')
let color05 = get(s:palette, 'color05')
let color06 = get(s:palette, 'color06')
let color07 = get(s:palette, 'color07')
let color08 = get(s:palette, 'color08')
let color09 = get(s:palette, 'color09')
let color10 = get(s:palette, 'color10')
let color11 = get(s:palette, 'color11')
let color12 = get(s:palette, 'color12')
let color13 = get(s:palette, 'color13')
let color14 = get(s:palette, 'color14')
let color15 = get(s:palette, 'color15')
call s:create_color_variables('background', color00 , 'Black')
call s:create_color_variables('negative', color01 , 'DarkRed')
call s:create_color_variables('positive', color02 , 'DarkGreen')
call s:create_color_variables('olive', color03 , 'DarkYellow') " string
call s:create_color_variables('neutral', color04 , 'DarkBlue')
call s:create_color_variables('comment', color05 , 'DarkMagenta')
call s:create_color_variables('navy', color06 , 'DarkCyan') " storageclass
call s:create_color_variables('foreground', color07 , 'LightGray')
call s:create_color_variables('nontext', color08 , 'DarkGray')
call s:create_color_variables('red', color09 , 'LightRed') " import / try/catch
call s:create_color_variables('pink', color10 , 'LightGreen') " statement, type
call s:create_color_variables('purple', color11 , 'LightYellow') " if / conditional
call s:create_color_variables('accent', color12 , 'LightBlue')
call s:create_color_variables('orange', color13 , 'LightMagenta') " number
call s:create_color_variables('blue', color14 , 'LightCyan') " other keyword
call s:create_color_variables('highlight', color15 , 'White')
" Note: special case for FoldColumn group. I want to get rid of this case.
call s:create_color_variables('transparent', [color00[0], 'none'], 'none')
" EXTENDED COLORS:
" From here on, all colors are optional and must have default values (3rd parameter of the
" `get` command) that point to the above basic colors in case the target theme doesn't
" provide the extended colors. The default values should be reasonably sensible.
" The terminal color must be provided also.
call s:create_color_variables('aqua', get(s:palette, 'color16', color14) , 'LightCyan')
call s:create_color_variables('green', get(s:palette, 'color17', color13) , 'LightMagenta')
call s:create_color_variables('wine', get(s:palette, 'color18', color11) , 'LightYellow')
" LineNumber: when set number
call s:create_color_variables('linenumber_fg', get(s:palette, 'linenumber_fg', color08) , 'DarkGray')
call s:create_color_variables('linenumber_bg', get(s:palette, 'linenumber_bg', color00) , 'Black')
" Vertical Split: when there are more than 1 window side by side, ex: <C-W><C-V>
call s:create_color_variables('vertsplit_fg', get(s:palette, 'vertsplit_fg', color15) , 'White')
call s:create_color_variables('vertsplit_bg', get(s:palette, 'vertsplit_bg', color00) , 'Black')
" Statusline: when set status=2
call s:create_color_variables('statusline_active_fg', get(s:palette, 'statusline_active_fg', color00) , 'Black')
call s:create_color_variables('statusline_active_bg', get(s:palette, 'statusline_active_bg', color15) , 'White')
call s:create_color_variables('statusline_inactive_fg', get(s:palette, 'statusline_inactive_fg', color07) , 'LightGray')
call s:create_color_variables('statusline_inactive_bg', get(s:palette, 'statusline_inactive_bg', color08) , 'DarkGray')
" Cursor: in normal mode
call s:create_color_variables('cursor_fg', get(s:palette, 'cursor_fg', color00) , 'Black')
call s:create_color_variables('cursor_bg', get(s:palette, 'cursor_bg', color07) , 'LightGray')
call s:create_color_variables('cursorline', get(s:palette, 'cursorline', color00) , 'Black')
" CursorColumn: when set cursorcolumn
call s:create_color_variables('cursorcolumn', get(s:palette, 'cursorcolumn', color00) , 'Black')
" CursorLine Number: when set cursorline number
call s:create_color_variables('cursorlinenr_fg', get(s:palette, 'cursorlinenr_fg', color13) , 'LightMagenta')
call s:create_color_variables('cursorlinenr_bg', get(s:palette, 'cursorlinenr_bg', color00) , 'Black')
" Popup Menu: when <C-X><C-N> for autocomplete
call s:create_color_variables('popupmenu_fg', get(s:palette, 'popupmenu_fg', color07) , 'LightGray')
call s:create_color_variables('popupmenu_bg', get(s:palette, 'popupmenu_bg', color08) , 'DarkGray') " TODO: double check this, might resolve an issue
" Search: ex: when * on a word
call s:create_color_variables('search_fg', get(s:palette, 'search_fg', color00) , 'Black')
call s:create_color_variables('search_bg', get(s:palette, 'search_bg', color15) , 'Yellow')
" Todo: ex: TODO
call s:create_color_variables('todo_fg', get(s:palette, 'todo_fg', color05) , 'LightYellow')
call s:create_color_variables('todo_bg', get(s:palette, 'todo_bg', color00) , 'Black')
" Error: ex: turn spell on and have invalid words
call s:create_color_variables('error_fg', get(s:palette, 'error_fg', color01) , 'DarkRed')
call s:create_color_variables('error_bg', get(s:palette, 'error_bg', color00) , 'Black')
" Match Parenthesis: selecting an opening/closing pair and the other one will be highlighted
call s:create_color_variables('matchparen_fg', get(s:palette, 'matchparen_fg', color00) , 'LightMagenta')
call s:create_color_variables('matchparen_bg', get(s:palette, 'matchparen_bg', color05) , 'Black')
" Visual:
call s:create_color_variables('visual_fg', get(s:palette, 'visual_fg', color08) , 'Black')
call s:create_color_variables('visual_bg', get(s:palette, 'visual_bg', color07) , 'White')
" Folded:
call s:create_color_variables('folded_fg', get(s:palette, 'folded_fg', color00) , 'Black')
call s:create_color_variables('folded_bg', get(s:palette, 'folded_bg', color05) , 'DarkYellow')
" WildMenu: Autocomplete command, ex: :color <tab><tab>
call s:create_color_variables('wildmenu_fg', get(s:palette, 'wildmenu_fg', color00) , 'Black')
call s:create_color_variables('wildmenu_bg', get(s:palette, 'wildmenu_bg', color06) , 'LightGray')
" Spelling: when spell on and there are spelling problems like this for example: papercolor. a vim color scheme
call s:create_color_variables('spellbad', get(s:palette, 'spellbad', color04) , 'DarkRed')
call s:create_color_variables('spellcap', get(s:palette, 'spellcap', color05) , 'DarkMagenta')
call s:create_color_variables('spellrare', get(s:palette, 'spellrare', color06) , 'DarkYellow')
call s:create_color_variables('spelllocal', get(s:palette, 'spelllocal', color01) , 'DarkBlue')
" Diff:
call s:create_color_variables('diffadd_fg', get(s:palette, 'diffadd_fg', color00) , 'Black')
call s:create_color_variables('diffadd_bg', get(s:palette, 'diffadd_bg', color02) , 'DarkGreen')
call s:create_color_variables('diffdelete_fg', get(s:palette, 'diffdelete_fg', color00) , 'Black')
call s:create_color_variables('diffdelete_bg', get(s:palette, 'diffdelete_bg', color04) , 'DarkRed')
call s:create_color_variables('difftext_fg', get(s:palette, 'difftext_fg', color00) , 'Black')
call s:create_color_variables('difftext_bg', get(s:palette, 'difftext_bg', color06) , 'DarkYellow')
call s:create_color_variables('diffchange_fg', get(s:palette, 'diffchange_fg', color00) , 'Black')
call s:create_color_variables('diffchange_bg', get(s:palette, 'diffchange_bg', color14) , 'LightYellow')
" Tabline: when having tabs, ex: :tabnew
call s:create_color_variables('tabline_bg', get(s:palette, 'tabline_bg', color00) , 'Black')
call s:create_color_variables('tabline_active_fg', get(s:palette, 'tabline_active_fg', color07) , 'LightGray')
call s:create_color_variables('tabline_active_bg', get(s:palette, 'tabline_active_bg', color00) , 'Black')
call s:create_color_variables('tabline_inactive_fg', get(s:palette, 'tabline_inactive_fg', color07) , 'Black')
call s:create_color_variables('tabline_inactive_bg', get(s:palette, 'tabline_inactive_bg', color08) , 'DarkMagenta')
" Plugin: BufTabLine https://github.com/ap/vim-buftabline
call s:create_color_variables('buftabline_bg', get(s:palette, 'buftabline_bg', color00) , 'Black')
call s:create_color_variables('buftabline_current_fg', get(s:palette, 'buftabline_current_fg', color07) , 'LightGray')
call s:create_color_variables('buftabline_current_bg', get(s:palette, 'buftabline_current_bg', color05) , 'DarkMagenta')
call s:create_color_variables('buftabline_active_fg', get(s:palette, 'buftabline_active_fg', color07) , 'LightGray')
call s:create_color_variables('buftabline_active_bg', get(s:palette, 'buftabline_active_bg', color12) , 'LightBlue')
call s:create_color_variables('buftabline_inactive_fg', get(s:palette, 'buftabline_inactive_fg', color07) , 'LightGray')
call s:create_color_variables('buftabline_inactive_bg', get(s:palette, 'buftabline_inactive_bg', color00) , 'Black')
" Neovim terminal colors https://neovim.io/doc/user/nvim_terminal_emulator.html#nvim-terminal-emulator-configuration
" TODO: Fix this
let g:terminal_color_0 = color00[0]
let g:terminal_color_1 = color01[0]
let g:terminal_color_2 = color02[0]
let g:terminal_color_3 = color03[0]
let g:terminal_color_4 = color04[0]
let g:terminal_color_5 = color05[0]
let g:terminal_color_6 = color06[0]
let g:terminal_color_7 = color07[0]
let g:terminal_color_8 = color08[0]
let g:terminal_color_9 = color09[0]
let g:terminal_color_10 = color10[0]
let g:terminal_color_11 = color11[0]
let g:terminal_color_12 = color12[0]
let g:terminal_color_13 = color13[0]
let g:terminal_color_14 = color14[0]
let g:terminal_color_15 = color15[0]
" Vim 8's :terminal buffer ANSI colors
if has('terminal')
let g:terminal_ansi_colors = [color00[0], color01[0], color02[0], color03[0],
\ color04[0], color05[0], color06[0], color07[0], color08[0], color09[0],
\ color10[0], color11[0], color12[0], color13[0], color14[0], color15[0]]
endif
endfun
" }}}
" Apply Syntax Highlightings: {{{
fun! s:apply_syntax_highlightings()
if s:themeOpt_transparent_background
exec 'hi Normal' . s:fg_foreground
" Switching between dark & light variant through `set background`
" NOTE: Handle background switching right after `Normal` group because of
" God-know-why reason. Not doing this way had caused issue before
if s:is_dark " DARK VARIANT
set background=dark
else " LIGHT VARIANT
set background=light
endif
exec 'hi NonText' . s:fg_nontext
exec 'hi LineNr' . s:fg_linenumber_fg
exec 'hi Conceal' . s:fg_linenumber_fg
exec 'hi VertSplit' . s:fg_vertsplit_fg . s:ft_none
exec 'hi FoldColumn' . s:fg_folded_fg . s:bg_transparent . s:ft_none
else
exec 'hi Normal' . s:fg_foreground . s:bg_background
" Switching between dark & light variant through `set background`
if s:is_dark " DARK VARIANT
set background=dark
exec 'hi EndOfBuffer' . s:fg_cursor_fg . s:ft_none
else " LIGHT VARIANT
set background=light
endif
exec 'hi NonText' . s:fg_nontext . s:bg_background
exec 'hi LineNr' . s:fg_linenumber_fg . s:bg_linenumber_bg
exec 'hi Conceal' . s:fg_linenumber_fg . s:bg_linenumber_bg
exec 'hi VertSplit' . s:fg_vertsplit_bg . s:bg_vertsplit_fg
exec 'hi FoldColumn' . s:fg_folded_fg . s:bg_background . s:ft_none
endif
exec 'hi Cursor' . s:fg_cursor_fg . s:bg_cursor_bg
exec 'hi SpecialKey' . s:fg_nontext
exec 'hi Search' . s:fg_search_fg . s:bg_search_bg
exec 'hi StatusLine' . s:fg_statusline_active_bg . s:bg_statusline_active_fg
exec 'hi StatusLineNC' . s:fg_statusline_inactive_bg . s:bg_statusline_inactive_fg
exec 'hi StatusLineTerm' . s:fg_statusline_active_bg . s:bg_statusline_active_fg
exec 'hi StatusLineTermNC' . s:fg_statusline_inactive_bg . s:bg_statusline_inactive_fg
exec 'hi Visual' . s:fg_visual_fg . s:bg_visual_bg
exec 'hi Directory' . s:fg_blue
exec 'hi ModeMsg' . s:fg_olive
exec 'hi MoreMsg' . s:fg_olive
exec 'hi Question' . s:fg_olive
exec 'hi WarningMsg' . s:fg_pink
exec 'hi MatchParen' . s:fg_matchparen_fg . s:bg_matchparen_bg
exec 'hi Folded' . s:fg_folded_fg . s:bg_folded_bg
exec 'hi WildMenu' . s:fg_wildmenu_fg . s:bg_wildmenu_bg . s:ft_bold
if version >= 700
exec 'hi CursorLine' . s:bg_cursorline . s:ft_none
if s:mode == s:MODE_16_COLOR
exec 'hi CursorLineNr' . s:fg_cursorlinenr_fg . s:bg_cursorlinenr_bg
else
exec 'hi CursorLineNr' . s:fg_cursorlinenr_fg . s:bg_cursorlinenr_bg . s:ft_none
endif
exec 'hi CursorColumn' . s:bg_cursorcolumn . s:ft_none
exec 'hi PMenu' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none
exec 'hi PMenuSel' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_reverse
if s:themeOpt_transparent_background
exec 'hi SignColumn' . s:fg_green . s:ft_none
else
exec 'hi SignColumn' . s:fg_green . s:bg_background . s:ft_none
endif
end
if version >= 703
exec 'hi ColorColumn' . s:bg_cursorcolumn . s:ft_none
end
exec 'hi TabLine' . s:fg_tabline_inactive_fg . s:bg_tabline_inactive_bg . s:ft_none
exec 'hi TabLineFill' . s:fg_tabline_bg . s:bg_tabline_bg . s:ft_none
exec 'hi TabLineSel' . s:fg_tabline_active_fg . s:bg_tabline_active_bg . s:ft_none
exec 'hi BufTabLineCurrent' . s:fg_buftabline_current_fg . s:bg_buftabline_current_bg . s:ft_none
exec 'hi BufTabLineActive' . s:fg_buftabline_active_fg . s:bg_buftabline_active_bg . s:ft_none
exec 'hi BufTabLineHidden' . s:fg_buftabline_inactive_fg . s:bg_buftabline_inactive_bg . s:ft_none
exec 'hi BufTabLineFill' . s:bg_buftabline_bg . s:ft_none
" Standard Group Highlighting:
exec 'hi Comment' . s:fg_comment . s:ft_italic
exec 'hi Constant' . s:fg_orange
exec 'hi String' . s:fg_olive
exec 'hi Character' . s:fg_olive
exec 'hi Number' . s:fg_orange
exec 'hi Boolean' . s:fg_green . s:ft_bold
exec 'hi Float' . s:fg_orange
exec 'hi Identifier' . s:fg_navy
exec 'hi Function' . s:fg_foreground
exec 'hi Statement' . s:fg_pink . s:ft_none
exec 'hi Conditional' . s:fg_purple . s:ft_bold
exec 'hi Repeat' . s:fg_purple . s:ft_bold
exec 'hi Label' . s:fg_blue
exec 'hi Operator' . s:fg_aqua . s:ft_none
exec 'hi Keyword' . s:fg_blue
exec 'hi Exception' . s:fg_red
exec 'hi PreProc' . s:fg_blue
exec 'hi Include' . s:fg_red
exec 'hi Define' . s:fg_blue
exec 'hi Macro' . s:fg_blue
exec 'hi PreCondit' . s:fg_aqua
exec 'hi Type' . s:fg_pink . s:ft_bold
exec 'hi StorageClass' . s:fg_navy . s:ft_bold
exec 'hi Structure' . s:fg_blue . s:ft_bold
exec 'hi Typedef' . s:fg_pink . s:ft_bold
exec 'hi Special' . s:fg_foreground
exec 'hi SpecialChar' . s:fg_foreground
exec 'hi Tag' . s:fg_green
exec 'hi Delimiter' . s:fg_aqua
exec 'hi SpecialComment' . s:fg_comment . s:ft_bold
exec 'hi Debug' . s:fg_orange
exec 'hi Error' . s:fg_error_fg . s:bg_error_bg
exec 'hi Todo' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold
exec 'hi Title' . s:fg_comment
exec 'hi Global' . s:fg_blue
" Neovim (LSP) diagnostics
if has('nvim')
exec 'hi LspDiagnosticsDefaultError' . s:fg_error_fg . s:bg_error_bg
exec 'hi LspDiagnosticsDefaultWarning' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold
exec 'hi LspDiagnosticsDefaultInformation' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold
exec 'hi LspDiagnosticsDefaultHint' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold
exec 'hi LspDiagnosticsUnderlineError cterm=undercurl gui=undercurl' . s:sp_error_fg
exec 'hi LspDiagnosticsUnderlineWarning cterm=undercurl gui=undercurl' . s:sp_todo_fg
exec 'hi LspDiagnosticsUnderlineInformation cterm=undercurl gui=undercurl' . s:sp_todo_fg
exec 'hi LspDiagnosticsUnderlineHint cterm=undercurl gui=undercurl' . s:sp_todo_fg
hi! link DiagnosticError LspDiagnosticsDefaultError
hi! link DiagnosticWarn LspDiagnosticsDefaultWarning
hi! link DiagnosticInfo LspDiagnosticsDefaultInformation
hi! link DiagnosticHint LspDiagnosticsDefaultHint
hi! link DiagnosticUnderlineError LspDiagnosticsUnderlineError
hi! link DiagnosticUnderlineWarn LspDiagnosticsUnderlineWarning
hi! link DiagnosticUnderlineInfo LspDiagnosticsUnderlineInformation
hi! link DiagnosticUnderlineHint LspDiagnosticsUnderlineHint
endif
" Extension {{{
" VimL Highlighting
exec 'hi vimCommand' . s:fg_pink
exec 'hi vimVar' . s:fg_navy
exec 'hi vimFuncKey' . s:fg_pink
exec 'hi vimFunction' . s:fg_blue . s:ft_bold
exec 'hi vimNotFunc' . s:fg_pink
exec 'hi vimMap' . s:fg_red
exec 'hi vimAutoEvent' . s:fg_aqua . s:ft_bold
exec 'hi vimMapModKey' . s:fg_aqua
exec 'hi vimFuncName' . s:fg_purple
exec 'hi vimIsCommand' . s:fg_foreground
exec 'hi vimFuncVar' . s:fg_aqua
exec 'hi vimLet' . s:fg_red
exec 'hi vimContinue' . s:fg_aqua
exec 'hi vimMapRhsExtend' . s:fg_foreground
exec 'hi vimCommentTitle' . s:fg_comment . s:ft_italic_bold
exec 'hi vimBracket' . s:fg_aqua
exec 'hi vimParenSep' . s:fg_aqua
exec 'hi vimNotation' . s:fg_aqua
exec 'hi vimOper' . s:fg_foreground
exec 'hi vimOperParen' . s:fg_foreground
exec 'hi vimSynType' . s:fg_purple
exec 'hi vimSynReg' . s:fg_pink . s:ft_none
exec 'hi vimSynRegion' . s:fg_foreground
exec 'hi vimSynMtchGrp' . s:fg_pink
exec 'hi vimSynNextgroup' . s:fg_pink
exec 'hi vimSynKeyRegion' . s:fg_green
exec 'hi vimSynRegOpt' . s:fg_blue
exec 'hi vimSynMtchOpt' . s:fg_blue
exec 'hi vimSynContains' . s:fg_pink
exec 'hi vimGroupName' . s:fg_foreground
exec 'hi vimGroupList' . s:fg_foreground
exec 'hi vimHiGroup' . s:fg_foreground
exec 'hi vimGroup' . s:fg_navy . s:ft_bold
exec 'hi vimOnlyOption' . s:fg_blue
" Makefile Highlighting
exec 'hi makeIdent' . s:fg_blue
exec 'hi makeSpecTarget' . s:fg_olive
exec 'hi makeTarget' . s:fg_red
exec 'hi makeStatement' . s:fg_aqua . s:ft_bold
exec 'hi makeCommands' . s:fg_foreground
exec 'hi makeSpecial' . s:fg_orange . s:ft_bold
" CMake Highlighting (Builtin)
exec 'hi cmakeStatement' . s:fg_blue
exec 'hi cmakeArguments' . s:fg_foreground
exec 'hi cmakeVariableValue' . s:fg_pink
" CMake Highlighting (Plugin: https://github.com/pboettch/vim-cmake-syntax)
exec 'hi cmakeCommand' . s:fg_blue
exec 'hi cmakeCommandConditional' . s:fg_purple . s:ft_bold
exec 'hi cmakeKWset' . s:fg_orange
exec 'hi cmakeKWvariable_watch' . s:fg_orange
exec 'hi cmakeKWif' . s:fg_orange
exec 'hi cmakeArguments' . s:fg_foreground
exec 'hi cmakeKWproject' . s:fg_pink
exec 'hi cmakeGeneratorExpressions' . s:fg_orange
exec 'hi cmakeGeneratorExpression' . s:fg_aqua
exec 'hi cmakeVariable' . s:fg_pink
exec 'hi cmakeProperty' . s:fg_aqua
exec 'hi cmakeKWforeach' . s:fg_aqua
exec 'hi cmakeKWunset' . s:fg_aqua
exec 'hi cmakeKWmacro' . s:fg_aqua
exec 'hi cmakeKWget_property' . s:fg_aqua
exec 'hi cmakeKWset_tests_properties' . s:fg_aqua
exec 'hi cmakeKWmessage' . s:fg_aqua
exec 'hi cmakeKWinstall_targets' . s:fg_orange
exec 'hi cmakeKWsource_group' . s:fg_orange
exec 'hi cmakeKWfind_package' . s:fg_aqua
exec 'hi cmakeKWstring' . s:fg_olive
exec 'hi cmakeKWinstall' . s:fg_aqua
exec 'hi cmakeKWtarget_sources' . s:fg_orange
" C Highlighting
exec 'hi cType' . s:fg_pink . s:ft_bold
exec 'hi cFormat' . s:fg_olive
exec 'hi cStorageClass' . s:fg_navy . s:ft_bold
exec 'hi cBoolean' . s:fg_green . s:ft_bold
exec 'hi cCharacter' . s:fg_olive
exec 'hi cConstant' . s:fg_green . s:ft_bold
exec 'hi cConditional' . s:fg_purple . s:ft_bold
exec 'hi cSpecial' . s:fg_olive . s:ft_bold
exec 'hi cDefine' . s:fg_blue
exec 'hi cNumber' . s:fg_orange
exec 'hi cPreCondit' . s:fg_aqua
exec 'hi cRepeat' . s:fg_purple . s:ft_bold
exec 'hi cLabel' . s:fg_aqua
" exec 'hi cAnsiFunction' . s:fg_aqua . s:ft_bold
" exec 'hi cAnsiName' . s:fg_pink
exec 'hi cDelimiter' . s:fg_blue
" exec 'hi cBraces' . s:fg_foreground
" exec 'hi cIdentifier' . s:fg_blue . s:bg_pink
" exec 'hi cSemiColon' . s:bg_blue
exec 'hi cOperator' . s:fg_aqua
" exec 'hi cStatement' . s:fg_pink
" exec 'hi cTodo' . s:fg_comment . s:ft_bold
" exec 'hi cStructure' . s:fg_blue . s:ft_bold
exec 'hi cCustomParen' . s:fg_foreground
" exec 'hi cCustomFunc' . s:fg_foreground
" exec 'hi cUserFunction' . s:fg_blue . s:ft_bold
exec 'hi cOctalZero' . s:fg_purple . s:ft_bold
if s:langOpt_c__highlight_builtins == 1
exec 'hi cFunction' . s:fg_blue
else
exec 'hi cFunction' . s:fg_foreground
endif
" CPP highlighting
exec 'hi cppBoolean' . s:fg_green . s:ft_bold
exec 'hi cppSTLnamespace' . s:fg_purple
exec 'hi cppSTLexception' . s:fg_pink
exec 'hi cppSTLfunctional' . s:fg_foreground . s:ft_bold
exec 'hi cppSTLiterator' . s:fg_foreground . s:ft_bold
exec 'hi cppExceptions' . s:fg_red
exec 'hi cppStatement' . s:fg_blue
exec 'hi cppStorageClass' . s:fg_navy . s:ft_bold
exec 'hi cppAccess' . s:fg_orange . s:ft_bold
if s:langOpt_cpp__highlight_standard_library == 1
exec 'hi cppSTLconstant' . s:fg_green . s:ft_bold
exec 'hi cppSTLtype' . s:fg_pink . s:ft_bold
exec 'hi cppSTLfunction' . s:fg_blue
exec 'hi cppSTLios' . s:fg_olive . s:ft_bold
else
exec 'hi cppSTLconstant' . s:fg_foreground
exec 'hi cppSTLtype' . s:fg_foreground
exec 'hi cppSTLfunction' . s:fg_foreground
exec 'hi cppSTLios' . s:fg_foreground
endif
" exec 'hi cppSTL' . s:fg_blue
" Rust highlighting
exec 'hi rustKeyword' . s:fg_pink
exec 'hi rustModPath' . s:fg_blue
exec 'hi rustModPathSep' . s:fg_blue
exec 'hi rustLifetime' . s:fg_purple
exec 'hi rustStructure' . s:fg_aqua . s:ft_bold
exec 'hi rustAttribute' . s:fg_aqua . s:ft_bold
exec 'hi rustPanic' . s:fg_olive . s:ft_bold
exec 'hi rustTrait' . s:fg_blue . s:ft_bold
exec 'hi rustEnum' . s:fg_green . s:ft_bold
exec 'hi rustEnumVariant' . s:fg_green
exec 'hi rustSelf' . s:fg_orange
exec 'hi rustSigil' . s:fg_aqua . s:ft_bold
exec 'hi rustOperator' . s:fg_aqua . s:ft_bold
exec 'hi rustMacro' . s:fg_olive . s:ft_bold
exec 'hi rustMacroVariable' . s:fg_olive
exec 'hi rustAssert' . s:fg_olive . s:ft_bold
exec 'hi rustConditional' . s:fg_purple . s:ft_bold
" Lex highlighting
exec 'hi lexCFunctions' . s:fg_foreground
exec 'hi lexAbbrv' . s:fg_purple
exec 'hi lexAbbrvRegExp' . s:fg_aqua
exec 'hi lexAbbrvComment' . s:fg_comment
exec 'hi lexBrace' . s:fg_navy
exec 'hi lexPat' . s:fg_aqua
exec 'hi lexPatComment' . s:fg_comment
exec 'hi lexPatTag' . s:fg_orange
" exec 'hi lexPatBlock' . s:fg_foreground . s:ft_bold
exec 'hi lexSlashQuote' . s:fg_foreground
exec 'hi lexSep' . s:fg_foreground
exec 'hi lexStartState' . s:fg_orange
exec 'hi lexPatTagZone' . s:fg_olive . s:ft_bold
exec 'hi lexMorePat' . s:fg_olive . s:ft_bold
exec 'hi lexOptions' . s:fg_olive . s:ft_bold
exec 'hi lexPatString' . s:fg_olive
" Yacc highlighting
exec 'hi yaccNonterminal' . s:fg_navy
exec 'hi yaccDelim' . s:fg_orange
exec 'hi yaccInitKey' . s:fg_aqua
exec 'hi yaccInit' . s:fg_navy
exec 'hi yaccKey' . s:fg_purple
exec 'hi yaccVar' . s:fg_aqua
" NASM highlighting
exec 'hi nasmStdInstruction' . s:fg_navy
exec 'hi nasmGen08Register' . s:fg_aqua
exec 'hi nasmGen16Register' . s:fg_aqua
exec 'hi nasmGen32Register' . s:fg_aqua
exec 'hi nasmGen64Register' . s:fg_aqua
exec 'hi nasmHexNumber' . s:fg_purple
exec 'hi nasmStorage' . s:fg_aqua . s:ft_bold
exec 'hi nasmLabel' . s:fg_pink
exec 'hi nasmDirective' . s:fg_blue . s:ft_bold
exec 'hi nasmLocalLabel' . s:fg_orange
" GAS highlighting
exec 'hi gasSymbol' . s:fg_pink
exec 'hi gasDirective' . s:fg_blue . s:ft_bold
exec 'hi gasOpcode_386_Base' . s:fg_navy
exec 'hi gasDecimalNumber' . s:fg_purple
exec 'hi gasSymbolRef' . s:fg_pink
exec 'hi gasRegisterX86' . s:fg_blue
exec 'hi gasOpcode_P6_Base' . s:fg_navy
exec 'hi gasDirectiveStore' . s:fg_foreground . s:ft_bold
" MIPS highlighting
exec 'hi mipsInstruction' . s:fg_pink
exec 'hi mipsRegister' . s:fg_navy
exec 'hi mipsLabel' . s:fg_aqua . s:ft_bold
exec 'hi mipsDirective' . s:fg_purple . s:ft_bold
" Shell/Bash highlighting
exec 'hi bashStatement' . s:fg_foreground . s:ft_bold
exec 'hi shDerefVar' . s:fg_aqua . s:ft_bold
exec 'hi shDerefSimple' . s:fg_aqua
exec 'hi shFunction' . s:fg_orange . s:ft_bold
exec 'hi shStatement' . s:fg_foreground
exec 'hi shLoop' . s:fg_purple . s:ft_bold
exec 'hi shQuote' . s:fg_olive
exec 'hi shCaseEsac' . s:fg_aqua . s:ft_bold
exec 'hi shSnglCase' . s:fg_purple . s:ft_none
exec 'hi shFunctionOne' . s:fg_navy
exec 'hi shCase' . s:fg_navy
exec 'hi shSetList' . s:fg_navy
" @see Dockerfile Highlighting section for more sh*
" PowerShell Highlighting
exec 'hi ps1Type' . s:fg_green . s:ft_bold
exec 'hi ps1Variable' . s:fg_navy
exec 'hi ps1Boolean' . s:fg_navy . s:ft_bold
exec 'hi ps1FunctionInvocation' . s:fg_pink
exec 'hi ps1FunctionDeclaration' . s:fg_pink
exec 'hi ps1Keyword' . s:fg_blue . s:ft_bold
exec 'hi ps1Exception' . s:fg_red
exec 'hi ps1Operator' . s:fg_aqua . s:ft_bold
exec 'hi ps1CommentDoc' . s:fg_purple
exec 'hi ps1CDocParam' . s:fg_orange
" HTML Highlighting
exec 'hi htmlTitle' . s:fg_green . s:ft_bold
exec 'hi htmlH1' . s:fg_green . s:ft_bold
exec 'hi htmlH2' . s:fg_aqua . s:ft_bold
exec 'hi htmlH3' . s:fg_purple . s:ft_bold
exec 'hi htmlH4' . s:fg_orange . s:ft_bold
exec 'hi htmlTag' . s:fg_comment
exec 'hi htmlTagName' . s:fg_wine
exec 'hi htmlArg' . s:fg_pink
exec 'hi htmlEndTag' . s:fg_comment
exec 'hi htmlString' . s:fg_blue
exec 'hi htmlScriptTag' . s:fg_comment
exec 'hi htmlBold' . s:fg_foreground . s:ft_bold
exec 'hi htmlItalic' . s:fg_comment . s:ft_italic
exec 'hi htmlBoldItalic' . s:fg_navy . s:ft_italic_bold
" exec 'hi htmlLink' . s:fg_blue . s:ft_bold
exec 'hi htmlTagN' . s:fg_wine . s:ft_bold
exec 'hi htmlSpecialTagName' . s:fg_wine
exec 'hi htmlComment' . s:fg_comment . s:ft_italic
exec 'hi htmlCommentPart' . s:fg_comment . s:ft_italic
" CSS Highlighting
exec 'hi cssIdentifier' . s:fg_pink
exec 'hi cssPositioningProp' . s:fg_foreground
exec 'hi cssNoise' . s:fg_foreground
exec 'hi cssBoxProp' . s:fg_foreground
exec 'hi cssTableAttr' . s:fg_purple
exec 'hi cssPositioningAttr' . s:fg_navy
exec 'hi cssValueLength' . s:fg_orange
exec 'hi cssFunctionName' . s:fg_blue
exec 'hi cssUnitDecorators' . s:fg_aqua
exec 'hi cssColor' . s:fg_blue . s:ft_bold
exec 'hi cssBraces' . s:fg_pink
exec 'hi cssBackgroundProp' . s:fg_foreground
exec 'hi cssTextProp' . s:fg_foreground
exec 'hi cssDimensionProp' . s:fg_foreground
exec 'hi cssClassName' . s:fg_pink
" Markdown Highlighting
exec 'hi markdownHeadingRule' . s:fg_pink . s:ft_bold
exec 'hi markdownH1' . s:fg_pink . s:ft_bold
exec 'hi markdownH2' . s:fg_orange . s:ft_bold
exec 'hi markdownBlockquote' . s:fg_pink
exec 'hi markdownCodeBlock' . s:fg_olive
exec 'hi markdownCode' . s:fg_olive
exec 'hi markdownLink' . s:fg_blue . s:ft_bold
exec 'hi markdownUrl' . s:fg_blue
exec 'hi markdownLinkText' . s:fg_pink
exec 'hi markdownLinkTextDelimiter' . s:fg_purple
exec 'hi markdownLinkDelimiter' . s:fg_purple
exec 'hi markdownCodeDelimiter' . s:fg_blue
exec 'hi mkdCode' . s:fg_olive
exec 'hi mkdLink' . s:fg_blue . s:ft_bold
exec 'hi mkdURL' . s:fg_comment
exec 'hi mkdString' . s:fg_foreground
exec 'hi mkdBlockQuote' . s:fg_pink
exec 'hi mkdLinkTitle' . s:fg_pink
exec 'hi mkdDelimiter' . s:fg_aqua
exec 'hi mkdRule' . s:fg_pink
" reStructuredText Highlighting
exec 'hi rstSections' . s:fg_pink . s:ft_bold
exec 'hi rstDelimiter' . s:fg_pink . s:ft_bold
exec 'hi rstExplicitMarkup' . s:fg_pink . s:ft_bold
exec 'hi rstDirective' . s:fg_blue
exec 'hi rstHyperlinkTarget' . s:fg_green
exec 'hi rstExDirective' . s:fg_foreground
exec 'hi rstInlineLiteral' . s:fg_olive
exec 'hi rstInterpretedTextOrHyperlinkReference' . s:fg_blue
" Python Highlighting
exec 'hi pythonImport' . s:fg_pink . s:ft_bold
exec 'hi pythonExceptions' . s:fg_red
exec 'hi pythonException' . s:fg_purple . s:ft_bold
exec 'hi pythonInclude' . s:fg_red
exec 'hi pythonStatement' . s:fg_pink
exec 'hi pythonConditional' . s:fg_purple . s:ft_bold
exec 'hi pythonRepeat' . s:fg_purple . s:ft_bold
exec 'hi pythonFunction' . s:fg_aqua . s:ft_bold
exec 'hi pythonPreCondit' . s:fg_purple
exec 'hi pythonExClass' . s:fg_orange
exec 'hi pythonOperator' . s:fg_purple . s:ft_bold
exec 'hi pythonBuiltin' . s:fg_foreground
exec 'hi pythonDecorator' . s:fg_orange
exec 'hi pythonString' . s:fg_olive
exec 'hi pythonEscape' . s:fg_olive . s:ft_bold
exec 'hi pythonStrFormatting' . s:fg_olive . s:ft_bold
exec 'hi pythonBoolean' . s:fg_green . s:ft_bold
exec 'hi pythonBytesEscape' . s:fg_olive . s:ft_bold
exec 'hi pythonDottedName' . s:fg_purple
exec 'hi pythonStrFormat' . s:fg_foreground
if s:langOpt_python__highlight_builtins == 1
exec 'hi pythonBuiltinFunc' . s:fg_blue
exec 'hi pythonBuiltinObj' . s:fg_red
else
exec 'hi pythonBuiltinFunc' . s:fg_foreground
exec 'hi pythonBuiltinObj' . s:fg_foreground
endif
" Java Highlighting
exec 'hi javaExternal' . s:fg_pink
exec 'hi javaAnnotation' . s:fg_orange
exec 'hi javaTypedef' . s:fg_aqua
exec 'hi javaClassDecl' . s:fg_aqua . s:ft_bold
exec 'hi javaScopeDecl' . s:fg_blue . s:ft_bold
exec 'hi javaStorageClass' . s:fg_navy . s:ft_bold
exec 'hi javaBoolean' . s:fg_green . s:ft_bold
exec 'hi javaConstant' . s:fg_blue
exec 'hi javaCommentTitle' . s:fg_wine
exec 'hi javaDocTags' . s:fg_aqua
exec 'hi javaDocComment' . s:fg_comment
exec 'hi javaDocParam' . s:fg_foreground
exec 'hi javaStatement' . s:fg_pink
" JavaScript Highlighting
exec 'hi javaScriptBraces' . s:fg_blue
exec 'hi javaScriptParens' . s:fg_blue
exec 'hi javaScriptIdentifier' . s:fg_pink
exec 'hi javaScriptFunction' . s:fg_blue . s:ft_bold
exec 'hi javaScriptConditional' . s:fg_purple . s:ft_bold
exec 'hi javaScriptRepeat' . s:fg_purple . s:ft_bold
exec 'hi javaScriptBoolean' . s:fg_green . s:ft_bold
exec 'hi javaScriptNumber' . s:fg_orange
exec 'hi javaScriptMember' . s:fg_navy
exec 'hi javaScriptReserved' . s:fg_navy
exec 'hi javascriptNull' . s:fg_comment . s:ft_bold
exec 'hi javascriptGlobal' . s:fg_foreground
exec 'hi javascriptStatement' . s:fg_pink
exec 'hi javaScriptMessage' . s:fg_foreground
exec 'hi javaScriptMember' . s:fg_foreground
" TypeScript Highlighting
exec 'hi typescriptDecorators' . s:fg_orange
exec 'hi typescriptLabel' . s:fg_purple . s:ft_bold
" @target https://github.com/pangloss/vim-javascript
exec 'hi jsImport' . s:fg_pink . s:ft_bold
exec 'hi jsExport' . s:fg_pink . s:ft_bold
exec 'hi jsModuleAs' . s:fg_pink . s:ft_bold
exec 'hi jsFrom' . s:fg_pink . s:ft_bold
exec 'hi jsExportDefault' . s:fg_pink . s:ft_bold
exec 'hi jsFuncParens' . s:fg_blue
exec 'hi jsFuncBraces' . s:fg_blue
exec 'hi jsParens' . s:fg_blue
exec 'hi jsBraces' . s:fg_blue
exec 'hi jsNoise' . s:fg_blue
" Jsx Highlighting
" @target https://github.com/MaxMEllon/vim-jsx-pretty
exec 'hi jsxTagName' . s:fg_wine
exec 'hi jsxComponentName' . s:fg_wine
exec 'hi jsxAttrib' . s:fg_pink
exec 'hi jsxEqual' . s:fg_comment
exec 'hi jsxString' . s:fg_blue
exec 'hi jsxCloseTag' . s:fg_comment
exec 'hi jsxCloseString' . s:fg_comment
exec 'hi jsxDot' . s:fg_wine
exec 'hi jsxNamespace' . s:fg_wine
exec 'hi jsxPunct' . s:fg_comment
" Json Highlighting
" @target https://github.com/elzr/vim-json
exec 'hi jsonKeyword' . s:fg_blue
exec 'hi jsonString' . s:fg_olive
exec 'hi jsonQuote' . s:fg_comment
exec 'hi jsonNoise' . s:fg_foreground
exec 'hi jsonKeywordMatch' . s:fg_foreground
exec 'hi jsonBraces' . s:fg_foreground
exec 'hi jsonNumber' . s:fg_orange
exec 'hi jsonNull' . s:fg_purple . s:ft_bold
exec 'hi jsonBoolean' . s:fg_green . s:ft_bold
exec 'hi jsonCommentError' . s:fg_pink . s:bg_background
" Go Highlighting
exec 'hi goDirective' . s:fg_red
exec 'hi goDeclaration' . s:fg_blue . s:ft_bold
exec 'hi goStatement' . s:fg_pink
exec 'hi goConditional' . s:fg_purple . s:ft_bold
exec 'hi goConstants' . s:fg_orange
exec 'hi goFunction' . s:fg_orange
" exec 'hi goTodo' . s:fg_comment . s:ft_bold
exec 'hi goDeclType' . s:fg_blue
exec 'hi goBuiltins' . s:fg_purple
" Systemtap Highlighting
" exec 'hi stapBlock' . s:fg_comment . s:ft_none
exec 'hi stapComment' . s:fg_comment . s:ft_none
exec 'hi stapProbe' . s:fg_aqua . s:ft_bold
exec 'hi stapStat' . s:fg_navy . s:ft_bold
exec 'hi stapFunc' . s:fg_foreground
exec 'hi stapString' . s:fg_olive
exec 'hi stapTarget' . s:fg_navy
exec 'hi stapStatement' . s:fg_pink
exec 'hi stapType' . s:fg_pink . s:ft_bold
exec 'hi stapSharpBang' . s:fg_comment
exec 'hi stapDeclaration' . s:fg_pink
exec 'hi stapCMacro' . s:fg_blue
" DTrace Highlighting
exec 'hi dtraceProbe' . s:fg_blue
exec 'hi dtracePredicate' . s:fg_purple . s:ft_bold
exec 'hi dtraceComment' . s:fg_comment
exec 'hi dtraceFunction' . s:fg_foreground
exec 'hi dtraceAggregatingFunction' . s:fg_blue . s:ft_bold
exec 'hi dtraceStatement' . s:fg_navy . s:ft_bold
exec 'hi dtraceIdentifier' . s:fg_pink
exec 'hi dtraceOption' . s:fg_pink
exec 'hi dtraceConstant' . s:fg_orange
exec 'hi dtraceType' . s:fg_pink . s:ft_bold
" PlantUML Highlighting
exec 'hi plantumlPreProc' . s:fg_orange . s:ft_bold
exec 'hi plantumlDirectedOrVerticalArrowRL' . s:fg_pink
exec 'hi plantumlDirectedOrVerticalArrowLR' . s:fg_pink
exec 'hi plantumlString' . s:fg_olive
exec 'hi plantumlActivityThing' . s:fg_purple
exec 'hi plantumlText' . s:fg_navy
exec 'hi plantumlClassPublic' . s:fg_olive . s:ft_bold
exec 'hi plantumlClassPrivate' . s:fg_red
exec 'hi plantumlColonLine' . s:fg_orange
exec 'hi plantumlClass' . s:fg_navy
exec 'hi plantumlHorizontalArrow' . s:fg_pink
exec 'hi plantumlTypeKeyword' . s:fg_blue . s:ft_bold
exec 'hi plantumlKeyword' . s:fg_pink . s:ft_bold
exec 'hi plantumlType' . s:fg_blue . s:ft_bold
exec 'hi plantumlBlock' . s:fg_pink . s:ft_bold
exec 'hi plantumlPreposition' . s:fg_orange
exec 'hi plantumlLayout' . s:fg_blue . s:ft_bold
exec 'hi plantumlNote' . s:fg_orange
exec 'hi plantumlLifecycle' . s:fg_aqua
exec 'hi plantumlParticipant' . s:fg_foreground . s:ft_bold
" Haskell Highlighting
exec 'hi haskellType' . s:fg_aqua . s:ft_bold
exec 'hi haskellIdentifier' . s:fg_orange . s:ft_bold
exec 'hi haskellOperators' . s:fg_pink
exec 'hi haskellWhere' . s:fg_foreground . s:ft_bold
exec 'hi haskellDelimiter' . s:fg_aqua
exec 'hi haskellImportKeywords' . s:fg_pink
exec 'hi haskellStatement' . s:fg_purple . s:ft_bold
" SQL/MySQL Highlighting
exec 'hi sqlStatement' . s:fg_pink . s:ft_bold
exec 'hi sqlType' . s:fg_blue . s:ft_bold
exec 'hi sqlKeyword' . s:fg_pink
exec 'hi sqlOperator' . s:fg_aqua
exec 'hi sqlSpecial' . s:fg_green . s:ft_bold
exec 'hi mysqlVariable' . s:fg_olive . s:ft_bold
exec 'hi mysqlType' . s:fg_blue . s:ft_bold
exec 'hi mysqlKeyword' . s:fg_pink
exec 'hi mysqlOperator' . s:fg_aqua
exec 'hi mysqlSpecial' . s:fg_green . s:ft_bold
" Octave/MATLAB Highlighting
exec 'hi octaveVariable' . s:fg_foreground
exec 'hi octaveDelimiter' . s:fg_pink
exec 'hi octaveQueryVar' . s:fg_foreground
exec 'hi octaveSemicolon' . s:fg_purple
exec 'hi octaveFunction' . s:fg_navy
exec 'hi octaveSetVar' . s:fg_blue
exec 'hi octaveUserVar' . s:fg_foreground
exec 'hi octaveArithmeticOperator' . s:fg_aqua
exec 'hi octaveBeginKeyword' . s:fg_purple . s:ft_bold
exec 'hi octaveElseKeyword' . s:fg_purple . s:ft_bold
exec 'hi octaveEndKeyword' . s:fg_purple . s:ft_bold
exec 'hi octaveStatement' . s:fg_pink
" Ruby Highlighting
exec 'hi rubyModule' . s:fg_navy . s:ft_bold
exec 'hi rubyClass' . s:fg_pink . s:ft_bold
exec 'hi rubyPseudoVariable' . s:fg_comment . s:ft_bold
exec 'hi rubyKeyword' . s:fg_pink
exec 'hi rubyInstanceVariable' . s:fg_purple
exec 'hi rubyFunction' . s:fg_foreground . s:ft_bold
exec 'hi rubyDefine' . s:fg_pink
exec 'hi rubySymbol' . s:fg_aqua
exec 'hi rubyConstant' . s:fg_blue
exec 'hi rubyAccess' . s:fg_navy
exec 'hi rubyAttribute' . s:fg_green
exec 'hi rubyInclude' . s:fg_red
exec 'hi rubyLocalVariableOrMethod' . s:fg_orange
exec 'hi rubyCurlyBlock' . s:fg_foreground
exec 'hi rubyCurlyBlockDelimiter' . s:fg_aqua
exec 'hi rubyArrayDelimiter' . s:fg_aqua
exec 'hi rubyStringDelimiter' . s:fg_olive
exec 'hi rubyInterpolationDelimiter' . s:fg_orange
exec 'hi rubyConditional' . s:fg_purple . s:ft_bold
exec 'hi rubyRepeat' . s:fg_purple . s:ft_bold
exec 'hi rubyControl' . s:fg_purple . s:ft_bold
exec 'hi rubyException' . s:fg_purple . s:ft_bold
exec 'hi rubyExceptional' . s:fg_purple . s:ft_bold
exec 'hi rubyBoolean' . s:fg_green . s:ft_bold
" Fortran Highlighting
exec 'hi fortranUnitHeader' . s:fg_blue . s:ft_bold
exec 'hi fortranIntrinsic' . s:fg_blue . s:bg_background . s:ft_none
exec 'hi fortranType' . s:fg_pink . s:ft_bold
exec 'hi fortranTypeOb' . s:fg_pink . s:ft_bold
exec 'hi fortranStructure' . s:fg_aqua
exec 'hi fortranStorageClass' . s:fg_navy . s:ft_bold
exec 'hi fortranStorageClassR' . s:fg_navy . s:ft_bold
exec 'hi fortranKeyword' . s:fg_pink
exec 'hi fortranReadWrite' . s:fg_aqua . s:ft_bold
exec 'hi fortranIO' . s:fg_navy
exec 'hi fortranOperator' . s:fg_aqua . s:ft_bold
exec 'hi fortranCall' . s:fg_aqua . s:ft_bold
exec 'hi fortranContinueMark' . s:fg_green
" ALGOL Highlighting (Plugin: https://github.com/sterpe/vim-algol68)
exec 'hi algol68Statement' . s:fg_blue . s:ft_bold
exec 'hi algol68Operator' . s:fg_aqua . s:ft_bold
exec 'hi algol68PreProc' . s:fg_green
exec 'hi algol68Function' . s:fg_blue
" R Highlighting
exec 'hi rType' . s:fg_blue
exec 'hi rArrow' . s:fg_pink
exec 'hi rDollar' . s:fg_blue
" XXD Highlighting
exec 'hi xxdAddress' . s:fg_navy
exec 'hi xxdSep' . s:fg_pink
exec 'hi xxdAscii' . s:fg_pink
exec 'hi xxdDot' . s:fg_aqua
" PHP Highlighting
exec 'hi phpIdentifier' . s:fg_foreground
exec 'hi phpVarSelector' . s:fg_pink
exec 'hi phpKeyword' . s:fg_blue
exec 'hi phpRepeat' . s:fg_purple . s:ft_bold
exec 'hi phpConditional' . s:fg_purple . s:ft_bold
exec 'hi phpStatement' . s:fg_pink
exec 'hi phpAssignByRef' . s:fg_aqua . s:ft_bold
exec 'hi phpSpecialFunction' . s:fg_blue
exec 'hi phpFunctions' . s:fg_blue
exec 'hi phpComparison' . s:fg_aqua
exec 'hi phpBackslashSequences' . s:fg_olive . s:ft_bold
exec 'hi phpMemberSelector' . s:fg_blue
exec 'hi phpStorageClass' . s:fg_purple . s:ft_bold
exec 'hi phpDefine' . s:fg_navy
exec 'hi phpIntVar' . s:fg_navy . s:ft_bold
" Perl Highlighting
exec 'hi perlFiledescRead' . s:fg_green
exec 'hi perlMatchStartEnd' . s:fg_pink
exec 'hi perlStatementFlow' . s:fg_pink
exec 'hi perlStatementStorage' . s:fg_pink
exec 'hi perlFunction' . s:fg_pink . s:ft_bold
exec 'hi perlMethod' . s:fg_foreground
exec 'hi perlStatementFiledesc' . s:fg_orange
exec 'hi perlVarPlain' . s:fg_navy
exec 'hi perlSharpBang' . s:fg_comment
exec 'hi perlStatementInclude' . s:fg_aqua . s:ft_bold
exec 'hi perlStatementScalar' . s:fg_purple
exec 'hi perlSubName' . s:fg_aqua . s:ft_bold
exec 'hi perlSpecialString' . s:fg_olive . s:ft_bold
" Pascal Highlighting
exec 'hi pascalType' . s:fg_pink . s:ft_bold
exec 'hi pascalStatement' . s:fg_blue . s:ft_bold
exec 'hi pascalPredefined' . s:fg_pink
exec 'hi pascalFunction' . s:fg_foreground
exec 'hi pascalStruct' . s:fg_navy . s:ft_bold
exec 'hi pascalOperator' . s:fg_aqua . s:ft_bold
exec 'hi pascalPreProc' . s:fg_green
exec 'hi pascalAcces' . s:fg_navy . s:ft_bold
" Lua Highlighting
exec 'hi luaFunc' . s:fg_foreground
exec 'hi luaIn' . s:fg_blue . s:ft_bold
exec 'hi luaFunction' . s:fg_pink
exec 'hi luaStatement' . s:fg_blue
exec 'hi luaRepeat' . s:fg_blue . s:ft_bold
exec 'hi luaCondStart' . s:fg_purple . s:ft_bold
exec 'hi luaTable' . s:fg_aqua . s:ft_bold
exec 'hi luaConstant' . s:fg_green . s:ft_bold
exec 'hi luaElse' . s:fg_purple . s:ft_bold
exec 'hi luaCondElseif' . s:fg_purple . s:ft_bold
exec 'hi luaCond' . s:fg_purple . s:ft_bold
exec 'hi luaCondEnd' . s:fg_purple
" Clojure highlighting:
exec 'hi clojureConstant' . s:fg_blue
exec 'hi clojureBoolean' . s:fg_orange
exec 'hi clojureCharacter' . s:fg_olive
exec 'hi clojureKeyword' . s:fg_pink
exec 'hi clojureNumber' . s:fg_orange
exec 'hi clojureString' . s:fg_olive
exec 'hi clojureRegexp' . s:fg_purple
exec 'hi clojureRegexpEscape' . s:fg_pink
exec 'hi clojureParen' . s:fg_aqua
exec 'hi clojureVariable' . s:fg_olive
exec 'hi clojureCond' . s:fg_blue
exec 'hi clojureDefine' . s:fg_blue . s:ft_bold
exec 'hi clojureException' . s:fg_red
exec 'hi clojureFunc' . s:fg_navy
exec 'hi clojureMacro' . s:fg_blue
exec 'hi clojureRepeat' . s:fg_blue
exec 'hi clojureSpecial' . s:fg_blue . s:ft_bold
exec 'hi clojureQuote' . s:fg_blue
exec 'hi clojureUnquote' . s:fg_blue
exec 'hi clojureMeta' . s:fg_blue
exec 'hi clojureDeref' . s:fg_blue
exec 'hi clojureAnonArg' . s:fg_blue
exec 'hi clojureRepeat' . s:fg_blue
exec 'hi clojureDispatch' . s:fg_aqua
" Dockerfile Highlighting
" @target https://github.com/docker/docker/tree/master/contrib/syntax/vim
exec 'hi dockerfileKeyword' . s:fg_blue
exec 'hi shDerefVar' . s:fg_purple . s:ft_bold
exec 'hi shOperator' . s:fg_aqua
exec 'hi shOption' . s:fg_navy
exec 'hi shLine' . s:fg_foreground
exec 'hi shWrapLineOperator' . s:fg_pink
" NGINX Highlighting
" @target https://github.com/evanmiller/nginx-vim-syntax
exec 'hi ngxDirectiveBlock' . s:fg_pink . s:ft_bold
exec 'hi ngxDirective' . s:fg_blue . s:ft_none
exec 'hi ngxDirectiveImportant' . s:fg_blue . s:ft_bold
exec 'hi ngxString' . s:fg_olive
exec 'hi ngxVariableString' . s:fg_purple
exec 'hi ngxVariable' . s:fg_purple . s:ft_none
" Yaml Highlighting
exec 'hi yamlBlockMappingKey' . s:fg_blue
exec 'hi yamlKeyValueDelimiter' . s:fg_pink
exec 'hi yamlBlockCollectionItemStart' . s:fg_pink
" Qt QML Highlighting
exec 'hi qmlObjectLiteralType' . s:fg_pink
exec 'hi qmlReserved' . s:fg_purple
exec 'hi qmlBindingProperty' . s:fg_navy
exec 'hi qmlType' . s:fg_navy
" Dosini Highlighting
exec 'hi dosiniHeader' . s:fg_pink
exec 'hi dosiniLabel' . s:fg_blue
" Mail highlighting
exec 'hi mailHeaderKey' . s:fg_blue
exec 'hi mailHeaderEmail' . s:fg_purple
exec 'hi mailSubject' . s:fg_pink
exec 'hi mailHeader' . s:fg_comment
exec 'hi mailURL' . s:fg_aqua
exec 'hi mailEmail' . s:fg_purple
exec 'hi mailQuoted1' . s:fg_olive
exec 'hi mailQuoted2' . s:fg_navy
" XML Highlighting
exec 'hi xmlProcessingDelim' . s:fg_pink
exec 'hi xmlString' . s:fg_olive
exec 'hi xmlEqual' . s:fg_orange
exec 'hi xmlAttrib' . s:fg_navy
exec 'hi xmlAttribPunct' . s:fg_pink
exec 'hi xmlTag' . s:fg_blue
exec 'hi xmlTagName' . s:fg_blue
exec 'hi xmlEndTag' . s:fg_blue
exec 'hi xmlNamespace' . s:fg_orange
" Elixir Highlighting
" @target https://github.com/elixir-lang/vim-elixir
exec 'hi elixirAlias' . s:fg_blue . s:ft_bold
exec 'hi elixirAtom' . s:fg_navy
exec 'hi elixirVariable' . s:fg_navy
exec 'hi elixirUnusedVariable' . s:fg_foreground . s:ft_bold
exec 'hi elixirInclude' . s:fg_purple
exec 'hi elixirStringDelimiter' . s:fg_olive
exec 'hi elixirKeyword' . s:fg_purple . s:ft_bold
exec 'hi elixirFunctionDeclaration' . s:fg_aqua . s:ft_bold
exec 'hi elixirBlockDefinition' . s:fg_pink
exec 'hi elixirDefine' . s:fg_pink
exec 'hi elixirStructDefine' . s:fg_pink
exec 'hi elixirPrivateDefine' . s:fg_pink
exec 'hi elixirModuleDefine' . s:fg_pink
exec 'hi elixirProtocolDefine' . s:fg_pink
exec 'hi elixirImplDefine' . s:fg_pink
exec 'hi elixirModuleDeclaration' . s:fg_aqua . s:ft_bold
exec 'hi elixirDocString' . s:fg_olive
exec 'hi elixirDocTest' . s:fg_green . s:ft_bold
" Erlang Highlighting
exec 'hi erlangBIF' . s:fg_purple . s:ft_bold
exec 'hi erlangBracket' . s:fg_pink
exec 'hi erlangLocalFuncCall' . s:fg_foreground
exec 'hi erlangVariable' . s:fg_foreground
exec 'hi erlangAtom' . s:fg_navy
exec 'hi erlangAttribute' . s:fg_blue . s:ft_bold
exec 'hi erlangRecordDef' . s:fg_blue . s:ft_bold
exec 'hi erlangRecord' . s:fg_blue
exec 'hi erlangRightArrow' . s:fg_blue . s:ft_bold
exec 'hi erlangStringModifier' . s:fg_olive . s:ft_bold
exec 'hi erlangInclude' . s:fg_blue . s:ft_bold
exec 'hi erlangKeyword' . s:fg_pink
exec 'hi erlangGlobalFuncCall' . s:fg_foreground
" Cucumber Highlighting
exec 'hi cucumberFeature' . s:fg_blue . s:ft_bold
exec 'hi cucumberBackground' . s:fg_pink . s:ft_bold
exec 'hi cucumberScenario' . s:fg_pink . s:ft_bold
exec 'hi cucumberGiven' . s:fg_orange
exec 'hi cucumberGivenAnd' . s:fg_blue
exec 'hi cucumberThen' . s:fg_orange
exec 'hi cucumberThenAnd' . s:fg_blue
exec 'hi cucumberWhen' . s:fg_purple . s:ft_bold
exec 'hi cucumberScenarioOutline' . s:fg_pink . s:ft_bold
exec 'hi cucumberExamples' . s:fg_aqua
exec 'hi cucumberTags' . s:fg_aqua
exec 'hi cucumberPlaceholder' . s:fg_aqua
" Ada Highlighting
exec 'hi adaInc' . s:fg_aqua . s:ft_bold
exec 'hi adaSpecial' . s:fg_aqua . s:ft_bold
exec 'hi adaKeyword' . s:fg_pink
exec 'hi adaBegin' . s:fg_pink
exec 'hi adaEnd' . s:fg_pink
exec 'hi adaTypedef' . s:fg_navy . s:ft_bold
exec 'hi adaAssignment' . s:fg_aqua . s:ft_bold
exec 'hi adaAttribute' . s:fg_green
" COBOL Highlighting
exec 'hi cobolMarker' . s:fg_comment . s:bg_cursorline
exec 'hi cobolLine' . s:fg_foreground
exec 'hi cobolReserved' . s:fg_blue
exec 'hi cobolDivision' . s:fg_pink . s:ft_bold
exec 'hi cobolDivisionName' . s:fg_pink . s:ft_bold
exec 'hi cobolSection' . s:fg_navy . s:ft_bold
exec 'hi cobolSectionName' . s:fg_navy . s:ft_bold
exec 'hi cobolParagraph' . s:fg_purple
exec 'hi cobolParagraphName' . s:fg_purple
exec 'hi cobolDeclA' . s:fg_purple
exec 'hi cobolDecl' . s:fg_green
exec 'hi cobolCALLs' . s:fg_aqua . s:ft_bold
exec 'hi cobolEXECs' . s:fg_aqua . s:ft_bold
" GNU sed highlighting
exec 'hi sedST' . s:fg_purple . s:ft_bold
exec 'hi sedFlag' . s:fg_purple . s:ft_bold
exec 'hi sedRegexp47' . s:fg_pink
exec 'hi sedRegexpMeta' . s:fg_blue . s:ft_bold
exec 'hi sedReplacement47' . s:fg_olive
exec 'hi sedReplaceMeta' . s:fg_orange . s:ft_bold
exec 'hi sedAddress' . s:fg_pink
exec 'hi sedFunction' . s:fg_aqua . s:ft_bold
exec 'hi sedBranch' . s:fg_green . s:ft_bold
exec 'hi sedLabel' . s:fg_green . s:ft_bold
" GNU awk highlighting
exec 'hi awkPatterns' . s:fg_pink . s:ft_bold
exec 'hi awkSearch' . s:fg_pink
exec 'hi awkRegExp' . s:fg_blue . s:ft_bold
exec 'hi awkCharClass' . s:fg_blue . s:ft_bold
exec 'hi awkFieldVars' . s:fg_green . s:ft_bold
exec 'hi awkStatement' . s:fg_blue . s:ft_bold
exec 'hi awkFunction' . s:fg_blue
exec 'hi awkVariables' . s:fg_green . s:ft_bold
exec 'hi awkArrayElement' . s:fg_orange
exec 'hi awkOperator' . s:fg_foreground
exec 'hi awkBoolLogic' . s:fg_foreground
exec 'hi awkExpression' . s:fg_foreground
exec 'hi awkSpecialPrintf' . s:fg_olive . s:ft_bold
" Elm highlighting
exec 'hi elmImport' . s:fg_navy
exec 'hi elmAlias' . s:fg_aqua
exec 'hi elmType' . s:fg_pink
exec 'hi elmOperator' . s:fg_aqua . s:ft_bold
exec 'hi elmBraces' . s:fg_aqua . s:ft_bold
exec 'hi elmTypedef' . s:fg_blue . s:ft_bold
exec 'hi elmTopLevelDecl' . s:fg_green . s:ft_bold
" Purescript highlighting
exec 'hi purescriptModuleKeyword' . s:fg_navy
exec 'hi purescriptImportKeyword' . s:fg_navy
exec 'hi purescriptModuleName' . s:fg_pink
exec 'hi purescriptOperator' . s:fg_aqua . s:ft_bold
exec 'hi purescriptType' . s:fg_pink
exec 'hi purescriptTypeVar' . s:fg_navy
exec 'hi purescriptStructure' . s:fg_blue . s:ft_bold
exec 'hi purescriptLet' . s:fg_blue . s:ft_bold
exec 'hi purescriptFunction' . s:fg_green . s:ft_bold
exec 'hi purescriptDelimiter' . s:fg_aqua . s:ft_bold
exec 'hi purescriptStatement' . s:fg_purple . s:ft_bold
exec 'hi purescriptConstructor' . s:fg_pink
exec 'hi purescriptWhere' . s:fg_purple . s:ft_bold
" F# highlighting
exec 'hi fsharpTypeName' . s:fg_pink
exec 'hi fsharpCoreClass' . s:fg_pink
exec 'hi fsharpType' . s:fg_pink
exec 'hi fsharpKeyword' . s:fg_blue . s:ft_bold
exec 'hi fsharpOperator' . s:fg_aqua . s:ft_bold
exec 'hi fsharpBoolean' . s:fg_green . s:ft_bold
exec 'hi fsharpFormat' . s:fg_foreground
exec 'hi fsharpLinq' . s:fg_blue
exec 'hi fsharpKeyChar' . s:fg_aqua . s:ft_bold
exec 'hi fsharpOption' . s:fg_orange
exec 'hi fsharpCoreMethod' . s:fg_purple
exec 'hi fsharpAttrib' . s:fg_orange
exec 'hi fsharpModifier' . s:fg_aqua
exec 'hi fsharpOpen' . s:fg_red
" ASN.1 highlighting
exec 'hi asnExternal' . s:fg_green . s:ft_bold
exec 'hi asnTagModifier' . s:fg_purple
exec 'hi asnBraces' . s:fg_aqua . s:ft_bold
exec 'hi asnDefinition' . s:fg_foreground
exec 'hi asnStructure' . s:fg_blue
exec 'hi asnType' . s:fg_pink
exec 'hi asnTypeInfo' . s:fg_aqua . s:ft_bold
exec 'hi asnFieldOption' . s:fg_purple
" }}}
" Plugin: Netrw
exec 'hi netrwVersion' . s:fg_red
exec 'hi netrwList' . s:fg_pink
exec 'hi netrwHidePat' . s:fg_olive
exec 'hi netrwQuickHelp' . s:fg_blue
exec 'hi netrwHelpCmd' . s:fg_blue
exec 'hi netrwDir' . s:fg_aqua . s:ft_bold
exec 'hi netrwClassify' . s:fg_pink
exec 'hi netrwExe' . s:fg_green
exec 'hi netrwSuffixes' . s:fg_comment
exec 'hi netrwTreeBar' . s:fg_linenumber_fg
" Plugin: NERDTree
exec 'hi NERDTreeUp' . s:fg_comment
exec 'hi NERDTreeHelpCommand' . s:fg_pink
exec 'hi NERDTreeHelpTitle' . s:fg_blue . s:ft_bold
exec 'hi NERDTreeHelpKey' . s:fg_pink
exec 'hi NERDTreeHelp' . s:fg_foreground
exec 'hi NERDTreeToggleOff' . s:fg_red
exec 'hi NERDTreeToggleOn' . s:fg_green
exec 'hi NERDTreeDir' . s:fg_blue . s:ft_bold
exec 'hi NERDTreeDirSlash' . s:fg_pink
exec 'hi NERDTreeFile' . s:fg_foreground
exec 'hi NERDTreeExecFile' . s:fg_green
exec 'hi NERDTreeOpenable' . s:fg_aqua . s:ft_bold
exec 'hi NERDTreeClosable' . s:fg_pink
" Plugin: Tagbar
exec 'hi TagbarHelpTitle' . s:fg_blue . s:ft_bold
exec 'hi TagbarHelp' . s:fg_foreground
exec 'hi TagbarKind' . s:fg_pink
exec 'hi TagbarSignature' . s:fg_aqua
" Plugin: Vimdiff
exec 'hi DiffAdd' . s:fg_diffadd_fg . s:bg_diffadd_bg . s:ft_none
exec 'hi DiffChange' . s:fg_diffchange_fg . s:bg_diffchange_bg . s:ft_none
exec 'hi DiffDelete' . s:fg_diffdelete_fg . s:bg_diffdelete_bg . s:ft_none
exec 'hi DiffText' . s:fg_difftext_fg . s:bg_difftext_bg . s:ft_none
" Plugin: vim-gitgutter
exec 'hi GitGutterAdd' . s:fg_diffadd_fg
exec 'hi GitGutterChange' . s:fg_diffchange_fg
exec 'hi GitGutterDelete' . s:fg_diffdelete_fg
exec 'hi GitGutterAddLine' . s:fg_diffadd_fg . s:bg_diffadd_bg . s:ft_none
exec 'hi GitGutterChangeLine' . s:fg_diffchange_fg . s:bg_diffchange_bg . s:ft_none
exec 'hi GitGutterDeleteLine' . s:fg_diffdelete_fg . s:bg_diffdelete_bg . s:ft_none
" Plugin: AGit
exec 'hi agitHead' . s:fg_green . s:ft_bold
exec 'hi agitHeader' . s:fg_olive
exec 'hi agitStatAdded' . s:fg_diffadd_fg
exec 'hi agitStatRemoved' . s:fg_diffdelete_fg
exec 'hi agitDiffAdd' . s:fg_diffadd_fg
exec 'hi agitDiffRemove' . s:fg_diffdelete_fg
exec 'hi agitDiffHeader' . s:fg_pink
exec 'hi agitDiff' . s:fg_foreground
exec 'hi agitDiffIndex' . s:fg_purple
exec 'hi agitDiffFileName' . s:fg_aqua
exec 'hi agitLog' . s:fg_foreground
exec 'hi agitAuthorMark' . s:fg_olive
exec 'hi agitDateMark' . s:fg_comment
exec 'hi agitHeaderLabel' . s:fg_aqua
exec 'hi agitDate' . s:fg_aqua
exec 'hi agitTree' . s:fg_pink
exec 'hi agitRef' . s:fg_blue . s:ft_bold
exec 'hi agitRemote' . s:fg_purple . s:ft_bold
exec 'hi agitTag' . s:fg_orange . s:ft_bold
" Plugin: Spell Checking
exec 'hi SpellBad' . s:fg_foreground . s:bg_spellbad
exec 'hi SpellCap' . s:fg_foreground . s:bg_spellcap
exec 'hi SpellRare' . s:fg_foreground . s:bg_spellrare
exec 'hi SpellLocal' . s:fg_foreground . s:bg_spelllocal
" Plugin: Indent Guides
exec 'hi IndentGuidesOdd' . s:bg_background
exec 'hi IndentGuidesEven' . s:bg_cursorline
" Plugin: Startify
exec 'hi StartifyFile' . s:fg_blue . s:ft_bold
exec 'hi StartifyNumber' . s:fg_orange
exec 'hi StartifyHeader' . s:fg_comment
exec 'hi StartifySection' . s:fg_pink
exec 'hi StartifyPath' . s:fg_foreground
exec 'hi StartifySlash' . s:fg_navy
exec 'hi StartifyBracket' . s:fg_aqua
exec 'hi StartifySpecial' . s:fg_aqua
" Plugin: Signify
exec 'hi SignifyLineChange' . s:fg_diffchange_fg
exec 'hi SignifySignChange' . s:fg_diffchange_fg
exec 'hi SignifyLineAdd' . s:fg_diffadd_fg
exec 'hi SignifySignAdd' . s:fg_diffadd_fg
exec 'hi SignifyLineDelete' . s:fg_diffdelete_fg
exec 'hi SignifySignDelete' . s:fg_diffdelete_fg
" Git commit message
exec 'hi gitcommitSummary' . s:fg_blue
exec 'hi gitcommitHeader' . s:fg_green . s:ft_bold
exec 'hi gitcommitSelectedType' . s:fg_blue
exec 'hi gitcommitSelectedFile' . s:fg_pink
exec 'hi gitcommitUntrackedFile' . s:fg_diffdelete_fg
exec 'hi gitcommitBranch' . s:fg_aqua . s:ft_bold
exec 'hi gitcommitDiscardedType' . s:fg_diffdelete_fg
exec 'hi gitcommitDiff' . s:fg_comment
exec 'hi diffFile' . s:fg_blue
exec 'hi diffSubname' . s:fg_comment
exec 'hi diffIndexLine' . s:fg_comment
exec 'hi diffAdded' . s:fg_diffadd_fg
exec 'hi diffRemoved' . s:fg_diffdelete_fg
exec 'hi diffLine' . s:fg_orange
exec 'hi diffBDiffer' . s:fg_orange
exec 'hi diffNewFile' . s:fg_comment
" Pluging: CoC
exec 'hi CocFloating' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none
exec 'hi CocErrorFloat' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none
exec 'hi CocWarningFloat' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none
exec 'hi CocInfoFloat' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none
exec 'hi CocHintFloat' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none
exec 'hi CocErrorHighlight' . s:fg_foreground . s:bg_spellbad
exec 'hi CocWarningHighlight' . s:fg_foreground . s:bg_spellcap
exec 'hi CocInfoHighlight' . s:fg_foreground . s:bg_spellcap
exec 'hi CocHintHighlight' . s:fg_foreground . s:bg_spellcap
exec 'hi CocErrorSign' . s:fg_error_fg . s:bg_error_bg
exec 'hi CocWarningSign' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold
exec 'hi CocInfoSign' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold
exec 'hi CocHintSign' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold
" Debug Adapter Protocol (DAP) - Plugin: rcarriga/nvim-dap-ui
if has('nvim')
exec 'hi DapUIDecoration' . s:fg_blue
" DAP Scopes window
hi! link DapUIType Type
hi! link DapUIVariable Identifier
exec 'hi DapUIScope' . s:fg_red . s:ft_bold
hi! link DapUIValue Number
exec 'hi DapUIModifiedValue' . s:fg_orange . s:ft_bold . s:bg_error_bg
" DAP Breakpoints window
hi! link DapUILineNumber LineNr
hi! link DapUIBreakpointsDisabledLine LineNr
exec 'hi DapUIBreakpointsCurrentLine' . s:fg_linenumber_fg . s:ft_bold . s:bg_error_bg
exec 'hi DapUIBreakpointsInfo' . s:fg_green
exec 'hi DapUIBreakpointsPath' . s:fg_olive . s:ft_bold
" DAP Stacks window
exec 'hi DapUIFrameName' . s:fg_blue
exec 'hi DapUIThread' . s:fg_pink . s:ft_bold
exec 'hi DapUIStoppedThread' . s:fg_pink
" DAP Watches window
exec 'hi DapUIWatchesEmpty' . s:fg_pink . s:ft_bold
hi! link DapUIWatchesError DapUIWatchesEmpty
hi! link DapUIWatchesValue Number
" DAP Breakpoints window
exec 'hi DapUISource' . s:fg_olive
" DAP Floating window
exec 'hi DapUIFloatBorder' . s:fg_blue
endif
" Plugin: hrsh7th/nvim-cmp
if has('nvim')
hi! link CmpItemKindValue Number
hi! link CmpItemKindVariable Identifier
hi! link CmpItemKindKeyword Keyword
hi! link CmpItemKindField CmpItemKindVariable
exec 'hi CmpItemKindFunction' . s:fg_blue
hi! link CmpItemKindMethod CmpItemKindFunction
hi! link CmpItemKindConstructor CmpItemKindFunction
hi! link CmpItemKindClass Structure
hi! link CmpItemKindInterface Structure
exec 'hi CmpItemKindSnippet' . s:fg_orange
exec 'hi CmpItemKindFile' . s:fg_orange
hi! link CmpItemKindFolder CmpItemKindFile
exec 'hi CmpItemAbbrMatch' . s:fg_blue . s:ft_bold
exec 'hi CmpItemAbbrMatchFuzzy' . s:fg_blue . s:ft_bold
exec 'hi CmpItemAbbrDeprecated' . s:fg_foreground . ' gui=strikethrough'
endif
endfun
" }}}
" ================================== MISC =====================================
" Command to show theme information {{{
fun! g:Spacedust()
echom 'Spacedust Theme Framework'
echom ' version ' . s:version
echom ' by Nikyle Nguyen et al.'
echom ' at https://github.com/NLKNguyen/papercolor-theme/'
echom ' '
echom 'Current theme: ' . s:theme_name
echom ' ' . s:selected_theme['description']
echom ' by ' . s:selected_theme['maintainer']
echom ' at ' . s:selected_theme['source']
" TODO: add diff display for theme color names between 'default' and current
" theme if it is a custom theme, i.e. child theme.
endfun
" @brief command alias for g:Spacedust()
command! -nargs=0 Spacedust :call g:Spacedust()
" }}}
" =============================== MAIN ========================================
hi clear
syntax reset
let g:colors_name = "Spacedust"
call s:acquire_theme_data()
call s:identify_color_mode()
call s:generate_theme_option_variables()
call s:generate_language_option_variables()
call s:set_format_attributes()
call s:set_overriding_colors()
call s:convert_colors()
call s:set_color_variables()
call s:apply_syntax_highlightings()
" =============================================================================
" Cheers!
" vim: fdm=marker ff=unix
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment