Back compatibility.
authorIain Patterson <me@iain.cx>
Thu, 21 May 2009 14:16:29 +0000 (15:16 +0100)
committerIain Patterson <me@iain.cx>
Thu, 21 May 2009 15:50:37 +0000 (16:50 +0100)
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.

.vimrc

diff --git a/.vimrc b/.vimrc
index ab318da..f885cbc 100644 (file)
--- a/.vimrc
+++ b/.vimrc
@@ -486,76 +486,76 @@ endif
 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")