aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugin/tabline.vim69
1 files changed, 69 insertions, 0 deletions
diff --git a/plugin/tabline.vim b/plugin/tabline.vim
new file mode 100644
index 0000000..c5781e8
--- /dev/null
+++ b/plugin/tabline.vim
@@ -0,0 +1,69 @@
+" CustomTabLine
+"
+" A custom tabline that displays tab numbers for easier navigation between tabs.
+"
+" CHANGELOG:
+" 2014.06.30:
+" * Initial version. Very basic. Based on the sample tabline
+" implementation in vim help. Shows the tab number, filename without
+" path, modification flag, and separator.
+"
+" TODO:
+" 2014.06.30:
+" - Truncate filenames when the number of characters in the tabline exceeds the
+" width of the window.
+" - Improve separator such that it appears between tabs instead of latched onto
+" the preceeding tab.
+"
+
+function! CustomTabLine()
+ let s = ''
+ for i in range(tabpagenr('$'))
+ " select the highlighting
+ if i + 1 == tabpagenr()
+ let s .= '%#TabLineSel#'
+ else
+ let s .= '%#TabLine#'
+ endif
+
+ " set the tab page number (for mouse clicks)
+ let s .= '%' . (i + 1) . 'T'
+
+ " the label is made by CustomTabLabel()
+ let s .= ' %{CustomTabLabel(' . (i + 1) . ')}'
+ endfor
+
+ " after the last tab fill with TabLineFill and reset tab page nr
+ let s .= '%#TabLineFill#%T'
+
+ " right-align the label to close the current tab page
+ if tabpagenr('$') > 1
+ let s .= '%=%#TabLine#%999XX'
+ endif
+
+ return s
+endfunction
+
+function! CustomTabLabel(n)
+ let buflist = tabpagebuflist(a:n)
+ let winnr = tabpagewinnr(a:n)
+ let label = ''
+ let tab_number = a:n . ': '
+ let filename = fnamemodify(bufname(buflist[winnr - 1]), ':p:t')
+
+ if filename == ''
+ let filename = '[No Name]'
+ endif
+
+ let label .= tab_number . filename . ' '
+
+ if getbufvar(buflist[winnr - 1], "&mod")
+ let label .= '[+] '
+ endif
+
+ let label .= '|'
+
+ return label
+endfunction
+
+set tabline=%!CustomTabLine()