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