From 0c394308e40869ecddb9e7f706daf789c1cc3201 Mon Sep 17 00:00:00 2001
From: Bailey Ling <bling@live.ca>
Date: Tue, 9 Jul 2013 02:52:07 +0000
Subject: [PATCH] support undotree, gundo, nerdtree, tagbar

---
 autoload/airline.vim            | 20 +++++++++++---------
 autoload/airline/extensions.vim | 28 ++++++++++++++++++++--------
 plugin/airline.vim              |  2 +-
 3 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/autoload/airline.vim b/autoload/airline.vim
index 4f2f4c04..d1f6c446 100644
--- a/autoload/airline.vim
+++ b/autoload/airline.vim
@@ -114,15 +114,17 @@ function! airline#update_statusline(active)
   else
     let sl.=' %f'
   endif
-  let sl.='%<%= '.s:get_section('x').' '
-  let sl.=l:info_sep_color
-  let sl.=a:active ? g:airline_right_sep : g:airline_right_alt_sep
-  let sl.=l:info_color
-  let sl.=' '.s:get_section('y').' '
-  let sl.=l:mode_sep_color
-  let sl.=a:active ? g:airline_right_sep : g:airline_right_alt_sep
-  let sl.=l:mode_color
-  let sl.=' '.s:get_section('z').' '
+  if !exists('w:airline_left_only')
+    let sl.='%<%= '.s:get_section('x').' '
+    let sl.=l:info_sep_color
+    let sl.=a:active ? g:airline_right_sep : g:airline_right_alt_sep
+    let sl.=l:info_color
+    let sl.=' '.s:get_section('y').' '
+    let sl.=l:mode_sep_color
+    let sl.=a:active ? g:airline_right_sep : g:airline_right_alt_sep
+    let sl.=l:mode_color
+    let sl.=' '.s:get_section('z').' '
+  endif
   call setwinvar(winnr(), '&statusline', sl)
 endfunction
 
diff --git a/autoload/airline/extensions.vim b/autoload/airline/extensions.vim
index 958d916c..600d3ee4 100644
--- a/autoload/airline/extensions.vim
+++ b/autoload/airline/extensions.vim
@@ -18,20 +18,32 @@ function! s:empty_sections()
   endfor
 endfunction
 
+function! s:override_left_only(section1, section2)
+  let w:airline_section_a = a:section1
+  let w:airline_section_b = a:section2
+  let w:airline_section_c = ''
+  let w:airline_left_only = 1
+endfunction
+
 function! airline#extensions#apply_window_overrides()
+  silent! unlet w:airline_left_only
   for section in s:sections
     silent! unlet w:airline_section_{section}
   endfor
 
   if &ft == 'netrw'
-    let w:airline_section_a = 'netrw'
-    let w:airline_section_b = '%f'
-    let w:airline_section_c = ''
-    let w:airline_section_gutter = ''
-    let w:airline_section_x = ''
+    call s:override_left_only('netrw', '%f')
   elseif &ft == 'unite'
-    call s:empty_sections()
-    let w:airline_section_a = 'Unite'
-    let w:airline_section_b = unite#get_status_string()
+    call s:override_left_only('Unite', unite#get_status_string())
+  elseif &ft == 'nerdtree'
+    call s:override_left_only('NERD', '')
+  elseif &ft == 'undotree'
+    call s:override_left_only('undotree', '')
+  elseif &ft == 'gundo'
+    call s:override_left_only('Gundo', '')
+  elseif &ft == 'diff'
+    call s:override_left_only('diff', '')
+  elseif &ft == 'tagbar'
+    call s:override_left_only('tagbar', '')
   endif
 endfunction
diff --git a/plugin/airline.vim b/plugin/airline.vim
index 4c21f73c..1827a775 100644
--- a/plugin/airline.vim
+++ b/plugin/airline.vim
@@ -21,7 +21,7 @@ call s:check_defined('g:airline_linecolumn_prefix', exists('g:airline_powerline_
 call s:check_defined('g:airline_paste_symbol', (exists('g:airline_powerline_fonts') ? ' ' : '').'PASTE')
 call s:check_defined('g:airline_theme', 'dark')
 call s:check_defined('g:airline_exclude_filenames', ['DebuggerWatch','DebuggerStack','DebuggerStatus'])
-call s:check_defined('g:airline_exclude_filetypes', ['diff','undotree','gundo','nerdtree','tagbar'])
+call s:check_defined('g:airline_exclude_filetypes', [])
 
 call s:check_defined('g:airline_mode_map', {
       \ 'n'  : 'NORMAL',