.vim/colors/jellybeans.vim

changeset 1
727a469263f2
child 863
c1b4166611ed
equal deleted inserted replaced
0:5346d22cd9a9 1:727a469263f2
1 " Vim color file
2 "
3 " " __ _ _ _ "
4 " " \ \ ___| | |_ _| |__ ___ __ _ _ __ ___ "
5 " " \ \/ _ \ | | | | | _ \ / _ \/ _ | _ \/ __| "
6 " " /\_/ / __/ | | |_| | |_| | __/ |_| | | | \__ \ "
7 " " \___/ \___|_|_|\__ |____/ \___|\____|_| |_|___/ "
8 " " \___/ "
9 "
10 " "A colorful, dark color scheme for Vim."
11 "
12 " File: jellybeans.vim
13 " URL: github.com/nanotech/jellybeans.vim
14 " Scripts URL: vim.org/scripts/script.php?script_id=2555
15 " Maintainer: NanoTech (nanotech.nanotechcorp.net)
16 " Version: 1.6~git
17 " Last Change: January 15th, 2012
18 " License: MIT
19 " Contributors: Daniel Herbert (pocketninja)
20 " Henry So, Jr. <henryso@panix.com>
21 " David Liang <bmdavll at gmail dot com>
22 " Rich Healey (richo)
23 " Andrew Wong (w0ng)
24 "
25 " Copyright (c) 2009-2012 NanoTech
26 "
27 " Permission is hereby granted, free of charge, to any per‐
28 " son obtaining a copy of this software and associated doc‐
29 " umentation files (the “Software”), to deal in the Soft‐
30 " ware without restriction, including without limitation
31 " the rights to use, copy, modify, merge, publish, distrib‐
32 " ute, sublicense, and/or sell copies of the Software, and
33 " to permit persons to whom the Software is furnished to do
34 " so, subject to the following conditions:
35 "
36 " The above copyright notice and this permission notice
37 " shall be included in all copies or substantial portions
38 " of the Software.
39 "
40 " THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY
41 " KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
42 " THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICU‐
43 " LAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
44 " AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
45 " DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CON‐
46 " TRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON‐
47 " NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
48 " THE SOFTWARE.
49
50 set background=dark
51
52 hi clear
53
54 if exists("syntax_on")
55 syntax reset
56 endif
57
58 let colors_name = "jellybeans"
59
60 if has("gui_running") || &t_Co == 88 || &t_Co == 256
61 let s:low_color = 0
62 else
63 let s:low_color = 1
64 endif
65
66 " Color approximation functions by Henry So, Jr. and David Liang {{{
67 " Added to jellybeans.vim by Daniel Herbert
68
69 " returns an approximate grey index for the given grey level
70 fun! s:grey_number(x)
71 if &t_Co == 88
72 if a:x < 23
73 return 0
74 elseif a:x < 69
75 return 1
76 elseif a:x < 103
77 return 2
78 elseif a:x < 127
79 return 3
80 elseif a:x < 150
81 return 4
82 elseif a:x < 173
83 return 5
84 elseif a:x < 196
85 return 6
86 elseif a:x < 219
87 return 7
88 elseif a:x < 243
89 return 8
90 else
91 return 9
92 endif
93 else
94 if a:x < 14
95 return 0
96 else
97 let l:n = (a:x - 8) / 10
98 let l:m = (a:x - 8) % 10
99 if l:m < 5
100 return l:n
101 else
102 return l:n + 1
103 endif
104 endif
105 endif
106 endfun
107
108 " returns the actual grey level represented by the grey index
109 fun! s:grey_level(n)
110 if &t_Co == 88
111 if a:n == 0
112 return 0
113 elseif a:n == 1
114 return 46
115 elseif a:n == 2
116 return 92
117 elseif a:n == 3
118 return 115
119 elseif a:n == 4
120 return 139
121 elseif a:n == 5
122 return 162
123 elseif a:n == 6
124 return 185
125 elseif a:n == 7
126 return 208
127 elseif a:n == 8
128 return 231
129 else
130 return 255
131 endif
132 else
133 if a:n == 0
134 return 0
135 else
136 return 8 + (a:n * 10)
137 endif
138 endif
139 endfun
140
141 " returns the palette index for the given grey index
142 fun! s:grey_color(n)
143 if &t_Co == 88
144 if a:n == 0
145 return 16
146 elseif a:n == 9
147 return 79
148 else
149 return 79 + a:n
150 endif
151 else
152 if a:n == 0
153 return 16
154 elseif a:n == 25
155 return 231
156 else
157 return 231 + a:n
158 endif
159 endif
160 endfun
161
162 " returns an approximate color index for the given color level
163 fun! s:rgb_number(x)
164 if &t_Co == 88
165 if a:x < 69
166 return 0
167 elseif a:x < 172
168 return 1
169 elseif a:x < 230
170 return 2
171 else
172 return 3
173 endif
174 else
175 if a:x < 75
176 return 0
177 else
178 let l:n = (a:x - 55) / 40
179 let l:m = (a:x - 55) % 40
180 if l:m < 20
181 return l:n
182 else
183 return l:n + 1
184 endif
185 endif
186 endif
187 endfun
188
189 " returns the actual color level for the given color index
190 fun! s:rgb_level(n)
191 if &t_Co == 88
192 if a:n == 0
193 return 0
194 elseif a:n == 1
195 return 139
196 elseif a:n == 2
197 return 205
198 else
199 return 255
200 endif
201 else
202 if a:n == 0
203 return 0
204 else
205 return 55 + (a:n * 40)
206 endif
207 endif
208 endfun
209
210 " returns the palette index for the given R/G/B color indices
211 fun! s:rgb_color(x, y, z)
212 if &t_Co == 88
213 return 16 + (a:x * 16) + (a:y * 4) + a:z
214 else
215 return 16 + (a:x * 36) + (a:y * 6) + a:z
216 endif
217 endfun
218
219 " returns the palette index to approximate the given R/G/B color levels
220 fun! s:color(r, g, b)
221 " get the closest grey
222 let l:gx = s:grey_number(a:r)
223 let l:gy = s:grey_number(a:g)
224 let l:gz = s:grey_number(a:b)
225
226 " get the closest color
227 let l:x = s:rgb_number(a:r)
228 let l:y = s:rgb_number(a:g)
229 let l:z = s:rgb_number(a:b)
230
231 if l:gx == l:gy && l:gy == l:gz
232 " there are two possibilities
233 let l:dgr = s:grey_level(l:gx) - a:r
234 let l:dgg = s:grey_level(l:gy) - a:g
235 let l:dgb = s:grey_level(l:gz) - a:b
236 let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
237 let l:dr = s:rgb_level(l:gx) - a:r
238 let l:dg = s:rgb_level(l:gy) - a:g
239 let l:db = s:rgb_level(l:gz) - a:b
240 let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
241 if l:dgrey < l:drgb
242 " use the grey
243 return s:grey_color(l:gx)
244 else
245 " use the color
246 return s:rgb_color(l:x, l:y, l:z)
247 endif
248 else
249 " only one possibility
250 return s:rgb_color(l:x, l:y, l:z)
251 endif
252 endfun
253
254 " returns the palette index to approximate the 'rrggbb' hex string
255 fun! s:rgb(rgb)
256 let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0
257 let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0
258 let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0
259 return s:color(l:r, l:g, l:b)
260 endfun
261
262 " sets the highlighting for the given group
263 fun! s:X(group, fg, bg, attr, lcfg, lcbg)
264 if s:low_color
265 let l:fge = empty(a:lcfg)
266 let l:bge = empty(a:lcbg)
267
268 if !l:fge && !l:bge
269 exec "hi ".a:group." ctermfg=".a:lcfg." ctermbg=".a:lcbg
270 elseif !l:fge && l:bge
271 exec "hi ".a:group." ctermfg=".a:lcfg." ctermbg=NONE"
272 elseif l:fge && !l:bge
273 exec "hi ".a:group." ctermfg=NONE ctermbg=".a:lcbg
274 endif
275 else
276 let l:fge = empty(a:fg)
277 let l:bge = empty(a:bg)
278
279 if !l:fge && !l:bge
280 exec "hi ".a:group." guifg=#".a:fg." guibg=#".a:bg." ctermfg=".s:rgb(a:fg)." ctermbg=".s:rgb(a:bg)
281 elseif !l:fge && l:bge
282 exec "hi ".a:group." guifg=#".a:fg." guibg=NONE ctermfg=".s:rgb(a:fg)." ctermbg=NONE"
283 elseif l:fge && !l:bge
284 exec "hi ".a:group." guifg=NONE guibg=#".a:bg." ctermfg=NONE ctermbg=".s:rgb(a:bg)
285 endif
286 endif
287
288 if a:attr == ""
289 exec "hi ".a:group." gui=none cterm=none"
290 else
291 let l:noitalic = join(filter(split(a:attr, ","), "v:val !=? 'italic'"), ",")
292 if empty(l:noitalic)
293 let l:noitalic = "none"
294 endif
295 exec "hi ".a:group." gui=".a:attr." cterm=".l:noitalic
296 endif
297 endfun
298 " }}}
299
300 if !exists("g:jellybeans_background_color")
301 let g:jellybeans_background_color = "151515"
302 end
303
304 call s:X("Normal","e8e8d3",g:jellybeans_background_color,"","White","")
305 set background=dark
306
307 if !exists("g:jellybeans_use_lowcolor_black") || g:jellybeans_use_lowcolor_black
308 let s:termBlack = "Black"
309 else
310 let s:termBlack = "Grey"
311 endif
312
313 if version >= 700
314 call s:X("CursorLine","","1c1c1c","","",s:termBlack)
315 call s:X("CursorColumn","","1c1c1c","","",s:termBlack)
316 call s:X("MatchParen","ffffff","556779","bold","","DarkCyan")
317
318 call s:X("TabLine","000000","b0b8c0","italic","",s:termBlack)
319 call s:X("TabLineFill","9098a0","","","",s:termBlack)
320 call s:X("TabLineSel","000000","f0f0f0","italic,bold",s:termBlack,"White")
321
322 " Auto-completion
323 call s:X("Pmenu","ffffff","606060","","White",s:termBlack)
324 call s:X("PmenuSel","101010","eeeeee","",s:termBlack,"White")
325 endif
326
327 call s:X("Visual","","404040","","",s:termBlack)
328 call s:X("Cursor",g:jellybeans_background_color,"b0d0f0","","","")
329
330 call s:X("LineNr","605958",g:jellybeans_background_color,"none",s:termBlack,"")
331 call s:X("CursorLineNr","ccc5c4","","none","White","")
332 call s:X("Comment","888888","","italic","Grey","")
333 call s:X("Todo","c7c7c7","","bold","White",s:termBlack)
334
335 call s:X("StatusLine","000000","dddddd","italic","","White")
336 call s:X("StatusLineNC","ffffff","403c41","italic","White","Black")
337 call s:X("VertSplit","777777","403c41","",s:termBlack,s:termBlack)
338 call s:X("WildMenu","f0a0c0","302028","","Magenta","")
339
340 call s:X("Folded","a0a8b0","384048","italic",s:termBlack,"")
341 call s:X("FoldColumn","535D66","1f1f1f","","",s:termBlack)
342 call s:X("SignColumn","777777","333333","","",s:termBlack)
343 call s:X("ColorColumn","","000000","","",s:termBlack)
344
345 call s:X("Title","70b950","","bold","Green","")
346
347 call s:X("Constant","cf6a4c","","","Red","")
348 call s:X("Special","799d6a","","","Green","")
349 call s:X("Delimiter","668799","","","Grey","")
350
351 call s:X("String","99ad6a","","","Green","")
352 call s:X("StringDelimiter","556633","","","DarkGreen","")
353
354 call s:X("Identifier","c6b6ee","","","LightCyan","")
355 call s:X("Structure","8fbfdc","","","LightCyan","")
356 call s:X("Function","fad07a","","","Yellow","")
357 call s:X("Statement","8197bf","","","DarkBlue","")
358 call s:X("PreProc","8fbfdc","","","LightBlue","")
359
360 hi! link Operator Structure
361
362 call s:X("Type","ffb964","","","Yellow","")
363 call s:X("NonText","606060",g:jellybeans_background_color,"",s:termBlack,"")
364
365 call s:X("SpecialKey","444444","1c1c1c","",s:termBlack,"")
366
367 call s:X("Search","f0a0c0","302028","underline","Magenta","")
368
369 call s:X("Directory","dad085","","","Yellow","")
370 call s:X("ErrorMsg","","902020","","","DarkRed")
371 hi! link Error ErrorMsg
372 hi! link MoreMsg Special
373 call s:X("Question","65C254","","","Green","")
374
375
376 " Spell Checking
377
378 call s:X("SpellBad","","902020","underline","","DarkRed")
379 call s:X("SpellCap","","0000df","underline","","Blue")
380 call s:X("SpellRare","","540063","underline","","DarkMagenta")
381 call s:X("SpellLocal","","2D7067","underline","","Green")
382
383 " Diff
384
385 hi! link diffRemoved Constant
386 hi! link diffAdded String
387
388 " VimDiff
389
390 call s:X("DiffAdd","D2EBBE","437019","","White","DarkGreen")
391 call s:X("DiffDelete","40000A","700009","","DarkRed","DarkRed")
392 call s:X("DiffChange","","2B5B77","","White","DarkBlue")
393 call s:X("DiffText","8fbfdc","000000","reverse","Yellow","")
394
395 " PHP
396
397 hi! link phpFunctions Function
398 call s:X("StorageClass","c59f6f","","","Red","")
399 hi! link phpSuperglobal Identifier
400 hi! link phpQuoteSingle StringDelimiter
401 hi! link phpQuoteDouble StringDelimiter
402 hi! link phpBoolean Constant
403 hi! link phpNull Constant
404 hi! link phpArrayPair Operator
405 hi! link phpOperator Normal
406 hi! link phpRelation Normal
407 hi! link phpVarSelector Identifier
408
409 " Python
410
411 hi! link pythonOperator Statement
412
413 " Ruby
414
415 hi! link rubySharpBang Comment
416 call s:X("rubyClass","447799","","","DarkBlue","")
417 call s:X("rubyIdentifier","c6b6fe","","","Cyan","")
418 hi! link rubyConstant Type
419 hi! link rubyFunction Function
420
421 call s:X("rubyInstanceVariable","c6b6fe","","","Cyan","")
422 call s:X("rubySymbol","7697d6","","","Blue","")
423 hi! link rubyGlobalVariable rubyInstanceVariable
424 hi! link rubyModule rubyClass
425 call s:X("rubyControl","7597c6","","","Blue","")
426
427 hi! link rubyString String
428 hi! link rubyStringDelimiter StringDelimiter
429 hi! link rubyInterpolationDelimiter Identifier
430
431 call s:X("rubyRegexpDelimiter","540063","","","Magenta","")
432 call s:X("rubyRegexp","dd0093","","","DarkMagenta","")
433 call s:X("rubyRegexpSpecial","a40073","","","Magenta","")
434
435 call s:X("rubyPredefinedIdentifier","de5577","","","Red","")
436
437 " Erlang
438
439 hi! link erlangAtom rubySymbol
440 hi! link erlangBIF rubyPredefinedIdentifier
441 hi! link erlangFunction rubyPredefinedIdentifier
442 hi! link erlangDirective Statement
443 hi! link erlangNode Identifier
444
445 " JavaScript
446
447 hi! link javaScriptValue Constant
448 hi! link javaScriptRegexpString rubyRegexp
449
450 " CoffeeScript
451
452 hi! link coffeeRegExp javaScriptRegexpString
453
454 " Lua
455
456 hi! link luaOperator Conditional
457
458 " C
459
460 hi! link cFormat Identifier
461 hi! link cOperator Constant
462
463 " Objective-C/Cocoa
464
465 hi! link objcClass Type
466 hi! link cocoaClass objcClass
467 hi! link objcSubclass objcClass
468 hi! link objcSuperclass objcClass
469 hi! link objcDirective rubyClass
470 hi! link objcStatement Constant
471 hi! link cocoaFunction Function
472 hi! link objcMethodName Identifier
473 hi! link objcMethodArg Normal
474 hi! link objcMessageName Identifier
475
476 " Vimscript
477
478 hi! link vimOper Normal
479
480 " Debugger.vim
481
482 call s:X("DbgCurrent","DEEBFE","345FA8","","White","DarkBlue")
483 call s:X("DbgBreakPt","","4F0037","","","DarkMagenta")
484
485 " vim-indent-guides
486
487 if !exists("g:indent_guides_auto_colors")
488 let g:indent_guides_auto_colors = 0
489 endif
490 call s:X("IndentGuidesOdd","","232323","","","")
491 call s:X("IndentGuidesEven","","1b1b1b","","","")
492
493 " Plugins, etc.
494
495 hi! link TagListFileName Directory
496 call s:X("PreciseJumpTarget","B9ED67","405026","","White","Green")
497
498 if !exists("g:jellybeans_background_color_256")
499 let g:jellybeans_background_color_256=233
500 end
501 " Manual overrides for 256-color terminals. Dark colors auto-map badly.
502 if !s:low_color
503 hi StatusLineNC ctermbg=235
504 hi Folded ctermbg=236
505 hi FoldColumn ctermbg=234
506 hi SignColumn ctermbg=236
507 hi CursorColumn ctermbg=234
508 hi CursorLine ctermbg=234
509 hi SpecialKey ctermbg=234
510 exec "hi NonText ctermbg=".g:jellybeans_background_color_256
511 exec "hi LineNr ctermbg=".g:jellybeans_background_color_256
512 hi DiffText ctermfg=81
513 exec "hi Normal ctermbg=".g:jellybeans_background_color_256
514 hi DbgBreakPt ctermbg=53
515 hi IndentGuidesOdd ctermbg=235
516 hi IndentGuidesEven ctermbg=234
517 endif
518
519 if exists("g:jellybeans_overrides")
520 fun! s:load_colors(defs)
521 for [l:group, l:v] in items(a:defs)
522 call s:X(l:group, get(l:v, 'guifg', ''), get(l:v, 'guibg', ''),
523 \ get(l:v, 'attr', ''),
524 \ get(l:v, 'ctermfg', ''), get(l:v, 'ctermbg', ''))
525 if !s:low_color
526 for l:prop in ['ctermfg', 'ctermbg']
527 let l:override_key = '256'.l:prop
528 if has_key(l:v, l:override_key)
529 exec "hi ".l:group." ".l:prop."=".l:v[l:override_key]
530 endif
531 endfor
532 endif
533 unlet l:group
534 unlet l:v
535 endfor
536 endfun
537 call s:load_colors(g:jellybeans_overrides)
538 delf s:load_colors
539 endif
540
541 " delete functions {{{
542 delf s:X
543 delf s:rgb
544 delf s:color
545 delf s:rgb_color
546 delf s:rgb_level
547 delf s:rgb_number
548 delf s:grey_color
549 delf s:grey_level
550 delf s:grey_number
551 " }}}

mercurial