From: Iain Patterson Date: Thu, 18 Jun 2009 10:31:49 +0000 (+0100) Subject: Highlight readonly buffers. X-Git-Url: http://git.iain.cx/?a=commitdiff_plain;h=3e4ed13b68141823f47f93acc00572a823c56995;p=profile.git Highlight readonly buffers. Abstract colours of the statusline and show a red statusline when trying to edit a buffer with &ro set. --- diff --git a/.vimrc b/.vimrc index 5f81697..96f8a1f 100644 --- a/.vimrc +++ b/.vimrc @@ -434,7 +434,36 @@ call Mapping("q", ":call Cycle_Quickfix():") " updated as a side-effect. call Mapping("s", ":filetype detect:") +fun! 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() @@ -443,43 +472,40 @@ fun! Highlight_StatusLine(flag) 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 = Iain_Colour(l:colour) + + exec "highlight StatusLine guifg=white guibg=" . l:colour . " ctermbg=white ctermfg=" . l:termcolour endfun call Highlight_StatusLine("")