if version >= "700"
version 7.0
+" Helper to show tab name.
+fun! <SID>TabName(label, gui)
+ let l:label = a:label
+ if l:label == ""
+ let l:label = "No Name"
+ if a:gui
+ let l:label = "[" . l:label . "]"
+ endif
+ else
+ let l:label = fnamemodify(l:label, ":t")
+ if strlen(l:label) >= 18
+ let l:label = l:label[0:17] . ".."
+ endif
+ endif
+ return l:label
+endfun
+
+" Find out if any buffer was modified.
+fun! <SID>TabModified(buflist)
+ let l:i = 0
+ while i < len(a:buflist)
+ if getbufvar(a:buflist[l:i], "&modified") == 1
+ return "+"
+ endif
+ let l:i = l:i + 1
+ endwhile
+ return ""
+endfun
+
" Tab line.
fun! Show_TabLine()
- let s = "%#TabLineFill#Tabs:"
+ let l:s = "%#TabLineFill#Tabs:"
- for i in range(tabpagenr("$"))
- let n = i + 1
+ let l:i = 0
+ while l:i < tabpagenr("$")
+ let l:i = l:i + 1
" Get the label.
- let buflist = tabpagebuflist(n)
- let winnr = tabpagewinnr(n)
- let label = bufname(buflist[winnr - 1])
- if label == ""
- let label = "No Name"
- else
- let label = fnamemodify(label, ":t")
- if strlen(label) >= 18
- let label = label[0:17] . ".."
- endif
- endif
-
- " Find out if any buffer was modified.
- let modified = ''
- for j in buflist
- if getbufvar(j, "&modified") == 1
- let modified = '+'
- break
- endif
- endfor
+ let l:buflist = tabpagebuflist(l:i)
+ let l:winnr = tabpagewinnr(l:i)
+ let l:n = tabpagewinnr(l:i, "$")
+ let l:label = <SID>TabName(bufname(l:buflist[l:winnr - 1]), 0)
+ let l:modified = <SID>TabModified(l:buflist)
" Choose highlighting.
- if n == tabpagenr()
- let s .= "%#TabLineSel#[" . n . modified . " " . label . "]"
+ if l:i == tabpagenr()
+ let l:s .= "%#TabLineSel#[" . l:n . l:modified . " " . l:label . "]"
else
- let s .= "%#TabLine# " . n . modified . " " . label . " "
+ let l:s .= "%#TabLine# " . l:n . l:modified . " " . l:label . " "
endif
- endfor
+ endwhile
" Padding.
- let s .= "%#TabLine#%T"
- return s
+ let l:s .= "%#TabLine#%T"
+ return l:s
endfun
" Per tab label for the GUI.
fun! Show_GUITabLine()
- let s = ""
- let buflist = tabpagebuflist(v:lnum)
- let winnr = tabpagewinnr(v:lnum)
-
- let label = bufname(buflist[winnr - 1])
- if label == ""
- let label = "[No Name]"
- else
- let label = fnamemodify(label, ":t")
- if strlen(label) >= 18
- let label = label[0:17] . ".."
- endif
- endif
-
- for j in buflist
- if getbufvar(j, "&modified") == 1
- let s .= "+"
- break
- endif
- endfor
-
- let s .= " " . label
- return s
+ let l:buflist = tabpagebuflist(v:lnum)
+ let l:winnr = tabpagewinnr(v:lnum)
+ let l:s = tabpagewinnr(v:lnum, "$")
+ let l:label = <SID>TabName(bufname(l:buflist[l:winnr - 1]), 1)
+ let l:modified = <SID>TabModified(l:buflist)
+
+ let l:s .= l:modified . " " . l:label
+ return l:s
endfun
-set tabline=%!Show_TabLine()
-set guitablabel=%!Show_GUITabLine()
+se tabline=%!Show_TabLine()
+se guitablabel=%!Show_GUITabLine()
au CursorHoldI * call Highlight_StatusLine("H")
au CursorMovedI * call Highlight_StatusLine("h")