mirror of
https://github.com/vim-airline/vim-airline.git
synced 2024-11-27 02:33:56 +08:00
82 lines
2.5 KiB
VimL
82 lines
2.5 KiB
VimL
" MIT License. Copyright (c) 2013-2020 Bailey Ling et al.
|
|
" vim: et ts=2 sts=2 sw=2
|
|
|
|
scriptencoding utf-8
|
|
|
|
function! airline#extensions#tabline#buflist#invalidate()
|
|
unlet! s:current_buffer_list
|
|
endfunction
|
|
|
|
function! airline#extensions#tabline#buflist#clean()
|
|
call airline#extensions#tabline#buflist#invalidate()
|
|
call airline#extensions#tabline#buffers#invalidate()
|
|
endfunction
|
|
|
|
" paths in excludes list
|
|
function! s:ExcludePaths(nr, exclude_paths)
|
|
let bname = bufname(a:nr)
|
|
if empty(bname)
|
|
return 0
|
|
endif
|
|
let bpath = fnamemodify(bname, ":p")
|
|
for f in a:exclude_paths
|
|
if bpath =~# f | return 1 | endif
|
|
endfor
|
|
endfunction
|
|
|
|
" other types to exclude
|
|
function! s:ExcludeOther(nr, exclude_preview)
|
|
if (getbufvar(a:nr, 'current_syntax') == 'qf') ||
|
|
\ (a:exclude_preview && getbufvar(a:nr, '&bufhidden') == 'wipe'
|
|
\ && getbufvar(a:nr, '&buftype') == 'nofile')
|
|
return 1 | endif
|
|
endfunction
|
|
|
|
function! airline#extensions#tabline#buflist#list()
|
|
if exists('s:current_buffer_list')
|
|
return s:current_buffer_list
|
|
endif
|
|
|
|
let exclude_buffers = get(g:, 'airline#extensions#tabline#exclude_buffers', [])
|
|
let exclude_paths = get(g:, 'airline#extensions#tabline#excludes', [])
|
|
let exclude_preview = get(g:, 'airline#extensions#tabline#exclude_preview', 1)
|
|
|
|
let list = (exists('g:did_bufmru') && g:did_bufmru) ? BufMRUList() : range(1, bufnr("$"))
|
|
|
|
let buffers = []
|
|
" If this is too slow, we can switch to a different algorithm.
|
|
" Basically branch 535 already does it, but since it relies on
|
|
" BufAdd autocommand, I'd like to avoid this if possible.
|
|
for nr in list
|
|
if buflisted(nr)
|
|
" Do not add to the bufferlist, if either
|
|
" 1) bufnr is exclude_buffers list
|
|
" 2) buffername matches one of exclude_paths patterns
|
|
" 3) buffer is a quickfix buffer
|
|
" 4) when excluding preview windows:
|
|
" 'bufhidden' == wipe
|
|
" 'buftype' == nofile
|
|
" 5) ignore buffers matching airline#extensions#tabline#ignore_bufadd_pat
|
|
|
|
" check buffer numbers first
|
|
if index(exclude_buffers, nr) >= 0
|
|
continue
|
|
" check paths second
|
|
elseif !empty(exclude_paths) && s:ExcludePaths(nr, exclude_paths)
|
|
continue
|
|
" ignore buffers matching airline#extensions#tabline#ignore_bufadd_pat
|
|
elseif airline#util#ignore_buf(bufname(nr))
|
|
continue
|
|
" check other types last
|
|
elseif s:ExcludeOther(nr, exclude_preview)
|
|
continue
|
|
endif
|
|
|
|
call add(buffers, nr)
|
|
endif
|
|
endfor
|
|
|
|
let s:current_buffer_list = buffers
|
|
return buffers
|
|
endfunction
|