From 3f7222e488ee06d16f3dd773a0e570fed42d61bc Mon Sep 17 00:00:00 2001 From: s1341 Date: Fri, 28 Jun 2019 15:21:50 +0300 Subject: [PATCH] Add support for vim-tabws tabline closes #1938 --- autoload/airline/extensions/tabline.vim | 10 ++ autoload/airline/extensions/tabline/tabws.vim | 153 ++++++++++++++++++ doc/airline.txt | 6 + 3 files changed, 169 insertions(+) create mode 100644 autoload/airline/extensions/tabline/tabws.vim diff --git a/autoload/airline/extensions/tabline.vim b/autoload/airline/extensions/tabline.vim index a1cbcc35..eb7ae695 100644 --- a/autoload/airline/extensions/tabline.vim +++ b/autoload/airline/extensions/tabline.vim @@ -9,6 +9,7 @@ if s:taboo endif let s:ctrlspace = get(g:, 'CtrlSpaceLoaded', 0) +let s:tabws = get(g:, 'tabws_loaded', 0) function! airline#extensions#tabline#init(ext) if has('gui_running') @@ -29,6 +30,9 @@ function! s:toggle_off() if s:ctrlspace call airline#extensions#tabline#ctrlspace#off() endif + if s:tabws + call airline#extensions#tabline#tabws#off() + endif endfunction function! s:toggle_on() @@ -43,6 +47,9 @@ function! s:toggle_on() if s:ctrlspace call airline#extensions#tabline#ctrlspace#on() endif + if s:tabws + call airline#extensions#tabline#tabws#on() + endif set tabline=%!airline#extensions#tabline#get() endfunction @@ -145,6 +152,7 @@ function! airline#extensions#tabline#get() call airline#extensions#tabline#tabs#invalidate() call airline#extensions#tabline#buffers#invalidate() call airline#extensions#tabline#ctrlspace#invalidate() + call airline#extensions#tabline#tabws#invalidate() endif if !exists('#airline#BufAdd#*') @@ -152,6 +160,8 @@ function! airline#extensions#tabline#get() endif if s:ctrlspace return airline#extensions#tabline#ctrlspace#get() + elseif s:tabws + return airline#extensions#tabline#tabws#get() elseif show_buffers && curtabcnt == 1 || !show_tabs return airline#extensions#tabline#buffers#get() else diff --git a/autoload/airline/extensions/tabline/tabws.vim b/autoload/airline/extensions/tabline/tabws.vim new file mode 100644 index 00000000..94aa74b0 --- /dev/null +++ b/autoload/airline/extensions/tabline/tabws.vim @@ -0,0 +1,153 @@ +" MIT License. Copyright (c) 2016-2019 Kevin Sapper et al. +" vim: et ts=2 sts=2 sw=2 + +scriptencoding utf-8 + +let s:current_bufnr = -1 +let s:current_modified = 0 +let s:current_tabnr = -1 +let s:current_tabline = '' +let s:highlight_groups = ['hid', 0, '', 'sel', 'mod_unsel', 0, 'mod_unsel', 'mod'] + +function! airline#extensions#tabline#tabws#off() + augroup airline_tabline_tabws + autocmd! + augroup END +endfunction + +function! airline#extensions#tabline#tabws#on() + augroup airline_tabline_tabws + autocmd! + autocmd BufDelete * call airline#extensions#tabline#tabws#invalidate() + augroup END +endfunction + +function! airline#extensions#tabline#tabws#invalidate() + let s:current_bufnr = -1 + let s:current_tabnr = -1 +endfunction + +function! airline#extensions#tabline#tabws#add_buffer_section(builder, cur_tab, cur_buf, pull_right) + let pos_extension = (a:pull_right ? '_right' : '') + let bufnr_list = tabws#getbuffersfortab(a:cur_tab) + + if index(bufnr_list, a:cur_buf) == -1 && a:cur_tab == s:current_tabnr + return 0 + endif + + let s:current_modified = getbufvar(a:cur_buf, '&modified') + let visible_list = tabpagebuflist(a:cur_tab) + + for buffer in bufnr_list + let group = 'airline_tab' + \ .s:highlight_groups[(4 * getbufvar(buffer, '&modified')) + (2 * (index(visible_list, buffer) != -1)) + (a:cur_buf == buffer)] + \ .pos_extension + + let buf_name = '%(%{airline#extensions#tabline#get_buffer_name('.buffer.')}%)' + + if has("tablineat") + let buf_name = '%'.buffer.'@airline#extensions#tabline#buffers#clickbuf@'.buf_name.'%X' + endif + + call a:builder.add_section_spaced(group, buf_name) + endfor + + " add by tenfy(tenfyzhong@qq.com) + " if the selected buffer was updated + " return true + return 1 +endfunction + +function! airline#extensions#tabline#tabws#add_tab_section(builder, pull_right) + let pos_extension = (a:pull_right ? '_right' : '') + + for tab in range(1, tabpagenr('$')) + let current = tab == tabpagenr() + let group = 'airline_tab' + \ .s:highlight_groups[(3 * current)] + \ .pos_extension + + if get(g:, 'airline#extensions#tabline#tabws_show_tab_nr', 0) == 0 + call a:builder.add_section_spaced(group, '%'.tab.'T'.tabws#gettabname(tab).'%T') + else + call a:builder.add_section_spaced(group, '%'.tab.'T'.tab.(g:airline_symbols.space).tabws#gettabname(tab).'%T') + endif + endfor +endfunction + +function! airline#extensions#tabline#tabws#get() + let cur_buf = bufnr('%') + let buffer_label = get(g:, 'airline#extensions#tabline#buffers_label', 'buffers') + let tab_label = get(g:, 'airline#extensions#tabline#tabs_label', 'tabs') + let switch_buffers_and_tabs = get(g:, 'airline#extensions#tabline#switch_buffers_and_tabs', 0) + + try + call airline#extensions#tabline#tabs#map_keys() + endtry + + let cur_tab = tabpagenr() + + if cur_buf == s:current_bufnr && cur_tab == s:current_tabnr + if !g:airline_detect_modified || getbufvar(cur_buf, '&modified') == s:current_modified + return s:current_tabline + endif + endif + + let builder = airline#extensions#tabline#new_builder() + + let show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1) + let show_tabs = get(g:, 'airline#extensions#tabline#show_tabs', 1) + + let AppendBuffers = function('airline#extensions#tabline#tabws#add_buffer_section', [builder, cur_tab, cur_buf]) + let AppendTabs = function('airline#extensions#tabline#tabws#add_tab_section', [builder]) + let AppendLabel = function(builder.add_section_spaced, ['airline_tabtype'], builder) + + " <= 1: |{Tabs} {Buffers} {Tabs} * enable/disable taboo.vim integration > let g:airline#extensions#taboo#enabled = 1 < +------------------------------------- *airline-tabws* +vim-tabws + +* enable/disable tabws integration > + let g:airline#extensions#tabws#enabled = 1 +< ------------------------------------- *airline-tagbar* tagbar