From f7835562a33ca57fe7dc3320af3167ca4e255b9d Mon Sep 17 00:00:00 2001 From: Bailey Ling Date: Wed, 27 Jan 2016 23:11:11 -0500 Subject: [PATCH] spike for combined buffers/tabs prototype for #639 --- autoload/airline/extensions/tabline.vim | 24 +++++++++- .../airline/extensions/tabline/buffers.vim | 18 +------ .../airline/extensions/tabline/combined.vim | 25 ++++++++++ autoload/airline/extensions/tabline/tabs.vim | 48 +++++++++++-------- 4 files changed, 77 insertions(+), 38 deletions(-) create mode 100644 autoload/airline/extensions/tabline/combined.vim diff --git a/autoload/airline/extensions/tabline.vim b/autoload/airline/extensions/tabline.vim index 8f2f9591..a2d1543f 100644 --- a/autoload/airline/extensions/tabline.vim +++ b/autoload/airline/extensions/tabline.vim @@ -5,12 +5,13 @@ let s:formatter = get(g:, 'airline#extensions#tabline#formatter', 'default') let s:show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1) let s:show_tabs = get(g:, 'airline#extensions#tabline#show_tabs', 1) let s:ignore_bufadd_pat = get(g:, 'airline#extensions#tabline#ignore_bufadd_pat', '\c\vgundo|undotree|vimfiler|tagbar|nerd_tree') +let s:combined = get(g:, 'airline#extensions#tabline#combined', 1) + let s:taboo = get(g:, 'airline#extensions#taboo#enabled', 1) && get(g:, 'loaded_taboo', 0) if s:taboo let g:taboo_tabline = 0 endif - function! airline#extensions#tabline#init(ext) if has('gui_running') set guioptions-=e @@ -133,3 +134,24 @@ function! airline#extensions#tabline#new_builder() return airline#builder#new(builder_context) endfunction + +function! airline#extensions#tabline#group_of_bufnr(tab_bufs, bufnr) + let cur = bufnr('%') + if cur == a:bufnr + if g:airline_detect_modified && getbufvar(a:bufnr, '&modified') + let group = 'airline_tabmod' + else + let group = 'airline_tabsel' + endif + let s:current_modified = (group == 'airline_tabmod') ? 1 : 0 + else + if g:airline_detect_modified && getbufvar(a:bufnr, '&modified') + let group = 'airline_tabmod_unsel' + elseif index(a:tab_bufs, a:bufnr) > -1 + let group = 'airline_tab' + else + let group = 'airline_tabhid' + endif + endif + return group +endfunction diff --git a/autoload/airline/extensions/tabline/buffers.vim b/autoload/airline/extensions/tabline/buffers.vim index df6c93d7..f8353b39 100644 --- a/autoload/airline/extensions/tabline/buffers.vim +++ b/autoload/airline/extensions/tabline/buffers.vim @@ -62,23 +62,7 @@ function! airline#extensions#tabline#buffers#get() continue endif - if cur == nr - if g:airline_detect_modified && getbufvar(nr, '&modified') - let group = 'airline_tabmod' - else - let group = 'airline_tabsel' - endif - let s:current_modified = (group == 'airline_tabmod') ? 1 : 0 - else - if g:airline_detect_modified && getbufvar(nr, '&modified') - let group = 'airline_tabmod_unsel' - elseif index(tab_bufs, nr) > -1 - let group = 'airline_tab' - else - let group = 'airline_tabhid' - endif - endif - + let group = airline#extensions#tabline#group_of_bufnr(tab_bufs, nr) if s:buffer_idx_mode if len(s:number_map) > 0 call b.add_section(group, s:spc . get(s:number_map, l:index, '') . '%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)' . s:spc) diff --git a/autoload/airline/extensions/tabline/combined.vim b/autoload/airline/extensions/tabline/combined.vim new file mode 100644 index 00000000..bd71eb6d --- /dev/null +++ b/autoload/airline/extensions/tabline/combined.vim @@ -0,0 +1,25 @@ +" MIT License. Copyright (c) 2013-2016 Bailey Ling. +" vim: et ts=2 sts=2 sw=2 + +let s:spc = g:airline_symbols.space + +function! airline#extensions#tabline#combined#get() + let curtabnr = tabpagenr() + let b = airline#extensions#tabline#new_builder() + + let buffers = tabpagebuflist(curtabnr) + for nr in buffers + let group = airline#extensions#tabline#group_of_bufnr(buffers, nr) + call b.add_section(group, s:spc.'%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)'.s:spc) + endfor + + call b.add_section('airline_tabfill', '') + call b.split() + call b.add_section('airline_tabfill', '') + + for tabnr in range(1, tabpagenr('$')) + let group = tabnr == curtabnr ? 'airline_tabtype' : 'airline_tab' + call b.add_section(group, s:spc . 'tab' . s:spc . tabnr . s:spc . '%' . tabnr . 'X' . 'x' . '%X' . s:spc) + endfor + return b.build() +endfunction diff --git a/autoload/airline/extensions/tabline/tabs.vim b/autoload/airline/extensions/tabline/tabs.vim index 02e4dc9d..7215cea9 100644 --- a/autoload/airline/extensions/tabline/tabs.vim +++ b/autoload/airline/extensions/tabline/tabs.vim @@ -6,6 +6,7 @@ let s:tab_nr_type = get(g:, 'airline#extensions#tabline#tab_nr_type', 0) let s:show_close_button = get(g:, 'airline#extensions#tabline#show_close_button', 1) let s:show_tab_type = get(g:, 'airline#extensions#tabline#show_tab_type', 1) let s:close_symbol = get(g:, 'airline#extensions#tabline#close_symbol', 'X') +let s:spc = g:airline_symbols.space let s:current_bufnr = -1 let s:current_tabnr = -1 @@ -39,6 +40,17 @@ function! airline#extensions#tabline#tabs#get() endif let b = airline#extensions#tabline#new_builder() + + let buffers = tabpagebuflist(curtab) + for nr in buffers + let group = airline#extensions#tabline#group_of_bufnr(buffers, nr) + call b.add_section(group, s:spc.'%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)'.s:spc) + endfor + + call b.add_section('airline_tabfill', '') + call b.split() + call b.add_section('airline_tabfill', '') + for i in range(1, tabpagenr('$')) if i == curtab let group = 'airline_tabsel' @@ -53,28 +65,24 @@ function! airline#extensions#tabline#tabs#get() else let group = 'airline_tab' endif - let val = '%(' - if s:show_tab_nr - if s:tab_nr_type == 0 - let val .= (g:airline_symbols.space).'%{len(tabpagebuflist('.i.'))}' - elseif s:tab_nr_type == 1 - let val .= (g:airline_symbols.space).i - else "== 2 - let val .= (g:airline_symbols.space).i.'.%{len(tabpagebuflist('.i.'))}' - endif - endif - call b.add_section(group, val.'%'.i.'T %{airline#extensions#tabline#title('.i.')} %)') + " if s:show_tab_nr + " if s:tab_nr_type == 0 + " let tablen = s:spc . '%{len(tabpagebuflist('.i.'))}' + " elseif s:tab_nr_type == 1 + " let tablen = s:spc . i + " else "== 2 + " let tablen = s:spc . i . '.%{len(tabpagebuflist('.i.'))}' + " endif + " endif + call b.add_section(group, '%T'.i.' tab ' . i) endfor - call b.add_raw('%T') - call b.add_section('airline_tabfill', '') - call b.split() - if s:show_close_button - call b.add_section('airline_tab', ' %999X'.s:close_symbol.' ') - endif - if s:show_tab_type - call b.add_section('airline_tabtype', ' tabs ') - endif + " if s:show_close_button + " call b.add_section('airline_tab', ' %999X'.s:close_symbol.' ') + " endif + " if s:show_tab_type + " call b.add_section('airline_tabtype', ' tabs ') + " endif let s:current_bufnr = curbuf let s:current_tabnr = curtab