" Mangling for terminal code ripped from desert256. 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="iain" if has("gui_running") || &t_Co == 88 || &t_Co == 256 " functions {{{ " 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 " 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 " returns the palette index for the given grey index fun! 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 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 " returns the actual color level for the given color 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 " returns the palette index for the given R/G/B color indices fun! 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 fun! 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 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 return color(l:r, l:g, l:b) endfun " sets the highlighting for the given group fun! X(group, fg, bg, attr) " Our dark grey ends up being too light when Vim is run inside screen " on an 88-colour urxvt. let l:hackgrey = "#303030" let l:hackterm = "^screen-256color" let l:hackbad = 235 let l:hackgood = 234 if a:fg != "" if a:fg =~ '^#' let l:fg = rgb(substitute(a:fg, '^#', '', '')) if a:fg == l:hackgrey && &term =~ l:hackterm && l:fg == l:hackbad let l:fg = l:hackgood endif else let l:fg=a:fg endif exec "hi " . a:group . " guifg=" . a:fg . " ctermfg=" . l:fg endif if a:bg != "" if a:bg =~ '^#' let l:bg = rgb(substitute(a:bg, '^#', '', '')) if a:bg == l:hackgrey && &term =~ l:hackterm && l:bg == l:hackbad let l:bg = l:hackgood endif else let l:bg=a:bg endif exec "hi " . a:group . " guibg=" . a:bg . " ctermbg=" . l:bg endif if a:attr != "" exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr endif endfun " }}} " From darkblue. call X("ErrorMsg", "#ffffff", "#287eff", "") call X("Visual", "#ffffff", "#8080ff", "") call X("VisualNOS", "", "#8080ff", "underline") "call X("Todo", "#d14a14", "#1248d1", "") call X("Search", "#ffffff", "#2050d0", "") call X("IncSearch", "#b0ffff", "#2050d0", "") "call X("SpecialKey", "#00ffff", "", "") call X("Directory", "#008bff", "", "") call X("Title", "#ff00ff", "", "none") call X("WarningMsg", "#ff0000", "", "") "call X("WildMenu", "#ffff00", "#000000", "") call X("ModeMsg", "#22cce2", "", "") call X("Question", "#00ff00", "", "none") "call X("NonText", "#0030ff", "", "") call X("VertSplit", "#000000", "#808080", "none") call X("Folded", "#808080", "#303030", "") call X("FoldColumn", "#808080", "#303030", "") call X("LineNr", "#90f020", "#303030", "") call X("CursorLineNr", "#303030", "#90f020", "none") call X("DiffAdd", "", "#008bff", "") call X("DiffChange", "", "#8b008b", "") call X("DiffDelete", "#008b8b", "#303030", "") call X("DiffText", "#ffffff", "#ff0000", "none") call X("Cursor", "#000000", "#00ff00", "") call X("CursorLine", "", "#2e2e2e", "none") call X("ColorColumn", "", "#2e2e2e", "none") call X("lCursor", "#000000", "#ffffff", "") "call X("Comment", "#80a0ff", "", "") "call X("Constant", "#ffa0a0", "", "") "call X("Special", "#ffa500", "", "") "call X("Identifier", "#40ffff", "", "") "call X("Statement", "#ffff60", "", "none") "call X("PreProc", "#ff80ff", "", "none") "call X("Type", "#60ff60", "", "none") call X("Ignore", "#ffffff", "", "") call X("TabLineFill", "#303030", "#90f020", "") " My stuff. hi def Normal guifg=#c0c0c0 guibg=#000020 call X("StatusLineNC", "black", "#808080", "none") call X("StatusLine", "white", "#000080", "none") call X("User1", "white", "#000080", "bold") call X("WildMenu", "blue", "white", "bold") call X("Todo", "black", "green", "bold") call X("MoreMsg", "#00ff00", "", "none") call X("Repeat", "yellow", "", "none") call X("Label", "#90f020", "", "none") call X("Conditional", "#ffff60", "", "none") call X("Operator", "#e0e000", "", "none") call X("Statement", "#ffff00", "", "none") hi! link TabLineSel StatusLine hi! link TabLine StatusLineNC hi clear CursorLine hi MatchParen ctermbg=blue call X("Pmenu", "#ffffff", "#287eff", "") hi Comment ctermfg=lightblue cterm=none guifg=#80a0ff gui=none call X("Function", "darkgreen", "", "none") call X("Identifier", "#40ffff", "", "none") hi Character ctermfg=darkmagenta cterm=bold guifg=magenta gui=bold hi String ctermfg=darkmagenta cterm=none guifg=magenta gui=none call X("Float", "magenta", "", "none") call X("Number", "magenta", "", "bold") call X("Boolean", "darkred", "", "bold") call X("Constant", "darkmagenta", "", "bold") hi NonText ctermfg=blue cterm=none guifg=blue gui=none call X("SpecialChar", "#ff0000", "", "none") hi SpecialKey ctermfg=blue cterm=none guifg=blue gui=none call X("Special", "#ff0000", "", "none") call X("Include", "red", "", "none") call X("Macro", "red", "", "none") call X("PreCondit", "darkred", "", "none") call X("PreProc", "darkred", "", "bold") hi StorageClass ctermfg=green cterm=none guifg=lightgreen gui=none hi Structure ctermfg=darkgreen cterm=bold guifg=green gui=bold hi Type ctermfg=darkgreen cterm=none guifg=green gui=none " Fix up shell stuff. XXX: Should this go in ~/.vim/after/syntax/sh.vim? hi link shShellVariables Identifier " Fix up Perl stuff. " Signs to highlight marks. call X("MarkLine", "", "#303030", "") call X("MarkDot", "red", "#303030", "") call X("MarkSign", "lightblue", "#303030", "") call X("MarkArrow", "#00ff00", "#303030", "") hi! link SignColumn LineNr " Fix up NERDTree stuff. hi link treeExecFile Type hi treeLink cterm=none ctermfg=cyan gui=none guifg=cyan hi link treeOpenable treeDirSlash hi link treeClosable treeDirSlash hi link treePart treeDirSlash hi link treePartFile treeDirSlash " Fix up BufExplorer stuff. hi link bufExplorerHelp Include hi link bufExplorerSortBy Include hi link bufExplorerMapping Identifier hi link bufExplorerTitle Statement hi link bufExplorerActBuf Directory hi link bufExplorerAltBuf Type hi link bufExplorerCurBuf Statement hi link bufExplorerHidBuf Comment hi link bufExplorerUnlBuf String hi link bufExplorerBufNbr Normal endif " vim: set fdl=0 fdm=marker: