+" Change status bar colour when entering insert mode.
+fun! Highlight_StatusLine(flag)
+ " Get current status.
+ call Iain_Vars()
+
+ " Change the status based on the flag. XXX: Does Vim let us to do flags?
+ let re = "[" . tolower(a:flag) . toupper(a:flag) . "]"
+ let b:iainstatus = substitute(b:iainstatus, re, a:flag, "")
+
+ " Default colour.
+ let s:colour = "darkblue"
+ let s:termcolour = ""
+ let s:term88colour = "17"
+ let s:term256colour = "17"
+ " Maybe override depending on status.
+ if b:iainstatus =~# "H"
+ if b:iainstatus =~# "I"
+ " Held in insert mode. Add extra highlight if we don't have focus.
+ if b:iainstatus =~# "f"
+ let s:colour = "darkmagenta"
+ else
+ let s:colour = "darkred"
+ endif
+ let s:term88colour = "32"
+ let s:term256colour = "88"
+ endif
+ else
+ if b:iainstatus =~# "I"
+ " Regular insert mode.
+ let s:colour = "darkred"
+ let s:term88colour = "32"
+ let s:term256colour = "88"
+ endif
+ endif
+
+ if &t_Co == 88
+ let s:termcolour = s:term88colour
+ elseif &t_Co == 256
+ let s:termcolour = s:term256colour
+ else
+ let s:termcolour = s:colour
+ endif
+
+ exec "highlight StatusLine guifg=white guibg=" . s:colour . " ctermbg=white ctermfg=" . s:termcolour
+endfun
+
+au CursorHoldI * call Highlight_StatusLine("H")
+au CursorMovedI * call Highlight_StatusLine("h")
+au FocusGained * call Highlight_StatusLine("F")
+au FocusLost * call Highlight_StatusLine("f")
+au InsertEnter * call Highlight_StatusLine("I")
+au InsertLeave * call Highlight_StatusLine("i")
+call Highlight_StatusLine("")
+
+" Make diffs vertical by default.
+se diffopt+=vertical
+