31906ac7b2
This should make the buflist algorithm faster. Also there is an alternative implementation in branch 535 available, which avoids looping over the complete range, I'll stay with the current approach, as it does not depend on BufAdd/BufDelete autocommands. details: instead of testing for buflisted() and bufexists() we only test for buflisted() because, this also tests for the existence of the buffer. Also instead of a second loop of the exclude patterns, we'll join all of them together with '\|' and check if they match the current buffer. The rest of the conditions have been joined into a single condition. This together made up an improvement of Orig: FUNCTION airline#extensions#tabline#buflist#list() Called 94 times Total time: 0.267305 Self time: 0.267305 New: FUNCTION airline#extensions#tabline#buflist#list() Called 85 times Total time: 0.124572 Self time: 0.124572
41 lines
1.3 KiB
VimL
41 lines
1.3 KiB
VimL
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
|
|
" vim: et ts=2 sts=2 sw=2
|
|
|
|
let s:excludes = get(g:, 'airline#extensions#tabline#excludes', [])
|
|
let s:exclude_preview = get(g:, 'airline#extensions#tabline#exclude_preview', 1)
|
|
|
|
function! airline#extensions#tabline#buflist#invalidate()
|
|
unlet! s:current_buffer_list
|
|
endfunction
|
|
|
|
function! airline#extensions#tabline#buflist#list()
|
|
if exists('s:current_buffer_list')
|
|
return s:current_buffer_list
|
|
endif
|
|
|
|
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 range(1, bufnr('$'))
|
|
if buflisted(nr)
|
|
" Do not add to the bufferlist, if either
|
|
" 1) buffername matches exclude pattern
|
|
" 2) buffer is a quickfix buffer
|
|
" 3) exclude preview windows (if 'bufhidden' == wipe
|
|
" and 'buftype' == nofile
|
|
if (!empty(s:excludes) && match(bufname(nr), join(s:excludes, '\|')) > -1) ||
|
|
\ (getbufvar(nr, 'current_syntax') == 'qf') ||
|
|
\ (s:exclude_preview && getbufvar(nr, '&bufhidden') == 'wipe'
|
|
\ && getbufvar(nr, '&buftype') == 'nofile')
|
|
continue
|
|
endif
|
|
call add(buffers, nr)
|
|
endif
|
|
endfor
|
|
|
|
let s:current_buffer_list = buffers
|
|
return buffers
|
|
endfunction
|
|
|