]>
Commit | Line | Data |
---|---|---|
0d23b6e5 BB |
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: |