aboutsummaryrefslogtreecommitdiff
path: root/dotfiles/.vim/autoload/airline/extensions/tabline/buflist.vim
blob: a944cb92ca9a2833e2f21fb17f2c1e4a0439c192 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
" MIT License. Copyright (c) 2013-2018 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 bpath = fnamemodify(bufname(a:nr), ":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