]> git.r.bdr.sh - rbdr/dotfiles/blob - vim/colors/desert256.vim
Add my zshrc
[rbdr/dotfiles] / vim / colors / desert256.vim
1 " Vim color file
2 " Maintainer: Henry So, Jr. <henryso@panix.com>
3
4 " These are the colors of the "desert" theme by Hans Fugal with a few small
5 " modifications (namely that I lowered the intensity of the normal white and
6 " made the normal and nontext backgrounds black), modified to work with 88-
7 " and 256-color xterms.
8 "
9 " The original "desert" theme is available as part of the vim distribution or
10 " at http://hans.fugal.net/vim/colors/.
11 "
12 " The real feature of this color scheme, with a wink to the "inkpot" theme, is
13 " the programmatic approximation of the gui colors to the palettes of 88- and
14 " 256- color xterms. The functions that do this (folded away, for
15 " readability) are calibrated to the colors used for Thomas E. Dickey's xterm
16 " (version 200), which is available at http://dickey.his.com/xterm/xterm.html.
17 "
18 " I struggled with trying to parse the rgb.txt file to avoid the necessity of
19 " converting color names to #rrggbb form, but decided it was just not worth
20 " the effort. Maybe someone seeing this may decide otherwise...
21
22 set background=dark
23 if version > 580
24 " no guarantees for version 5.8 and below, but this makes it stop
25 " complaining
26 hi clear
27 if exists("syntax_on")
28 syntax reset
29 endif
30 endif
31 let g:colors_name="desert256"
32
33 if has("gui_running") || &t_Co == 88 || &t_Co == 256
34 " functions {{{
35 " returns an approximate grey index for the given grey level
36 fun <SID>grey_number(x)
37 if &t_Co == 88
38 if a:x < 23
39 return 0
40 elseif a:x < 69
41 return 1
42 elseif a:x < 103
43 return 2
44 elseif a:x < 127
45 return 3
46 elseif a:x < 150
47 return 4
48 elseif a:x < 173
49 return 5
50 elseif a:x < 196
51 return 6
52 elseif a:x < 219
53 return 7
54 elseif a:x < 243
55 return 8
56 else
57 return 9
58 endif
59 else
60 if a:x < 14
61 return 0
62 else
63 let l:n = (a:x - 8) / 10
64 let l:m = (a:x - 8) % 10
65 if l:m < 5
66 return l:n
67 else
68 return l:n + 1
69 endif
70 endif
71 endif
72 endfun
73
74 " returns the actual grey level represented by the grey index
75 fun <SID>grey_level(n)
76 if &t_Co == 88
77 if a:n == 0
78 return 0
79 elseif a:n == 1
80 return 46
81 elseif a:n == 2
82 return 92
83 elseif a:n == 3
84 return 115
85 elseif a:n == 4
86 return 139
87 elseif a:n == 5
88 return 162
89 elseif a:n == 6
90 return 185
91 elseif a:n == 7
92 return 208
93 elseif a:n == 8
94 return 231
95 else
96 return 255
97 endif
98 else
99 if a:n == 0
100 return 0
101 else
102 return 8 + (a:n * 10)
103 endif
104 endif
105 endfun
106
107 " returns the palette index for the given grey index
108 fun <SID>grey_color(n)
109 if &t_Co == 88
110 if a:n == 0
111 return 16
112 elseif a:n == 9
113 return 79
114 else
115 return 79 + a:n
116 endif
117 else
118 if a:n == 0
119 return 16
120 elseif a:n == 25
121 return 231
122 else
123 return 231 + a:n
124 endif
125 endif
126 endfun
127
128 " returns an approximate color index for the given color level
129 fun <SID>rgb_number(x)
130 if &t_Co == 88
131 if a:x < 69
132 return 0
133 elseif a:x < 172
134 return 1
135 elseif a:x < 230
136 return 2
137 else
138 return 3
139 endif
140 else
141 if a:x < 75
142 return 0
143 else
144 let l:n = (a:x - 55) / 40
145 let l:m = (a:x - 55) % 40
146 if l:m < 20
147 return l:n
148 else
149 return l:n + 1
150 endif
151 endif
152 endif
153 endfun
154
155 " returns the actual color level for the given color index
156 fun <SID>rgb_level(n)
157 if &t_Co == 88
158 if a:n == 0
159 return 0
160 elseif a:n == 1
161 return 139
162 elseif a:n == 2
163 return 205
164 else
165 return 255
166 endif
167 else
168 if a:n == 0
169 return 0
170 else
171 return 55 + (a:n * 40)
172 endif
173 endif
174 endfun
175
176 " returns the palette index for the given R/G/B color indices
177 fun <SID>rgb_color(x, y, z)
178 if &t_Co == 88
179 return 16 + (a:x * 16) + (a:y * 4) + a:z
180 else
181 return 16 + (a:x * 36) + (a:y * 6) + a:z
182 endif
183 endfun
184
185 " returns the palette index to approximate the given R/G/B color levels
186 fun <SID>color(r, g, b)
187 " get the closest grey
188 let l:gx = <SID>grey_number(a:r)
189 let l:gy = <SID>grey_number(a:g)
190 let l:gz = <SID>grey_number(a:b)
191
192 " get the closest color
193 let l:x = <SID>rgb_number(a:r)
194 let l:y = <SID>rgb_number(a:g)
195 let l:z = <SID>rgb_number(a:b)
196
197 if l:gx == l:gy && l:gy == l:gz
198 " there are two possibilities
199 let l:dgr = <SID>grey_level(l:gx) - a:r
200 let l:dgg = <SID>grey_level(l:gy) - a:g
201 let l:dgb = <SID>grey_level(l:gz) - a:b
202 let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
203 let l:dr = <SID>rgb_level(l:gx) - a:r
204 let l:dg = <SID>rgb_level(l:gy) - a:g
205 let l:db = <SID>rgb_level(l:gz) - a:b
206 let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
207 if l:dgrey < l:drgb
208 " use the grey
209 return <SID>grey_color(l:gx)
210 else
211 " use the color
212 return <SID>rgb_color(l:x, l:y, l:z)
213 endif
214 else
215 " only one possibility
216 return <SID>rgb_color(l:x, l:y, l:z)
217 endif
218 endfun
219
220 " returns the palette index to approximate the 'rrggbb' hex string
221 fun <SID>rgb(rgb)
222 let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0
223 let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0
224 let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0
225
226 return <SID>color(l:r, l:g, l:b)
227 endfun
228
229 " sets the highlighting for the given group
230 fun <SID>X(group, fg, bg, attr)
231 if a:fg != ""
232 exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)
233 endif
234 if a:bg != ""
235 exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)
236 endif
237 if a:attr != ""
238 exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
239 endif
240 endfun
241 " }}}
242
243 call <SID>X("Normal", "cccccc", "000000", "")
244
245 " highlight groups
246 call <SID>X("Cursor", "708090", "f0e68c", "")
247 "CursorIM
248 "Directory
249 "DiffAdd
250 "DiffChange
251 "DiffDelete
252 "DiffText
253 "ErrorMsg
254 call <SID>X("VertSplit", "c2bfa5", "7f7f7f", "reverse")
255 call <SID>X("Folded", "ffd700", "4d4d4d", "")
256 call <SID>X("FoldColumn", "d2b48c", "4d4d4d", "")
257 call <SID>X("IncSearch", "708090", "f0e68c", "")
258 "LineNr
259 call <SID>X("ModeMsg", "daa520", "", "")
260 call <SID>X("MoreMsg", "2e8b57", "", "")
261 call <SID>X("NonText", "addbe7", "000000", "bold")
262 call <SID>X("Question", "00ff7f", "", "")
263 call <SID>X("Search", "f5deb3", "cd853f", "")
264 call <SID>X("SpecialKey", "9acd32", "", "")
265 call <SID>X("StatusLine", "c2bfa5", "000000", "reverse")
266 call <SID>X("StatusLineNC", "c2bfa5", "7f7f7f", "reverse")
267 call <SID>X("Title", "cd5c5c", "", "")
268 call <SID>X("Visual", "6b8e23", "f0e68c", "reverse")
269 "VisualNOS
270 call <SID>X("WarningMsg", "fa8072", "", "")
271 "WildMenu
272 "Menu
273 "Scrollbar
274 "Tooltip
275
276 " syntax highlighting groups
277 call <SID>X("Comment", "87ceeb", "", "")
278 call <SID>X("Constant", "ffa0a0", "", "")
279 call <SID>X("Identifier", "98fb98", "", "none")
280 call <SID>X("Statement", "f0e68c", "", "bold")
281 call <SID>X("PreProc", "cd5c5c", "", "")
282 call <SID>X("Type", "bdb76b", "", "bold")
283 call <SID>X("Special", "ffdead", "", "")
284 "Underlined
285 call <SID>X("Ignore", "666666", "", "")
286 "Error
287 call <SID>X("Todo", "ff4500", "eeee00", "")
288
289 " delete functions {{{
290 delf <SID>X
291 delf <SID>rgb
292 delf <SID>color
293 delf <SID>rgb_color
294 delf <SID>rgb_level
295 delf <SID>rgb_number
296 delf <SID>grey_color
297 delf <SID>grey_level
298 delf <SID>grey_number
299 " }}}
300 else
301 " color terminal definitions
302 hi SpecialKey ctermfg=darkgreen
303 hi NonText cterm=bold ctermfg=darkblue
304 hi Directory ctermfg=darkcyan
305 hi ErrorMsg cterm=bold ctermfg=7 ctermbg=1
306 hi IncSearch cterm=NONE ctermfg=yellow ctermbg=green
307 hi Search cterm=NONE ctermfg=grey ctermbg=blue
308 hi MoreMsg ctermfg=darkgreen
309 hi ModeMsg cterm=NONE ctermfg=brown
310 hi LineNr ctermfg=3
311 hi Question ctermfg=green
312 hi StatusLine cterm=bold,reverse
313 hi StatusLineNC cterm=reverse
314 hi VertSplit cterm=reverse
315 hi Title ctermfg=5
316 hi Visual cterm=reverse
317 hi VisualNOS cterm=bold,underline
318 hi WarningMsg ctermfg=1
319 hi WildMenu ctermfg=0 ctermbg=3
320 hi Folded ctermfg=darkgrey ctermbg=NONE
321 hi FoldColumn ctermfg=darkgrey ctermbg=NONE
322 hi DiffAdd ctermbg=4
323 hi DiffChange ctermbg=5
324 hi DiffDelete cterm=bold ctermfg=4 ctermbg=6
325 hi DiffText cterm=bold ctermbg=1
326 hi Comment ctermfg=darkcyan
327 hi Constant ctermfg=brown
328 hi Special ctermfg=5
329 hi Identifier ctermfg=6
330 hi Statement ctermfg=3
331 hi PreProc ctermfg=5
332 hi Type ctermfg=2
333 hi Underlined cterm=underline ctermfg=5
334 hi Ignore ctermfg=darkgrey
335 hi Error cterm=bold ctermfg=7 ctermbg=1
336 endif
337
338 " vim: set fdl=0 fdm=marker: