pass builder into statusline funcrefs.

This commit is contained in:
Bailey Ling 2013-08-22 19:45:17 +00:00
parent 261dafca9d
commit 29dc7dd9b5

View File

@ -45,37 +45,36 @@ function! s:get_section(winnr, key, ...)
return empty(text) ? '' : prefix.text.suffix return empty(text) ? '' : prefix.text.suffix
endfunction endfunction
function! airline#get_statusline(winnr, active) function! airline#get_statusline(builder, winnr, active)
let builder = airline#builder#new(a:active, s:highlighter)
if airline#util#getwinvar(a:winnr, 'airline_render_left', a:active || (!a:active && !g:airline_inactive_collapse)) if airline#util#getwinvar(a:winnr, 'airline_render_left', a:active || (!a:active && !g:airline_inactive_collapse))
call builder.add_section('airline_a', s:get_section(a:winnr, 'a')) call a:builder.add_section('airline_a', s:get_section(a:winnr, 'a'))
call builder.add_section('airline_b', s:get_section(a:winnr, 'b')) call a:builder.add_section('airline_b', s:get_section(a:winnr, 'b'))
call builder.add_section('airline_c', '%<'.s:get_section(a:winnr, 'c')) call a:builder.add_section('airline_c', '%<'.s:get_section(a:winnr, 'c'))
else else
call builder.add_section('airline_c', '%f%m') call a:builder.add_section('airline_c', '%f%m')
endif endif
call builder.split(s:get_section(a:winnr, 'gutter', '', '')) call a:builder.split(s:get_section(a:winnr, 'gutter', '', ''))
if airline#util#getwinvar(a:winnr, 'airline_render_right', 1) if airline#util#getwinvar(a:winnr, 'airline_render_right', 1)
call builder.add_section('airline_x', s:get_section(a:winnr, 'x')) call a:builder.add_section('airline_x', s:get_section(a:winnr, 'x'))
call builder.add_section('airline_y', s:get_section(a:winnr, 'y')) call a:builder.add_section('airline_y', s:get_section(a:winnr, 'y'))
call builder.add_section('airline_z', s:get_section(a:winnr, 'z')) call a:builder.add_section('airline_z', s:get_section(a:winnr, 'z'))
if a:active if a:active
call builder.add_raw('%(') call a:builder.add_raw('%(')
call builder.add_section('warningmsg', s:get_section(a:winnr, 'warning', '', '')) call a:builder.add_section('warningmsg', s:get_section(a:winnr, 'warning', '', ''))
call builder.add_raw('%)') call a:builder.add_raw('%)')
endif endif
endif endif
return builder.build() return a:builder.build()
endfunction endfunction
function! airline#update_statusline() function! airline#update_statusline()
for nr in filter(range(1, winnr('$')), 'v:val != winnr()') for nr in filter(range(1, winnr('$')), 'v:val != winnr()')
call setwinvar(nr, 'airline_active', 0) call setwinvar(nr, 'airline_active', 0)
call setwinvar(nr, '&statusline', airline#get_statusline(nr, 0)) let builder = airline#builder#new(0, s:highlighter)
call setwinvar(nr, '&statusline', airline#get_statusline(builder, nr, 0))
endfor endfor
let w:airline_active = 1 let w:airline_active = 1
@ -86,9 +85,10 @@ function! airline#update_statusline()
unlet! w:airline_section_{section} unlet! w:airline_section_{section}
endfor endfor
let err = airline#util#exec_funcrefs(g:airline_statusline_funcrefs) let builder = airline#builder#new(1, s:highlighter)
let err = airline#util#exec_funcrefs(g:airline_statusline_funcrefs, builder)
if err == 0 if err == 0
call setwinvar(winnr(), '&statusline', airline#get_statusline(winnr(), 1)) call setwinvar(winnr(), '&statusline', airline#get_statusline(builder, winnr(), 1))
endif endif
endfunction endfunction