Tab bar.
[profile.git] / .vimrc
diff --git a/.vimrc b/.vimrc
index 9da37fe..ab318da 100644 (file)
--- a/.vimrc
+++ b/.vimrc
@@ -100,7 +100,7 @@ se hlsearch
 se titlestring=%{Show_TitleString()}
 
 " Syntax highlighting.  New versions will use syn enable instead.
-if version < 600
+if version < "600"
   syn on
 endif
 
@@ -216,7 +216,7 @@ fun! Resize_Columns(op)
   endif
 
   " Vim 5 hardcodes the size of numbers column to 8.
-  if version >= 600
+  if version >= "700"
     let l:numberwidth = &numberwidth
   else
     let l:numberwidth = 8
@@ -230,21 +230,23 @@ fun! Number()
   call Iain_Vars()
   let &number = ! &number
 
-  let l:i = 0
-  let l:num_numbers = 0
-  while l:i <= winnr("$")
-    if getwinvar(l:i, "&number") == 1
-      let l:num_numbers = l:num_numbers + 1
+  if version >= "700"
+    let l:i = 0
+    let l:num_numbers = 0
+    while l:i <= winnr("$")
+      if getwinvar(l:i, "&number") == 1
+        let l:num_numbers = l:num_numbers + 1
+      endif
+      let l:i = l:i + 1
+    endwhile
+
+    if l:num_numbers == 0
+      let g:iainextracolumns = 0
+      call Resize_Columns("-")
+    elseif g:iainextracolumns == 0
+      let g:iainextracolumns = 1
+      call Resize_Columns("+")
     endif
-    let l:i = l:i + 1
-  endwhile
-
-  if l:num_numbers == 0
-    let g:iainextracolumns = 0
-    call Resize_Columns("-")
-  elseif g:iainextracolumns == 0
-    let g:iainextracolumns = 1
-    call Resize_Columns("+")
   endif
 endfun
 
@@ -336,6 +338,7 @@ syn enable
 if has("gui_running")
   se guifont=DejaVu\ Sans\ Mono\ 10
   colo darkblue
+  hi LineNr guibg=#303030
 elseif &t_Co > 16
   try
     colo iain
@@ -345,6 +348,8 @@ endif
 if has("win32")
   se guifont=DejaVu_Sans_Mono:h10:cANSI
 endif
+hi! link TabLineSel StatusLine
+hi! link TabLine StatusLineNC
 
 " Ignore whitespace when diffing.
 se diffopt=filler,iwhite
@@ -481,6 +486,77 @@ endif
 if version >= "700"
 version 7.0
 
+" Tab line.
+fun! Show_TabLine()
+  let s = "%#TabLineFill#Tabs:"
+
+  for i in range(tabpagenr("$"))
+    let n = 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
+
+    " Choose highlighting.
+    if n == tabpagenr()
+      let s .= "%#TabLineSel#[" . n . modified . " " . label . "]"
+    else
+      let s .= "%#TabLine# " . n . modified . " " . label . " "
+    endif
+  endfor
+
+  " Padding.
+  let s .= "%#TabLine#%T"
+  return 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
+endfun
+
+set tabline=%!Show_TabLine()
+set guitablabel=%!Show_GUITabLine()
+
 au CursorHoldI * call Highlight_StatusLine("H")
 au CursorMovedI * call Highlight_StatusLine("h")
 au FocusGained * call Highlight_StatusLine("F")
@@ -495,13 +571,16 @@ se diffopt+=vertical
 se numberwidth=5
 
 " Add "previous tab" mapping as gb.
-map gb :tabPrev<CR>
+map gb :tabprevious<CR>:<CR>
 
 " Transparency.
 if has("gui_macvim")
   se transparency=15
 endif 
 
+" Yet more GUI options.  Add tabs.
+se go+=e
+
 " Perforce.
 let g:p4EnableMenu=1
 let g:p4Presets='P4CONFIG'