PageRenderTime 34ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/colors/jellybeans.vim

https://github.com/richo/jellybeans.vim
Vim Script | 551 lines | 386 code | 79 blank | 86 comment | 72 complexity | 66ee8aba69769f878794c02b72c8d824 MD5 | raw file
  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. set background=dark
  50. hi clear
  51. if exists("syntax_on")
  52. syntax reset
  53. endif
  54. let colors_name = "jellybeans"
  55. if has("gui_running") || &t_Co == 88 || &t_Co == 256
  56. let s:low_color = 0
  57. else
  58. let s:low_color = 1
  59. endif
  60. " Color approximation functions by Henry So, Jr. and David Liang {{{
  61. " Added to jellybeans.vim by Daniel Herbert
  62. " returns an approximate grey index for the given grey level
  63. fun! s:grey_number(x)
  64. if &t_Co == 88
  65. if a:x < 23
  66. return 0
  67. elseif a:x < 69
  68. return 1
  69. elseif a:x < 103
  70. return 2
  71. elseif a:x < 127
  72. return 3
  73. elseif a:x < 150
  74. return 4
  75. elseif a:x < 173
  76. return 5
  77. elseif a:x < 196
  78. return 6
  79. elseif a:x < 219
  80. return 7
  81. elseif a:x < 243
  82. return 8
  83. else
  84. return 9
  85. endif
  86. else
  87. if a:x < 14
  88. return 0
  89. else
  90. let l:n = (a:x - 8) / 10
  91. let l:m = (a:x - 8) % 10
  92. if l:m < 5
  93. return l:n
  94. else
  95. return l:n + 1
  96. endif
  97. endif
  98. endif
  99. endfun
  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. " returns the palette index for the given grey index
  133. fun! s:grey_color(n)
  134. if &t_Co == 88
  135. if a:n == 0
  136. return 16
  137. elseif a:n == 9
  138. return 79
  139. else
  140. return 79 + a:n
  141. endif
  142. else
  143. if a:n == 0
  144. return 16
  145. elseif a:n == 25
  146. return 231
  147. else
  148. return 231 + a:n
  149. endif
  150. endif
  151. endfun
  152. " returns an approximate color index for the given color level
  153. fun! s:rgb_number(x)
  154. if &t_Co == 88
  155. if a:x < 69
  156. return 0
  157. elseif a:x < 172
  158. return 1
  159. elseif a:x < 230
  160. return 2
  161. else
  162. return 3
  163. endif
  164. else
  165. if a:x < 75
  166. return 0
  167. else
  168. let l:n = (a:x - 55) / 40
  169. let l:m = (a:x - 55) % 40
  170. if l:m < 20
  171. return l:n
  172. else
  173. return l:n + 1
  174. endif
  175. endif
  176. endif
  177. endfun
  178. " returns the actual color level for the given color index
  179. fun! s:rgb_level(n)
  180. if &t_Co == 88
  181. if a:n == 0
  182. return 0
  183. elseif a:n == 1
  184. return 139
  185. elseif a:n == 2
  186. return 205
  187. else
  188. return 255
  189. endif
  190. else
  191. if a:n == 0
  192. return 0
  193. else
  194. return 55 + (a:n * 40)
  195. endif
  196. endif
  197. endfun
  198. " returns the palette index for the given R/G/B color indices
  199. fun! s:rgb_color(x, y, z)
  200. if &t_Co == 88
  201. return 16 + (a:x * 16) + (a:y * 4) + a:z
  202. else
  203. return 16 + (a:x * 36) + (a:y * 6) + a:z
  204. endif
  205. endfun
  206. " returns the palette index to approximate the given R/G/B color levels
  207. fun! s:color(r, g, b)
  208. " get the closest grey
  209. let l:gx = s:grey_number(a:r)
  210. let l:gy = s:grey_number(a:g)
  211. let l:gz = s:grey_number(a:b)
  212. " get the closest color
  213. let l:x = s:rgb_number(a:r)
  214. let l:y = s:rgb_number(a:g)
  215. let l:z = s:rgb_number(a:b)
  216. if l:gx == l:gy && l:gy == l:gz
  217. " there are two possibilities
  218. let l:dgr = s:grey_level(l:gx) - a:r
  219. let l:dgg = s:grey_level(l:gy) - a:g
  220. let l:dgb = s:grey_level(l:gz) - a:b
  221. let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
  222. let l:dr = s:rgb_level(l:gx) - a:r
  223. let l:dg = s:rgb_level(l:gy) - a:g
  224. let l:db = s:rgb_level(l:gz) - a:b
  225. let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
  226. if l:dgrey < l:drgb
  227. " use the grey
  228. return s:grey_color(l:gx)
  229. else
  230. " use the color
  231. return s:rgb_color(l:x, l:y, l:z)
  232. endif
  233. else
  234. " only one possibility
  235. return s:rgb_color(l:x, l:y, l:z)
  236. endif
  237. endfun
  238. " returns the palette index to approximate the 'rrggbb' hex string
  239. fun! s:rgb(rgb)
  240. let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0
  241. let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0
  242. let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0
  243. return s:color(l:r, l:g, l:b)
  244. endfun
  245. " sets the highlighting for the given group
  246. fun! s:X(group, fg, bg, attr, lcfg, lcbg)
  247. if s:low_color
  248. let l:fge = empty(a:lcfg)
  249. let l:bge = empty(a:lcbg)
  250. if !l:fge && !l:bge
  251. exec "hi ".a:group." ctermfg=".a:lcfg." ctermbg=".a:lcbg
  252. elseif !l:fge && l:bge
  253. exec "hi ".a:group." ctermfg=".a:lcfg." ctermbg=NONE"
  254. elseif l:fge && !l:bge
  255. exec "hi ".a:group." ctermfg=NONE ctermbg=".a:lcbg
  256. endif
  257. else
  258. let l:fge = empty(a:fg)
  259. let l:bge = empty(a:bg)
  260. if !l:fge && !l:bge
  261. exec "hi ".a:group." guifg=#".a:fg." guibg=#".a:bg." ctermfg=".s:rgb(a:fg)." ctermbg=".s:rgb(a:bg)
  262. elseif !l:fge && l:bge
  263. exec "hi ".a:group." guifg=#".a:fg." guibg=NONE ctermfg=".s:rgb(a:fg)." ctermbg=NONE"
  264. elseif l:fge && !l:bge
  265. exec "hi ".a:group." guifg=NONE guibg=#".a:bg." ctermfg=NONE ctermbg=".s:rgb(a:bg)
  266. endif
  267. endif
  268. if a:attr == ""
  269. exec "hi ".a:group." gui=none cterm=none"
  270. else
  271. let l:noitalic = join(filter(split(a:attr, ","), "v:val !=? 'italic'"), ",")
  272. if empty(l:noitalic)
  273. let l:noitalic = "none"
  274. endif
  275. exec "hi ".a:group." gui=".a:attr." cterm=".l:noitalic
  276. endif
  277. endfun
  278. " }}}
  279. if !exists("g:jellybeans_background_color")
  280. let g:jellybeans_background_color = "151515"
  281. end
  282. call s:X("Normal","e8e8d3",g:jellybeans_background_color,"","White","")
  283. set background=dark
  284. if !exists("g:jellybeans_use_lowcolor_black") || g:jellybeans_use_lowcolor_black
  285. let s:termBlack = "Black"
  286. else
  287. let s:termBlack = "Grey"
  288. endif
  289. if version >= 700
  290. call s:X("CursorLine","","1c1c1c","","",s:termBlack)
  291. call s:X("CursorColumn","","1c1c1c","","",s:termBlack)
  292. call s:X("MatchParen","ffffff","80a090","bold","","DarkCyan")
  293. call s:X("TabLine","000000","b0b8c0","italic","",s:termBlack)
  294. call s:X("TabLineFill","9098a0","","","",s:termBlack)
  295. call s:X("TabLineSel","000000","f0f0f0","italic,bold",s:termBlack,"White")
  296. " Auto-completion
  297. call s:X("Pmenu","ffffff","606060","","White",s:termBlack)
  298. call s:X("PmenuSel","101010","eeeeee","",s:termBlack,"White")
  299. endif
  300. call s:X("Visual","","404040","","",s:termBlack)
  301. call s:X("Cursor","","b0d0f0","","","")
  302. call s:X("LineNr","605958",g:jellybeans_background_color,"none",s:termBlack,"")
  303. call s:X("CursorLineNr","ccc5c4","","none","White","")
  304. call s:X("Comment","888888","","italic","Grey","")
  305. call s:X("Todo","c7c7c7","","bold","White",s:termBlack)
  306. call s:X("StatusLine","000000","dddddd","italic","","White")
  307. call s:X("StatusLineNC","ffffff","403c41","italic","White","Black")
  308. call s:X("VertSplit","777777","403c41","",s:termBlack,s:termBlack)
  309. call s:X("WildMenu","f0a0c0","302028","","Magenta","")
  310. call s:X("Folded","a0a8b0","384048","italic",s:termBlack,"")
  311. call s:X("FoldColumn","535D66","1f1f1f","","",s:termBlack)
  312. call s:X("SignColumn","777777","333333","","",s:termBlack)
  313. call s:X("ColorColumn","","000000","","",s:termBlack)
  314. call s:X("Title","70b950","","bold","Green","")
  315. call s:X("Constant","cf6a4c","","","Red","")
  316. call s:X("Special","799d6a","","","Green","")
  317. call s:X("Delimiter","668799","","","Grey","")
  318. call s:X("String","99ad6a","","","Green","")
  319. call s:X("StringDelimiter","556633","","","DarkGreen","")
  320. call s:X("Identifier","c6b6ee","","","LightCyan","")
  321. call s:X("Structure","8fbfdc","","","LightCyan","")
  322. call s:X("Function","fad07a","","","Yellow","")
  323. call s:X("Statement","8197bf","","","DarkBlue","")
  324. call s:X("PreProc","8fbfdc","","","LightBlue","")
  325. hi! link Operator Structure
  326. call s:X("Type","ffb964","","","Yellow","")
  327. call s:X("NonText","606060",g:jellybeans_background_color,"",s:termBlack,"")
  328. call s:X("SpecialKey","444444","1c1c1c","",s:termBlack,"")
  329. call s:X("Search","f0a0c0","302028","underline","Magenta","")
  330. call s:X("Directory","dad085","","","Yellow","")
  331. call s:X("ErrorMsg","","902020","","","DarkRed")
  332. hi! link Error ErrorMsg
  333. hi! link MoreMsg Special
  334. call s:X("Question","65C254","","","Green","")
  335. " Spell Checking
  336. call s:X("SpellBad","","902020","underline","","DarkRed")
  337. call s:X("SpellCap","","0000df","underline","","Blue")
  338. call s:X("SpellRare","","540063","underline","","DarkMagenta")
  339. call s:X("SpellLocal","","2D7067","underline","","Green")
  340. " Diff
  341. hi! link diffRemoved Constant
  342. hi! link diffAdded String
  343. " VimDiff
  344. call s:X("DiffAdd","D2EBBE","437019","","White","DarkGreen")
  345. call s:X("DiffDelete","40000A","700009","","DarkRed","DarkRed")
  346. call s:X("DiffChange","","2B5B77","","White","DarkBlue")
  347. call s:X("DiffText","8fbfdc","000000","reverse","Yellow","")
  348. " PHP
  349. hi! link phpFunctions Function
  350. call s:X("StorageClass","c59f6f","","","Red","")
  351. hi! link phpSuperglobal Identifier
  352. hi! link phpQuoteSingle StringDelimiter
  353. hi! link phpQuoteDouble StringDelimiter
  354. hi! link phpBoolean Constant
  355. hi! link phpNull Constant
  356. hi! link phpArrayPair Operator
  357. hi! link phpOperator Normal
  358. hi! link phpRelation Normal
  359. hi! link phpVarSelector Identifier
  360. " Python
  361. hi! link pythonOperator Statement
  362. " Ruby
  363. hi! link rubySharpBang Comment
  364. call s:X("rubyClass","447799","","","DarkBlue","")
  365. call s:X("rubyIdentifier","c6b6fe","","","Cyan","")
  366. hi! link rubyConstant Type
  367. hi! link rubyFunction Function
  368. call s:X("rubyInstanceVariable","c6b6fe","","","Cyan","")
  369. call s:X("rubySymbol","7697d6","","","Blue","")
  370. hi! link rubyGlobalVariable rubyInstanceVariable
  371. hi! link rubyModule rubyClass
  372. call s:X("rubyControl","7597c6","","","Blue","")
  373. hi! link rubyString String
  374. hi! link rubyStringDelimiter StringDelimiter
  375. hi! link rubyInterpolationDelimiter Identifier
  376. call s:X("rubyRegexpDelimiter","540063","","","Magenta","")
  377. call s:X("rubyRegexp","dd0093","","","DarkMagenta","")
  378. call s:X("rubyRegexpSpecial","a40073","","","Magenta","")
  379. call s:X("rubyPredefinedIdentifier","de5577","","","Red","")
  380. " Erlang
  381. hi! link erlangAtom rubySymbol
  382. hi! link erlangBIF rubyPredefinedIdentifier
  383. hi! link erlangFunction rubyPredefinedIdentifier
  384. hi! link erlangDirective Statement
  385. hi! link erlangNode Identifier
  386. " JavaScript
  387. hi! link javaScriptValue Constant
  388. hi! link javaScriptRegexpString rubyRegexp
  389. " CoffeeScript
  390. hi! link coffeeRegExp javaScriptRegexpString
  391. " Lua
  392. hi! link luaOperator Conditional
  393. " C
  394. hi! link cFormat Identifier
  395. hi! link cOperator Constant
  396. " Objective-C/Cocoa
  397. hi! link objcClass Type
  398. hi! link cocoaClass objcClass
  399. hi! link objcSubclass objcClass
  400. hi! link objcSuperclass objcClass
  401. hi! link objcDirective rubyClass
  402. hi! link objcStatement Constant
  403. hi! link cocoaFunction Function
  404. hi! link objcMethodName Identifier
  405. hi! link objcMethodArg Normal
  406. hi! link objcMessageName Identifier
  407. " Vimscript
  408. hi! link vimOper Normal
  409. " Debugger.vim
  410. call s:X("DbgCurrent","DEEBFE","345FA8","","White","DarkBlue")
  411. call s:X("DbgBreakPt","","4F0037","","","DarkMagenta")
  412. " vim-indent-guides
  413. if !exists("g:indent_guides_auto_colors")
  414. let g:indent_guides_auto_colors = 0
  415. endif
  416. call s:X("IndentGuidesOdd","","232323","","","")
  417. call s:X("IndentGuidesEven","","1b1b1b","","","")
  418. " Plugins, etc.
  419. hi! link TagListFileName Directory
  420. call s:X("PreciseJumpTarget","B9ED67","405026","","White","Green")
  421. if !exists("g:jellybeans_background_color_256")
  422. let g:jellybeans_background_color_256=233
  423. end
  424. " Manual overrides for 256-color terminals. Dark colors auto-map badly.
  425. if !s:low_color
  426. hi StatusLineNC ctermbg=235
  427. hi Folded ctermbg=236
  428. hi FoldColumn ctermbg=234
  429. hi SignColumn ctermbg=236
  430. hi CursorColumn ctermbg=234
  431. hi CursorLine ctermbg=234
  432. hi SpecialKey ctermbg=234
  433. exec "hi NonText ctermbg=".g:jellybeans_background_color_256
  434. exec "hi LineNr ctermbg=".g:jellybeans_background_color_256
  435. hi DiffText ctermfg=81
  436. exec "hi Normal ctermbg=".g:jellybeans_background_color_256
  437. hi DbgBreakPt ctermbg=53
  438. hi IndentGuidesOdd ctermbg=235
  439. hi IndentGuidesEven ctermbg=234
  440. endif
  441. if exists("g:jellybeans_overrides")
  442. fun! s:load_colors(defs)
  443. for [l:group, l:v] in items(a:defs)
  444. call s:X(l:group, get(l:v, 'guifg', ''), get(l:v, 'guibg', ''),
  445. \ get(l:v, 'attr', ''),
  446. \ get(l:v, 'ctermfg', ''), get(l:v, 'ctermbg', ''))
  447. if !s:low_color
  448. for l:prop in ['ctermfg', 'ctermbg']
  449. let l:override_key = '256'.l:prop
  450. if has_key(l:v, l:override_key)
  451. exec "hi ".l:group." ".l:prop."=".l:v[l:override_key]
  452. endif
  453. endfor
  454. endif
  455. unlet l:group
  456. unlet l:v
  457. endfor
  458. endfun
  459. call s:load_colors(g:jellybeans_overrides)
  460. delf s:load_colors
  461. endif
  462. " delete functions {{{
  463. delf s:X
  464. delf s:rgb
  465. delf s:color
  466. delf s:rgb_color
  467. delf s:rgb_level
  468. delf s:rgb_number
  469. delf s:grey_color
  470. delf s:grey_level
  471. delf s:grey_number
  472. " }}}