Work in progress personal theme.
authorIain Patterson <me@iain.cx>
Mon, 11 Aug 2008 09:03:12 +0000 (09:03 +0000)
committerIain Patterson <me@iain.cx>
Mon, 11 Aug 2008 09:03:12 +0000 (09:03 +0000)
git-svn-id: https://svn.cambridge.iain.cx/profile/trunk@129 6be0d1a5-5cfe-0310-89b6-964be062b18b

.vim/colors/iain.vim [new file with mode: 0644]

diff --git a/.vim/colors/iain.vim b/.vim/colors/iain.vim
new file mode 100644 (file)
index 0000000..e23c8dd
--- /dev/null
@@ -0,0 +1,291 @@
+" $Id$
+" Mangling for terminal code ripped from desert256.
+
+if version > 580
+    " no guarantees for version 5.8 and below, but this makes it stop
+    " complaining
+    "hi clear
+    if exists("syntax_on")
+        syntax reset
+    endif
+endif
+let g:colors_name="iain"
+
+if has("gui_running") || &t_Co == 88 || &t_Co == 256
+    " functions {{{
+    " returns an approximate grey index for the given grey level
+    fun <SID>grey_number(x)
+        if &t_Co == 88
+            if a:x < 23
+                return 0
+            elseif a:x < 69
+                return 1
+            elseif a:x < 103
+                return 2
+            elseif a:x < 127
+                return 3
+            elseif a:x < 150
+                return 4
+            elseif a:x < 173
+                return 5
+            elseif a:x < 196
+                return 6
+            elseif a:x < 219
+                return 7
+            elseif a:x < 243
+                return 8
+            else
+                return 9
+            endif
+        else
+            if a:x < 14
+                return 0
+            else
+                let l:n = (a:x - 8) / 10
+                let l:m = (a:x - 8) % 10
+                if l:m < 5
+                    return l:n
+                else
+                    return l:n + 1
+                endif
+            endif
+        endif
+    endfun
+
+    " returns the actual grey level represented by the grey index
+    fun <SID>grey_level(n)
+        if &t_Co == 88
+            if a:n == 0
+                return 0
+            elseif a:n == 1
+                return 46
+            elseif a:n == 2
+                return 92
+            elseif a:n == 3
+                return 115
+            elseif a:n == 4
+                return 139
+            elseif a:n == 5
+                return 162
+            elseif a:n == 6
+                return 185
+            elseif a:n == 7
+                return 208
+            elseif a:n == 8
+                return 231
+            else
+                return 255
+            endif
+        else
+            if a:n == 0
+                return 0
+            else
+                return 8 + (a:n * 10)
+            endif
+        endif
+    endfun
+
+    " returns the palette index for the given grey index
+    fun <SID>grey_color(n)
+        if &t_Co == 88
+            if a:n == 0
+                return 16
+            elseif a:n == 9
+                return 79
+            else
+                return 79 + a:n
+            endif
+        else
+            if a:n == 0
+                return 16
+            elseif a:n == 25
+                return 231
+            else
+                return 231 + a:n
+            endif
+        endif
+    endfun
+
+    " returns an approximate color index for the given color level
+    fun <SID>rgb_number(x)
+        if &t_Co == 88
+            if a:x < 69
+                return 0
+            elseif a:x < 172
+                return 1
+            elseif a:x < 230
+                return 2
+            else
+                return 3
+            endif
+        else
+            if a:x < 75
+                return 0
+            else
+                let l:n = (a:x - 55) / 40
+                let l:m = (a:x - 55) % 40
+                if l:m < 20
+                    return l:n
+                else
+                    return l:n + 1
+                endif
+            endif
+        endif
+    endfun
+
+    " returns the actual color level for the given color index
+    fun <SID>rgb_level(n)
+        if &t_Co == 88
+            if a:n == 0
+                return 0
+            elseif a:n == 1
+                return 139
+            elseif a:n == 2
+                return 205
+            else
+                return 255
+            endif
+        else
+            if a:n == 0
+                return 0
+            else
+                return 55 + (a:n * 40)
+            endif
+        endif
+    endfun
+
+    " returns the palette index for the given R/G/B color indices
+    fun <SID>rgb_color(x, y, z)
+        if &t_Co == 88
+            return 16 + (a:x * 16) + (a:y * 4) + a:z
+        else
+            return 16 + (a:x * 36) + (a:y * 6) + a:z
+        endif
+    endfun
+
+    " returns the palette index to approximate the given R/G/B color levels
+    fun <SID>color(r, g, b)
+        " get the closest grey
+        let l:gx = <SID>grey_number(a:r)
+        let l:gy = <SID>grey_number(a:g)
+        let l:gz = <SID>grey_number(a:b)
+
+        " get the closest color
+        let l:x = <SID>rgb_number(a:r)
+        let l:y = <SID>rgb_number(a:g)
+        let l:z = <SID>rgb_number(a:b)
+
+        if l:gx == l:gy && l:gy == l:gz
+            " there are two possibilities
+            let l:dgr = <SID>grey_level(l:gx) - a:r
+            let l:dgg = <SID>grey_level(l:gy) - a:g
+            let l:dgb = <SID>grey_level(l:gz) - a:b
+            let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
+            let l:dr = <SID>rgb_level(l:gx) - a:r
+            let l:dg = <SID>rgb_level(l:gy) - a:g
+            let l:db = <SID>rgb_level(l:gz) - a:b
+            let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
+            if l:dgrey < l:drgb
+                " use the grey
+                return <SID>grey_color(l:gx)
+            else
+                " use the color
+                return <SID>rgb_color(l:x, l:y, l:z)
+            endif
+        else
+            " only one possibility
+            return <SID>rgb_color(l:x, l:y, l:z)
+        endif
+    endfun
+
+    " returns the palette index to approximate the 'rrggbb' hex string
+    fun <SID>rgb(rgb)
+        let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0
+        let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0
+        let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0
+
+        return <SID>color(l:r, l:g, l:b)
+    endfun
+
+    " sets the highlighting for the given group
+    fun <SID>X(group, fg, bg, attr)
+        if a:fg != ""
+            exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)
+        endif
+        if a:bg != ""
+            exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)
+        endif
+        if a:attr != ""
+            exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
+        endif
+    endfun
+    " }}}
+    call <SID>X("ErrorMsg", "ffffff", "287eff", "")
+    call <SID>X("Visual", "ffffff", "8080ff", "")
+    call <SID>X("VisualNOS", "", "8080ff", "underline")
+    call <SID>X("Todo", "d14a14", "1248d1", "")
+    call <SID>X("Search", "90fff0", "2050d0", "")
+    call <SID>X("IncSearch", "b0ffff", "2050d0", "")
+    call <SID>X("SpecialKey", "00ffff", "", "")
+    call <SID>X("Directory", "00ffff", "", "")
+    call <SID>X("Title", "ff00ff", "", "none")
+    call <SID>X("WarningMsg", "ff0000", "", "")
+    call <SID>X("WildMenu", "ffff00", "000000", "")
+    call <SID>X("ModeMsg", "22cce2", "", "")
+    call <SID>X("Question", "00ff00", "", "none")
+    call <SID>X("NonText", "0030ff", "", "")
+    call <SID>X("VertSplit", "000000", "a9a9a9", "none")
+    call <SID>X("Folded", "808080", "000040", "")
+    call <SID>X("FoldColumn", "808080", "000040", "")
+    call <SID>X("LineNr", "90f020", "", "")
+    call <SID>X("DiffAdd", "00008b", "", "")
+    call <SID>X("DiffChange", "8b008b", "", "")
+    call <SID>X("DiffDelete", "0000ff", "008b8b", "bold")
+    call <SID>X("DiffText", "", "ff0000", "bold")
+    call <SID>X("Cursor", "000000", "ffff00", "")
+    call <SID>X("lCursor", "000000", "ffffff", "")
+    call <SID>X("Comment", "80a0ff", "", "")
+    "call <SID>X("Constant", "ffa0a0", "", "")
+    "call <SID>X("Special", "ffa500", "", "")
+    "call <SID>X("Identifier", "40ffff", "", "")
+    "call <SID>X("Statement", "ffff60", "", "none")
+    "call <SID>X("PreProc", "ff80ff", "", "none")
+    "call <SID>X("Type", "60ff60", "", "none")
+    call <SID>X("Ignore", "ffffff", "", "")
+
+    hi Repeat ctermfg=yellow cterm=none
+    call <SID>X("Label", "90f020", "", "none")
+    call <SID>X("Conditional", "ffff60", "", "none")
+    call <SID>X("Statement", "ffff00", "", "none")
+
+    hi Comment ctermfg=cyan cterm=none
+
+    hi Function ctermfg=darkgreen cterm=none
+    call <SID>X("Identifier", "40ffff", "", "none")
+
+    hi Character ctermfg=darkmagenta cterm=none
+    hi String ctermfg=darkmagenta cterm=bold
+    hi Float ctermfg=magenta cterm=bold
+    hi Number ctermfg=magenta cterm=none
+    hi Boolean ctermfg=darkred cterm=bold
+    call <SID>X("Constant", "ffa500", "", "none")
+
+    hi SpecialChar ctermfg=green cterm=none
+    call <SID>X("Special", "ff0000", "", "none")
+
+    hi Include ctermfg=red cterm=none
+    hi Macro ctermfg=red cterm=none
+    hi PreCondit ctermfg=darkred cterm=none
+    hi PreProc ctermfg=darkred cterm=bold
+
+    hi StorageClass ctermfg=green cterm=none
+    hi Structure ctermfg=darkgreen cterm=bold
+    hi Type ctermfg=darkgreen cterm=none
+
+    " Fix up shell stuff.
+    hi link shShellVariables Identifier
+
+    " Fix up Perl stuff.
+endif
+
+" vim: set fdl=0 fdm=marker: