2013-08-18 11:25:24 +08:00
|
|
|
" MIT License. Copyright (c) 2013 Bailey Ling.
|
2013-08-03 01:56:12 +08:00
|
|
|
" vim: ts=2 sts=2 sw=2 fdm=indent
|
|
|
|
|
2013-07-24 11:00:23 +08:00
|
|
|
" generates a dictionary which defines the colors for each highlight group
|
2013-07-11 11:03:27 +08:00
|
|
|
function! airline#themes#generate_color_map(section1, section2, section3, file)
|
2013-08-16 10:02:32 +08:00
|
|
|
" guifg guibg ctermfg ctermbg gui/term
|
2013-07-09 09:22:04 +08:00
|
|
|
return {
|
2013-08-18 11:25:24 +08:00
|
|
|
\ '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 , '' ) ] ,
|
2013-08-20 09:56:13 +08:00
|
|
|
\ 'airline_x': [ a:section3[0] , a:section3[1] , a:section3[2] , a:section3[3] , get(a:section3 , 4 , '' ) ] ,
|
|
|
|
\ 'airline_y': [ a:section2[0] , a:section2[1] , a:section2[2] , a:section2[3] , get(a:section2 , 4 , '' ) ] ,
|
|
|
|
\ 'airline_z': [ a:section1[0] , a:section1[1] , a:section1[2] , a:section1[3] , get(a:section1 , 4 , '' ) ] ,
|
2013-07-09 09:22:04 +08:00
|
|
|
\ }
|
|
|
|
endfunction
|
2013-08-04 09:25:35 +08:00
|
|
|
|
|
|
|
function! s:get_syn(group, what)
|
2013-08-14 10:10:44 +08:00
|
|
|
" need to pass in mode, known to break on 7.3.547
|
|
|
|
let mode = has('gui_running') ? 'gui' : 'cterm'
|
|
|
|
let color = synIDattr(synIDtrans(hlID(a:group)), a:what, mode)
|
2013-08-06 01:44:12 +08:00
|
|
|
if empty(color) || color == -1
|
2013-08-14 10:10:44 +08:00
|
|
|
let color = synIDattr(synIDtrans(hlID('Normal')), a:what, mode)
|
2013-08-06 01:44:12 +08:00
|
|
|
endif
|
|
|
|
if empty(color) || color == -1
|
2013-08-10 23:46:12 +08:00
|
|
|
if has('gui_running')
|
|
|
|
let color = a:what ==# 'fg' ? '#000000' : '#FFFFFF'
|
|
|
|
else
|
|
|
|
let color = a:what ==# 'fg' ? 0 : 1
|
|
|
|
endif
|
2013-08-06 01:44:12 +08:00
|
|
|
endif
|
|
|
|
return color
|
2013-08-04 09:25:35 +08:00
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! s:get_array(fg, bg, opts)
|
2013-08-05 03:10:44 +08:00
|
|
|
let fg = a:fg
|
|
|
|
let bg = a:bg
|
2013-08-04 09:25:35 +08:00
|
|
|
return has('gui_running')
|
2013-08-05 03:10:44 +08:00
|
|
|
\ ? [ fg, bg, '', '', join(a:opts, ',') ]
|
|
|
|
\ : [ '', '', fg, bg, join(a:opts, ',') ]
|
2013-08-04 09:25:35 +08:00
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! airline#themes#get_highlight(group, ...)
|
|
|
|
let fg = s:get_syn(a:group, 'fg')
|
|
|
|
let bg = s:get_syn(a:group, 'bg')
|
2013-08-29 11:05:28 +08:00
|
|
|
let reverse = synIDattr(synIDtrans(hlID(a:group)), 'reverse', has('gui_running') ? 'gui' : 'term')
|
|
|
|
return reverse ? s:get_array(bg, fg, a:000) : s:get_array(fg, bg, a:000)
|
2013-08-04 09:25:35 +08:00
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! airline#themes#get_highlight2(fg, bg, ...)
|
|
|
|
let fg = s:get_syn(a:fg[0], a:fg[1])
|
|
|
|
let bg = s:get_syn(a:bg[0], a:bg[1])
|
|
|
|
return s:get_array(fg, bg, a:000)
|
|
|
|
endfunction
|
2013-08-10 04:08:36 +08:00
|
|
|
|
2013-08-18 11:25:24 +08:00
|
|
|
function! airline#themes#patch(palette)
|
2013-09-01 22:06:25 +08:00
|
|
|
for mode in keys(a:palette)
|
|
|
|
if !has_key(a:palette[mode], 'airline_warning')
|
|
|
|
let a:palette[mode]['airline_warning'] = [ '#000000', '#df5f00', 232, 166 ]
|
|
|
|
endif
|
|
|
|
endfor
|
|
|
|
|
2013-08-18 11:25:24 +08:00
|
|
|
" 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, '_')
|
2013-08-24 10:49:24 +08:00
|
|
|
let mode_colors = a:palette[overrides[0]]
|
|
|
|
if exists('mode_colors.airline_file')
|
|
|
|
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]
|
2013-08-18 11:25:24 +08:00
|
|
|
|
2013-08-24 10:49:24 +08:00
|
|
|
if len(overrides) > 1
|
2013-08-18 12:22:36 +08:00
|
|
|
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
|
2013-08-18 11:25:24 +08:00
|
|
|
endif
|
|
|
|
endfor
|
|
|
|
endfunction
|
|
|
|
|