comparison rc/vim-jellybeans @ 551:138ee2cd2179

Use jellybeans theme for vim. Better compat with plain terminal.
author nanaya <me@myconan.net>
date Tue, 14 Apr 2015 04:47:54 +0900
parents
children
comparison
equal deleted inserted replaced
550:4afbb88c7579 551:138ee2cd2179
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 " HTML
481
482 hi! link htmlTag Statement
483 hi! link htmlEndTag htmlTag
484 hi! link htmlTagName htmlTag
485
486 " XML
487
488 hi! link xmlTag Statement
489 hi! link xmlEndTag xmlTag
490 hi! link xmlTagName xmlTag
491 hi! link xmlEqual xmlTag
492 hi! link xmlEntity Special
493 hi! link xmlEntityPunct xmlEntity
494 hi! link xmlDocTypeDecl PreProc
495 hi! link xmlDocTypeKeyword PreProc
496 hi! link xmlProcessingDelim xmlAttrib
497
498 " Debugger.vim
499
500 call s:X("DbgCurrent","DEEBFE","345FA8","","White","DarkBlue")
501 call s:X("DbgBreakPt","","4F0037","","","DarkMagenta")
502
503 " vim-indent-guides
504
505 if !exists("g:indent_guides_auto_colors")
506 let g:indent_guides_auto_colors = 0
507 endif
508 call s:X("IndentGuidesOdd","","232323","","","")
509 call s:X("IndentGuidesEven","","1b1b1b","","","")
510
511 " Plugins, etc.
512
513 hi! link TagListFileName Directory
514 call s:X("PreciseJumpTarget","B9ED67","405026","","White","Green")
515
516 if !exists("g:jellybeans_background_color_256")
517 let g:jellybeans_background_color_256=233
518 end
519 " Manual overrides for 256-color terminals. Dark colors auto-map badly.
520 if !s:low_color
521 hi StatusLineNC ctermbg=235
522 hi Folded ctermbg=236
523 hi FoldColumn ctermbg=234
524 hi SignColumn ctermbg=236
525 hi CursorColumn ctermbg=234
526 hi CursorLine ctermbg=234
527 hi SpecialKey ctermbg=234
528 exec "hi NonText ctermbg=".g:jellybeans_background_color_256
529 exec "hi LineNr ctermbg=".g:jellybeans_background_color_256
530 hi DiffText ctermfg=81
531 exec "hi Normal ctermbg=".g:jellybeans_background_color_256
532 hi DbgBreakPt ctermbg=53
533 hi IndentGuidesOdd ctermbg=235
534 hi IndentGuidesEven ctermbg=234
535 endif
536
537 if exists("g:jellybeans_overrides")
538 fun! s:load_colors(defs)
539 for [l:group, l:v] in items(a:defs)
540 call s:X(l:group, get(l:v, 'guifg', ''), get(l:v, 'guibg', ''),
541 \ get(l:v, 'attr', ''),
542 \ get(l:v, 'ctermfg', ''), get(l:v, 'ctermbg', ''))
543 if !s:low_color
544 for l:prop in ['ctermfg', 'ctermbg']
545 let l:override_key = '256'.l:prop
546 if has_key(l:v, l:override_key)
547 exec "hi ".l:group." ".l:prop."=".l:v[l:override_key]
548 endif
549 endfor
550 endif
551 unlet l:group
552 unlet l:v
553 endfor
554 endfun
555 call s:load_colors(g:jellybeans_overrides)
556 delf s:load_colors
557 endif
558
559 " delete functions {{{
560 delf s:X
561 delf s:rgb
562 delf s:color
563 delf s:rgb_color
564 delf s:rgb_level
565 delf s:rgb_number
566 delf s:grey_color
567 delf s:grey_level
568 delf s:grey_number
569 " }}}