aboutsummaryrefslogtreecommitdiff
path: root/.vim/autoload/airline/extensions/tabline/formatters/unique_tail.vim
diff options
context:
space:
mode:
Diffstat (limited to '.vim/autoload/airline/extensions/tabline/formatters/unique_tail.vim')
-rw-r--r--.vim/autoload/airline/extensions/tabline/formatters/unique_tail.vim41
1 files changed, 41 insertions, 0 deletions
diff --git a/.vim/autoload/airline/extensions/tabline/formatters/unique_tail.vim b/.vim/autoload/airline/extensions/tabline/formatters/unique_tail.vim
new file mode 100644
index 0000000..3e61b60
--- /dev/null
+++ b/.vim/autoload/airline/extensions/tabline/formatters/unique_tail.vim
@@ -0,0 +1,41 @@
+" 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#formatters#unique_tail#format(bufnr, buffers)
+ let duplicates = {}
+ let tails = {}
+ let map = {}
+ for nr in a:buffers
+ let name = bufname(nr)
+ if empty(name)
+ let map[nr] = '[No Name]'
+ else
+ let tail = fnamemodify(name, ':s?/\+$??:t')
+ if has_key(tails, tail)
+ let duplicates[nr] = nr
+ endif
+ let tails[tail] = 1
+ let map[nr] = airline#extensions#tabline#formatters#default#wrap_name(nr, tail)
+ endif
+ endfor
+
+ let fmod = get(g:, 'airline#extensions#tabline#fnamemod', ':p:.')
+ for nr in values(duplicates)
+ let name = bufname(nr)
+ let fnamecollapse = get(g:, 'airline#extensions#tabline#fnamecollapse', 1)
+ if fnamecollapse
+ let map[nr] = airline#extensions#tabline#formatters#default#wrap_name(nr, substitute(fnamemodify(name, fmod), '\v\w\zs.{-}\ze(\\|/)', '', 'g'))
+ else
+ let map[nr] = airline#extensions#tabline#formatters#default#wrap_name(nr, fnamemodify(name, fmod))
+ endif
+ endfor
+
+ if has_key(map, a:bufnr)
+ return map[a:bufnr]
+ endif
+
+ " if we get here, the buffer list isn't in sync with the selected buffer yet, fall back to the default
+ return airline#extensions#tabline#formatters#default#format(a:bufnr, a:buffers)
+endfunction