293 lines
12 KiB
VimL
293 lines
12 KiB
VimL
" ---------------------------------------------------------
|
||
" ______ _ _
|
||
" | ____| | | |
|
||
" | |__ | | __| | __ _ _ __
|
||
" | __| | |/ _` |/ _` | '__|
|
||
" | |____| | (_| | (_| | |
|
||
" |______|_|\__,_|\__,_|_|
|
||
"
|
||
" ---------------------------------------------------------
|
||
"
|
||
" Maintainer: Alexander Gude
|
||
" Email: alex.public.account@gmail.com
|
||
" File: eldar.vim
|
||
" URL: github.com/agude/vim-eldar
|
||
" License: MIT
|
||
"
|
||
" ---------------------------------------------------------
|
||
"
|
||
" Copyright (c) 2016 Alexander Gude
|
||
"
|
||
" Permission is hereby granted, free of charge, to any per‐
|
||
" son obtaining a copy of this software and associated doc‐
|
||
" umentation files (the “Software”), to deal in the Soft‐
|
||
" ware without restriction, including without limitation
|
||
" the rights to use, copy, modify, merge, publish, distrib‐
|
||
" ute, sublicense, and/or sell copies of the Software, and
|
||
" to permit persons to whom the Software is furnished to do
|
||
" so, subject to the following conditions:
|
||
"
|
||
" The above copyright notice and this permission notice
|
||
" shall be included in all copies or substantial portions
|
||
" of the Software.
|
||
"
|
||
" THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY
|
||
" KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
||
" THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICU‐
|
||
" LAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||
" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CON‐
|
||
" TRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON‐
|
||
" NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||
" THE SOFTWARE.
|
||
"
|
||
" ---------------------------------------------------------
|
||
|
||
" Eldar is designed for dark backgrounds
|
||
set background=dark
|
||
|
||
highlight clear
|
||
if exists('syntax_on')
|
||
syntax reset
|
||
endif
|
||
|
||
let g:colors_name = 'eldar'
|
||
|
||
" Define colors (Tango is the default)
|
||
" GUI colors
|
||
let s:red = get(g:, 'eldar_red', '#EF2929')
|
||
let s:yellow = get(g:, 'eldar_yellow', '#FCE94F')
|
||
let s:green = get(g:, 'eldar_green', '#8AE234')
|
||
let s:cyan = get(g:, 'eldar_cyan', '#34E2E2')
|
||
let s:blue = get(g:, 'eldar_blue', '#729FCF')
|
||
let s:magenta = get(g:, 'eldar_magenta', '#AD7FA8')
|
||
let s:gui_text = get(g:, 'eldar_text', 'White')
|
||
let s:gui_bg = get(g:, 'eldar_background', 'Black')
|
||
|
||
" Terminal colors
|
||
let s:term_text = get(g:, 'eldar_term_text', 'NONE')
|
||
let s:term_bg = get(g:, 'eldar_term_background', 'NONE')
|
||
|
||
" The ColourAssignment map and function to unpack it are from the bandit
|
||
" colorscheme by Al Bunden, available here:
|
||
" http://www.cgtk.co.uk/vim-scripts/bandit
|
||
|
||
let s:ColourAssignment = {}
|
||
|
||
" Unspecified colours default to NONE, EXCEPT cterm(.*) which default to matching gui(.*)
|
||
"
|
||
" In most cases, only GUIFG is therefore important unless support for Black and White
|
||
" terminals is essential
|
||
|
||
" Editor settings
|
||
" ---------------
|
||
let s:ColourAssignment['Normal'] = {'GUIFG': s:gui_text, 'GUIBG': s:gui_bg, 'CTERMBG': s:term_bg, 'CTERMFG': s:term_text}
|
||
let s:ColourAssignment['Cursor'] = {'GUI': 'Reverse'}
|
||
let s:ColourAssignment['CursorLine'] = {'GUI': 'NONE', 'GUIBG': 'Black'}
|
||
let s:ColourAssignment['LineNr'] = {'GUIFG': 'DarkGray'}
|
||
let s:ColourAssignment['CursorLineNr'] = {'GUIFG': 'White'}
|
||
|
||
|
||
" Number column
|
||
" -------------
|
||
let s:ColourAssignment['CursorColumn'] = {'GUIBG': 'DarkGrey'}
|
||
let s:ColourAssignment['Folded'] = {'GUIFG': 'Cyan', 'GUIBG': 'DarkGrey'}
|
||
let s:ColourAssignment['FoldColumn'] = {'GUIBG': 'DarkGrey'}
|
||
highlight! link SignColumn FoldColumn
|
||
|
||
|
||
" Window/Tab delimiters
|
||
" ---------------------
|
||
let s:ColourAssignment['VertSplit'] = {'GUIFG': 'White', 'GUIBG': 'NONE'}
|
||
let s:ColourAssignment['ColorColumn'] = {'GUIBG': 'DarkGray'}
|
||
let s:ColourAssignment['TabLine'] = {'GUIFG': 'White', 'GUIBG': 'DarkGray'}
|
||
let s:ColourAssignment['TabLineFill'] = {'GUIBG': 'DarkGray'}
|
||
let s:ColourAssignment['TabLineSel'] = {'GUIFG': 'Black', 'GUIBG': 'Gray'}
|
||
|
||
|
||
" File Navigation / Searching
|
||
" ---------------------------
|
||
let s:ColourAssignment['Directory'] = {'GUIFG': s:blue, 'CTERMFG': 'Blue', 'GUI': 'Bold'}
|
||
let s:ColourAssignment['Search'] = {'GUIFG': 'Black', 'GUIBG': s:yellow, 'CTERMFG': 'yellow', 'CTERMBG': 'black', 'GUI': 'Bold', 'CTERM': 'Reverse,Bold'}
|
||
let s:ColourAssignment['IncSearch'] = {'GUI': 'Reverse'}
|
||
|
||
|
||
" Prompt/Status
|
||
" -------------
|
||
let s:ColourAssignment['StatusLine'] = {'GUIFG': 'White', 'GUIBG': s:gui_bg, 'GUI': 'Bold,Reverse', 'CTERMFG': 'White', 'CTERMBG': s:term_bg}
|
||
let s:ColourAssignment['StatusLineNC'] = {'GUIFG': 'White', 'GUIBG': s:gui_bg, 'GUI': 'Reverse', 'CTERMFG': 'White', 'CTERMBG': s:term_bg}
|
||
let s:ColourAssignment['WildMenu'] = {'GUIFG': 'White', 'GUIBG': 'DarkGrey', 'GUI': 'Bold'}
|
||
let s:ColourAssignment['Question'] = {'GUIFG': s:blue, 'CTERMFG': 'Blue'}
|
||
let s:ColourAssignment['Title'] = {'GUI': 'Bold'}
|
||
let s:ColourAssignment['ModeMsg'] = {'GUI': 'Bold'}
|
||
let s:ColourAssignment['MoreMsg'] = {'GUIFG': s:green, 'CTERMFG': 'Green'}
|
||
|
||
|
||
" Visual aid
|
||
" ----------
|
||
let s:ColourAssignment['MatchParen'] = {'GUIBG': s:cyan, 'CTERMBG': 'cyan'}
|
||
let s:ColourAssignment['Visual'] = {'GUIBG': 'DarkGrey'}
|
||
highlight! link VisualNOS Visual
|
||
let s:ColourAssignment['NonText'] = {'GUIFG': s:blue, 'CTERMFG': 'blue'}
|
||
|
||
let s:ColourAssignment['Todo'] = {'GUIFG': 'Black', 'GUIBG': s:yellow, 'CTERMBG': 'yellow'}
|
||
let s:ColourAssignment['Underlined'] = {'GUIFG': s:cyan, 'CTERMFG': 'cyan', 'GUI': 'Underline'}
|
||
let s:ColourAssignment['Error'] = {'GUIFG': s:red, 'GUIBG': 'Black', 'CTERMFG': 'red', 'GUI': 'Reverse,Bold'}
|
||
let s:ColourAssignment['ErrorMsg'] = {'GUIFG': s:red, 'GUIBG': 'White', 'CTERMFG': 'red', 'GUI': 'Reverse,Bold'}
|
||
let s:ColourAssignment['WarningMsg'] = {'GUIFG': s:red, 'CTERMFG': 'red'}
|
||
let s:ColourAssignment['Ignore'] = {'GUIFG': 'bg', 'CTERMFG': 'Black'}
|
||
let s:ColourAssignment['SpecialKey'] = {'GUIFG': s:cyan, 'CTERMFG': 'Cyan'}
|
||
|
||
|
||
" Variable types
|
||
" --------------
|
||
let s:ColourAssignment['Constant'] = {'GUIFG': s:magenta, 'CTERMFG': 'magenta'}
|
||
let s:ColourAssignment['Number'] = {'GUIFG': s:red, 'CTERMFG': 'red'}
|
||
highlight! link String Constant
|
||
highlight! link Boolean Constant
|
||
highlight! link Float Number
|
||
|
||
let s:ColourAssignment['Identifier'] = {'GUIFG': s:green, 'CTERMFG': 'green', 'GUI': 'Bold'}
|
||
highlight! link Function Identifier
|
||
|
||
|
||
" Comments
|
||
" --------
|
||
let s:ColourAssignment['Comment'] = {'GUIFG': s:cyan, 'CTERMFG': 'cyan'}
|
||
highlight! link SpecialComment Special
|
||
|
||
|
||
" Language constructs
|
||
" -------------------
|
||
let s:ColourAssignment['Statement'] = {'GUIFG': s:yellow, 'CTERMFG': 'yellow', 'GUI': 'Bold'}
|
||
highlight! link Conditional Statement
|
||
highlight! link Repeat Statement
|
||
highlight! link Label Statement
|
||
highlight! link Operator Statement
|
||
highlight! link Keyword Statement
|
||
highlight! link Exception Statement
|
||
|
||
let s:ColourAssignment['Special'] = {'GUIFG': s:red, 'CTERMFG': 'red'}
|
||
highlight! link SpecialChar Special
|
||
highlight! link Tag Special
|
||
highlight! link Delimiter Special
|
||
highlight! link Debug Special
|
||
|
||
|
||
" C like
|
||
" ------
|
||
let s:ColourAssignment['PreProc'] = {'GUIFG': s:blue, 'CTERMFG': 'blue', 'GUI': 'Bold'}
|
||
highlight! link Include PreProc
|
||
highlight! link Define PreProc
|
||
highlight! link Macro PreProc
|
||
highlight! link PreCondit PreProc
|
||
|
||
let s:ColourAssignment['Type'] = {'GUIFG': s:green, 'CTERMFG': 'green', 'GUI': 'Bold'}
|
||
let s:ColourAssignment['Structure'] = {'GUIFG': s:magenta, 'CTERMFG': 'magenta'}
|
||
highlight! link StorageClass Type
|
||
highlight! link Typedef Type
|
||
|
||
|
||
" Diff
|
||
" ----
|
||
let s:ColourAssignment['DiffAdd'] = {'GUIFG': s:green, 'GUIBG': 'Black', 'CTERMFG': 'Green', 'GUI': 'Reverse,Bold'}
|
||
let s:ColourAssignment['DiffChange'] = {'GUIFG': 'NONE'}
|
||
let s:ColourAssignment['DiffDelete'] = {'GUIFG': s:red, 'GUIBG': 'Black', 'CTERMFG': 'Red', 'GUI': 'Reverse,Bold'}
|
||
let s:ColourAssignment['DiffText'] = {'GUIFG': s:blue, 'GUIBG': 'Black', 'CTERMFG': 'Blue', 'GUI': 'Reverse,Bold'}
|
||
|
||
|
||
" Completion menu
|
||
" ---------------
|
||
let s:ColourAssignment['Pmenu'] = {'GUIFG': 'Black', 'GUIBG': 'Grey'}
|
||
let s:ColourAssignment['PmenuSel'] = {'GUIFG': s:yellow, 'GUIBG': 'DarkGrey', 'GUI': 'Bold', 'CTERMFG': 'yellow'}
|
||
let s:ColourAssignment['PmenuThumb'] = {'GUIBG': 'DarkGrey'}
|
||
highlight! link PmenuSbar Pmenu
|
||
|
||
|
||
" Spelling
|
||
" --------
|
||
let s:ColourAssignment['SpellBad'] = {'GUIFG': 'NONE', 'GUISP': s:red, 'CTERMFG': 'red', 'GUI': 'undercurl'}
|
||
let s:ColourAssignment['SpellCap'] = {'GUIFG': 'NONE', 'GUISP': s:blue, 'CTERMFG': 'blue', 'GUI': 'undercurl'}
|
||
let s:ColourAssignment['SpellLocal'] = {'GUIFG': 'NONE', 'GUISP': s:yellow, 'CTERMFG': 'yellow', 'GUI': 'undercurl'}
|
||
let s:ColourAssignment['SpellRare'] = {'GUIFG': 'NONE', 'GUISP': s:green, 'CTERMFG': 'green', 'GUI': 'undercurl'}
|
||
|
||
|
||
" Text Formatting
|
||
" ---------------
|
||
let s:ColourAssignment['Italic'] = {'GUIFG': 'White', 'GUI': 'Italic'}
|
||
let s:ColourAssignment['Bold'] = {'GUIFG': 'White', 'GUI': 'Bold'}
|
||
let s:ColourAssignment['BoldItalic'] = {'GUIFG': 'White', 'GUI': 'Italic,Bold'}
|
||
highlight! link htmlItalic Italic
|
||
highlight! link htmlBold Bold
|
||
highlight! link htmlBoldItalic BoldItalic
|
||
|
||
|
||
" Function to translate the ColourAssignments to highlight lines
|
||
let s:colours = {}
|
||
let s:valid_cterm_colours =
|
||
\ [
|
||
\ 'Black', 'DarkBlue', 'DarkGreen', 'DarkCyan',
|
||
\ 'DarkRed', 'DarkMagenta', 'Brown', 'DarkYellow',
|
||
\ 'LightGray', 'LightGrey', 'Gray', 'Grey',
|
||
\ 'DarkGray', 'DarkGrey', 'Blue', 'LightBlue',
|
||
\ 'Green', 'LightGreen', 'Cyan', 'LightCyan',
|
||
\ 'Red', 'LightRed', 'Magenta', 'LightMagenta',
|
||
\ 'Yellow', 'LightYellow', 'White',
|
||
\ ]
|
||
|
||
for s:key in keys(s:ColourAssignment)
|
||
let s:colours = s:ColourAssignment[s:key]
|
||
if has_key(s:colours, 'TERM')
|
||
let s:term = s:colours['TERM']
|
||
else
|
||
let s:term = 'NONE'
|
||
endif
|
||
if has_key(s:colours, 'GUI')
|
||
let s:gui = s:colours['GUI']
|
||
else
|
||
let s:gui = 'NONE'
|
||
endif
|
||
if has_key(s:colours, 'GUIFG')
|
||
let s:guifg = s:colours['GUIFG']
|
||
else
|
||
let s:guifg = 'NONE'
|
||
endif
|
||
if has_key(s:colours, 'GUIBG')
|
||
let s:guibg = s:colours['GUIBG']
|
||
else
|
||
let s:guibg = 'NONE'
|
||
endif
|
||
if has_key(s:colours, 'CTERM')
|
||
let s:cterm = s:colours['CTERM']
|
||
else
|
||
let s:cterm = s:gui
|
||
endif
|
||
if has_key(s:colours, 'CTERMFG')
|
||
let s:ctermfg = s:colours['CTERMFG']
|
||
else
|
||
if index(s:valid_cterm_colours, s:guifg) != -1
|
||
let s:ctermfg = s:guifg
|
||
else
|
||
let s:ctermfg = 'NONE'
|
||
endif
|
||
endif
|
||
if has_key(s:colours, 'CTERMBG')
|
||
let s:ctermbg = s:colours['CTERMBG']
|
||
else
|
||
if index(s:valid_cterm_colours, s:guibg) != -1
|
||
let s:ctermbg = s:guibg
|
||
else
|
||
let s:ctermbg = 'NONE'
|
||
endif
|
||
endif
|
||
if has_key(s:colours, 'GUISP')
|
||
let s:guisp = s:colours['GUISP']
|
||
else
|
||
let s:guisp = 'NONE'
|
||
endif
|
||
|
||
if s:key =~# '^\k*$'
|
||
execute 'highlight '.s:key.' term='.s:term.' cterm='.s:cterm.' gui='.s:gui.' ctermfg='.s:ctermfg.' guifg='.s:guifg.' ctermbg='.s:ctermbg.' guibg='.s:guibg.' guisp='.s:guisp
|
||
endif
|
||
endfor
|