David Blume's GitList
Repositories
dotfiles.git
Code
Commits
Branches
Tags
Search
Tree:
2c4452d
Branches
Tags
main
pathogen
remove-vim-airline
vim-airline-disabled
vim-powerline
dotfiles.git
.vim
pack
plugins
start
vim-airline
autoload
airline
extensions
tabline
xtabline.vim
Remove pathgen and use native vim packages. https://micro.quietmisdreavus.net/code/2020/03/15/vim8-packages/
David Blume
commited
2c4452d
at 2021-03-11 19:45:57
xtabline.vim
Blame
History
Raw
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " 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>:doautocmd BufAdd<cr>:pwd<cr> nnoremap <unique> <script> <Plug>XTablineCdDown1 :cd %:p:h:h<cr>:doautocmd BufAdd<cr>:pwd<cr> nnoremap <unique> <script> <Plug>XTablineCdDown2 :cd %:p:h:h:h<cr>:doautocmd BufAdd<cr>:pwd<cr> nnoremap <unique> <script> <Plug>XTablineCdDown3 :cd %:p:h:h:h:h<cr>:doautocmd BufAdd<cr>:pwd<cr> nnoremap <unique> <script> <Plug>XTablineCdHome :cd ~<cr>:doautocmd BufAdd<cr>:pwd<cr> endif endfunction """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Commands functions """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! airline#extensions#tabline#xtabline#toggle_tabs() """Toggle between tabs/buffers tabline.""" if tabpagenr("$") == 1 | echo "There is only one tab." | return | endif if g:airline#extensions#tabline#show_tabs let g:airline#extensions#tabline#show_tabs = 0 echo "Showing buffers" else let g:airline#extensions#tabline#show_tabs = 1 echo "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 = [] echo "Buffer filtering turned off" doautocmd BufAdd else let s:xtabline_filtering = 1 call airline#extensions#tabline#xtabline#filter_buffers() echo "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') echo "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) echo "No available buffers for this tab." else echo "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 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""