diff --git a/README.md b/README.md index 99f51e9..1731d14 100644 --- a/README.md +++ b/README.md @@ -33,17 +33,31 @@ 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. +1. Add the `emacs-color-theme-solarized` directory to your Emacs `custom-theme-load-path`. +2. Add `(load-theme 'solarized 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. Add `(require 'color-theme-solarized)` and `(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]`. + +### all versions + +To switch between the light and dark variations of Solarized, set the frame’s `background-mode`. This can be accomplished globally using `M-x customize-variable frame-background-mode` or on a per-frame basis with `(set-frame-parameter nil 'background-mode 'light)` (or `'dark`). Remember to call `enable-theme` after changing the background mode to update the state of the theme. + +This allows you to have a mix of light and dark frames. I tend to use light frames in the GUI and dark frames in my terminal, so I use the following code: + +```common-lisp +(add-hook 'after-make-frame-functions + (lambda (frame) + (set-frame-parameter frame + 'background-mode + (if (display-graphic-p frame) 'light 'dark)) + (enable-theme 'solarized))) +``` ### IMPORTANT NOTE FOR TERMINAL USERS: @@ -58,13 +72,6 @@ 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. @@ -76,7 +83,6 @@ 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 @@ -88,19 +94,6 @@ but does include several variables that can be customized. ### 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 @@ -126,10 +119,11 @@ but does include several variables that can be customized. * 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. + results in incorrect color handling on Macs. If you are using Emacs on a + Mac, we try to determine this value automatically. 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 ---------- diff --git a/color-theme-solarized.el b/color-theme-solarized.el index f4b1abe..bdbbc16 100644 --- a/color-theme-solarized.el +++ b/color-theme-solarized.el @@ -23,36 +23,29 @@ (require 'color-theme)) ;;;###autoload -(defun color-theme-solarized (mode) +(defun color-theme-solarized () "Color theme by Ethan Schoonover, created 2011-03-24. Ported to Emacs by Greg Pfeil, http://ethanschoonover.com/solarized." - (interactive "Slight or dark? ") + (interactive) (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)))) + `(color-theme-solarized () () ,@(solarized-color-definitions)))) + +(add-to-list 'color-themes + `(color-theme-solarized + "Solarized" + ,solarized-description)) ;;;###autoload (defun color-theme-solarized-dark () - (interactive) - (color-theme-solarized 'dark)) - + "Color theme by Ethan Schoonover, created 2011-03-24. +Ported to Emacs by Greg Pfeil, http://ethanschoonover.com/solarized." + (declare (obsolete color-theme-solarized "2013-05-01")) + (color-theme-solarized)) ;;;###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)) + "Color theme by Ethan Schoonover, created 2011-03-24. +Ported to Emacs by Greg Pfeil, http://ethanschoonover.com/solarized." + (declare (obsolete color-theme-solarized "2013-05-01")) + (color-theme-solarized)) (provide 'color-theme-solarized) diff --git a/solarized-dark-theme.el b/solarized-dark-theme.el index c5ebade..b7b9cf0 100644 --- a/solarized-dark-theme.el +++ b/solarized-dark-theme.el @@ -2,4 +2,10 @@ (locate-file "solarized-definitions.el" custom-theme-load-path '("c" ""))) -(create-solarized-theme dark) +(create-solarized-theme solarized-dark + (concat "This theme is obsolete since 2013-05-01; +use `solarized' instead. + +" + solarized-description) + (solarized-color-definitions)) diff --git a/solarized-definitions.el b/solarized-definitions.el index 4494c1c..9a239ef 100644 --- a/solarized-definitions.el +++ b/solarized-definitions.el @@ -40,11 +40,11 @@ down in order to expand or compress the tonal range displayed." :options '(high normal low) :group 'solarized) -(defcustom solarized-broken-srgb (if (and (eq system-type 'darwin) - (eq window-system 'ns)) - (not (and (boundp 'ns-use-srgb-colorspace) - ns-use-srgb-colorspace)) - nil) +(defcustom solarized-broken-srgb + (if (and (eq system-type 'darwin) (eq window-system 'ns)) + (not (and (boundp 'ns-use-srgb-colorspace) + ns-use-srgb-colorspace)) + 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 @@ -77,500 +77,498 @@ the \"Gen RGB\" column in solarized-definitions.el to improve them further." column is a different set, one of which will be chosen based on term capabilities, etc.") -(defvar which-flet - "This variable will store either flet or cl-flet depending on the Emacs - version. flet was deprecated in in 24.3") -(if (or (> emacs-major-version 24) - (and (>= emacs-major-version 24) (> emacs-minor-version 2))) - (fset 'which-flet 'cl-flet) - (fset 'which-flet 'flet)) -(defun solarized-color-definitions (mode) - (which-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)) +(defun solarized-face-for-index (facespec index &optional light) + "Creates a face from facespec where the colors use the names from + `solarized-colors`." + (let ((new-fontspec (copy-list facespec))) + (dolist (property '(:foreground :background :color)) + (let ((color-name (plist-get new-fontspec property))) + (when color-name + ;; 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. + (when (and (= index 5) + (or (and (eq property :background) + (eq color-name 'back)) + (and (eq property :foreground) + (member color-name '(base0 base1))))) + (setf color-name nil)) + (when (eq color-name 'back) + (setf color-name 'base03)) + (when light + (setf color-name + (case color-name + (base03 'base3) + (base02 'base2) + (base01 'base1) + (base00 'base0) + (base0 'base00) + (base1 'base01) + (base2 'base02) + (base3 'base03) + (otherwise color-name)))) + (plist-put new-fontspec + property + (nth index (assoc color-name solarized-colors)))))) + (when (plist-get new-fontspec :box) + (plist-put new-fontspec + :box + (solarized-face-for-index (plist-get new-fontspec :box) index + light))) + new-fontspec)) - (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)) +(defun create-face-spec (name facespec) + `(,name ((((background dark) (type graphic)) + ,(solarized-face-for-index facespec + (cond (solarized-degrade 3) + (solarized-broken-srgb 2) + (t 1)))) + (((background dark) (type tty) (min-colors 256)) + ,(solarized-face-for-index facespec 3)) + (((background dark) (type tty) (min-colors 16)) + ,(solarized-face-for-index facespec 4)) + (((background dark) (type tty) (min-colors 8)) + ,(solarized-face-for-index facespec 5)) + (((background light) (type graphic)) + ,(solarized-face-for-index facespec + (cond (solarized-degrade 3) + (solarized-broken-srgb 2) + (t 1)) + t)) + (((background light) (type tty) (min-colors 256)) + ,(solarized-face-for-index facespec 3 t)) + (((background light) (type tty) (min-colors 16)) + ,(solarized-face-for-index facespec 4 t)) + (((background light) (type tty) (min-colors 8)) + ,(solarized-face-for-index facespec 5 t))))) - (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 - (match ((t (,@fmt-revr ,@fg-yellow ,@bg-back)))) ; Occur - (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 - ;; ------------- - ;; ace-jump-mode - (ace-jump-face-background ((t (,@fmt-none ,@fg-base01)))) - (ace-jump-face-foreground ((t (,@fmt-bold ,@fg-red)))) - ;; bm visual bookmarks - (bm-fringe-face ((t (,@bg-orange ,@fg-base03)))) - (bm-fringe-persistent-face ((t (,@bg-blue ,@fg-base03)))) - ;; 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)))) - ;; git-gutter - (git-gutter:modified ((t (,@fg-violet)))) - (git-gutter:added ((t (,@fg-green)))) - (git-gutter:deleted ((t (,@fg-red)))) - ;; 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 - ;; tabbar - (tabbar-selected ((t (,@bg-blue ,@fg-base02)))) - (tabbar-unselected ((t (,@bg-base0 ,@fg-base02)))) - (tabbar-modified ((t (,@bg-green ,@fg-base02)))) - ;; 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)))) - ;;ansi-term - (term-color-black ((t ( ,@fg-base02)))) - (term-color-red ((t ( ,@fg-red)))) - (term-color-green ((t ( ,@fg-green)))) - (term-color-yellow ((t ( ,@fg-yellow)))) - (term-color-blue ((t ( ,@fg-blue)))) - (term-color-magenta ((t ( ,@fg-magenta)))) - (term-color-cyan ((t ( ,@fg-cyan)))) - (term-color-white ((t ( ,@fg-base00))))) +(defun solarized-color-definitions () + (let ((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))) + (cond ((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))) + (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)) - ((foreground-color . ,(when (<= 16 (display-color-cells)) base0)) - (background-color . ,back) - (background-mode . ,mode) - (cursor-color . ,(when (<= 16 (display-color-cells)) - base0)) - (ansi-color-names-vector . [,base02 ,red ,green ,yellow ,blue ,magenta ,cyan ,base00])))))))) + (fg-base03 '(:foreground base03)) + (fg-base02 '(:foreground base02)) + (fg-base01 '(:foreground base01)) + (fg-base00 '(:foreground base00)) + (fg-base0 '(:foreground base0)) + (fg-base1 '(:foreground 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)) -(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)))) + (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))) + (eval-after-load 'ansi-color + '(setf ansi-color-names-vector [,base02 ,red ,green ,yellow ,blue ,magenta ,cyan ,base00])) + (mapcar (lambda (face) (apply 'create-face-spec face)) + `(;; basic + (default (,@fg-base0 ,@bg-back)) ; Normal + (cursor (,@fg-base03 ,@bg-base0)) ; Cursor + (error (,@fmt-bold ,@fg-red)) ; Error + (escape-glyph-face (,@fg-red)) + (fringe (,@fg-base01 ,@bg-base02)) + (linum (,@fg-base01 ,@bg-base02)) + (header-line (,@fg-base0 ,@bg-base02 ,@fmt-revbb)) ; Pmenu + (highlight (,@bg-base02)) + (hl-line (:underline ,opt-under ,@bg-base02)) ; CursorLine + (isearch (,@fmt-stnd ,@fg-orange ,@bg-back)) ; IncSearch + (isearch-fail (,@fmt-stnd ,@fg-orange ,@bg-back)) ; IncSearch + (lazy-highlight (,@fmt-revr ,@fg-yellow ,@bg-back)) ; Search + (link (,@fmt-undr ,@fg-violet)) + (link-visited (,@fmt-undr ,@fg-magenta)) + (match ((t (,@fmt-revr ,@fg-yellow ,@bg-back)))) ; Occur + (menu (,@fg-base0 ,@bg-base02)) + (minibuffer-prompt (,@fmt-bold ,@fg-cyan)) ; Question + (mode-line ; StatusLine + (,@fg-base1 ,@bg-base02 ,@fmt-revbb :box nil)) + (mode-line-inactive ; StatusLineNC + (,@fg-base00 ,@bg-base02 ,@fmt-revbb :box nil)) + (region (,@fg-base01 ,@bg-base03 ,@fmt-revbb)) ; Visual + (secondary-selection (,@bg-base02)) + (shadow (,@fg-base01)) + (trailing-whitespace (,@fmt-revr ,@fg-red)) + (vertical-border (,@fg-base0)) + ;; comint + (comint-highlight-prompt (,@fg-blue)) + ;; compilation + (compilation-info (,@fmt-bold ,@fg-green)) + (compilation-warning (,@fmt-bold ,@fg-orange)) + ;; custom + (custom-button + (,@fg-base1 ,@bg-base02 :box (:line-width 2 :style released-button))) + (custom-button-mouse + (,@fmt-revr ,@fg-base1 ,@bg-base02 :inherit custom-button)) + (custom-button-pressed + (,@fmt-revr ,@fg-base1 ,@bg-base02 + :box (:line-width 2 :style pressed-button) + :inherit custom-button-mouse)) + (custom-changed (,@fmt-revr ,@fg-blue ,@bg-base3)) + (custom-comment (,@fg-base1 ,@bg-base02)) + (custom-comment-tag (,@fg-base1 ,@bg-base02)) + (custom-documentation (:inherit default)) + (custom-group-tag (,@fg-base1)) + (custom-group-tag-1 (,@fmt-bold ,@fg-base1)) + (custom-invalid (,@fmt-revr ,@fg-red ,@bg-back)) + (custom-link (,@fg-violet)) + (custom-state (,@fg-green)) + (custom-variable-tag (,@fg-base1)) + ;; diff - DiffAdd, DiffChange, DiffDelete, and DiffText + ,@(case solarized-diff-mode + (high + `((diff-added (,@fmt-revr ,@fg-green)) + (diff-changed (,@fmt-revr ,@fg-yellow)) + (diff-removed (,@fmt-revr ,@fg-red)) + (diff-refine-change + (,@fmt-revr ,@fg-blue ,@bg-back)))) + (low + `((diff-added (,@fmt-undr ,@fg-green)) + (diff-changed (,@fmt-undr ,@fg-yellow)) + (diff-removed (,@fmt-bold ,@fg-red)) + (diff-refine-change (,@fmt-undr ,@fg-blue ,@bg-back)))) + (normal + (if window-system + `((diff-added (,@fmt-bold ,@fg-green ,@bg-base02)) + (diff-changed (,@fmt-bold ,@fg-yellow ,@bg-base02)) + (diff-removed (,@fmt-bold ,@fg-red ,@bg-base02)) + (diff-refine-change (,@fmt-bold ,@fg-blue ,@bg-base02))) + `((diff-added (,@fg-green ,@bg-base02)) + (diff-changed (,@fg-yellow ,@bg-base02)) + (diff-removed (,@fg-red ,@bg-base02)) + (diff-refine-change (,@fg-blue ,@bg-base02)))))) + (diff-file-header (,@bg-back)) + (diff-header (,@fg-base1 ,@bg-back)) + ;; IDO + (ido-only-match (,@fg-green)) + (ido-subdir (,@fg-blue)) + (ido-first-match (,@fmt-bold ,@fg-green)) + ;; emacs-wiki + (emacs-wiki-bad-link-face (,@fmt-undr ,@fg-red)) + (emacs-wiki-link-face (,@fmt-undr ,@fg-blue)) + (emacs-wiki-verbatim-face (,@fmt-undr ,@fg-base00)) + ;; eshell + (eshell-ls-archive (,@fg-magenta)) + (eshell-ls-backup (,@fg-yellow)) + (eshell-ls-clutter (,@fg-orange)) + (eshell-ls-directory (,@fg-blue)) ; Directory + (eshell-ls-executable (,@fg-green)) + (eshell-ls-missing (,@fg-red)) + (eshell-ls-product (,@fg-yellow)) + (eshell-ls-readonly (,@fg-base1)) + (eshell-ls-special (,@fg-violet)) + (eshell-ls-symlink (,@fg-cyan)) + (eshell-ls-unreadable (,@fg-base00)) + (eshell-prompt (,@fmt-bold ,@fg-green)) + ;; font-lock + (font-lock-builtin-face (,@fmt-none ,@fg-green)) ; Statement + (font-lock-comment-face (,@fmt-ital ,@fg-base01)) ; Comment + (font-lock-constant-face (,@fmt-none ,@fg-cyan)) ; Constant + (font-lock-function-name-face ; Identifier + (,@fmt-none ,@fg-blue)) + (font-lock-keyword-face (,@fmt-none ,@fg-green)) ; Statement + (font-lock-string-face (,@fmt-none ,@fg-cyan)) ; Constant + (font-lock-type-face (,@fmt-none ,@fg-yellow)) ; Type + (font-lock-variable-name-face ; Identifier + (,@fmt-none ,@fg-blue)) + (font-lock-warning-face (,@fmt-bold ,@fg-red)) ; Error + (font-lock-doc-face (,@fmt-ital ,@fg-base01)) ; Comment + (font-lock-doc-string-face ; Comment (XEmacs-only) + (,@fmt-ital ,@fg-base01)) + (font-lock-color-constant-face (,@fmt-none ,@fg-green)) + (font-lock-comment-delimiter-face ; Comment + (,@fmt-ital ,@fg-base01)) + (font-lock-preprocessor-face (,@fmt-none ,@fg-orange)) ; PreProc + (font-lock-reference-face (,@fmt-none ,@fg-cyan)) + (font-lock-negation-char-face (,@fmt-none ,@fg-red)) + (font-lock-other-type-face (,@fmt-ital ,@fg-blue)) + (font-lock-regexp-grouping-construct (,@fmt-none ,@fg-orange)) + (font-lock-special-keyword-face (,@fmt-none ,@fg-red)) ; Special + (font-lock-exit-face (,@fmt-none ,@fg-red)) + (font-lock-other-emphasized-face (,@fmt-bldi ,@fg-violet)) + (font-lock-regexp-grouping-backslash (,@fmt-none ,@fg-yellow)) + ;; info + (info-xref (,@fmt-undr ,@fg-blue)) + (info-xref-visited (,@fg-magenta :inherit info-xref)) + ;; org + (org-hide (,@fg-base03)) + (org-todo (,@fmt-bold ,@fg-base03 ,@bg-red)) + (org-done (,@fmt-bold ,@fg-green)) + (org-todo-kwd-face (,@fg-red ,@bg-base03)) + (org-done-kwd-face (,@fg-green ,@bg-base03)) + (org-project-kwd-face (,@fg-violet ,@bg-base03)) + (org-waiting-kwd-face (,@fg-orange ,@bg-base03)) + (org-someday-kwd-face (,@fg-blue ,@bg-base03)) + (org-started-kwd-face (,@fg-yellow ,@bg-base03)) + (org-cancelled-kwd-face (,@fg-green ,@bg-base03)) + (org-delegated-kwd-face (,@fg-cyan ,@bg-base03)) + ;; table + (table-cell (,@fmt-none ,@fg-base0 ,@bg-back)) + ;; outline - pandocBlockQuoteLeader* + (outline-1 (,@fmt-none ,@fg-blue)) + (outline-2 (,@fmt-none ,@fg-cyan)) + (outline-3 (,@fmt-none ,@fg-yellow)) + (outline-4 (,@fmt-none ,@fg-red)) + (outline-5 (,@fmt-none ,@fg-base0)) + (outline-6 (,@fmt-none ,@fg-base01)) + (outline-7 (,@fmt-none ,@fg-orange)) + (outline-8 (,@fmt-none ,@fg-violet)) + ;; show-paren - MatchParen + (show-paren-match (,@fmt-bold ,@fg-cyan ,@bg-base02)) + (show-paren-mismatch (,@fmt-bold ,@fg-red ,@bg-base01)) + ;; speedbar + ;; (speedbar-button-face (,@fmt-none ,@fg-base1)) + (speedbar-button-face + (,@fg-base1 ,@bg-base02 + :box (:line-width 2 :style released-button))) + (speedbar-directory-face (,@fmt-none ,@fg-blue)) + (speedbar-file-face (,@fmt-none ,@fg-green)) + ;; (speedbar-highlight-face (,@bg-base02)) + (speedbar-highlight-face + (,@fmt-revr ,@fg-base1 ,@bg-base02 + :inherit speedbar-button-face)) + ;; (speedbar-selected-face (,@fmt-undr ,@fg-yellow)) + (speedbar-selected-face (,@fmt-none ,@bg-base02 ,@fg-green)) + (speedbar-separator-face (,@fmt-stnd)) + (speedbar-tag-face (,@fmt-none ,@fg-blue)) + ;; widgets + (widget-field + (,@fg-base1 ,@bg-base02 :box (:line-width 1 :color base2) + :inherit default)) + (widget-single-line-field (:inherit widget-field)) + ;; extra modules + ;; ------------- + ;; bm visual bookmarks + (bm-fringe-face (,@bg-orange ,@fg-base03)) + (bm-fringe-persistent-face (,@bg-blue ,@fg-base03)) + ;; Flymake + (flymake-errline (,@fmt-revr ,@fg-red ,@bg-back)) ; ErrorMsg + (flymake-warnline (,@fmt-bold ,@fg-red ,@bg-back)) ; WarningMsg + ;; column-marker + (column-marker-1 (,@bg-base01)) + (column-marker-2 (,@bg-cyan)) + (column-marker-3 (,@bg-violet)) + ;; jabber + (jabber-activity-face (,@fmt-bold ,@fg-red)) + (jabber-activity-personal-face (,@fmt-bold ,@fg-blue)) + (jabber-chat-error (,@fmt-bold ,@fg-red)) + (jabber-chat-prompt-foreign (,@fmt-bold ,@fg-red)) + (jabber-chat-prompt-local (,@fmt-bold ,@fg-blue)) + (jabber-chat-prompt-system (,@fmt-bold ,@fg-green)) + (jabber-chat-text-foreign (,@fg-base1)) + (jabber-chat-text-local (,@fg-base0)) + (jabber-chat-rare-time-face (,@fmt-undr ,@fg-green)) + (jabber-roster-user-away (,@fmt-ital ,@fg-green)) + (jabber-roster-user-chatty (,@fmt-bold ,@fg-orange)) + (jabber-roster-user-dnd (,@fmt-ital ,@fg-red)) + (jabber-roster-user-error (:weight light :slant italic ,@fg-red)) + (jabber-roster-user-offline (,@fg-base01)) + (jabber-roster-user-online (,@fmt-bold ,@fg-blue)) + (jabber-roster-user-xa (,@fmt-ital ,@fg-magenta)) + ;; git-gutter + (git-gutter:modified (,@fg-violet)) + (git-gutter:added (,@fg-green)) + (git-gutter:deleted (,@fg-red)) + ;; gnus - these are taken from mutt, not VIM + (gnus-cite-1 (,@fmt-none ,@fg-blue)) ; quoted + (gnus-cite-2 (,@fmt-none ,@fg-cyan)) ; quoted1 + (gnus-cite-3 (,@fmt-none ,@fg-yellow)) ; quoted2 + (gnus-cite-4 (,@fmt-none ,@fg-red)) ; quoted3 + (gnus-cite-5 (,@fmt-none ,@fg-orange)) ; quoted4 + (gnus-cite-6 (,@fmt-none ,@fg-violet)) + (gnus-cite-7 (,@fmt-none ,@fg-green)) + (gnus-cite-8 (,@fmt-none ,@fg-magenta)) + (gnus-cite-9 (,@fmt-none ,@fg-base00)) + (gnus-cite-10 (,@fmt-none ,@fg-base01)) + (gnus-cite-11 (,@fmt-none ,@fg-base02)) + (gnus-group-mail-1 (,@fmt-bold ,@fg-base3)) + (gnus-group-mail-1-empty (,@fg-base3)) + (gnus-group-mail-2 (,@fmt-bold ,@fg-base2)) + (gnus-group-mail-2-empty (,@fg-base2)) + (gnus-group-mail-3 (,@fmt-bold ,@fg-magenta)) + (gnus-group-mail-3-empty (,@fg-magenta)) + (gnus-group-mail-low (,@fmt-bold ,@fg-base00)) + (gnus-group-mail-low-empty (,@fg-base00)) + (gnus-group-news-1 (,@fmt-bold ,@fg-base1)) + (gnus-group-news-1-empty (,@fg-base1)) + (gnus-group-news-2 (,@fmt-bold ,@fg-blue)) + (gnus-group-news-2-empty (,@fg-blue)) + (gnus-group-news-low (,@fmt-bold ,@fg-violet)) + (gnus-group-news-low-empty (,@fg-violet)) + (gnus-emphasis-highlight-words ; highlight + (,@fmt-none ,fg-yellow)) + (gnus-header-content (,@fmt-none ,@fg-base01)) ; hdrdefault + (gnus-header-from (,@fmt-none ,@fg-base00)) ; header ^From + (gnus-header-name (,@fmt-none ,@fg-base01)) ; hdrdefault + (gnus-header-newsgroups (,@fmt-none ,@fg-base02)) ; hdrdefault + (gnus-header-subject (,@fmt-none ,@fg-blue)) ; header ^Subject + (gnus-server-agent (,@fmt-bold ,@fg-base3)) + (gnus-server-closed (,@fmt-ital ,@fg-base1)) + (gnus-server-denied (,@fmt-bold ,@fg-base2)) + (gnus-server-offline (,@fmt-bold ,@fg-green)) + (gnus-server-opened (,@fmt-bold ,@fg-cyan)) + (gnus-signature (,@fmt-none ,@fg-base01)) ; signature + (gnus-splash (,@fg-base2)) + (gnus-summary-cancelled ; deleted messages + (,@fmt-none ,@fg-red)) + (gnus-summary-high-ancient + (,@fmt-bold :inherit gnus-summary-normal-ancient)) + (gnus-summary-high-read + (,@fmt-bold :inherit gnus-summary-normal-read)) + (gnus-summary-high-ticked + (,@fmt-bold :inherit gnus-summary-normal-ticked)) + (gnus-summary-high-undownloaded + (,@fmt-bold :inherit gnus-summary-normal-undownloaded)) + (gnus-summary-high-unread + (,@fmt-bold :inherit gnus-summary-normal-unread)) + (gnus-summary-low-ancient + (,@fmt-ital :inherit gnus-summary-normal-ancient)) + (gnus-summary-low-read + (,@fmt-ital :inherit gnus-summary-normal-ancient)) + (gnus-summary-low-unread + (,@fmt-ital :inherit gnus-summary-normal-unread)) + (gnus-summary-low-ticked + (,@fmt-ital :inherit gnus-summary-normal-ancient)) + (gnus-summary-low-undownloaded + (,@fmt-ital :inherit gnus-summary-normal-ancient)) + (gnus-summary-normal-ancient ; old messages + (,@fmt-none ,@fg-blue)) + (gnus-summary-normal-read ; read messages + (,@fmt-none ,@fg-base01)) + (gnus-summary-normal-ticked (,@fmt-none ,@fg-red)) ; flagged + (gnus-summary-normal-undownloaded (,@fmt-none ,@fg-base2)) + (gnus-summary-normal-unread ; unread messages + (,@fmt-none ,@fg-blue)) + (gnus-summary-selected ; indicator + (,@fmt-none ,@fg-base03 ,@bg-yellow)) + ;; Message + (message-mml (,@fg-blue)) + (message-cited-text (,@fg-base2)) + (message-separator (,@fg-base3)) + (message-header-xheader (,@fg-violet)) + (message-header-name (,@fg-cyan)) + (message-header-other (,@fg-red)) + (message-header-newsgroups (,@fmt-bldi ,@fg-yellow)) + (message-header-subject (,@fg-base00)) + (message-header-cc (,@fmt-bold ,@fg-green)) + (message-header-to (,@fmt-bold ,@fg-base1)) + ;; minimap + (minimap-active-region-background (,@bg-base02)) + (minimap-semantic-function-face (,bg-base3)) + (minimap-semantic-type-face (,bg-base3)) + (minimap-semantic-variable-face (,bg-base3)) + ;; parenface + (paren-face (,@fg-base01)) ; NB: local, don’t commit + (parenthesis (,@fg-base01)) ; NB: local, don’t commit + ;; rainbow-delimiters + (rainbow-delimiters-depth-1-face (,@fg-cyan)) + (rainbow-delimiters-depth-2-face (,@fg-yellow)) + (rainbow-delimiters-depth-3-face (,@fg-blue)) + (rainbow-delimiters-depth-4-face (,@fg-red)) + (rainbow-delimiters-depth-5-face (,@fg-green)) + (rainbow-delimiters-depth-6-face (,@fg-blue)) + (rainbow-delimiters-depth-7-face (,@fg-orange)) + (rainbow-delimiters-depth-8-face (,@fg-magenta)) + (rainbow-delimiters-depth-9-face (,@fg-base0)) + ;; slime + (slime-error-face (,@fmt-revr ,@fg-red)) ; ErrorMsg + (slime-note-face (,@fg-yellow)) + (slime-repl-inputted-output-face (,@fg-red)) + (slime-repl-output-mouseover-face (:box (:color base3))) + (slime-style-warning-face (,@fmt-bold ,@fg-orange)) + (slime-warning-face (,@fmt-bold ,@fg-red)) ; WarningMsg + ;; whitespace + (whitespace-empty (,@fg-red)) + (whitespace-hspace (,@fg-orange)) + (whitespace-indentation (,@fg-base02)) + (whitespace-space (,@fg-base02)) + (whitespace-space-after-tab (,@fg-cyan)) + (whitespace-space-before-tab (,@fmt-bold ,@fg-red)) + (whitespace-tab (,@fg-base02)) + (whitespace-trailing (,@fmt-bold ,@fg-red ,@bg-base02)) + (whitespace-highlight-face (,@fg-red ,@bg-blue)) + (whitespace-line (,@fg-magenta)) + ;; rcirc + (rcirc-my-nick (,@fg-blue)) + (rcirc-nick-in-message (,@fg-orange)) + (rcirc-other-nick (,@fg-green)) + (rcirc-prompt (,@fg-yellow)) + (rcirc-bright-nick (,@fg-magenta)) + (rcirc-server (,@fg-base1)) + (rcirc-timestamp (,@fg-base01)) + ;;font-latex + (font-latex-warning-face (,@fg-red)) + (font-latex-sectioning-5-face (,@fg-violet)) + ;;flyspell + (flyspell-incorrect (,@fg-red)) + (flyspell-duplicate (,@fg-yellow)) + ;;ansi-term + (term-color-black (,@fg-base02)) + (term-color-red (,@fg-red)) + (term-color-green (,@fg-green)) + (term-color-yellow (,@fg-yellow)) + (term-color-blue (,@fg-blue)) + (term-color-magenta (,@fg-magenta)) + (term-color-cyan (,@fg-cyan)) + (term-color-white (,@fg-base00))))))) ;;;###autoload (when (boundp 'custom-theme-load-path) (add-to-list 'custom-theme-load-path (file-name-as-directory (file-name-directory load-file-name)))) +(defmacro create-solarized-theme (name description color-definitions) + `(progn + (deftheme ,name ,description) + (apply 'custom-theme-set-faces + ',name ,color-definitions) + (provide-theme ',name))) + (provide 'solarized-definitions) diff --git a/solarized-light-theme.el b/solarized-light-theme.el index 444748d..5abdbfa 100644 --- a/solarized-light-theme.el +++ b/solarized-light-theme.el @@ -2,4 +2,10 @@ (locate-file "solarized-definitions.el" custom-theme-load-path '("c" ""))) -(create-solarized-theme light) +(create-solarized-theme solarized-light + (concat "This theme is obsolete since 2013-05-01; +use `solarized' instead. + +" + solarized-description) + (solarized-color-definitions)) diff --git a/solarized-theme.el b/solarized-theme.el new file mode 100644 index 0000000..729011e --- /dev/null +++ b/solarized-theme.el @@ -0,0 +1,6 @@ +(require 'solarized-definitions + (locate-file "solarized-definitions.el" custom-theme-load-path + '("c" ""))) + +(create-solarized-theme solarized + solarized-description (solarized-color-definitions))