+" Cycle between hex and decimal display of toolbar stuff.
+fun! Cycle_HexStatusLine()
+ call Iain_Vars()
+ let b:iainhex = ! b:iainhex
+ call Show_StatusLine()
+endfun
+
+" Cycle between number mode.
+" FIXME: Toggling in a split window doesn't work properly. We need to track
+" the number of windows and number modes. Something for later...
+fun! Cycle_Number()
+ if &number
+ " Restore width.
+ if &t_WS =~ '^\e.'
+ " Track changes.
+ let g:numberchanges=g:numberchanges-1
+ if g:numberchanges<0
+ g:numberchanges=0
+ endif
+
+ " Change size back if this was the last window.
+ if g:numberchanges == 0
+ let &columns=g:numbercols
+ endif
+ endif
+ set nonumber
+ else
+ " Save width between number toggling.
+ if &t_WS =~ '^\e'
+ " Expand if this was the first change.
+ if g:numberchanges == 0
+ let g:numbercols=&columns
+ let &columns=&columns+&numberwidth
+ endif
+
+ " Track changes.
+ let g:numberchanges=g:numberchanges+1
+ endif
+ set number
+ endif
+endfun
+
+" Toggle case-sensitivity.
+fun! Invert_Case()
+ let &ic = ! &ic
+endfun
+
+" We'll use Q for various commands. Unmap it.
+map Q <Nop>
+
+" Change to ts=2 with Q2.
+map Q2 :se ts=2<CR>:<CR>
+" Change to ts=4 with Q4.
+map Q4 :se ts=4<CR>:<CR>
+" Change to ts=8 with Q8.
+map Q8 :se ts=8<CR>:<CR>
+" Change to ts=16 with Q6.
+map Q6 :se ts=16<CR>:<CR>
+" Change to ts=32 with Q3.
+map Q3 :se ts=32<CR>:<CR>
+" Change foldmethod with Qf.
+map Qf :se foldenable!<CR>:<CR>
+" Toggle paste mode with Qp.
+map Qp :se paste!<CR>:<CR>
+" Swap hex/decimal statusline with Qx
+map Qx :call Cycle_HexStatusLine()<CR>:<CR>
+" Swap case-sensitivity with Qc.
+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>
+" Toggle tags with Qt.
+map Qt :Tlist<CR>
+
+" Leaving Perl mode.
+fun! PerlMode_unmap()
+ set cinkeys=oldcinkeys
+ set cinwords=oldcinwords
+ set foldmethod=manual