From 703045a7e64307a29c54a37ac911960d4e5f3e07 Mon Sep 17 00:00:00 2001 From: Bailey Ling Date: Fri, 16 Aug 2013 00:36:42 +0000 Subject: [PATCH] allow warning section to collapse away --- autoload/airline.vim | 25 +++++++++++++++++-------- autoload/airline/themes.vim | 3 +++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/autoload/airline.vim b/autoload/airline.vim index 9b557c6..77de75e 100644 --- a/autoload/airline.vim +++ b/autoload/airline.vim @@ -26,8 +26,12 @@ function! s:create_builder(active) call add(self._sections, [a:group, a:contents]) endfunction + function! builder.add_raw(text) + call add(self._sections, ['_', a:text]) + endfunction + function! builder._group(group) - return self._active ? a:group : a:group.'_inactive' + return '%#' . (self._active ? a:group : a:group.'_inactive') . '#' endfunction function! builder.build() @@ -37,21 +41,25 @@ function! s:create_builder(active) for section in self._sections if section[0] == '|' let side = 1 + let line .= '%#'.prev_group.'#'.section[1] + let prev_group = '' + continue + endif + if section[0] == '_' let line .= section[1] continue endif if prev_group != '' - let sep_group = side == 0 - \ ? airline#themes#exec_highlight_separator(section[0], prev_group) - \ : airline#themes#exec_highlight_separator(prev_group, section[0]) - let line .= '%#'.self._group(sep_group).'#' + let line .= side == 0 + \ ? self._group(airline#themes#exec_highlight_separator(section[0], prev_group)) + \ : self._group(airline#themes#exec_highlight_separator(prev_group, section[0])) let line .= side == 0 \ ? self._active ? g:airline_left_sep : g:airline_left_alt_sep \ : self._active ? g:airline_right_sep : g:airline_right_alt_sep endif - let line .= '%#'.self._group(section[0]).'#'.section[1] + let line .= self._group(section[0]).section[1] let prev_group = section[0] endfor return line @@ -121,8 +129,7 @@ function! airline#get_statusline(winnr, active) let builder = s:create_builder(a:active) if s:getwinvar(a:winnr, 'airline_render_left', a:active || (!a:active && !g:airline_inactive_collapse)) - call builder.add_section('Al2', s:get_section(a:winnr, 'a')) - call builder.add_section('Al7', '%{g:airline_detect_paste && &paste ? g:airline_paste_symbol." " : ""}') + call builder.add_section('Al2', s:get_section(a:winnr, 'a').'%{g:airline_detect_paste && &paste ? g:airline_paste_symbol." " : ""}') call builder.add_section('Al4', s:get_section(a:winnr, 'b')) call builder.add_section('Al6', s:get_section(a:winnr, 'c').' %#Al7#%{&ro ? g:airline_readonly_symbol : ""}') else @@ -134,7 +141,9 @@ function! airline#get_statusline(winnr, active) call builder.add_section('Al4', s:get_section(a:winnr, 'y')) call builder.add_section('Al2', s:get_section(a:winnr, 'z')) if a:active + call builder.add_raw('%(') call builder.add_section('warningmsg', s:get_section(a:winnr, 'warning', '', '')) + call builder.add_raw('%)') endif endif return builder.build() diff --git a/autoload/airline/themes.vim b/autoload/airline/themes.vim index e932185..5116139 100644 --- a/autoload/airline/themes.vim +++ b/autoload/airline/themes.vim @@ -57,6 +57,9 @@ function! airline#themes#get_highlight2(fg, bg, ...) endfunction function! airline#themes#exec_highlight_separator(from, to) + if a:from == a:to + return a:from + endif let l:from = airline#themes#get_highlight(a:from) let l:to = airline#themes#get_highlight(a:to) let group = a:from.'_to_'.a:to