1 " Mangling for terminal code ripped from desert256.
4 " no guarantees for version 5.8 and below, but this makes it stop
11 let g:colors_name="iain"
13 if has("gui_running") || &t_Co == 88 || &t_Co == 256
15 " returns an approximate grey index for the given grey level
16 fun! <SID>grey_number(x)
43 let l:n = (a:x - 8) / 10
44 let l:m = (a:x - 8) % 10
54 " returns the actual grey level represented by the grey index
55 fun! <SID>grey_level(n)
87 " returns the palette index for the given grey index
88 fun! <SID>grey_color(n)
108 " returns an approximate color index for the given color level
109 fun! <SID>rgb_number(x)
124 let l:n = (a:x - 55) / 40
125 let l:m = (a:x - 55) % 40
135 " returns the actual color level for the given color index
136 fun! <SID>rgb_level(n)
151 return 55 + (a:n * 40)
156 " returns the palette index for the given R/G/B color indices
157 fun! <SID>rgb_color(x, y, z)
159 return 16 + (a:x * 16) + (a:y * 4) + a:z
161 return 16 + (a:x * 36) + (a:y * 6) + a:z
165 " returns the palette index to approximate the given R/G/B color levels
166 fun! <SID>color(r, g, b)
167 " get the closest grey
168 let l:gx = <SID>grey_number(a:r)
169 let l:gy = <SID>grey_number(a:g)
170 let l:gz = <SID>grey_number(a:b)
172 " get the closest color
173 let l:x = <SID>rgb_number(a:r)
174 let l:y = <SID>rgb_number(a:g)
175 let l:z = <SID>rgb_number(a:b)
177 if l:gx == l:gy && l:gy == l:gz
178 " there are two possibilities
179 let l:dgr = <SID>grey_level(l:gx) - a:r
180 let l:dgg = <SID>grey_level(l:gy) - a:g
181 let l:dgb = <SID>grey_level(l:gz) - a:b
182 let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
183 let l:dr = <SID>rgb_level(l:gx) - a:r
184 let l:dg = <SID>rgb_level(l:gy) - a:g
185 let l:db = <SID>rgb_level(l:gz) - a:b
186 let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
189 return <SID>grey_color(l:gx)
192 return <SID>rgb_color(l:x, l:y, l:z)
195 " only one possibility
196 return <SID>rgb_color(l:x, l:y, l:z)
200 " returns the palette index to approximate the 'rrggbb' hex string
202 let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0
203 let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0
204 let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0
206 return <SID>color(l:r, l:g, l:b)
209 " sets the highlighting for the given group
210 fun! <SID>X(group, fg, bg, attr)
211 " Our dark grey ends up being too light when Vim is run inside screen
212 " on an 88-colour urxvt.
213 let l:hackgrey = "#303030"
214 let l:hackterm = "^screen-256color"
219 let l:fg = <SID>rgb(substitute(a:fg, '^#', '', ''))
220 if a:fg == l:hackgrey && &term =~ l:hackterm && l:fg == l:hackbad
221 let l:fg = l:hackgood
226 exec "hi " . a:group . " guifg=" . a:fg . " ctermfg=" . l:fg
230 let l:bg = <SID>rgb(substitute(a:bg, '^#', '', ''))
231 if a:bg == l:hackgrey && &term =~ l:hackterm && l:bg == l:hackbad
232 let l:bg = l:hackgood
237 exec "hi " . a:group . " guibg=" . a:bg . " ctermbg=" . l:bg
240 exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
245 call <SID>X("ErrorMsg", "#ffffff", "#287eff", "")
246 call <SID>X("Visual", "#ffffff", "#8080ff", "")
247 call <SID>X("VisualNOS", "", "#8080ff", "underline")
248 "call <SID>X("Todo", "#d14a14", "#1248d1", "")
249 call <SID>X("Search", "#ffffff", "#2050d0", "")
250 call <SID>X("IncSearch", "#b0ffff", "#2050d0", "")
251 "call <SID>X("SpecialKey", "#00ffff", "", "")
252 call <SID>X("Directory", "#008bff", "", "")
253 call <SID>X("Title", "#ff00ff", "", "none")
254 call <SID>X("WarningMsg", "#ff0000", "", "")
255 "call <SID>X("WildMenu", "#ffff00", "#000000", "")
256 call <SID>X("ModeMsg", "#22cce2", "", "")
257 call <SID>X("Question", "#00ff00", "", "none")
258 "call <SID>X("NonText", "#0030ff", "", "")
259 call <SID>X("VertSplit", "#000000", "#808080", "none")
260 call <SID>X("Folded", "#808080", "#303030", "")
261 call <SID>X("FoldColumn", "#808080", "#303030", "")
262 call <SID>X("LineNr", "#90f020", "#303030", "")
263 call <SID>X("DiffAdd", "", "#008bff", "")
264 call <SID>X("DiffChange", "", "#8b008b", "")
265 call <SID>X("DiffDelete", "#008b8b", "#303030", "")
266 call <SID>X("DiffText", "#ffffff", "#ff0000", "none")
267 call <SID>X("Cursor", "#000000", "#00ff00", "")
268 call <SID>X("CursorLine", "", "#2e2e2e", "none")
269 call <SID>X("lCursor", "#000000", "#ffffff", "")
270 "call <SID>X("Comment", "#80a0ff", "", "")
271 "call <SID>X("Constant", "#ffa0a0", "", "")
272 "call <SID>X("Special", "#ffa500", "", "")
273 "call <SID>X("Identifier", "#40ffff", "", "")
274 "call <SID>X("Statement", "#ffff60", "", "none")
275 "call <SID>X("PreProc", "#ff80ff", "", "none")
276 "call <SID>X("Type", "#60ff60", "", "none")
277 call <SID>X("Ignore", "#ffffff", "", "")
280 hi def Normal guifg=#c0c0c0 guibg=#000020
282 call <SID>X("StatusLineNC", "black", "#808080", "none")
283 call <SID>X("StatusLine", "white", "#000080", "none")
284 call <SID>X("User1", "white", "#000080", "bold")
285 call <SID>X("WildMenu", "blue", "white", "bold")
286 call <SID>X("Todo", "black", "green", "bold")
287 call <SID>X("MoreMsg", "#00ff00", "", "none")
289 call <SID>X("Repeat", "yellow", "", "none")
290 call <SID>X("Label", "#90f020", "", "none")
291 call <SID>X("Conditional", "#ffff60", "", "none")
292 call <SID>X("Operator", "#e0e000", "", "none")
293 call <SID>X("Statement", "#ffff00", "", "none")
295 hi! link TabLineSel StatusLine
296 hi! link TabLine StatusLineNC
298 hi! link CursorColumn CursorLine
300 hi MatchParen ctermbg=blue
302 call <SID>X("Pmenu", "#ffffff", "#287eff", "")
304 hi Comment ctermfg=lightblue cterm=none guifg=#80a0ff gui=none
306 call <SID>X("Function", "darkgreen", "", "none")
307 call <SID>X("Identifier", "#40ffff", "", "none")
309 hi Character ctermfg=darkmagenta cterm=bold guifg=magenta gui=bold
310 hi String ctermfg=darkmagenta cterm=none guifg=magenta gui=none
311 call <SID>X("Float", "magenta", "", "none")
312 call <SID>X("Number", "magenta", "", "bold")
313 call <SID>X("Boolean", "darkred", "", "bold")
314 call <SID>X("Constant", "darkmagenta", "", "bold")
315 hi NonText ctermfg=blue cterm=none guifg=blue gui=none
317 call <SID>X("SpecialChar", "#ff0000", "", "none")
318 hi SpecialKey ctermfg=blue cterm=none guifg=blue gui=none
319 call <SID>X("Special", "#ff0000", "", "none")
321 call <SID>X("Include", "red", "", "none")
322 call <SID>X("Macro", "red", "", "none")
323 call <SID>X("PreCondit", "darkred", "", "none")
324 call <SID>X("PreProc", "darkred", "", "bold")
326 hi StorageClass ctermfg=green cterm=none guifg=lightgreen gui=none
327 hi Structure ctermfg=darkgreen cterm=bold guifg=green gui=bold
328 hi Type ctermfg=darkgreen cterm=none guifg=green gui=none
330 " Fix up shell stuff. XXX: Should this go in ~/.vim/after/syntax/sh.vim?
331 hi link shShellVariables Identifier
335 " Signs to highlight marks.
336 call <SID>X("MarkLine", "", "#303030", "")
337 call <SID>X("MarkDot", "red", "#303030", "")
338 call <SID>X("MarkSign", "lightblue", "#303030", "")
339 hi! link SignColumn LineNr
341 " Fix up NERDTree stuff.
342 hi link treeExecFile Type
343 hi treeLink cterm=none ctermfg=cyan gui=none guifg=cyan
344 hi link treeOpenable treeDirSlash
345 hi link treeClosable treeDirSlash
346 hi link treePart treeDirSlash
347 hi link treePartFile treeDirSlash
349 " Fix up BufExplorer stuff.
350 hi link bufExplorerHelp String
351 hi link bufExplorerSortBy Statement
352 hi link bufExplorerMapping Identifier
353 hi link bufExplorerTitle Statement
354 hi link bufExplorerActBuf Directory
355 hi link bufExplorerAltBuf String
356 hi link bufExplorerCurBuf Type
357 hi link bufExplorerUnlBuf Comment
358 hi link bufExplorerBufNbr Normal
361 " vim: set fdl=0 fdm=marker: