First crack at auto resizing Qn mode for vim.
[profile.git] / .vimrc
diff --git a/.vimrc b/.vimrc
index 6a4438e..7b535bb 100755 (executable)
--- a/.vimrc
+++ b/.vimrc
@@ -15,6 +15,7 @@ se ignorecase
 se smartcase
 se shm=aot
 se laststatus=2
+se t_WS=\e[8;%p1%d;%p2%dt
 syn enable
 if has("gui_running")
   se guifont=Bitstream\ Vera\ Sans\ Mono\ 12
@@ -81,6 +82,23 @@ fun! Show_StatusLine()
   exec "set statusline=" . sl1 . hexformat . sl2
 endfun
 
+fun! Cycle_Number()
+  if &number
+    " Restore width.
+    if &t_WS =~ '^\e.'
+      let &columns=g:numbercols
+    endif
+    set nonumber
+  else
+    " Save width between number toggling.
+    if &t_WS =~ '^\e'
+      let g:numbercols=&columns
+      let &columns=&columns+5
+    endif
+    set number
+  endif
+endfun
+
 " Save the current window width so if we change it we can restore it
 " when we quit.
 let andyoldcols=&columns
@@ -124,6 +142,8 @@ map Qx :call Cycle_HexStatusLine()<CR>:<CR>
 map Qc :call Invert_Case()<CR>:<CR>
 " Cycle list styles with Ql.
 map Ql :call Cycle_List()<CR>:<CR>
+" Change number mode with Qn.
+map Qn :call Cycle_Number()<CR>:<CR>
 " Change to ts=2 with Q2.
 map Q2 :se ts=2<CR>:<CR>
 " Change to ts=4 with Q4.
@@ -136,8 +156,6 @@ map Q6 :se ts=16<CR>:<CR>
 map Q3 :se ts=32<CR>:<CR>
 " Change foldmethod with Qf.
 map Qf :se foldenable!<CR>:<CR>
-" Change number mode with Qn.
-map Qn :se number!<CR>:<CR>
 " Toggle paste mode with Qp.
 map Qp :se paste!<CR>:<CR>
 " Toggle tags with Qt.