Merge pull request #1063 from sappo/master

Various ctrlspace tabline improvements
This commit is contained in:
Christian Brabandt 2016-03-01 20:40:20 +01:00
commit a45a96c881
2 changed files with 107 additions and 62 deletions

View File

@ -9,6 +9,9 @@ let s:current_tabline = ''
let s:buffers_label = get(g:, 'airline#extensions#tabline#buffers_label', 'buffers') let s:buffers_label = get(g:, 'airline#extensions#tabline#buffers_label', 'buffers')
let s:tabs_label = get(g:, 'airline#extensions#tabline#tabs_label', 'tabs') let s:tabs_label = get(g:, 'airline#extensions#tabline#tabs_label', 'tabs')
let s:switch_buffers_and_tabs = get(g:, 'airline#extensions#tabline#switch_buffers_and_tabs', 0)
let s:show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1)
let s:show_tabs = get(g:, 'airline#extensions#tabline#show_tabs', 1)
function! airline#extensions#tabline#ctrlspace#off() function! airline#extensions#tabline#ctrlspace#off()
augroup airline_tabline_ctrlspace augroup airline_tabline_ctrlspace
@ -28,6 +31,62 @@ function! airline#extensions#tabline#ctrlspace#invalidate()
let s:current_tabnr = -1 let s:current_tabnr = -1
endfunction endfunction
function! airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_tab, cur_buf, pos)
if a:pos == 0
let pos_extension = ''
else
let pos_extension = '_right'
endif
let s:buffer_list = ctrlspace#api#BufferList(a:cur_tab)
for buffer in s:buffer_list
if a:cur_buf == buffer.index
if buffer.modified
let group = 'airline_tabmod'.pos_extension
else
let group = 'airline_tabsel'.pos_extension
endif
else
if buffer.modified
let group = 'airline_tabmod_unsel'.pos_extension
elseif buffer.visible
let group = 'airline_tab'.pos_extension
else
let group = 'airline_tabhid'.pos_extension
endif
endif
let buf_name = '%(%{airline#extensions#tabline#get_buffer_name('.buffer.index.')}%)'
call a:builder.add_section_spaced(group, buf_name)
endfor
endfunction
function! airline#extensions#tabline#ctrlspace#add_tab_section(builder, pos)
if a:pos == 0
let pos_extension = ''
else
let pos_extension = '_right'
endif
for tab in s:tab_list
if tab.current
if tab.modified
let group = 'airline_tabmod'.pos_extension
else
let group = 'airline_tabsel'.pos_extension
endif
else
if tab.modified
let group = 'airline_tabmod_unsel'.pos_extension
else
let group = 'airline_tabhid'.pos_extension
endif
endif
call a:builder.add_section_spaced(group, tab.title.ctrlspace#api#TabBuffersNumber(tab.index))
endfor
endfunction
function! airline#extensions#tabline#ctrlspace#get() function! airline#extensions#tabline#ctrlspace#get()
let cur_buf = bufnr('%') let cur_buf = bufnr('%')
@ -42,59 +101,44 @@ function! airline#extensions#tabline#ctrlspace#get()
return s:current_tabline return s:current_tabline
endif endif
let b = airline#extensions#tabline#new_builder() let builder = airline#extensions#tabline#new_builder()
call b.add_section_spaced('airline_tabtype', s:buffers_label) " Add left tabline content
if s:show_buffers == 0
let s:buffer_list = ctrlspace#api#BufferList(cur_tab) call airline#extensions#tabline#ctrlspace#add_tab_section(builder, 0)
for buffer in s:buffer_list elseif s:show_tabs == 0
if cur_buf == buffer.index call airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_tab, cur_buf, 0)
if buffer.modified
let group = 'airline_tabmod'
else else
let group = 'airline_tabsel' if s:switch_buffers_and_tabs == 0
endif call builder.add_section_spaced('airline_tabtype', s:buffers_label)
call airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_tab, cur_buf, 0)
else else
if buffer.modified call builder.add_section_spaced('airline_tabtype', s:tabs_label)
let group = 'airline_tabmod_unsel' call airline#extensions#tabline#ctrlspace#add_tab_section(builder, 0)
elseif buffer.visible
let group = 'airline_tab'
else
let group = 'airline_tabhid'
endif endif
endif endif
let buf_name = '%(%{airline#extensions#tabline#get_buffer_name('.buffer.index.')}%)' call builder.add_section('airline_tabfill', '')
call b.add_section_spaced(group, buf_name) call builder.split()
endfor call builder.add_section('airline_tabfill', '')
" Add right tabline content
call b.add_section('airline_tabfill', '') if s:show_buffers == 0
call b.split() call builder.add_section_spaced('airline_tabtype', s:tabs_label)
call b.add_section('airline_tabfill', '') elseif s:show_tabs == 0
call builder.add_section_spaced('airline_tabtype', s:buffers_label)
for tab in s:tab_list
if tab.current
if tab.modified
let group = 'airline_tabmod_right'
else else
let group = 'airline_tabsel_right' if s:switch_buffers_and_tabs == 0
endif call airline#extensions#tabline#ctrlspace#add_tab_section(builder, 1)
call builder.add_section_spaced('airline_tabtype', s:tabs_label)
else else
if tab.modified call airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_tab, cur_buf, 1)
let group = 'airline_tabmod_unsel_right' call builder.add_section_spaced('airline_tabtype', s:buffers_label)
else
let group = 'airline_tabhid_right'
endif endif
endif endif
call b.add_section_spaced(group, tab.title.ctrlspace#api#TabBuffersNumber(tab.index))
endfor
call b.add_section_spaced('airline_tabtype', s:tabs_label)
let s:current_bufnr = cur_buf let s:current_bufnr = cur_buf
let s:current_tabnr = cur_tab let s:current_tabnr = cur_tab
let s:current_tabline = b.build() let s:current_tabline = builder.build()
return s:current_tabline return s:current_tabline
endfunction endfunction

View File

@ -489,16 +489,22 @@ eclim <https://eclim.org>
let g:airline#extensions#whitespace#trailing_regexp = '\s$' let g:airline#extensions#whitespace#trailing_regexp = '\s$'
< <
------------------------------------- *airline-tabline* ------------------------------------- *airline-tabline*
* enable/disable enhanced tabline. > Note: If you're using the ctrlspace tabline only the option marked with (c)
are supported!
* enable/disable enhanced tabline. (c)
let g:airline#extensions#tabline#enabled = 0 let g:airline#extensions#tabline#enabled = 0
<
* enable/disable displaying open splits per tab (only when tabs are opened). > * enable/disable displaying open splits per tab (only when tabs are opened). >
let g:airline#extensions#tabline#show_splits = 1 let g:airline#extensions#tabline#show_splits = 1
< *
* enable/disable displaying buffers with a single tab. > * switch position of buffers and tabs on splited tabline (c)
let g:airline#extensions#tabline#switch_buffers_and_tabs = 0
* enable/disable displaying buffers with a single tab. (c)
let g:airline#extensions#tabline#show_buffers = 1 let g:airline#extensions#tabline#show_buffers = 1
< <
* enable/disable displaying tabs, regardless of number. > * enable/disable displaying tabs, regardless of number. (c)
let g:airline#extensions#tabline#show_tabs = 1 let g:airline#extensions#tabline#show_tabs = 1
< <
* configure filename match rules to exclude from the tabline. > * configure filename match rules to exclude from the tabline. >
@ -518,18 +524,14 @@ eclim <https://eclim.org>
* enable/disable displaying tab type (far right) > * enable/disable displaying tab type (far right) >
let g:airline#extensions#tabline#show_tab_type = 1 let g:airline#extensions#tabline#show_tab_type = 1
* enable/disable displaying index of the buffer. * rename label for buffers (default: 'buffers') (c)
Note: If you're using ctrlspace the tabline shows your tabs on the right and
buffer on the left. Also none of the above tabline switches is currently
supported!
* rename label for buffers (default: 'buffers') >
let g:airline#extensions#tabline#buffers_label = 'b' let g:airline#extensions#tabline#buffers_label = 'b'
* rename label for tabs (default: 'tabs') > * rename label for tabs (default: 'tabs') (c)
let g:airline#extensions#tabline#tabs_label = 't' let g:airline#extensions#tabline#tabs_label = 't'
<
* enable/disable displaying index of the buffer.
When enabled, numbers will be displayed in the tabline and mappings will be When enabled, numbers will be displayed in the tabline and mappings will be
exposed to allow you to select a buffer directly. Up to 9 mappings will be exposed to allow you to select a buffer directly. Up to 9 mappings will be
exposed. > exposed. >
@ -554,7 +556,7 @@ eclim <https://eclim.org>
Use |gt| for switching tabs. Use |gt| for switching tabs.
In tabmode, those mappings will switch to the specified tab. In tabmode, those mappings will switch to the specified tab.
* defines the name of a formatter for how buffer names are displayed. > * defines the name of a formatter for how buffer names are displayed. (c)
let g:airline#extensions#tabline#formatter = 'default' let g:airline#extensions#tabline#formatter = 'default'
" here is how you can define a 'foo' formatter: " here is how you can define a 'foo' formatter:
@ -623,7 +625,6 @@ eclim <https://eclim.org>
let airline#extensions#tabline#ignore_bufadd_pat = let airline#extensions#tabline#ignore_bufadd_pat =
\ '\c\vgundo|undotree|vimfiler|tagbar|nerd_tree' \ '\c\vgundo|undotree|vimfiler|tagbar|nerd_tree'
<
Note: Enabling this extension will modify 'showtabline' and 'guioptions'. Note: Enabling this extension will modify 'showtabline' and 'guioptions'.
* enable Refresh of tabline buffers on |BufAdd| autocommands * enable Refresh of tabline buffers on |BufAdd| autocommands