diff --git a/vim/colors/campo-dark-blue.vim b/vim/colors/campo-dark-blue.vim index 57f16f5..861a0f0 100644 --- a/vim/colors/campo-dark-blue.vim +++ b/vim/colors/campo-dark-blue.vim @@ -1,413 +1,163 @@ " A simple dark vim colorscheme. -" Maintainer: Michael Campagnaro -" Version: 1.0 -" -" The theme file original copied from the Tomorrow theme. -" See https://github.com/chriskempson/vim-tomorrow-theme.git for it. -" Hex color conversion functions borrowed from the theme "Desert256". +" Created by Michael Campagnaro (https://git.michael.is) if has('termguicolors') - " Supports 24-bit color range - set termguicolors - let g:campo_theme_use_rainbow_parens = 0 - - " Colors - let s:blue = "3699cc" - let s:purple = "ce93d8" - let s:grey = "b0bec5" - let s:orange = "ffb74d" - let s:yellow = "fff176" - let s:green = "88b888" - let s:red = "ef2929" - let s:text = "f1f1e8" - - let s:foreground = s:text " A majority of the syntax will use this, including variables in C/C++. - let s:background = "072730" - let s:selection = "546e8f" - let s:window = "37474f" - let s:line = "034a4a" - let s:color_column = "034a4a" " Vertical line set by colorcolumn option. - let s:cursor_line = "023940" " Horizontal line at the cursor. - let s:cursor_column = "023940" " Vertical line at the cursor. - let s:active_tab_bg = s:background - let s:active_tab_fg = s:text - let s:inactive_tab_bg = s:line - let s:inactive_tab_fg = "dddddd" - let s:tab_line_bg = s:inactive_tab_bg - let s:bad_spelling = "ee877d" - let s:todo = "b8fbb0" - let s:bugs = "b8fbb0" - let s:error_msg_background = s:background - let s:error_msg_foreground = "e40e0e" - let s:function_name = "0eefcb" - let s:pre_processor = s:text - let s:define = "a5bce4" - let s:struct = "ae90ea" - let s:variable = s:text - let s:number = s:text - let s:repeat = s:text " 'for' and 'while' - let s:statement = s:text " 'return', 'goto', 'case', 'break', etc - let s:identifier = s:grey - let s:type = s:text " Data types - let s:include = s:text " #include in C/C++ - let s:string = s:text - let s:comment = "5dea82" - let s:constant = s:text " Constants, e.g. SOME_CONST - let s:boolean = s:text " true, false + " Supports 24-bit color range + set termguicolors + let g:campo_theme_use_rainbow_parens = 0 else - echoerr "This theme requires 'termguicolors' support!" + echoerr "This theme requires 'termguicolors' support!" +endif + +if !has("gui_running") && &t_Co != 88 && &t_Co != 256 + echoerr "Don't have expected color support!" endif set background=dark hi clear -if exists("syntax_on") - syntax reset -endif +syntax reset +source $HOME/.vim/colors/utils let g:colors_name = "campo-dark-blue" -if has("gui_running") || &t_Co == 88 || &t_Co == 256 - " Returns an approximate grey index for the given grey level - fun 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 +" Shared colors +let s:blue = "3699cc" +let s:purple = "ce93d8" +let s:grey = "b0bec5" +let s:orange = "ffb74d" +let s:yellow = "fff176" +let s:green = "88b888" +let s:red = "ef2929" +let s:text = "f1f1e8" " A majority of the syntax will use this. +let s:bg = "072730" +let s:select = "546e8f" +let s:window = "37474f" +let s:comment = "5dea82" +let s:tab = "03404a" +let s:cursor = "023940" +let s:error = "e40e0e" +let s:proc = "0eefcb" +let s:warn = "dcd53e" +let s:spell = "aaf53e" - " Returns the actual grey level represented by the grey index - fun 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 +" Vim +call X("Normal", s:text, s:bg, "") +call X("LineNr", s:grey, "", "") +call X("NonText", s:text, "", "") +call X("SpecialKey", s:blue, "", "") +call X("Search", s:text, s:select, "") +call X("TabLineSel", s:text, s:bg, "bold") +call X("TabLine", "dddddd", s:tab, "none") +call X("TabLineFill", "", s:tab, "none") " The tab line region that doesn't contain tab entries. +call X("StatusLine", s:window, s:text, "reverse") +call X("StatusLineNC", s:window, s:comment, "reverse") +call X("VertSplit", s:window, s:window, "none") +call X("Visual", "", s:select, "") +call X("Directory", s:blue, "", "") +call X("ModeMsg", s:green, "", "") +call X("MoreMsg", s:green, "", "") +call X("Question", s:green, "", "") +call X("MatchParen", "", s:select, "") +call X("Folded", s:comment, s:bg, "") +call X("FoldColumn", s:comment, s:bg, "") +call X("SpellBad", s:spell, s:bg, "bold") +call X("SpellCap", s:spell, s:bg, "bold") " A word that should start with a capital +call X("SpellLocal", s:spell, s:bg, "bold") " Correctly spelled but used in another region. +call X("SpellRare", s:text, s:bg, "") " A correctly spelled that is hardly ever used. Don't care about this. +call X("ErrorMsg", s:error, s:bg, "bold") +if version >= 700 + call X("PMenu", s:text, s:select, "none") " Autocompletion menu + call X("PMenuSel", s:text, "027990", "bold") " Selected autocompletion item + call X("SignColumn", "", s:bg, "none") + call X("CursorLine", "", s:cursor, "none") " Horizontal line at the cursor. + call X("CursorColumn", "", s:cursor, "none") " Vertical line at the cursor. +end +if version >= 703 + call X("ColorColumn", "", "034a4a", "none") " Vertical line set by colorcolumn option. +end - " Returns the palette index for the given grey index - fun 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 +" Standard Highlighting +call X("Comment", s:comment, "", "") +call X("Title", s:comment, "", "") +call X("Cursor", "", s:text, "") +call X("Identifier", s:grey, "", "none") +call X("Statement", s:text, "", "") " 'return', 'goto', 'case', 'break', etc +call X("Conditional", s:text, "", "") +call X("Repeat", s:text, "", "") " 'for' and 'while' +call X("Structure", "ae90ea", "", "") +call X("Function", s:proc, "", "") +call X("Constant", s:text, "", "") " Constants, e.g. SOME_CONST +call X("Boolean", s:text, "", "") " true, false +call X("String", s:text, "", "") +call X("Special", s:text, "", "") +call X("PreProc", s:text, "", "") +call X("Operator", s:text, "", "none") +call X("Type", s:text, "", "") " Data types +call X("Define", "a5bce4", "", "none") +call X("Include", s:text, "", "") " #include in C/C++ +call X("Number", s:text, "", "") - " Returns an approximate colour index for the given colour level - fun 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 +" Notes +call X("Todo", "b8fbb0", s:bg, "underline") +call X("Bugs", "d8fbb0", s:bg, "standout") +call X("Notes", "ffffff", s:bg, "standout") +call X("Notices", s:warn, s:bg, "bold") - " Returns the actual colour level for the given colour index - fun 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 +" Build markers +call X("BuildError", s:error, s:bg, "bold") +call X("BuildWarn", s:warn, s:bg, "bold") +call X("BuildInfo", s:text, s:bg, "bold") - " Returns the palette index for the given R/G/B colour indices - fun 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 +" Jai Highlighting +call X("jaiVariableDeclaration", s:text, "", "") +call X("jaiTagNote", s:orange, "", "bold") - " Returns the palette index to approximate the given R/G/B colour levels - fun colour(r, g, b) - " Get the closest grey - let l:gx = grey_number(a:r) - let l:gy = grey_number(a:g) - let l:gz = grey_number(a:b) +" airblade/vim-gitgutter +call X("GitGutterAdd", s:green, "", "") +call X("GitGutterDelete", s:red, "", "") +call X("GitGutterChange", s:yellow, "", "") +call X("GitGutterChangeDelete", s:orange, "", "") - " Get the closest colour - let l:x = rgb_number(a:r) - let l:y = rgb_number(a:g) - let l:z = rgb_number(a:b) +" C Highlighting +call X("cType", s:text, "", "") +call X("cStorageClass", s:text, "", "") +call X("cConditional", s:text, "", "") +call X("cRepeat", s:text, "", "") - if l:gx == l:gy && l:gy == l:gz - " There are two possibilities - let l:dgr = grey_level(l:gx) - a:r - let l:dgg = grey_level(l:gy) - a:g - let l:dgb = grey_level(l:gz) - a:b - let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) - let l:dr = rgb_level(l:gx) - a:r - let l:dg = rgb_level(l:gy) - a:g - let l:db = 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 grey_colour(l:gx) - else - " Use the colour - return rgb_colour(l:x, l:y, l:z) - endif - else - " Only one possibility - return rgb_colour(l:x, l:y, l:z) - endif - endfun +" Python Highlighting +call X("pythonInclude", s:red, "", "") +call X("pythonStatement", s:blue, "", "") +call X("pythonConditional", s:purple, "", "") +call X("pythonRepeat", s:purple, "", "") +call X("pythonException", s:purple, "", "") +call X("pythonFunction", s:proc, "", "") +call X("pythonSelf", s:grey, "", "") +call X("pythonOperator", s:purple, "", "") +call X("pythonExtraOperator", s:purple, "", "") +call X("pythonClass", s:proc, "", "") +call X("pythonDecorator", s:orange, "", "") +call X("pythonDocstring", s:comment, "", "") +call X("pythonBuiltinObj", s:yellow, "", "") +call X("pythonBuiltinType", s:orange, "", "") +call X("pythonNumber", s:orange, "", "") - " Returns the palette index to approximate the 'rrggbb' hex string - fun rgb(rgb) - let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0 - let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0 - let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0 +" JS Highlighting +call X("javaScriptBraces", s:text, "", "") +call X("javaScriptFunction", s:purple, "", "") +call X("javaScriptConditional", s:purple, "", "") +call X("javaScriptRepeat", s:purple, "", "") +call X("javaScriptNumber", s:orange, "", "") +call X("javaScriptMember", s:orange, "", "") - return colour(l:r, l:g, l:b) - endfun +" HTML Highlighting +call X("htmlTag", s:text, "", "") +call X("htmlTagName", s:text, "", "") +call X("htmlArg", s:text, "", "") +call X("htmlScriptTag", s:blue, "", "") - " Sets the highlighting for the given group - fun X(group, fg, bg, attr) - if a:fg != "" - exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . rgb(a:fg) - endif - if a:bg != "" - exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . rgb(a:bg) - endif - if a:attr != "" - exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr - endif - endfun +" Diff Highlighting +call X("DiffAdd", s:window, s:green, "none") +call X("DiffDelete", s:window, s:red, "none") +call X("DiffChange", s:window, s:yellow, "none") +call X("DiffText", s:bg, s:yellow, "none") - " Vim Highlighting - call X("Normal", s:foreground, s:background, "") - call X("LineNr", s:grey, "", "") - call X("NonText", s:foreground, "", "") - call X("SpecialKey", s:blue, "", "") - call X("Search", s:foreground, s:selection, "") - call X("TabLineSel", s:active_tab_fg, s:active_tab_bg, "bold") - call X("TabLine", s:inactive_tab_fg, s:inactive_tab_bg, "none") - call X("TabLineFill", "", s:tab_line_bg, "none") - call X("StatusLine", s:window, s:foreground, "reverse") - call X("StatusLineNC", s:window, s:comment, "reverse") - call X("VertSplit", s:window, s:window, "none") - call X("Visual", "", s:selection, "") - call X("Directory", s:blue, "", "") - call X("ModeMsg", s:green, "", "") - call X("MoreMsg", s:green, "", "") - call X("Question", s:green, "", "") - call X("WarningMsg", s:red, "", "") - call X("MatchParen", "", s:selection, "") - call X("Folded", s:comment, s:background, "") - call X("FoldColumn", s:comment, s:background, "") - if version >= 700 - call X("CursorLine", "", s:cursor_line, "none") - call X("CursorColumn", "", s:cursor_column, "none") - call X("PMenu", s:foreground, s:selection, "none") - call X("PMenuSel", s:foreground, s:selection, "reverse") - call X("SignColumn", "", s:background, "none") - end - if version >= 703 - call X("ColorColumn", "", s:color_column, "none") - end - - " Standard Highlighting - call X("Comment", s:comment, "", "") - call X("Title", s:comment, "", "") - call X("Cursor", "", s:foreground, "") - call X("Identifier", s:identifier, "", "none") - call X("Statement", s:statement, "", "") - call X("Conditional", s:foreground, "", "") - call X("Repeat", s:repeat, "", "") - call X("Structure", s:struct, "", "") - call X("Function", s:function_name, "", "") - call X("Constant", s:constant, "", "") - call X("Boolean", s:boolean, "", "") - call X("String", s:string, "", "") - call X("Special", s:foreground, "", "") - call X("PreProc", s:pre_processor, "", "") - call X("Operator", s:foreground, "", "none") - call X("Type", s:type, "", "") - call X("Define", s:define, "", "none") - call X("Include", s:include, "", "") - call X("Number", s:number, "", "") - call X("SpellBad", s:bad_spelling, s:background, "underline,bold") - - " Custom TODO/NOTE colors - call X("Todo", s:todo, s:background, "underline") - call X("Bugs", s:bugs, s:background, "standout") - call X("Notes","ffffff",s:background,"standout") - call X("Notices","dcd53e",s:background,"bold") - call X("ErrorMsg", s:error_msg_foreground, s:error_msg_background, "bold") - - " Vim Highlighting - call X("vimCommand", s:text, "", "") - - " Jai Highlighting - call X("jaiVariableDeclaration", s:variable, "", "") - call X("jaiTagNote", s:orange, "", "bold") - - " C Highlighting - call X("cType", s:text, "", "") - call X("cStorageClass", s:text, "", "") - call X("cConditional", s:text, "", "") - call X("cRepeat", s:text, "", "") - - " Python Highlighting - call X("pythonInclude", s:red, "", "") - call X("pythonStatement", s:blue, "", "") - call X("pythonConditional", s:purple, "", "") - call X("pythonRepeat", s:purple, "", "") - call X("pythonException", s:purple, "", "") - call X("pythonFunction", s:function_name, "", "") - call X("pythonSelf", s:grey, "", "") - call X("pythonOperator", s:purple, "", "") - call X("pythonExtraOperator", s:purple, "", "") - call X("pythonClass", s:function_name, "", "") - call X("pythonDecorator", s:orange, "", "") - call X("pythonDocstring", s:comment, "", "") - call X("pythonBuiltinObj", s:yellow, "", "") - call X("pythonBuiltinType", s:orange, "", "") - call X("pythonNumber", s:orange, "", "") - - " JavaScript Highlighting - call X("javaScriptBraces", s:foreground, "", "") - call X("javaScriptFunction", s:purple, "", "") - call X("javaScriptConditional", s:purple, "", "") - call X("javaScriptRepeat", s:purple, "", "") - call X("javaScriptNumber", s:orange, "", "") - call X("javaScriptMember", s:orange, "", "") - - " HTML Highlighting - call X("htmlTag", s:foreground, "", "") - call X("htmlTagName", s:foreground, "", "") - call X("htmlArg", s:foreground, "", "") - call X("htmlScriptTag", s:blue, "", "") - - " Diff Highlighting - call X("diffAdded", "", s:green, "none") - call X("diffRemoved", "", s:red, "none") - call X("diffChanged", "", s:yellow, "none") - call X("DiffAdd", s:window, s:green, "none") - call X("DiffDelete", s:window, s:red, "none") - call X("DiffChange", s:window, s:yellow, "none") - call X("DiffText", s:background, s:yellow, "none") - - call X("GitGutterAdd", s:green, "", "") - call X("GitGutterDelete", s:red, "", "") - call X("GitGutterChange", s:yellow, "", "") - call X("GitGutterChangeDelete", s:orange, "", "") - - call X("VimwikiHeader1", s:red, "", "") - call X("VimwikiHeader2", s:green, "", "") - call X("VimwikiHeader3", s:blue, "", "") - call X("VimwikiHeader4", s:function_name, "", "") - call X("VimwikiHeader5", s:orange, "", "") - call X("VimwikiHeader6", s:yellow, "", "") - - " Delete Functions - delf X - delf rgb - delf colour - delf rgb_colour - delf rgb_level - delf rgb_number - delf grey_colour - delf grey_level - delf grey_number -endif diff --git a/vim/colors/campo-dark-greenish.vim b/vim/colors/campo-dark-greenish.vim index d34c589..c2d509e 100644 --- a/vim/colors/campo-dark-greenish.vim +++ b/vim/colors/campo-dark-greenish.vim @@ -447,9 +447,6 @@ if has("gui_running") || &t_Co == 88 || &t_Co == 256 call X("bladeKeyword", s:blue, "", "") " Diff Highlighting - call X("diffAdded", "", s:green, "none") - call X("diffRemoved", "", s:red, "none") - call X("diffChanged", "", s:yellow, "none") call X("DiffAdd", s:window, s:green, "none") call X("DiffDelete", s:window, s:red, "none") call X("DiffChange", s:window, s:yellow, "none") diff --git a/vim/colors/campo-dark-grey-blue.vim b/vim/colors/campo-dark-grey-blue.vim index e3e5bc0..bf5b606 100644 --- a/vim/colors/campo-dark-grey-blue.vim +++ b/vim/colors/campo-dark-grey-blue.vim @@ -414,9 +414,6 @@ if has("gui_running") || &t_Co == 88 || &t_Co == 256 call X("bladeKeyword", s:blue, "", "") " Diff Highlighting - call X("diffAdded", "", s:green, "none") - call X("diffRemoved", "", s:red, "none") - call X("diffChanged", "", s:yellow, "none") call X("DiffAdd", s:window, s:green, "none") call X("DiffDelete", s:window, s:red, "none") call X("DiffChange", s:window, s:yellow, "none") diff --git a/vim/colors/campo-dark-greyscale.vim b/vim/colors/campo-dark-greyscale.vim index 1fa45f6..d9b8547 100644 --- a/vim/colors/campo-dark-greyscale.vim +++ b/vim/colors/campo-dark-greyscale.vim @@ -432,9 +432,6 @@ if has("gui_running") || &t_Co == 88 || &t_Co == 256 call X("bladeKeyword", s:blue, "", "") " Diff Highlighting - call X("diffAdded", "", s:green, "none") - call X("diffRemoved", "", s:red, "none") - call X("diffChanged", "", s:yellow, "none") call X("DiffAdd", s:window, s:green, "none") call X("DiffDelete", s:window, s:red, "none") call X("DiffChange", s:window, s:yellow, "none") diff --git a/vim/colors/campo-dark-simple.vim b/vim/colors/campo-dark-simple.vim index a9a6cf4..2d846ca 100644 --- a/vim/colors/campo-dark-simple.vim +++ b/vim/colors/campo-dark-simple.vim @@ -81,8 +81,6 @@ highlight! link Todo Keyword highlight! link Label Keyword highlight! link Define Keyword highlight! link DiffAdd Keyword -highlight! link diffAdded Keyword -highlight! link diffCommon Keyword highlight! link Directory Keyword highlight! link PreCondit Keyword highlight! link PreProc Keyword @@ -101,11 +99,9 @@ highlight! link iCursor SpecialKey highlight! link SpellLocal SpellCap highlight! link NonText NonText highlight! link DiffDelete Comment -highlight! link diffRemoved Comment highlight! link PmenuSbar Visual highlight! link VisualNOS Visual highlight! link VertSplit VertSplit highlight! link Cursor StatusLine highlight! link Underlined SpellRare highlight! link rstEmphasis SpellRare -highlight! link diffChanged DiffChange diff --git a/vim/colors/campo-light-greyscale.vim b/vim/colors/campo-light-greyscale.vim index 702bd99..3e6631d 100644 --- a/vim/colors/campo-light-greyscale.vim +++ b/vim/colors/campo-light-greyscale.vim @@ -79,8 +79,6 @@ highlight! link Todo Keyword highlight! link Label Keyword highlight! link Define Keyword highlight! link DiffAdd Keyword -highlight! link diffAdded Keyword -highlight! link diffCommon Keyword highlight! link Directory Keyword highlight! link PreCondit Keyword highlight! link PreProc Keyword @@ -100,10 +98,8 @@ highlight! link SpellLocal SpellCap highlight! link LineNr Comment highlight! link NonText NonText highlight! link DiffDelete Comment -highlight! link diffRemoved Comment highlight! link VisualNOS Visual highlight! link VertSplit VertSplit highlight! link Cursor StatusLine highlight! link Underlined SpellRare highlight! link rstEmphasis SpellRare -highlight! link diffChanged DiffChange diff --git a/vim/colors/campo-light-simple.vim b/vim/colors/campo-light-simple.vim index 5036381..7a810d8 100644 --- a/vim/colors/campo-light-simple.vim +++ b/vim/colors/campo-light-simple.vim @@ -1,5 +1,5 @@ " A simple light colorscheme. -" Maintainer: Michael Campagnaro +" Maintainer: Michael Campagnaro " Version: 1.0 " " Adapted from https://github.com/tek256/simple-dark @@ -81,8 +81,6 @@ highlight! link Todo Keyword highlight! link Label Keyword highlight! link Define Keyword highlight! link DiffAdd Keyword -highlight! link diffAdded Keyword -highlight! link diffCommon Keyword highlight! link Directory Keyword highlight! link PreCondit Keyword highlight! link PreProc Keyword @@ -102,10 +100,8 @@ highlight! link SpellLocal SpellCap highlight! link LineNr Comment highlight! link NonText NonText highlight! link DiffDelete Comment -highlight! link diffRemoved Comment highlight! link VisualNOS Visual highlight! link VertSplit VertSplit highlight! link Cursor StatusLine highlight! link Underlined SpellRare highlight! link rstEmphasis SpellRare -highlight! link diffChanged DiffChange diff --git a/vim/colors/campo-light.vim b/vim/colors/campo-light.vim index 5594c87..cd4381b 100644 --- a/vim/colors/campo-light.vim +++ b/vim/colors/campo-light.vim @@ -377,9 +377,6 @@ if has("gui_running") || &t_Co == 88 || &t_Co == 256 call X("htmlScriptTag", s:blue, "", "") " Diff Highlighting - call X("diffAdded", "", s:green, "none") - call X("diffRemoved", "", s:red, "none") - call X("diffChanged", "", s:yellow, "none") call X("DiffAdd", s:window, s:green, "none") call X("DiffDelete", s:window, s:red, "none") call X("DiffChange", s:window, s:yellow, "none") diff --git a/vim/colors/utils b/vim/colors/utils new file mode 100644 index 0000000..47123c2 --- /dev/null +++ b/vim/colors/utils @@ -0,0 +1,209 @@ +" Hex color conversion functions are from https://github.com/vim-scripts/desert256.vim/blob/master/colors/desert256.vim + +" Returns an approximate grey index for the given grey level +function! GreyNumber(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 +function! GreyLevel(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 +function! GreyColor(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 +function! RGBNumber(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 +function! RGBLevel(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 +function! RGBColor(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 +function! Color(r, g, b) + " Get the closest grey + let l:gx = GreyNumber(a:r) + let l:gy = GreyNumber(a:g) + let l:gz = GreyNumber(a:b) + + " Get the closest colour + let l:x = RGBNumber(a:r) + let l:y = RGBNumber(a:g) + let l:z = RGBNumber(a:b) + + if l:gx == l:gy && l:gy == l:gz + " There are two possibilities + let l:dgr = GreyLevel(l:gx) - a:r + let l:dgg = GreyLevel(l:gy) - a:g + let l:dgb = GreyLevel(l:gz) - a:b + let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) + let l:dr = RGBLevel(l:gx) - a:r + let l:dg = RGBLevel(l:gy) - a:g + let l:db = RGBLevel(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 GreyColor(l:gx) + else + " Use the colour + return RGBColor(l:x, l:y, l:z) + endif + else + " Only one possibility + return RGBColor(l:x, l:y, l:z) + endif +endfun + +" Returns the palette index to approximate the 'rrggbb' hex string +function! RGB(rgb) + let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0 + let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0 + let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0 + + return Color(l:r, l:g, l:b) +endfun + +" Sets the highlighting for the given group +function! X(group, fg, bg, attr) + if a:fg != "" + exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . RGB(a:fg) + endif + if a:bg != "" + exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . RGB(a:bg) + endif + if a:attr != "" + exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr + endif +endfun +