" Vim color file " Maintainer: Kenta Murata " These are the color theme designed by mrkn based on "desert256" theme " created by Henry So, Jr. This theme is designed to work with with 88- " and 256-color xterms. " " The ancestor version "desert256" theme is available at " http://www.vim.org/scripts/script.php?script_id=1243 " " The real feature of this color scheme, with a wink to the "inkpot" theme, is " the programmatic approximation of the gui colors to the palettes of 88- and " 256- color xterms. The functions that do this (folded away, for " readability) are calibrated to the colors used for Thomas E. Dickey's xterm " (version 200), which is available at http://dickey.his.com/xterm/xterm.html. " " Henry had struggled with trying to parse the rgb.txt file to avoid the " necessity of converting color names to #rrggbb form, but decided it was just " not worth the effort. I thank a lot for his results. set background=dark if version > 580 " no guarantees for version 5.8 and below, but this makes it stop " complaining hi clear if exists("syntax_on") syntax reset endif endif let g:colors_name="mrkn256" if has("gui_running") || &t_Co == 88 || &t_Co == 256 " functions {{{ " returns an approximate grey index for the given grey level function! 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 function! 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 function! grey_color(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 color index for the given color level function! 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 color level for the given color index function! 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 color indices function! rgb_color(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 color levels function! color(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) " get the closest color let l:x = rgb_number(a:r) let l:y = rgb_number(a:g) let l:z = rgb_number(a:b) 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_color(l:gx) else " use the color return rgb_color(l:x, l:y, l:z) endif else " only one possibility return rgb_color(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 " }}} call X("Normal", "cccccc", "000000", "") " highlight groups call X("Cursor", "708090", "f0e68c", "") "CursorIM call X("CursorColumn", "", "333333", "none") call X("CursorLine", "", "333333", "underline") "Directory "DiffAdd "DiffChange "DiffDelete "DiffText "ErrorMsg call X("VertSplit", "666666", "000000", "none") call X("Folded", "ffd700", "4d4d4d", "") call X("FoldColumn", "d2b48c", "4d4d4d", "") call X("IncSearch", "708090", "f0e68c", "") call X("LineNr", "666666", "", "none") call X("ModeMsg", "daa520", "", "") call X("MoreMsg", "2e8b57", "", "") call X("NonText", "666699", "", "none") call X("Question", "00ff7f", "", "") call X("Search", "f5deb3", "cd853f", "") call X("SpecialKey", "666699", "", "none") call X("StatusLine", "ffffff", "666666", "none") call X("StatusLineNC", "000000", "666666", "none") call X("Title", "cd5c5c", "", "") call X("Visual", "6b8e23", "f0e68c", "reverse") "VisualNOS call X("WarningMsg", "fa8072", "", "") "WildMenu "Menu "Scrollbar "Tooltip call X("Pmenu", "cccccc", "333333", "none") call X("PmenuSel", "663333", "cccccc", "bold") " call X("PmenuSbar", "", "", "") " call X("PmenuThumb", "", "", "") " syntax highlighting groups call X("Comment", "87ceeb", "", "") call X("Constant", "ffcc66", "", "") call X("Identifier", "99ff00", "", "none") call X("Statement", "6699ff", "", "none") call X("PreProc", "ff6666", "", "") call X("Type", "ffcc66", "", "none") call X("Special", "ffdead", "", "") "Underlined call X("Ignore", "666666", "", "") "Error call X("Todo", "ff4500", "eeee00", "") " delete functions {{{ delf X delf rgb delf color delf rgb_color delf rgb_level delf rgb_number delf grey_color delf grey_level delf grey_number " }}} else " color terminal definitions hi SpecialKey ctermfg=darkgreen hi NonText cterm=bold ctermfg=darkblue hi Directory ctermfg=darkcyan hi ErrorMsg cterm=bold ctermfg=7 ctermbg=1 hi IncSearch cterm=NONE ctermfg=yellow ctermbg=green hi Search cterm=NONE ctermfg=grey ctermbg=blue hi MoreMsg ctermfg=darkgreen hi ModeMsg cterm=NONE ctermfg=brown hi LineNr ctermfg=3 hi Question ctermfg=green hi StatusLine cterm=bold,reverse hi StatusLineNC cterm=reverse hi VertSplit cterm=reverse hi Title ctermfg=5 hi Visual cterm=reverse hi VisualNOS cterm=bold,underline hi WarningMsg ctermfg=1 hi WildMenu ctermfg=0 ctermbg=3 hi Folded ctermfg=darkgrey ctermbg=NONE hi FoldColumn ctermfg=darkgrey ctermbg=NONE hi DiffAdd ctermbg=4 hi DiffChange ctermbg=5 hi DiffDelete cterm=bold ctermfg=4 ctermbg=6 hi DiffText cterm=bold ctermbg=1 hi Comment ctermfg=darkcyan hi Constant ctermfg=brown hi Special ctermfg=5 hi Identifier ctermfg=6 hi Statement ctermfg=3 hi PreProc ctermfg=5 hi Type ctermfg=2 hi Underlined cterm=underline ctermfg=5 hi Ignore ctermfg=darkgrey hi Error cterm=bold ctermfg=7 ctermbg=1 endif " vim: set fdl=0 fdm=marker: