aboutsummaryrefslogtreecommitdiff
path: root/.vim/autoload/airline/extensions/tabline/xtabline.vim
diff options
context:
space:
mode:
authorYaroslav <contact@yaroslavps.com>2019-09-05 19:35:38 +0300
committerYaroslav <contact@yaroslavps.com>2019-09-05 19:35:38 +0300
commit212dcd0bf753f08c0127a26a71b673c734b45c02 (patch)
tree4a43e43c7c9b9ccfcaef4088ba9e5f52154994b5 /.vim/autoload/airline/extensions/tabline/xtabline.vim
downloadvimrice-212dcd0bf753f08c0127a26a71b673c734b45c02.tar.gz
vimrice-212dcd0bf753f08c0127a26a71b673c734b45c02.zip
init commit, extracted vim config from i3rice
Diffstat (limited to '.vim/autoload/airline/extensions/tabline/xtabline.vim')
-rw-r--r--.vim/autoload/airline/extensions/tabline/xtabline.vim397
1 files changed, 397 insertions, 0 deletions
diff --git a/.vim/autoload/airline/extensions/tabline/xtabline.vim b/.vim/autoload/airline/extensions/tabline/xtabline.vim
new file mode 100644
index 0000000..4d1cdec
--- /dev/null
+++ b/.vim/autoload/airline/extensions/tabline/xtabline.vim
@@ -0,0 +1,397 @@
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" xTabline - Reduced version for vim-airline
+" Copyright (C) 2018 Gianmaria Bajo <mg1979.git@gmail.com>
+" License: MIT License
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+
+function! airline#extensions#tabline#xtabline#init()
+
+ let s:state = 0
+
+ " initialize mappings
+ call airline#extensions#tabline#xtabline#maps()
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+ " Variables
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ let g:loaded_xtabline = 1
+ let s:most_recent = -1
+ let s:xtabline_filtering = 1
+
+ let t:xtl_excluded = get(g:, 'airline#extensions#tabline#exclude_buffers', [])
+ let t:xtl_accepted = []
+
+ let g:xtabline_include_previews = get(g:, 'xtabline_include_previews', 1)
+
+ let g:xtabline_alt_action = get(g:, 'xtabline_alt_action', "buffer #")
+
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+ " Autocommands
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ augroup plugin-xtabline
+ autocmd!
+
+ autocmd TabNew * call s:Do('new')
+ autocmd TabEnter * call s:Do('enter')
+ autocmd TabLeave * call s:Do('leave')
+ autocmd TabClosed * call s:Do('close')
+
+ autocmd BufEnter * let g:xtabline_changing_buffer = 0
+ autocmd BufAdd,BufDelete,BufWrite * call airline#extensions#tabline#xtabline#filter_buffers()
+ augroup END
+
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+ " Commands
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ com! XTabReopen call airline#extensions#tabline#xtabline#reopen_last_tab()
+
+endfunction
+
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Mappings
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#maps()
+
+ if !exists('g:xtabline_disable_keybindings')
+
+ fun! s:mapkeys(keys, plug)
+ if empty(mapcheck(a:keys)) && !hasmapto(a:plug)
+ silent! execute 'nmap <unique> '.a:keys.' '.a:plug
+ endif
+ endfun
+
+ call s:mapkeys('<F5>','<Plug>XTablineToggleTabs')
+ call s:mapkeys('<leader><F5>','<Plug>XTablineToggleFiltering')
+ call s:mapkeys('<BS>','<Plug>XTablineSelectBuffer')
+ call s:mapkeys(']l','<Plug>XTablineNextBuffer')
+ call s:mapkeys('[l','<Plug>XTablinePrevBuffer')
+ call s:mapkeys('<leader>tr','<Plug>XTablineReopen')
+ endif
+
+ nnoremap <unique> <script> <Plug>XTablineToggleTabs <SID>ToggleTabs
+ nnoremap <silent> <SID>ToggleTabs :call airline#extensions#tabline#xtabline#toggle_tabs()<cr>
+
+ nnoremap <unique> <script> <Plug>XTablineToggleFiltering <SID>ToggleFiltering
+ nnoremap <silent> <SID>ToggleFiltering :call airline#extensions#tabline#xtabline#toggle_buffers()<cr>
+
+ nnoremap <unique> <script> <Plug>XTablineSelectBuffer <SID>SelectBuffer
+ nnoremap <silent> <expr> <SID>SelectBuffer g:xtabline_changing_buffer ? "\<C-c>" : ":<C-u>call airline#extensions#tabline#xtabline#select_buffer(v:count)\<cr>"
+
+ nnoremap <unique> <script> <Plug>XTablineNextBuffer <SID>NextBuffer
+ nnoremap <silent> <expr> <SID>NextBuffer airline#extensions#tabline#xtabline#next_buffer(v:count1)
+
+ nnoremap <unique> <script> <Plug>XTablinePrevBuffer <SID>PrevBuffer
+ nnoremap <silent> <expr> <SID>PrevBuffer airline#extensions#tabline#xtabline#prev_buffer(v:count1)
+
+ nnoremap <unique> <script> <Plug>XTablineReopen <SID>ReopenLastTab
+ nnoremap <silent> <SID>ReopenLastTab :XTabReopen<cr>
+
+ if get(g:, 'xtabline_cd_commands', 0)
+ map <unique> <leader>cdc <Plug>XTablineCdCurrent
+ map <unique> <leader>cdd <Plug>XTablineCdDown1
+ map <unique> <leader>cd2 <Plug>XTablineCdDown2
+ map <unique> <leader>cd3 <Plug>XTablineCdDown3
+ map <unique> <leader>cdh <Plug>XTablineCdHome
+ nnoremap <unique> <script> <Plug>XTablineCdCurrent :cd %:p:h<cr>:call airline#util#doautocmd('BufAdd')<cr>:pwd<cr>
+ nnoremap <unique> <script> <Plug>XTablineCdDown1 :cd %:p:h:h<cr>:call airline#util#doautocmd('BufAdd')<cr>:pwd<cr>
+ nnoremap <unique> <script> <Plug>XTablineCdDown2 :cd %:p:h:h:h<cr>:call airline#util#doautocmd('BufAdd')<cr>:pwd<cr>
+ nnoremap <unique> <script> <Plug>XTablineCdDown3 :cd %:p:h:h:h:h<cr>:call airline#util#doautocmd('BufAdd')<cr>:pwd<cr>
+ nnoremap <unique> <script> <Plug>XTablineCdHome :cd ~<cr>:call airline#util#doautocmd('BufAdd')<cr>:pwd<cr>
+ endif
+endfunction
+
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Commands functions
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#toggle_tabs()
+ """Toggle between tabs/buffers tabline."""
+
+ if tabpagenr("$") == 1 | call airline#util#warning("There is only one tab.") | return | endif
+
+ if g:airline#extensions#tabline#show_tabs
+ let g:airline#extensions#tabline#show_tabs = 0
+ call airline#util#warning("Showing buffers")
+ else
+ let g:airline#extensions#tabline#show_tabs = 1
+ call airline#util#warning("Showing tabs")
+ endif
+
+ doautocmd BufAdd
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#toggle_buffers()
+ """Toggle buffer filtering in the tabline."""
+
+ if s:xtabline_filtering
+ let s:xtabline_filtering = 0
+ let g:airline#extensions#tabline#exclude_buffers = []
+ call airline#util#warning("Buffer filtering turned off")
+ doautocmd BufAdd
+ else
+ let s:xtabline_filtering = 1
+ call airline#extensions#tabline#xtabline#filter_buffers()
+ call airline#util#warning("Buffer filtering turned on")
+ doautocmd BufAdd
+ endif
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#reopen_last_tab()
+ """Reopen the last closed tab."""
+
+ if !exists('s:most_recently_closed_tab')
+ call airline#util#warning("No recent tabs.")
+ return
+ endif
+
+ let tab = s:most_recently_closed_tab
+ tabnew
+ let empty = bufnr("%")
+ let t:cwd = tab['cwd']
+ cd `=t:cwd`
+ let t:name = tab['name']
+ for buf in tab['buffers'] | execute "badd ".buf | endfor
+ execute "edit ".tab['buffers'][0]
+ execute "bdelete ".empty
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#filter_buffers()
+ """Filter buffers so that only the ones within the tab's cwd will show up.
+
+ " 'accepted' is a list of buffer numbers, for quick access.
+ " 'excluded' is a list of buffer numbers, it will be used by Airline to hide buffers.
+
+ if !s:xtabline_filtering | return | endif
+
+ let g:airline#extensions#tabline#exclude_buffers = []
+ let t:xtl_excluded = g:airline#extensions#tabline#exclude_buffers
+ let t:xtl_accepted = [] | let accepted = t:xtl_accepted
+ let previews = g:xtabline_include_previews
+
+ " bufnr(0) is the alternate buffer
+ for buf in range(1, bufnr("$"))
+
+ if !buflisted(buf) | continue | endif
+
+ " get the path
+ let path = expand("#".buf.":p")
+
+ " confront with the cwd
+ if !previews && path =~ "^".getcwd()
+ call add(accepted, buf)
+ elseif previews && path =~ getcwd()
+ call add(accepted, buf)
+ else
+ call add(t:xtl_excluded, buf)
+ endif
+ endfor
+
+ call s:RefreshTabline()
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#next_buffer(nr)
+ """Switch to next visible buffer."""
+
+ if ( s:NotEnoughBuffers() || !s:xtabline_filtering ) | return | endif
+ let accepted = t:xtl_accepted
+
+ let ix = index(accepted, bufnr("%"))
+ let target = ix + a:nr
+ let total = len(accepted)
+
+ if ix == -1
+ " not in index, go back to most recent or back to first
+ if s:most_recent == -1 || s:most_recent >= total
+ let s:most_recent = 0
+ endif
+
+ elseif target >= total
+ " over last buffer
+ while target >= total | let target -= total | endwhile
+ let s:most_recent = target
+
+ else
+ let s:most_recent = target
+ endif
+
+ return ":buffer " . accepted[s:most_recent] . "\<cr>"
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#prev_buffer(nr)
+ """Switch to previous visible buffer."""
+
+ if ( s:NotEnoughBuffers() || !s:xtabline_filtering ) | return | endif
+ let accepted = t:xtl_accepted
+
+ let ix = index(accepted, bufnr("%"))
+ let target = ix - a:nr
+ let total = len(accepted)
+
+ if ix == -1
+ " not in index, go back to most recent or back to first
+ if s:most_recent == -1 || s:most_recent >= total
+ let s:most_recent = 0
+ endif
+
+ elseif target < 0
+ " before first buffer
+ while target < 0 | let target += total | endwhile
+ let s:most_recent = target
+
+ else
+ let s:most_recent = target
+ endif
+
+ return ":buffer " . accepted[s:most_recent] . "\<cr>"
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#select_buffer(nr)
+ """Switch to visible buffer in the tabline with [count]."""
+
+ if ( a:nr == 0 || !s:xtabline_filtering ) | execute g:xtabline_alt_action | return | endif
+ let accepted = t:xtl_accepted
+
+ if (a:nr > len(accepted)) || s:NotEnoughBuffers() || accepted[a:nr - 1] == bufnr("%")
+ return
+ else
+ let g:xtabline_changing_buffer = 1
+ execute "buffer ".accepted[a:nr - 1]
+ endif
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! s:TabBuffers()
+ """Return a list of buffers names for this tab."""
+
+ return map(copy(t:xtl_accepted), 'bufname(v:val)')
+endfunction
+
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Helper functions
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! s:NotEnoughBuffers()
+ """Just return if there aren't enough buffers."""
+
+ if len(t:xtl_accepted) < 2
+ if index(t:xtl_accepted, bufnr("%")) == -1
+ return
+ elseif !len(t:xtl_accepted)
+ call airline#util#warning("No available buffers for this tab.")
+ else
+ call airline#util#warning("No other available buffers for this tab.")
+ endif
+ return 1
+ endif
+endfunction
+
+function! s:RefreshTabline()
+ call airline#extensions#tabline#buflist#invalidate()
+endfunction
+
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" TabPageCd
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+" tabpagecd - Turn :cd into :tabpagecd, to use one tab page per project
+" expanded version by mg979
+" Copyright (C) 2012-2013 Kana Natsuno <http://whileimautomaton.net/>
+" Copyright (C) 2018 Gianmaria Bajo <mg1979.git@gmail.com>
+" License: MIT License
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! s:InitCwds()
+ if !exists('g:xtab_cwds') | let g:xtab_cwds = [] | endif
+
+ while len(g:xtab_cwds) < tabpagenr("$")
+ call add(g:xtab_cwds, getcwd())
+ endwhile
+ let s:state = 1
+ let t:cwd = getcwd()
+ let s:last_tab = 0
+ call airline#extensions#tabline#xtabline#filter_buffers()
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#update_obsession()
+ let string = 'let g:xtab_cwds = '.string(g:xtab_cwds).' | call airline#extensions#tabline#xtabline#update_obsession()'
+ if !exists('g:obsession_append')
+ let g:obsession_append = [string]
+ else
+ call filter(g:obsession_append, 'v:val !~# "^let g:xtab_cwds"')
+ call add(g:obsession_append, string)
+ endif
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! s:Do(action)
+ let arg = a:action
+ if !s:state | call s:InitCwds() | return | endif
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ if arg == 'new'
+
+ call insert(g:xtab_cwds, getcwd(), tabpagenr()-1)
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ elseif arg == 'enter'
+
+ let t:cwd =g:xtab_cwds[tabpagenr()-1]
+
+ cd `=t:cwd`
+ call airline#extensions#tabline#xtabline#filter_buffers()
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ elseif arg == 'leave'
+
+ let t:cwd = getcwd()
+ let g:xtab_cwds[tabpagenr()-1] = t:cwd
+ let s:last_tab = tabpagenr() - 1
+
+ if !exists('t:name') | let t:name = t:cwd | endif
+ let s:most_recent_tab = {'cwd': t:cwd, 'name': t:name, 'buffers': s:TabBuffers()}
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ elseif arg == 'close'
+
+ let s:most_recently_closed_tab = copy(s:most_recent_tab)
+ call remove(g:xtab_cwds, s:last_tab)
+ endif
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ call airline#extensions#tabline#xtabline#update_obsession()
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""