themes.vim 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. " MIT License. Copyright (c) 2013-2021 Bailey Ling et al.
  2. " vim: et ts=2 sts=2 sw=2 et
  3. scriptencoding utf-8
  4. if !exists(":def") || !airline#util#has_vim9_script()
  5. " Legacy Vim Script Implementation
  6. " generates a dictionary which defines the colors for each highlight group
  7. function! airline#themes#generate_color_map(sect1, sect2, sect3, ...)
  8. let palette = {
  9. \ 'airline_a': [ a:sect1[0] , a:sect1[1] , a:sect1[2] , a:sect1[3] , get(a:sect1 , 4 , '') ] ,
  10. \ 'airline_b': [ a:sect2[0] , a:sect2[1] , a:sect2[2] , a:sect2[3] , get(a:sect2 , 4 , '') ] ,
  11. \ 'airline_c': [ a:sect3[0] , a:sect3[1] , a:sect3[2] , a:sect3[3] , get(a:sect3 , 4 , '') ] ,
  12. \ }
  13. if a:0 > 0
  14. call extend(palette, {
  15. \ 'airline_x': [ a:1[0] , a:1[1] , a:1[2] , a:1[3] , get(a:1 , 4 , '' ) ] ,
  16. \ 'airline_y': [ a:2[0] , a:2[1] , a:2[2] , a:2[3] , get(a:2 , 4 , '' ) ] ,
  17. \ 'airline_z': [ a:3[0] , a:3[1] , a:3[2] , a:3[3] , get(a:3 , 4 , '' ) ] ,
  18. \ })
  19. else
  20. call extend(palette, {
  21. \ 'airline_x': [ a:sect3[0] , a:sect3[1] , a:sect3[2] , a:sect3[3] , '' ] ,
  22. \ 'airline_y': [ a:sect2[0] , a:sect2[1] , a:sect2[2] , a:sect2[3] , '' ] ,
  23. \ 'airline_z': [ a:sect1[0] , a:sect1[1] , a:sect1[2] , a:sect1[3] , '' ] ,
  24. \ })
  25. endif
  26. return palette
  27. endfunction
  28. function! airline#themes#get_highlight(group, ...)
  29. return call('airline#highlighter#get_highlight', [a:group] + a:000)
  30. endfunction
  31. function! airline#themes#get_highlight2(fg, bg, ...)
  32. return call('airline#highlighter#get_highlight2', [a:fg, a:bg] + a:000)
  33. endfunction
  34. function! airline#themes#patch(palette)
  35. for mode in keys(a:palette)
  36. if mode == 'accents'
  37. continue
  38. endif
  39. if !has_key(a:palette[mode], 'airline_warning')
  40. let a:palette[mode]['airline_warning'] = [ '#000000', '#df5f00', 232, 166 ]
  41. endif
  42. if !has_key(a:palette[mode], 'airline_error')
  43. let a:palette[mode]['airline_error'] = [ '#000000', '#990000', 232, 160 ]
  44. endif
  45. if !has_key(a:palette[mode], 'airline_term')
  46. let a:palette[mode]['airline_term'] = [ '#9cffd3', '#202020', 85, 232]
  47. endif
  48. endfor
  49. let a:palette.accents = get(a:palette, 'accents', {})
  50. let a:palette.accents.none = [ '', '', '', '', '' ]
  51. let a:palette.accents.bold = [ '', '', '', '', 'bold' ]
  52. let a:palette.accents.italic = [ '', '', '', '', 'italic' ]
  53. if !has_key(a:palette.accents, 'red')
  54. let a:palette.accents.red = [ '#ff0000' , '' , 160 , '' ]
  55. endif
  56. if !has_key(a:palette.accents, 'green')
  57. let a:palette.accents.green = [ '#008700' , '' , 22 , '' ]
  58. endif
  59. if !has_key(a:palette.accents, 'blue')
  60. let a:palette.accents.blue = [ '#005fff' , '' , 27 , '' ]
  61. endif
  62. if !has_key(a:palette.accents, 'yellow')
  63. let a:palette.accents.yellow = [ '#dfff00' , '' , 190 , '' ]
  64. endif
  65. if !has_key(a:palette.accents, 'orange')
  66. let a:palette.accents.orange = [ '#df5f00' , '' , 166 , '' ]
  67. endif
  68. if !has_key(a:palette.accents, 'purple')
  69. let a:palette.accents.purple = [ '#af00df' , '' , 128 , '' ]
  70. endif
  71. endfunction
  72. finish
  73. else
  74. " New Vim9 Script Implementation
  75. def airline#themes#generate_color_map(sect1: list<any>, sect2: list<any>, sect3: list<any>, ...rest: list<any>): dict<any>
  76. # all sections should be string
  77. for section in [sect1, sect2, sect3] + rest
  78. map(section, (_, v) => type(v) != type('') ? string(v) : v)
  79. endfor
  80. var palette = {
  81. 'airline_a': [ sect1[0], sect1[1], sect1[2], sect1[3], get(sect1, 4, '') ],
  82. 'airline_b': [ sect2[0], sect2[1], sect2[2], sect2[3], get(sect2, 4, '') ],
  83. 'airline_c': [ sect3[0], sect3[1], sect3[2], sect3[3], get(sect3, 4, '') ],
  84. }
  85. if rest->len() > 0
  86. extend(palette, {
  87. 'airline_x': [ rest[0][0], rest[0][1], rest[0][2], rest[0][3], get(rest[0], 4, '' ) ],
  88. 'airline_y': [ rest[1][0], rest[1][1], rest[1][2], rest[1][3], get(rest[1], 4, '' ) ],
  89. 'airline_z': [ rest[2][0], rest[2][1], rest[2][2], rest[2][3], get(rest[2], 4, '' ) ],
  90. })
  91. else
  92. extend(palette, {
  93. 'airline_x': [ sect3[0], sect3[1], sect3[2], sect3[3], '' ],
  94. 'airline_y': [ sect2[0], sect2[1], sect2[2], sect2[3], '' ],
  95. 'airline_z': [ sect1[0], sect1[1], sect1[2], sect1[3], '' ],
  96. })
  97. endif
  98. return palette
  99. enddef
  100. def airline#themes#get_highlight(group: string, ...modifiers: list<string>): list<string>
  101. return call('airline#highlighter#get_highlight', [group, modifiers])
  102. enddef
  103. def airline#themes#get_highlight2(fg: list<string>, bg: list<string>, ...modifiers: list<string>): list<string>
  104. return call('airline#highlighter#get_highlight2', [fg, bg] + modifiers)
  105. enddef
  106. def airline#themes#patch(palette: dict<any>): void
  107. for mode in keys(palette)
  108. if mode == 'accents'
  109. continue
  110. endif
  111. if !has_key(palette[mode], 'airline_warning')
  112. extend(palette[mode], {airline_warning: [ '#000000', '#df5f00', '232', '166' ]})
  113. endif
  114. if !has_key(palette[mode], 'airline_error')
  115. extend(palette[mode], {airline_error: [ '#000000', '#990000', '232', '160' ]})
  116. endif
  117. if !has_key(palette[mode], 'airline_term')
  118. extend(palette[mode], {airline_term: [ '#9cffd3', '#202020', '85', '232' ]})
  119. endif
  120. endfor
  121. palette.accents = get(palette, 'accents', {})
  122. extend(palette.accents, {none: [ '', '', '', '', '' ]})
  123. extend(palette.accents, {bold: [ '', '', '', '', 'bold' ]})
  124. extend(palette.accents, {italic: [ '', '', '', '', 'italic' ]})
  125. if !has_key(palette.accents, 'red')
  126. extend(palette.accents, {red: [ '#ff0000', '', '160', '' ]})
  127. endif
  128. if !has_key(palette.accents, 'green')
  129. extend(palette.accents, {green: [ '#008700', '', '22', '' ]})
  130. endif
  131. if !has_key(palette.accents, 'blue')
  132. extend(palette.accents, {blue: [ '#005fff', '', '27', '' ]})
  133. endif
  134. if !has_key(palette.accents, 'yellow')
  135. extend(palette.accents, {yellow: [ '#dfff00', '', '190', '' ]})
  136. endif
  137. if !has_key(palette.accents, 'orange')
  138. extend(palette.accents, {orange: [ '#df5f00', '', '166', '' ]})
  139. endif
  140. if !has_key(palette.accents, 'purple')
  141. extend(palette.accents, {purple: [ '#af00df', '', '128', '' ]})
  142. endif
  143. enddef
  144. endif