From 3ebbc57725e68e4b074fef8b8d4882c52ead79a1 Mon Sep 17 00:00:00 2001 From: mg979 Date: Sat, 3 Mar 2018 23:39:14 +0100 Subject: [PATCH] Changed buflist.vim algorithm --- .../airline/extensions/tabline/buflist.vim | 45 ++++++++++++++----- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/autoload/airline/extensions/tabline/buflist.vim b/autoload/airline/extensions/tabline/buflist.vim index 00bb2ee..99fc1e5 100644 --- a/autoload/airline/extensions/tabline/buflist.vim +++ b/autoload/airline/extensions/tabline/buflist.vim @@ -12,11 +12,28 @@ function! airline#extensions#tabline#buflist#list() return s:current_buffer_list endif - let excludes = get(g:, 'airline#extensions#tabline#excludes', []) - let exclude_preview = get(g:, 'airline#extensions#tabline#exclude_preview', 1) + let s:exclude_buffers = get(g:, 'airline#extensions#tabline#exclude_buffers', []) + let s:exclude_paths = get(g:, 'airline#extensions#tabline#exclude_paths', []) + let s:exclude_preview = get(g:, 'airline#extensions#tabline#exclude_preview', 1) let list = (exists('g:did_bufmru') && g:did_bufmru) ? BufMRUList() : range(1, bufnr("$")) + " paths in excludes list + fun! s:ExcludePaths(nr) + let bpath = fnamemodify(bufname(a:nr), ":p") + for f in s:exclude_paths + if bpath =~ fnamemodify(f, ":p") | return 1 | endif + endfor + endfun + + " other types to exclude + fun! s:ExcludeOther(nr) + if (getbufvar(a:nr, 'current_syntax') == 'qf') || + \ (s:exclude_preview && getbufvar(a:nr, '&bufhidden') == 'wipe' + \ && getbufvar(a:nr, '&buftype') == 'nofile') + return 1 | endif + endfun + 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 @@ -24,16 +41,24 @@ function! airline#extensions#tabline#buflist#list() for nr in list 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(excludes) && match(bufname(nr), join(excludes, '\|')) > -1) || - \ (getbufvar(nr, 'current_syntax') == 'qf') || - \ (exclude_preview && getbufvar(nr, '&bufhidden') == 'wipe' - \ && getbufvar(nr, '&buftype') == 'nofile') + " 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 + + " check buffer numbers first + if index(s:exclude_buffers, nr) >= 0 + continue + " check paths second + elseif !empty(s:exclude_paths) && s:ExcludePaths(nr) + continue + " check other types last + elseif s:ExcludeOther(nr) continue endif + call add(buffers, nr) endif endfor