" updated as a side-effect.
call Mapping("s", ":filetype detect<CR>:<CR>")
+fun! <SID>Iain_Colour(colour)
+ if &t_Co == 88
+ if a:colour == "darkblue"
+ return 17
+ elseif a:colour == "darkmagenta"
+ return 33
+ elseif a:colour == "darkred"
+ return 32
+ elseif a:colour == "red"
+ return 64
+ endif
+ elseif &t_Co == 256
+ if a:colour == "darkblue"
+ return 17
+ elseif a:colour == "darkmagenta"
+ return 90
+ elseif a:colour == "darkred"
+ return 88
+ elseif a:colour == "red"
+ return 196
+ endif
+ else
+ return a:colour
+ endif
+endfun
+
" Change status bar colour when various things happen.
+" Flags: H/h: Cursor held/moved.
+" F/f: Focus gained/lost.
+" I/i: Insert mode entered/left.
fun! Highlight_StatusLine(flag)
" Get current status.
call Iain_Vars()
let re = "[" . tolower(a:flag) . toupper(a:flag) . "]"
let b:iainstatus = substitute(b:iainstatus, re, a:flag, "")
+ let l:normalcolour = "darkblue"
+ let l:editingcolour = "darkmagenta"
+ let l:warningcolour = "darkred"
+ let l:readonlycolour = "red"
+
" Default colour.
- let s:colour = "darkblue"
- let s:termcolour = ""
- let s:term88colour = "17"
- let s:term256colour = "17"
+ let l:colour = l:normalcolour
" 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 = "darkred"
- let s:term88colour = "32"
- let s:term256colour = "88"
+ let l:colour = l:warningcolour
else
- let s:colour = "darkmagenta"
- let s:term88colour = "33"
- let s:term256colour = "90"
+ let l:colour = l:editingcolour
endif
endif
else
if b:iainstatus =~# "I"
" Regular insert mode.
- let s:colour = "darkmagenta"
- let s:term88colour = "33"
- let s:term256colour = "90"
+ let l:colour = l:editingcolour
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
+ " Override again if readonly.
+ if l:colour != l:normalcolour
+ if getbufvar("", "&ro")
+ let l:colour = l:readonlycolour
+ endif
endif
- exec "highlight StatusLine guifg=white guibg=" . s:colour . " ctermbg=white ctermfg=" . s:termcolour
+ let l:termcolour = <SID>Iain_Colour(l:colour)
+
+ exec "highlight StatusLine guifg=white guibg=" . l:colour . " ctermbg=white ctermfg=" . l:termcolour
endfun
call Highlight_StatusLine("")