Add solarized color theme
authorJoerg Jaspert <joerg@debian.org>
Sun, 3 Mar 2013 13:32:01 +0000 (14:32 +0100)
committerJoerg Jaspert <joerg@debian.org>
Sun, 3 Mar 2013 13:32:01 +0000 (14:32 +0100)
elisp/emacs-color-theme-solarized/LICENSE [new file with mode: 0644]
elisp/emacs-color-theme-solarized/README.md [new file with mode: 0644]
elisp/emacs-color-theme-solarized/color-theme-solarized-pkg.el [new file with mode: 0644]
elisp/emacs-color-theme-solarized/color-theme-solarized.el [new file with mode: 0644]
elisp/emacs-color-theme-solarized/makepkg.sh [new file with mode: 0755]
elisp/emacs-color-theme-solarized/solarized-dark-theme.el [new file with mode: 0644]
elisp/emacs-color-theme-solarized/solarized-definitions.el [new file with mode: 0644]
elisp/emacs-color-theme-solarized/solarized-light-theme.el [new file with mode: 0644]

diff --git a/elisp/emacs-color-theme-solarized/LICENSE b/elisp/emacs-color-theme-solarized/LICENSE
new file mode 100644 (file)
index 0000000..ee08d7e
--- /dev/null
@@ -0,0 +1,20 @@
+Copyright (c) 2011 Ethan Schoonover
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/elisp/emacs-color-theme-solarized/README.md b/elisp/emacs-color-theme-solarized/README.md
new file mode 100644 (file)
index 0000000..538f092
--- /dev/null
@@ -0,0 +1,173 @@
+Solarized Colorscheme for Emacs
+===============================
+
+Stolen from Ethan Schoonover <es@ethanschoonover.com> by Greg Pfeil <greg@technomadic.org>
+
+Visit the [Solarized homepage]
+------------------------------
+
+See the [Solarized homepage] for screenshots, 
+details and colorscheme versions for Vim, Mutt, popular terminal emulators and 
+other applications.
+
+Screenshots
+-----------
+
+![solarized dark](https://github.com/altercation/solarized/raw/master/img/solarized-vim.png)
+
+Downloads
+---------
+
+If you have come across this colorscheme via the [Emacs-only repository] on 
+github, see the link above to the Solarized homepage or visit the main [Solarized repository].
+
+The [Emacs-only repository] is kept in sync with the main [Solarized repository]. Issues, bug reports, changelogs that are not specific to the Emacs implementation should be submitted to the main [Solarized repository].
+
+[Solarized homepage]:    http://ethanschoonover.com/solarized
+[Solarized repository]:  https://github.com/altercation/solarized
+[Emacs-only repository]:  https://github.com/sellout/emacs-color-theme-solarized
+[color-theme]: http://www.nongnu.org/color-theme
+
+Installation & Usage
+--------------------
+
+### Emacs 24
+
+1. Add the `emacs-color-theme-solarized` directory to your Emacs `custom-theme-load-path`, or install from marmalade using `package-install color-theme-solarized`
+2. Add `(load-theme 'solarized-[light|dark] t)` to your Emacs init file.
+3. Reload the init file, or restart Emacs.
+
+### [color-theme] \(pre-Emacs 24\)
+
+1. Download and install [color-theme].
+2. Add the `emacs-color-theme-solarized` directory to your Emacs `load-path`.
+3. Add `(require 'color-theme-solarized)` to your Emacs init file (usually `~/.emacs`).
+3. Reload the init file, or restart Emacs.
+4. Use the usual [color-theme] mechanism to select one of the Solarized themes, or `M-x color-theme-solarized-[light|dark]`.
+
+### IMPORTANT NOTE FOR TERMINAL USERS:
+
+If you are going to use Solarized in Terminal mode (i.e. not in a GUI version
+like Cocoa or X11 Emacs), **please please please** consider setting your
+terminal emulator's colorscheme to use the Solarized palette. The [Solarized
+repository] includes palettes for some popular terminal emulator as well as
+Xdefaults; or you can download them from the official [Solarized homepage].
+If you use this emacs color theme *without* having changed your emulator's
+palette, you will need to configure Solarized to degrade its colorscheme to
+a set compatible with the terminal's default limited 256 color palette
+(whereas by using the terminal's 16 ANSI color values, you would
+see the correct, specific values for the Solarized palette).
+
+If you do use the custom terminal colors, i.e. the 16 overridden ANSI color
+values, the emacs colorscheme should work out of the box for you. If you are
+using a terminal emulator that supports 256 colors and don't want to use
+the custom Solarized terminal colors, you will need to use the degraded 256
+colorscheme. To do so, simply customize the `solarized-termcolor` variable to
+`256`.
+
+Again, I recommend just changing your terminal colors to Solarized values 
+either manually or via one of the many terminal schemes available for import.
+
+Advanced Configuration
+----------------------
+
+Solarized will work out of the box with just the instructions specified above
+but does include several variables that can be customized.
+
+    variable name            default   optional
+    --------------------------------------------
+    solarized-termcolors =   16    |   256
+    solarized-degrade    =   nil   |   t
+    solarized-bold       =   t     |   nil
+    solarized-underline  =   t     |   nil
+    solarized-italic     =   t     |   nil
+    solarized-contrast   =   normal|   high, low
+    solarized-visibility =   normal|   high, low
+    solarized-broken-srgb=   nil   |   t (see details for Mac behavior)
+    --------------------------------------------
+
+### Option Details
+
+*   solarized-termcolors
+
+    This is set to *16* by default, meaning that Solarized will attempt to use 
+    the standard 16 colors of your terminal emulator, assuming that you've set
+    these colors to the correct Solarized values either manually or by 
+    importing one of the many colorscheme available for popular terminal 
+    emulators and Xdefaults.
+    If you don't want to use the Solarized colors via the terminal
+    emulator's palette, you can set this to *256*, which will use a degraded
+    version of the Solarized palette by displaying the closest colors in
+    the terminal's default 256 colors as shown in [Xterm's color
+    chart](http://en.wikipedia.org/wiki/File:Xterm_color_chart.png).
+
+*   solarized-degrade
+
+    For test purposes only; in GUI mode, this forces Solarized to use the 256
+    degraded color mode to test the approximate color values for accuracy.
+
+*   solarized-bold | solarized-underline | solarized-italic
+
+    If you wish to stop Solarized from displaying bold, underlined or 
+    italicized typefaces, simply set the appropriate variable to `nil`.
+
+*   solarized-contrast
+
+    Stick with normal! It's been carefully tested. Setting this option to high 
+    or low does use the same Solarized palette but simply shifts some values
+    up or down in order to expand or compress the tonal range displayed.
+
+*   solarized-visibility
+
+    Special characters such as trailing whitespace, tabs, newlines, when
+    displayed using `:set list` can be set to one of three levels depending on 
+    your needs. Default value is `normal` with `high` and `low` options.
+    
+*   solarized-broken-srgb
+
+    Emacs [bug #8402](http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8402)
+    results in incorrect color handling on Macs. If this is `t` (the default
+    on Macs), Solarized works around it with alternative colors. However,
+    these colors are not totally portable, so you may be able to edit the
+    "Gen RGB" column in `solarized-definitions.el` to improve them further.
+
+Code Notes
+----------
+
+I have attempted to modularize the creation of Emacs colorschemes in this script and, while it could be refactored further, it should be a good foundation for the creation of any color scheme. By simply changing the values in the `solarized-colors` table in `solarized-definitions.el` and testing in a GUI Emacs, you can rapidly prototype new colorschemes without diving into the weeds of line-item editing each syntax highlight declaration.
+
+The Values
+----------
+
+L\*a\*b values are canonical (White D65, Reference D50), other values are 
+matched in sRGB space.
+
+    SOLARIZED HEX     16/8 TERMCOL  XTERM/HEX   L*A*B      RGB         HSB
+    --------- ------- ---- -------  ----------- ---------- ----------- -----------
+    base03    #002b36  8/4 brblack  234 #1c1c1c 15 -12 -12   0  43  54 193 100  21
+    base02    #073642  0/4 black    235 #262626 20 -12 -12   7  54  66 192  90  26
+    base01    #586e75 10/7 brgreen  240 #585858 45 -07 -07  88 110 117 194  25  46
+    base00    #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195  23  51
+    base0     #839496 12/6 brblue   244 #808080 60 -06 -03 131 148 150 186  13  59
+    base1     #93a1a1 14/4 brcyan   245 #8a8a8a 65 -05 -02 147 161 161 180   9  63
+    base2     #eee8d5  7/7 white    254 #e4e4e4 92 -00  10 238 232 213  44  11  93
+    base3     #fdf6e3 15/7 brwhite  230 #ffffd7 97  00  10 253 246 227  44  10  99
+    yellow    #b58900  3/3 yellow   136 #af8700 60  10  65 181 137   0  45 100  71
+    orange    #cb4b16  9/3 brred    166 #d75f00 50  50  55 203  75  22  18  89  80
+    red       #dc322f  1/1 red      160 #d70000 50  65  45 220  50  47   1  79  86
+    magenta   #d33682  5/5 magenta  125 #af005f 50  65 -05 211  54 130 331  74  83
+    violet    #6c71c4 13/5 brmagenta 61 #5f5faf 50  15 -45 108 113 196 237  45  77
+    blue      #268bd2  4/4 blue      33 #0087ff 55 -10 -45  38 139 210 205  82  82
+    cyan      #2aa198  6/6 cyan      37 #00afaf 60 -35 -05  42 161 152 175  74  63
+    green     #859900  2/2 green     64 #5f8700 60 -20  65 133 153   0  68 100  60
+    
+### Bug Reporting
+
+Here are some things to keep in mind when submitting a bug report:
+
+*   include the output of `M-x version` in your report,
+*   mention whether you’re using color-theme or the Emacs 24 theme,
+*   include the names of Emacs faces that you have a problem with (`M-x describe-face` will tell you the name of the face at point),
+*   screenshots are very helpful (before and after if you made a change),
+*   it’s very helpful (but not expected) if you can compare it to a similar situation in VIM (especially if you know the VIM highlight name or have a screenshot), and
+*  `M-x customize-apropos-faces` can help you find all the relevant faces if you are submitting faces for a mode.
diff --git a/elisp/emacs-color-theme-solarized/color-theme-solarized-pkg.el b/elisp/emacs-color-theme-solarized/color-theme-solarized-pkg.el
new file mode 100644 (file)
index 0000000..850550e
--- /dev/null
@@ -0,0 +1 @@
+(define-package "color-theme-solarized" "%%version%%" "Solarized themes for Emacs" '((color-theme "6.5.5")))
diff --git a/elisp/emacs-color-theme-solarized/color-theme-solarized.el b/elisp/emacs-color-theme-solarized/color-theme-solarized.el
new file mode 100644 (file)
index 0000000..f4b1abe
--- /dev/null
@@ -0,0 +1,58 @@
+;;; Author: Ethan Schoonover, Solarized; Greg Pfeil, Emacs adaptation
+;;; URL: http://ethanschoonover.com/solarized
+
+;;; This file is not (YET) part of GNU Emacs.
+
+;;; # Usage
+
+;;; 1. Install the color-theme package
+;;;   (http://www.emacswiki.org/cgi-bin/wiki/ColorTheme)
+;;; 2. Load this file
+;;; 3. M-x color-theme-solarized-[dark|light]
+
+(let ((current-file-name (or load-file-name buffer-file-name)))
+  (if current-file-name
+    (let* ((reqname (concat (file-name-directory current-file-name)
+                            "solarized-definitions.el"))
+           (compreqname (concat reqname "c")))
+      (require 'solarized-definitions
+               (if (file-exists-p compreqname) compreqname reqname)))
+    (require 'solarized-definitions)))
+
+(eval-when-compile
+  (require 'color-theme))
+
+;;;###autoload
+(defun color-theme-solarized (mode)
+  "Color theme by Ethan Schoonover, created 2011-03-24.
+Ported to Emacs by Greg Pfeil, http://ethanschoonover.com/solarized."
+  (interactive "Slight or dark? ")
+  (color-theme-install
+   (let* ((definitions (solarized-color-definitions mode))
+          (faces (first definitions))
+          (variables (second definitions)))
+       (solarized-color-definitions mode)
+     `(,(intern (concat "color-theme-solarized-" (symbol-name mode)))
+       ,variables
+       ,@faces))))
+
+;;;###autoload
+(defun color-theme-solarized-dark ()
+  (interactive)
+  (color-theme-solarized 'dark))
+
+;;;###autoload
+(defun color-theme-solarized-light ()
+  (interactive)
+  (color-theme-solarized 'light))
+
+(add-to-list 'color-themes
+             `(color-theme-solarized-light
+               "Solarized Light"
+               ,solarized-description))
+(add-to-list 'color-themes
+             `(color-theme-solarized-dark
+               "Solarized Dark"
+               ,solarized-description))
+
+(provide 'color-theme-solarized)
diff --git a/elisp/emacs-color-theme-solarized/makepkg.sh b/elisp/emacs-color-theme-solarized/makepkg.sh
new file mode 100755 (executable)
index 0000000..7c13497
--- /dev/null
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+version=$1
+
+if [ "$version" = "" ]; then
+    version=$(date -u '+%Y%m%d')
+fi
+echo "version = $version"
+
+dir="color-theme-solarized-${version}"
+
+mkdir $dir
+
+cp *.el $dir
+sed -i "s/%%version%%/$version/" "$dir/color-theme-solarized-pkg.el"
+
+tar cf color-theme-solarized-${version}.tar $dir
diff --git a/elisp/emacs-color-theme-solarized/solarized-dark-theme.el b/elisp/emacs-color-theme-solarized/solarized-dark-theme.el
new file mode 100644 (file)
index 0000000..c5ebade
--- /dev/null
@@ -0,0 +1,5 @@
+(require 'solarized-definitions
+         (locate-file "solarized-definitions.el" custom-theme-load-path
+                      '("c" "")))
+
+(create-solarized-theme dark)
diff --git a/elisp/emacs-color-theme-solarized/solarized-definitions.el b/elisp/emacs-color-theme-solarized/solarized-definitions.el
new file mode 100644 (file)
index 0000000..d6b1a5c
--- /dev/null
@@ -0,0 +1,542 @@
+(eval-when-compile
+  (require 'cl))
+
+(defconst solarized-description
+  "Color theme by Ethan Schoonover, created 2011-03-24.
+Ported to Emacs by Greg Pfeil, http://ethanschoonover.com/solarized.")
+
+(defcustom solarized-degrade nil
+  "For test purposes only; when in GUI mode, forces Solarized to use the 256
+degraded color mode to test the approximate color values for accuracy."
+  :type 'boolean
+  :group 'solarized)
+
+(defcustom solarized-diff-mode 'normal
+  "Sets the level of highlighting to use in diff-like modes."
+  :type 'symbol
+  :options '(high normal low)
+  :group 'solarized)
+
+(defcustom solarized-bold t
+  "Stops Solarized from displaying bold when nil."
+  :type 'boolean
+  :group 'solarized)
+
+(defcustom solarized-underline t
+  "Stops Solarized from displaying underlines when nil."
+  :type 'boolean
+  :group 'solarized)
+
+(defcustom solarized-italic t
+  "Stops Solarized from displaying italics when nil."
+  :type 'boolean
+  :group 'solarized)
+
+(defcustom solarized-contrast 'normal
+  "Stick with normal! It's been carefully tested. Setting this option to high or
+low does use the same Solarized palette but simply shifts some values up or
+down in order to expand or compress the tonal range displayed."
+  :type 'symbol
+  :options '(high normal low)
+  :group 'solarized)
+
+(defcustom solarized-broken-srgb (if (and (eq system-type 'darwin)
+                                          (eq window-system 'ns))
+                                     t
+                                   nil)
+  "Emacs bug #8402 results in incorrect color handling on Macs. If this is t
+\(the default on Macs), Solarized works around it with alternative colors.
+However, these colors are not totally portable, so you may be able to edit
+the \"Gen RGB\" column in solarized-definitions.el to improve them further."
+  :type 'boolean
+  :group 'solarized)
+
+;; FIXME: The Generic RGB colors will actually vary from device to device, but
+;;        hopefully these are closer to the intended colors than the sRGB values
+;;        that Emacs seems to dislike
+(defvar solarized-colors           ; ANSI(Solarized terminal)
+  ;; name     sRGB      Gen RGB   256       16              8
+  '((base03  "#002b36" "#042028" "#1c1c1c" "brightblack"   "black")
+    (base02  "#073642" "#0a2832" "#262626" "black"         "black")
+    (base01  "#586e75" "#465a61" "#585858" "brightgreen"   "green")
+    (base00  "#657b83" "#52676f" "#626262" "brightyellow"  "yellow")
+    (base0   "#839496" "#708183" "#808080" "brightblue"    "blue")
+    (base1   "#93a1a1" "#81908f" "#8a8a8a" "brightcyan"    "cyan")
+    (base2   "#eee8d5" "#e9e2cb" "#e4e4e4" "white"         "white")
+    (base3   "#fdf6e3" "#fcf4dc" "#ffffd7" "brightwhite"   "white")
+    (yellow  "#b58900" "#a57705" "#af8700" "yellow"        "yellow")
+    (orange  "#cb4b16" "#bd3612" "#d75f00" "brightred"     "red")
+    (red     "#dc322f" "#c60007" "#d70000" "red"           "red")
+    (magenta "#d33682" "#c61b6e" "#af005f" "magenta"       "magenta")
+    (violet  "#6c71c4" "#5859b7" "#5f5faf" "brightmagenta" "magenta")
+    (blue    "#268bd2" "#2075c7" "#0087ff" "blue"          "blue")
+    (cyan    "#2aa198" "#259185" "#00afaf" "cyan"          "cyan")
+    (green   "#859900" "#728a05" "#5f8700" "green"         "green"))
+  "This is a table of all the colors used by the Solarized color theme. Each
+   column is a different set, one of which will be chosen based on term
+   capabilities, etc.")
+
+(defun solarized-color-definitions (mode)
+  (flet ((find-color (name)
+           (let* ((index (if window-system
+                             (if solarized-degrade
+                                 3
+                               (if solarized-broken-srgb 2 1))
+                           (case (display-color-cells)
+                             (16 4)
+                             (8  5)
+                             (otherwise 3)))))
+             (nth index (assoc name solarized-colors)))))
+    (let ((base03      (find-color 'base03))
+          (base02      (find-color 'base02))
+          (base01      (find-color 'base01))
+          (base00      (find-color 'base00))
+          (base0       (find-color 'base0))
+          (base1       (find-color 'base1))
+          (base2       (find-color 'base2))
+          (base3       (find-color 'base3))
+          (yellow      (find-color 'yellow))
+          (orange      (find-color 'orange))
+          (red         (find-color 'red))
+          (magenta     (find-color 'magenta))
+          (violet      (find-color 'violet))
+          (blue        (find-color 'blue))
+          (cyan        (find-color 'cyan))
+          (green       (find-color 'green))
+          (bold        (if solarized-bold 'bold 'normal))
+          (bright-bold (if solarized-bold 'normal 'bold))
+          (underline   (if solarized-underline t nil))
+          (opt-under   nil)
+          (italic      (if solarized-italic 'italic 'normal)))
+      (when (eq 'light mode)
+        (rotatef base03 base3)
+        (rotatef base02 base2)
+        (rotatef base01 base1)
+        (rotatef base00 base0))
+      (let ((back base03))
+        (cond ((< (display-color-cells) 16)
+               (setf back nil))
+              ((eq 'high solarized-contrast)
+               (let ((orig-base3 base3))
+                 (rotatef base01 base00 base0 base1 base2 base3)
+                 (setf base3 orig-base3)))
+              ((eq 'low solarized-contrast)
+               (setf back      base02
+                     opt-under t)))
+        ;; NOTE: We try to turn an 8-color term into a 10-color term by not
+        ;;       using default background and foreground colors, expecting the
+        ;;       user to have the right colors set for them.
+        (let ((bg-back   `(:background ,back))
+              (bg-base03 `(:background ,base03))
+              (bg-base02 `(:background ,base02))
+              (bg-base01 `(:background ,base01))
+              (bg-base00 `(:background ,base00))
+              (bg-base0 `(:background ,base0))
+              (bg-base1 `(:background ,base1))
+              (bg-base2 `(:background ,base2))
+              (bg-base3 `(:background ,base3))
+              (bg-green `(:background ,green))
+              (bg-yellow `(:background ,yellow))
+              (bg-orange `(:background ,orange))
+              (bg-red `(:background ,red))
+              (bg-magenta `(:background ,magenta))
+              (bg-violet `(:background ,violet))
+              (bg-blue `(:background ,blue))
+              (bg-cyan `(:background ,cyan))
+              
+              (fg-base03 `(:foreground ,base03))
+              (fg-base02 `(:foreground ,base02))
+              (fg-base01 `(:foreground ,base01))
+              (fg-base00 `(:foreground ,base00))
+              (fg-base0 `(:foreground ,(when (<= 16 (display-color-cells))
+                                         base0)))
+              (fg-base1 `(:foreground ,(when (<= 16 (display-color-cells))
+                                         base1)))
+              (fg-base2 `(:foreground ,base2))
+              (fg-base3 `(:foreground ,base3))
+              (fg-green `(:foreground ,green))
+              (fg-yellow `(:foreground ,yellow))
+              (fg-orange `(:foreground ,orange))
+              (fg-red `(:foreground ,red))
+              (fg-magenta `(:foreground ,magenta))
+              (fg-violet `(:foreground ,violet))
+              (fg-blue `(:foreground ,blue))
+              (fg-cyan `(:foreground ,cyan))
+
+              (fmt-none `(:weight normal :slant normal  :underline nil        :inverse-video nil))
+              (fmt-bold `(:weight ,bold  :slant normal  :underline nil        :inverse-video nil))
+              (fmt-bldi `(:weight ,bold                 :underline nil        :inverse-video nil))
+              (fmt-undr `(:weight normal :slant normal  :underline ,underline :inverse-video nil))
+              (fmt-undb `(:weight ,bold  :slant normal  :underline ,underline :inverse-video nil))
+              (fmt-undi `(:weight normal                :underline ,underline :inverse-video nil))
+              (fmt-uopt `(:weight normal :slant normal  :underline ,opt-under :inverse-video nil))
+              ;; FIXME: not quite the same
+              (fmt-curl `(:weight normal :slant normal  :underline t          :inverse-video nil))
+              (fmt-ital `(:weight normal :slant ,italic :underline nil        :inverse-video nil))
+              ;; FIXME: not quite the same
+              (fmt-stnd `(:weight normal :slant normal  :underline nil        :inverse-video t))
+              (fmt-revr `(:weight normal :slant normal  :underline nil        :inverse-video t))
+              (fmt-revb `(:weight ,bold  :slant normal  :underline nil        :inverse-video t))
+              (fmt-revbb `(:weight ,bright-bold :slant normal :underline nil  :inverse-video t))
+              (fmt-revbbu `(:weight ,bright-bold :slant normal  :underline ,underline :inverse-video t)))
+          `((;; basic
+             (default ((t (,@fg-base0 ,@bg-back)))) ; Normal
+             (cursor ((t (,@fg-base03 ,@bg-base0)))) ; Cursor
+             (error ((t (,@fmt-bold ,@fg-red)))) ; Error
+             (escape-glyph-face ((t (,@fg-red))))
+             (fringe ((t (,@fg-base01 ,@bg-base02))))
+             (linum ((t (,@fg-base01 ,@bg-base02))))
+             (header-line ((t (,@fg-base0 ,@bg-base02 ,@fmt-revbb)))) ; Pmenu
+             (highlight ((t (,@bg-base02))))
+             (hl-line ((t (:underline ,opt-under ,@bg-base02)))) ; CursorLine
+             (isearch ((t (,@fmt-stnd ,@fg-orange ,@bg-back)))) ; IncSearch
+             (isearch-fail ((t (,@fmt-stnd ,@fg-orange ,@bg-back)))) ; IncSearch
+             (lazy-highlight ((t (,@fmt-revr ,@fg-yellow ,@bg-back)))) ; Search
+             (link ((t (,@fmt-undr ,@fg-violet))))
+             (link-visited ((t (,@fmt-undr ,@fg-magenta))))
+             (menu ((t (,@fg-base0 ,@bg-base02))))
+             (minibuffer-prompt ((t (,@fmt-bold ,@fg-cyan)))) ; Question
+             (mode-line  ; StatusLine
+              ((t (,@fg-base1 ,@bg-base02 ,@fmt-revbb :box nil))))
+             (mode-line-inactive ; StatusLineNC
+              ((t (,@fg-base00 ,@bg-base02 ,@fmt-revbb :box nil))))
+             (region ((t (,@fg-base01 ,@bg-base03 ,@fmt-revbb)))) ; Visual
+             (secondary-selection ((t (,@bg-base02))))
+             (shadow ((t (,@fg-base01))))
+             (trailing-whitespace ((t (,@fmt-revr ,@fg-red))))
+             (vertical-border ((t (,@fg-base0))))
+             ;; comint
+             (comint-highlight-prompt ((t (,@fg-blue))))
+             ;; compilation
+             (compilation-info ((t (,@fmt-bold ,@fg-green))))
+             (compilation-warning ((t (,@fmt-bold ,@fg-orange))))
+             ;; custom
+             (custom-button
+              ((t (,@fg-base1 ,@bg-base02
+                              :box (:line-width 2 :style released-button)))))
+             (custom-button-mouse
+              ((t (,@fmt-revr ,@fg-base1 ,@bg-base02 :inherit custom-button))))
+             (custom-button-pressed
+              ((t (,@fmt-revr ,@fg-base1 ,@bg-base02
+                              :box (:line-width 2 :style pressed-button)
+                              :inherit custom-button-mouse))))
+             (custom-changed ((t (,@fmt-revr ,@fg-blue ,@bg-base3))))
+             (custom-comment ((t (,@fg-base1 ,@bg-base02))))
+             (custom-comment-tag ((t (,@fg-base1 ,@bg-base02))))
+             (custom-documentation ((t (:inherit default))))
+             (custom-group-tag ((t (,@fg-base1))))
+             (custom-group-tag-1 ((t (,fmt-bold ,@fg-base1))))
+             (custom-invalid ((t (,@fmt-revr ,@fg-red ,@bg-back))))
+             (custom-link ((t (,@fg-violet))))
+             (custom-state ((t (,@fg-green))))
+             (custom-variable-tag ((t (,@fg-base1))))
+             ;; diff - DiffAdd, DiffChange, DiffDelete, and DiffText
+             ,@(case solarized-diff-mode
+                 (high
+                  `((diff-added ((t (,@fmt-revr ,@fg-green))))
+                    (diff-changed ((t (,@fmt-revr ,@fg-yellow))))
+                    (diff-removed ((t (,@fmt-revr ,@fg-red))))
+                    (diff-refine-change
+                     ((t (,@fmt-revr ,@fg-blue ,@bg-back))))))
+                 (low
+                  `((diff-added ((t (,@fmt-undr ,@fg-green))))
+                    (diff-changed ((t (,@fmt-undr ,@fg-yellow))))
+                    (diff-removed ((t (,@fmt-bold ,@fg-red))))
+                    (diff-refine-change
+                     ((t (,@fmt-undr ,@fg-blue ,@bg-back))))))
+                 (normal
+                  (if window-system
+                      `((diff-added ((t (,@fmt-bold ,@fg-green))))
+                        (diff-changed ((t (,@fmt-bold ,@fg-yellow))))
+                        (diff-removed ((t (,@fmt-bold ,@fg-red))))
+                        (diff-refine-change
+                         ((t (,@fmt-bold ,@fg-blue ,@bg-back)))))
+                    `((diff-added ((t (,@fg-green))))
+                      (diff-changed ((t (,@fg-yellow))))
+                      (diff-removed ((t (,@fg-red))))
+                      (diff-refine-change ((t (,@fg-blue ,@bg-back))))))))
+             (diff-file-header ((t (,@bg-back))))
+             (diff-header ((t (,@fg-base1 ,@bg-back))))
+             ;; IDO
+             (ido-only-match ((t (,@fg-green))))
+             (ido-subdir ((t (,@fg-blue))))
+             (ido-first-match ((t (,@fmt-bold ,@fg-green))))
+             ;; emacs-wiki
+             (emacs-wiki-bad-link-face ((t (,@fmt-undr ,@fg-red))))
+             (emacs-wiki-link-face ((t (,@fmt-undr ,@fg-blue))))
+             (emacs-wiki-verbatim-face ((t (,@fmt-undr ,@fg-base00))))
+             ;; eshell
+             (eshell-ls-archive ((t (,@fg-magenta))))
+             (eshell-ls-backup ((t (,@fg-yellow))))
+             (eshell-ls-clutter ((t (,@fg-orange))))
+             (eshell-ls-directory ((t (,@fg-blue)))) ; Directory
+             (eshell-ls-executable ((t (,@fg-green))))
+             (eshell-ls-missing ((t (,@fg-red))))
+             (eshell-ls-product ((t (,@fg-yellow))))
+             (eshell-ls-readonly ((t (,@fg-base1))))
+             (eshell-ls-special ((t (,@fg-violet))))
+             (eshell-ls-symlink ((t (,@fg-cyan))))
+             (eshell-ls-unreadable ((t (,@fg-base00))))
+             (eshell-prompt ((t (,@fmt-bold ,@fg-green))))
+             ;; font-lock
+             (font-lock-builtin-face ((t (,@fmt-none ,@fg-green)))) ; Statement
+             (font-lock-comment-face ((t (,@fmt-ital ,@fg-base01)))) ; Comment
+             (font-lock-constant-face ((t (,@fmt-none ,@fg-cyan)))) ; Constant
+             (font-lock-function-name-face ; Identifier
+              ((t (,@fmt-none ,@fg-blue))))
+             (font-lock-keyword-face ((t (,@fmt-none ,@fg-green)))) ; Statement
+             (font-lock-string-face ((t (,@fmt-none ,@fg-cyan)))) ; Constant
+             (font-lock-type-face ((t (,@fmt-none ,@fg-yellow)))) ; Type
+             (font-lock-variable-name-face ; Identifier
+              ((t (,@fmt-none ,@fg-blue))))
+             (font-lock-warning-face ((t (,@fmt-bold ,@fg-red)))) ; Error
+             (font-lock-doc-face ((t (,@fmt-ital ,@fg-base01)))) ; Comment
+             (font-lock-doc-string-face  ; Comment (XEmacs-only)
+              ((t (,@fmt-ital ,@fg-base01))))
+             (font-lock-color-constant-face ((t (,@fmt-none ,@fg-green))))
+             (font-lock-comment-delimiter-face ; Comment
+              ((t (,@fmt-ital ,@fg-base01))))
+             (font-lock-preprocessor-face ; PreProc
+              ((t (,@fmt-none ,@fg-orange))))
+             (font-lock-reference-face ((t (,@fmt-none ,@fg-cyan))))
+             (font-lock-negation-char-face ((t (,@fmt-none ,@fg-red))))
+             (font-lock-other-type-face ((t (,@fmt-ital ,@fg-blue))))
+             (font-lock-regexp-grouping-construct
+              ((t (,@fmt-none ,@fg-orange))))
+             (font-lock-special-keyword-face ; Special
+              ((t (,@fmt-none ,@fg-red))))
+             (font-lock-exit-face ((t (,@fmt-none ,@fg-red))))
+             (font-lock-other-emphasized-face ((t (,@fmt-bldi ,@fg-violet))))
+             (font-lock-regexp-grouping-backslash
+              ((t (,@fmt-none ,@fg-yellow))))
+             ;; info
+             (info-xref ((t (,@fmt-undr ,@fg-blue))))
+             (info-xref-visited ((t (,@fg-magenta :inherit info-xref))))
+             ;; org
+             (org-hide ((t (,@fg-base03))))
+             (org-todo ((t (,@fmt-bold ,@fg-base03 ,@bg-red))))
+             (org-done ((t (,@fmt-bold ,@fg-green))))
+             (org-todo-kwd-face ((t (,@fg-red ,@bg-base03))))
+             (org-done-kwd-face ((t (,@fg-green ,@bg-base03))))
+             (org-project-kwd-face ((t (,@fg-violet ,@bg-base03))))
+             (org-waiting-kwd-face ((t (,@fg-orange ,@bg-base03))))
+             (org-someday-kwd-face ((t (,@fg-blue ,@bg-base03))))
+             (org-started-kwd-face ((t (,@fg-yellow ,@bg-base03))))
+             (org-cancelled-kwd-face ((t (,@fg-green ,@bg-base03))))
+             (org-delegated-kwd-face ((t (,@fg-cyan ,@bg-base03))))
+             ;; table
+             (table-cell ((t (,@fmt-none ,@fg-base0 ,@bg-back))))
+             ;; outline - pandocBlockQuoteLeader*
+             (outline-1 ((t (,@fmt-none ,@fg-blue))))
+             (outline-2 ((t (,@fmt-none ,@fg-cyan))))
+             (outline-3 ((t (,@fmt-none ,@fg-yellow))))
+             (outline-4 ((t (,@fmt-none ,@fg-red))))
+             (outline-5 ((t (,@fmt-none ,@fg-base0))))
+             (outline-6 ((t (,@fmt-none ,@fg-base01))))
+             (outline-7 ((t (,@fmt-none ,@fg-orange))))
+             (outline-8 ((t (,@fmt-none ,@fg-violet))))
+             ;; speedbar
+             (speedbar-button-face ((t (,@fmt-none ,@fg-base1))))
+             (speedbar-directory-face ((t (,@fmt-none ,@fg-orange))))
+             (speedbar-file-face ((t (,@fmt-none ,@fg-green))))
+             (speedbar-highlight-face ((t (,@bg-base02))))
+             (speedbar-selected-face ((t (,@fmt-undr ,@fg-yellow))))
+             (speedbar-separator-face ((t (,@fmt-stnd))))
+             (speedbar-tag-face ((t (,@fmt-none ,@fg-blue))))
+             ;; show-paren - MatchParen
+             (show-paren-match ((t (,@fmt-bold ,@fg-cyan ,@bg-base02))))
+             (show-paren-mismatch ((t (,@fmt-bold ,@fg-red ,@bg-base01))))
+             ;; widgets
+             (widget-field
+              ((t (,@fg-base1 ,@bg-base02 :box (:line-width 1)
+                              :inherit default))))
+             (widget-single-line-field ((t (:inherit widget-field))))
+             ;; extra modules
+             ;; -------------
+             ;; Flymake
+             (flymake-errline ((t (,@fmt-revr ,@fg-red ,@bg-back)))) ; ErrorMsg
+             (flymake-warnline ; WarningMsg
+              ((t (,@fmt-bold ,@fg-red ,@bg-back))))
+             ;; column-marker
+             (column-marker-1 ((t (,@bg-base01))))
+             (column-marker-2 ((t (,@bg-cyan))))
+             (column-marker-3 ((t (,@bg-violet))))
+             ;; jabber
+             (jabber-activity-face ((t (,@fmt-bold ,@fg-red))))
+             (jabber-activity-personal-face ((t (,@fmt-bold ,@fg-blue))))
+             (jabber-chat-error ((t (,@fmt-bold ,@fg-red))))
+             (jabber-chat-prompt-foreign ((t (,@fmt-bold ,@fg-red))))
+             (jabber-chat-prompt-local ((t (,@fmt-bold ,@fg-blue))))
+             (jabber-chat-prompt-system ((t (,@fmt-bold ,@fg-green))))
+             (jabber-chat-text-foreign ((t (,@fg-base1))))
+             (jabber-chat-text-local ((t (,@fg-base0))))
+             (jabber-chat-rare-time-face ((t (,@fmt-undr ,@fg-green))))
+             (jabber-roster-user-away ((t (,@fmt-ital ,@fg-green))))
+             (jabber-roster-user-chatty ((t (,@fmt-bold ,@fg-orange))))
+             (jabber-roster-user-dnd ((t (,@fmt-ital ,@fg-red))))
+             (jabber-roster-user-error ((t (:weight light :slant italic ,@fg-red))))
+             (jabber-roster-user-offline ((t (,@fg-base01))))
+             (jabber-roster-user-online ((t (,@fmt-bold ,@fg-blue))))
+             (jabber-roster-user-xa ((t (,@fmt-ital ,@fg-magenta))))
+             ;; gnus - these are taken from mutt, not VIM
+             (gnus-cite-1 ((t (,@fmt-none ,@fg-blue)))) ; quoted
+             (gnus-cite-2 ((t (,@fmt-none ,@fg-cyan)))) ; quoted1
+             (gnus-cite-3 ((t (,@fmt-none ,@fg-yellow)))) ; quoted2
+             (gnus-cite-4 ((t (,@fmt-none ,@fg-red)))) ; quoted3
+             (gnus-cite-5 ((t (,@fmt-none ,@fg-orange)))) ; quoted4
+             (gnus-cite-6 ((t (,@fmt-none ,@fg-violet))))
+             (gnus-cite-7 ((t (,@fmt-none ,@fg-green))))
+             (gnus-cite-8 ((t (,@fmt-none ,@fg-magenta))))
+             (gnus-cite-9 ((t (,@fmt-none ,@fg-base00))))
+             (gnus-cite-10 ((t (,@fmt-none ,@fg-base01))))
+             (gnus-cite-11 ((t (,@fmt-none ,@fg-base02))))
+             (gnus-group-mail-1 ((t (,@fmt-bold ,@fg-base3))))
+             (gnus-group-mail-1-empty ((t (,@fg-base3))))
+             (gnus-group-mail-2 ((t (,@fmt-bold ,@fg-base2))))
+             (gnus-group-mail-2-empty ((t (,@fg-base2))))
+             (gnus-group-mail-3 ((t (,@fmt-bold ,@fg-magenta))))
+             (gnus-group-mail-3-empty ((t (,@fg-magenta))))
+             (gnus-group-mail-low ((t (,@fmt-bold ,@fg-base00))))
+             (gnus-group-mail-low-empty ((t (,@fg-base00))))
+             (gnus-group-news-1 ((t (,@fmt-bold ,@fg-base1))))
+             (gnus-group-news-1-empty ((t (,@fg-base1))))
+             (gnus-group-news-2 ((t (,@fmt-bold ,@fg-blue))))
+             (gnus-group-news-2-empty ((t (,@fg-blue))))
+             (gnus-group-news-low ((t (,@fmt-bold ,@fg-violet))))
+             (gnus-group-news-low-empty ((t (,@fg-violet))))
+             (gnus-emphasis-highlight-words ; highlight
+              ((t (,@fmt-none ,fg-yellow))))
+             (gnus-header-content ((t (,@fmt-none ,@fg-base01)))) ; hdrdefault
+             (gnus-header-from ((t (,@fmt-none ,@fg-base00)))) ; header ^From
+             (gnus-header-name ((t (,@fmt-none ,@fg-base01)))) ; hdrdefault
+             (gnus-header-newsgroups ; hdrdefault
+              ((t (,@fmt-none ,@fg-base02))))
+             (gnus-header-subject ; header ^Subject
+              ((t (,@fmt-none ,@fg-blue))))
+             (gnus-server-agent ((t (,@fmt-bold ,@fg-base3))))
+             (gnus-server-closed ((t (,@fmt-ital ,@fg-base1))))
+             (gnus-server-denied ((t (,@fmt-bold ,@fg-base2))))
+             (gnus-server-offline ((t (,@fmt-bold ,@fg-green))))
+             (gnus-server-opened ((t (,@fmt-bold ,@fg-cyan))))
+             (gnus-signature ((t (,@fmt-none ,@fg-base01)))) ; signature
+             (gnus-splash ((t (,@fg-base2))))
+             (gnus-summary-cancelled ; deleted messages
+              ((t (,@fmt-none ,@fg-red))))
+             (gnus-summary-high-ancient
+              ((t (,@fmt-bold :inherit gnus-summary-normal-ancient))))
+             (gnus-summary-high-read
+              ((t (,@fmt-bold :inherit gnus-summary-normal-read))))
+             (gnus-summary-high-ticked
+              ((t (,@fmt-bold :inherit gnus-summary-normal-ticked))))
+             (gnus-summary-high-undownloaded
+              ((t (,@fmt-bold :inherit gnus-summary-normal-undownloaded))))
+             (gnus-summary-high-unread
+              ((t (,@fmt-bold :inherit gnus-summary-normal-unread))))
+             (gnus-summary-low-ancient
+              ((t (,@fmt-ital :inherit gnus-summary-normal-ancient))))
+             (gnus-summary-low-read
+              ((t (,@fmt-ital :inherit gnus-summary-normal-ancient))))
+             (gnus-summary-low-unread
+              ((t (,@fmt-ital :inherit gnus-summary-normal-unread))))
+             (gnus-summary-low-ticked
+              ((t (,@fmt-ital :inherit gnus-summary-normal-ancient))))
+             (gnus-summary-low-undownloaded
+              ((t (,@fmt-ital :inherit gnus-summary-normal-ancient))))
+             (gnus-summary-normal-ancient ; old messages
+              ((t (,@fmt-none ,@fg-blue))))
+             (gnus-summary-normal-read ; read messages
+              ((t (,@fmt-none ,@fg-base01))))
+             (gnus-summary-normal-ticked ; flagged
+              ((t (,@fmt-none ,@fg-red))))
+             (gnus-summary-normal-undownloaded ((t (,@fmt-none ,@fg-base2))))
+             (gnus-summary-normal-unread ; unread messages
+              ((t (,@fmt-none ,@fg-blue))))
+             (gnus-summary-selected ; indicator
+              ((t (,@fmt-none ,@fg-base03 ,@bg-yellow))))
+             ;; Message
+             (message-mml ((t (,@fg-blue))))
+             (message-cited-text ((t (,@fg-base2))))
+             (message-separator ((t (,@fg-base3))))
+             (message-header-xheader ((t (,@fg-violet))))
+             (message-header-name ((t (,@fg-cyan))))
+             (message-header-other ((t (,@fg-red))))
+             (message-header-newsgroups ((t (,@fmt-bldi ,@fg-yellow))))
+             (message-header-subject ((t (,@fg-base00))))
+             (message-header-cc ((t (,@fmt-bold ,@fg-green))))
+             (message-header-to ((t (,@fmt-bold ,@fg-base1))))
+             ;; parenface
+             (paren-face ((t (,@fg-base01))))
+             ;; rainbow-delimiters
+             (rainbow-delimiters-depth-1-face ((t (,@fg-cyan))))
+             (rainbow-delimiters-depth-2-face ((t (,@fg-yellow))))
+             (rainbow-delimiters-depth-3-face ((t (,@fg-blue))))
+             (rainbow-delimiters-depth-4-face ((t (,@fg-red))))
+             (rainbow-delimiters-depth-5-face ((t (,@fg-green))))
+             (rainbow-delimiters-depth-6-face ((t (,@fg-blue))))
+             (rainbow-delimiters-depth-7-face ((t (,@fg-orange))))
+             (rainbow-delimiters-depth-8-face ((t (,@fg-magenta))))
+             (rainbow-delimiters-depth-9-face ((t (,@fg-base0))))
+             ;; slime
+             (slime-error-face ((t (,@fmt-revr ,@fg-red)))) ; ErrorMsg
+             (slime-note-face ((t (,@fg-yellow))))
+             (slime-repl-inputted-output-face ((t (,@fg-red))))
+             (slime-repl-output-mouseover-face ((t (:box (:color ,base3)))))
+             (slime-style-warning-face ((t (,@fmt-bold ,@fg-orange))))
+             (slime-warning-face ((t (,@fmt-bold ,@fg-red)))) ; WarningMsg
+             ;; whitespace
+             (whitespace-empty ((t (,@fg-red))))
+             (whitespace-hspace ((t (,@fg-orange))))
+             (whitespace-indentation ((t (,@fg-base02))))
+             (whitespace-space ((t (,@fg-base02))))
+             (whitespace-space-after-tab ((t (,@fg-cyan))))
+             (whitespace-space-before-tab ((t (,@fmt-bold ,@fg-red))))
+             (whitespace-tab ((t (,@fg-base02))))
+             (whitespace-trailing ((t (,@fmt-bold ,@fg-red ,@bg-base02))))
+             (whitespace-highlight-face ((t (,@fg-red ,@bg-blue))))
+             (whitespace-line ((t (,@fg-magenta ,@bg-base03))))
+             ;; rcirc
+             (rcirc-my-nick ((t (:foreground ,blue))))
+             (rcirc-nick-in-message ((t (:foreground ,orange))))
+             (rcirc-other-nick ((t (:foreground ,green))))
+             (rcirc-prompt ((t (:foreground ,yellow))))
+             (rcirc-bright-nick ((t (:foreground ,magenta))))
+             (rcirc-server ((t (:foreground ,base1))))
+             (rcirc-timestamp ((t (:foreground ,base01))))
+             ;; ERC
+             (erc-input-face ((t (:foreground ,base01))))
+             (erc-keyword-face ((t (,@fmt-bldi ,@fg-yellow))))
+             (erc-my-nick-face ((t (:foreground ,blue))))
+             (erc-nick-default-face ((t (,@fmt-none ,@fg-cyan))))
+             (erc-notice-face ((t (,@fmt-none ,@fg-blue))))
+             (erc-timestamp-face ((t (:foreground ,base01))))
+             ;;font-latex
+             (font-latex-warning-face ((t (,@fg-red))))
+             (font-latex-sectioning-5-face ((t (,@fg-violet))))
+             ;;flyspell
+             (flyspell-incorrect ((t (,@fg-red))))
+             (flyspell-duplicate ((t (,@fg-yellow)))))
+
+            ((foreground-color . ,(when (<= 16 (display-color-cells)) base0))
+             (background-color . ,back)
+             (background-mode . ,mode)
+             (cursor-color . ,(when (<= 16 (display-color-cells))
+                                base0)))))))))
+
+(defmacro create-solarized-theme (mode)
+  (let* ((theme-name (intern (concat "solarized-" (symbol-name mode))))
+         (defs (solarized-color-definitions mode))
+         (theme-vars (mapcar (lambda (def) (list (car def) (cdr def)))
+                             (second defs)))
+         (theme-faces (first defs)))
+    `(progn
+       (deftheme ,theme-name ,solarized-description)
+       (apply 'custom-theme-set-variables ',theme-name ',theme-vars)
+       (apply 'custom-theme-set-faces ',theme-name ',theme-faces)
+       (provide-theme ',theme-name))))
+
+;;;###autoload
+(when (boundp 'custom-theme-load-path)
+  (add-to-list 'custom-theme-load-path
+               (file-name-as-directory (file-name-directory load-file-name))))
+
+(provide 'solarized-definitions)
diff --git a/elisp/emacs-color-theme-solarized/solarized-light-theme.el b/elisp/emacs-color-theme-solarized/solarized-light-theme.el
new file mode 100644 (file)
index 0000000..444748d
--- /dev/null
@@ -0,0 +1,5 @@
+(require 'solarized-definitions
+         (locate-file "solarized-definitions.el" custom-theme-load-path
+                      '("c" "")))
+
+(create-solarized-theme light)