diff --git a/autoload/airline.vim b/autoload/airline.vim index fac171eb..5cea812b 100644 --- a/autoload/airline.vim +++ b/autoload/airline.vim @@ -12,6 +12,7 @@ endfunction function! airline#switch_theme(name) let g:airline_theme = a:name let palette = g:airline#themes#{g:airline_theme}#palette "also lazy loads the theme + call airline#themes#patch(palette) let w:airline_lastmode = '' call airline#update_statusline() diff --git a/autoload/airline/themes.vim b/autoload/airline/themes.vim index 9f385d9d..cee14b2c 100644 --- a/autoload/airline/themes.vim +++ b/autoload/airline/themes.vim @@ -1,19 +1,14 @@ -" MIT license. Copyright (c) 2013 Bailey Ling. +" MIT License. Copyright (c) 2013 Bailey Ling. " vim: ts=2 sts=2 sw=2 fdm=indent " generates a dictionary which defines the colors for each highlight group function! airline#themes#generate_color_map(section1, section2, section3, file) - " provide matching background colors if not provided - let file = copy(a:file) - if file[1] == '' | let file[1] = a:section3[1] | endif - if file[3] == '' | let file[3] = a:section3[3] | endif - " guifg guibg ctermfg ctermbg gui/term return { - \ 'airline_a': [ a:section1[0] , a:section1[1] , a:section1[2] , a:section1[3] , get(a:section1, 4, 'bold') ] , - \ 'airline_b': [ a:section2[0] , a:section2[1] , a:section2[2] , a:section2[3] , get(a:section2, 4, '' ) ] , - \ 'airline_c': [ a:section3[0] , a:section3[1] , a:section3[2] , a:section3[3] , get(a:section3, 4, '' ) ] , - \ 'airline_file': [ file[0] , file[1] , file[2] , file[3] , get(file , 4, '' ) ] , + \ 'airline_a': [ a:section1[0] , a:section1[1] , a:section1[2] , a:section1[3] , get(a:section1 , 4 , 'bold') ] , + \ 'airline_b': [ a:section2[0] , a:section2[1] , a:section2[2] , a:section2[3] , get(a:section2 , 4 , '' ) ] , + \ 'airline_c': [ a:section3[0] , a:section3[1] , a:section3[2] , a:section3[3] , get(a:section3 , 4 , '' ) ] , + \ 'airline_file': [ a:file[0] , a:file[1] , a:file[2] , a:file[3] , get(a:file , 4 , '' ) ] , \ } endfunction @@ -54,3 +49,24 @@ function! airline#themes#get_highlight2(fg, bg, ...) return s:get_array(fg, bg, a:000) endfunction +function! airline#themes#patch(palette) + " this is a pretty heavy handed, but it works... + " basically, look for the 'airline_file' group and copy the bg + " colors from 'airline_c' into it. + for mode in keys(a:palette) + let overrides = split(mode, '_') + if len(overrides) > 1 + let mode_colors = a:palette[overrides[0]] + let file_colors = mode_colors.airline_file + let file_colors[1] = mode_colors.airline_c[1] + let file_colors[3] = mode_colors.airline_c[3] + + let override_colors = a:palette[overrides[0].'_'.overrides[1]] + let override_colors.airline_file = copy(file_colors) + let override_status_colors = get(override_colors, 'airline_c', mode_colors.airline_c) + let override_colors.airline_file[1] = override_status_colors[1] + let override_colors.airline_file[3] = override_status_colors[3] + endif + endfor +endfunction + diff --git a/autoload/airline/themes/dark.vim b/autoload/airline/themes/dark.vim index 3b714a3f..73b818ac 100644 --- a/autoload/airline/themes/dark.vim +++ b/autoload/airline/themes/dark.vim @@ -23,11 +23,14 @@ " " The array is in the format [ guifg, guibg, ctermfg, ctermbg, opts ]. " The opts takes in values from ":help attr-list". -let s:file = [ '#ff0000' , '' , 160 , '' , '' ] let s:N1 = [ '#00005f' , '#dfff00' , 17 , 190 ] let s:N2 = [ '#ffffff' , '#444444' , 255 , 238 ] let s:N3 = [ '#9cffd3' , '#202020' , 85 , 234 ] +" The file array is a special case, where only the foreground colors are +" specified. The background colors are automatically filled. +let s:file = [ '#ff0000' , '' , 160 , '' ] + " vim-airline is made up of multiple sections, but for theming purposes there " is only 3 sections: the mode, the branch indicator, and the gutter (which " then get mirrored on the right side). generate_color_map is a helper diff --git a/autoload/airline/themes/jellybeans.vim b/autoload/airline/themes/jellybeans.vim index 88ed2662..40fc9116 100644 --- a/autoload/airline/themes/jellybeans.vim +++ b/autoload/airline/themes/jellybeans.vim @@ -11,12 +11,7 @@ function! s:generate() let s:N1 = airline#themes#get_highlight('DbgCurrent', 'bold') let s:N2 = airline#themes#get_highlight('Folded') let s:N3 = airline#themes#get_highlight('NonText') - - " The file indicator is a special case where if the background values are - " empty the generate_color_map function will extract a matching color. let s:file = airline#themes#get_highlight('Constant') - let s:file[1] = '' - let s:file[3] = '' let g:airline#themes#jellybeans#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3, s:file) let g:airline#themes#jellybeans#palette.normal_modified = { diff --git a/autoload/airline/themes/luna.vim b/autoload/airline/themes/luna.vim index eb00e539..d0aaa6bf 100644 --- a/autoload/airline/themes/luna.vim +++ b/autoload/airline/themes/luna.vim @@ -2,21 +2,21 @@ " (https://github.com/Pychimp/vim-luna) let g:airline#themes#luna#palette = {} -let s:file = [ '#ffffff' , '#002b2b' , 231 , 23 , '' ] +let s:file = [ '#ffffff' , '' , 231 , '' , '' ] -let s:N1 = [ '#ffffff' , '#005252' , 231 , 36 ] -let s:N2 = [ '#ffffff' , '#003f3f' , 231 , 29 ] -let s:N3 = [ '#ffffff' , '#002b2b' , 231 , 23 ] +let s:N1 = [ '#ffffff' , '#005252' , 231 , 36 ] +let s:N2 = [ '#ffffff' , '#003f3f' , 231 , 29 ] +let s:N3 = [ '#ffffff' , '#002b2b' , 231 , 23 ] let g:airline#themes#luna#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3, s:file) let g:airline#themes#luna#palette.normal_modified = { \ 'airline_c': [ '#ffffff' , '#450000' , 231 , 52 , '' ] , \ } -let s:I1 = [ '#ffffff' , '#789f00' , 231 , 106 ] -let s:I2 = [ '#ffffff' , '#003f3f' , 231 , 29 ] -let s:I3 = [ '#ffffff' , '#002b2b' , 231 , 23 ] +let s:I1 = [ '#ffffff' , '#789f00' , 231 , 106 ] +let s:I2 = [ '#ffffff' , '#003f3f' , 231 , 29 ] +let s:I3 = [ '#ffffff' , '#002b2b' , 231 , 23 ] let g:airline#themes#luna#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3, s:file) let g:airline#themes#luna#palette.insert_modified = { \ 'airline_c': [ '#ffffff' , '#005e5e' , 255 , 52 , '' ] , diff --git a/autoload/airline/themes/molokai.vim b/autoload/airline/themes/molokai.vim index 02890acd..a50d86cc 100644 --- a/autoload/airline/themes/molokai.vim +++ b/autoload/airline/themes/molokai.vim @@ -1,7 +1,7 @@ let g:airline#themes#molokai#palette = {} -let s:file = [ '#66d9ef' , '#465457' , 81 , 67 , 'bold' ] +let s:file = [ '#66d9ef' , '' , 81 , '' , '' ] " Normal mode let s:N1 = [ '#080808' , '#e6db74' , 232 , 144 ] " mode diff --git a/autoload/airline/themes/tomorrow.vim b/autoload/airline/themes/tomorrow.vim index c36478e3..1c96c829 100644 --- a/autoload/airline/themes/tomorrow.vim +++ b/autoload/airline/themes/tomorrow.vim @@ -2,9 +2,6 @@ let g:airline#themes#tomorrow#palette = {} function! s:generate() let s:file = airline#themes#get_highlight('Constant') - " clear out backgrounds so generate_color_map will fill them in - let s:file[1] = '' - let s:file[3] = '' let s:N1 = airline#themes#get_highlight2(['Normal', 'bg'], ['Directory', 'fg'], 'bold') let s:N2 = airline#themes#get_highlight('Pmenu')