1 " Vim color file based on default GUI "darkblue" theme.
2 " Mangling for terminal code ripped from desert256.
5 " no guarantees for version 5.8 and below, but this makes it stop
12 let g:colors_name="darkblue256"
14 if has("gui_running") || &t_Co == 88 || &t_Co == 256
16 " returns an approximate grey index for the given grey level
17 fun <SID>grey_number(x)
44 let l:n = (a:x - 8) / 10
45 let l:m = (a:x - 8) % 10
55 " returns the actual grey level represented by the grey index
56 fun <SID>grey_level(n)
88 " returns the palette index for the given grey index
89 fun <SID>grey_color(n)
109 " returns an approximate color index for the given color level
110 fun <SID>rgb_number(x)
125 let l:n = (a:x - 55) / 40
126 let l:m = (a:x - 55) % 40
136 " returns the actual color level for the given color index
137 fun <SID>rgb_level(n)
152 return 55 + (a:n * 40)
157 " returns the palette index for the given R/G/B color indices
158 fun <SID>rgb_color(x, y, z)
160 return 16 + (a:x * 16) + (a:y * 4) + a:z
162 return 16 + (a:x * 36) + (a:y * 6) + a:z
166 " returns the palette index to approximate the given R/G/B color levels
167 fun <SID>color(r, g, b)
168 " get the closest grey
169 let l:gx = <SID>grey_number(a:r)
170 let l:gy = <SID>grey_number(a:g)
171 let l:gz = <SID>grey_number(a:b)
173 " get the closest color
174 let l:x = <SID>rgb_number(a:r)
175 let l:y = <SID>rgb_number(a:g)
176 let l:z = <SID>rgb_number(a:b)
178 if l:gx == l:gy && l:gy == l:gz
179 " there are two possibilities
180 let l:dgr = <SID>grey_level(l:gx) - a:r
181 let l:dgg = <SID>grey_level(l:gy) - a:g
182 let l:dgb = <SID>grey_level(l:gz) - a:b
183 let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
184 let l:dr = <SID>rgb_level(l:gx) - a:r
185 let l:dg = <SID>rgb_level(l:gy) - a:g
186 let l:db = <SID>rgb_level(l:gz) - a:b
187 let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
190 return <SID>grey_color(l:gx)
193 return <SID>rgb_color(l:x, l:y, l:z)
196 " only one possibility
197 return <SID>rgb_color(l:x, l:y, l:z)
201 " returns the palette index to approximate the 'rrggbb' hex string
203 let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0
204 let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0
205 let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0
207 return <SID>color(l:r, l:g, l:b)
210 " sets the highlighting for the given group
211 fun <SID>X(group, fg, bg, attr)
213 exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)
216 exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)
219 exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
223 call <SID>X("ErrorMsg", "ffffff", "287eff", "")
224 call <SID>X("Visual", "ffffff", "8080ff", "")
225 call <SID>X("VisualNOS", "", "8080ff", "underline")
226 call <SID>X("Todo", "d14a14", "1248d1", "")
227 call <SID>X("Search", "90fff0", "2050d0", "")
228 call <SID>X("IncSearch", "b0ffff", "2050d0", "")
229 call <SID>X("SpecialKey", "00ffff", "", "")
230 call <SID>X("Directory", "00ffff", "", "")
231 call <SID>X("Title", "ff00ff", "", "none")
232 call <SID>X("WarningMsg", "ff0000", "", "")
233 call <SID>X("WildMenu", "ffff00", "000000", "")
234 call <SID>X("ModeMsg", "22cce2", "", "")
235 call <SID>X("Question", "00ff00", "", "none")
236 call <SID>X("NonText", "0030ff", "", "")
237 call <SID>X("VertSplit", "000000", "a9a9a9", "none")
238 call <SID>X("Folded", "808080", "000040", "")
239 call <SID>X("FoldColumn", "808080", "000040", "")
240 call <SID>X("LineNr", "90f020", "", "")
241 call <SID>X("DiffAdd", "00008b", "", "")
242 call <SID>X("DiffChange", "8b008b", "", "")
243 call <SID>X("DiffDelete", "0000ff", "008b8b", "bold")
244 call <SID>X("DiffText", "", "ff0000", "bold")
245 call <SID>X("Cursor", "000000", "ffff00", "")
246 call <SID>X("lCursor", "000000", "ffffff", "")
247 call <SID>X("Comment", "80a0ff", "", "")
248 call <SID>X("Constant", "ffa0a0", "", "")
249 call <SID>X("Special", "ffa500", "", "")
250 call <SID>X("Identifier", "40ffff", "", "")
251 call <SID>X("Statement", "ffff60", "", "none")
252 call <SID>X("PreProc", "ff80ff", "", "none")
253 call <SID>X("Type", "60ff60", "", "none")
254 call <SID>X("Ignore", "ffffff", "", "")
257 " vim: set fdl=0 fdm=marker: