From: Iain Patterson Date: Thu, 21 May 2009 14:16:29 +0000 (+0100) Subject: Back compatibility. X-Git-Url: http://git.iain.cx/?a=commitdiff_plain;h=3c2f9e59a2f2d1297ac9d05aa9c64a78d8c554e8;p=profile.git Back compatibility. Tab line functions were enclosed in a conditional block for version >= "700" as they are not available before Vim 7. Earlier versions still parse them, however. Vim 6 was reading the functions in, barfing on the :for/:endfor blocks and spitting out an error about :return not inside a function later on. For Vim 6 the return WASN'T inside a function because the function wasn't defined. As a workaround all :for/:endfor blocks have been replaced with :while/:endwhile blocks. Vim 6 is now happy. --- diff --git a/.vimrc b/.vimrc index ab318da..f885cbc 100644 --- a/.vimrc +++ b/.vimrc @@ -486,76 +486,76 @@ endif if version >= "700" version 7.0 +" Helper to show tab name. +fun! 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! 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 = TabName(bufname(l:buflist[l:winnr - 1]), 0) + let l:modified = 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 = TabName(bufname(l:buflist[l:winnr - 1]), 1) + let l:modified = 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")