thirdparty/color-theme-solarized/solarized-definitions.el
changeset 55 d4adcd3d5ef9
parent 54 e1b82f67f96e
child 56 7446c9ffe828
equal deleted inserted replaced
54:e1b82f67f96e 55:d4adcd3d5ef9
     1 (eval-when-compile
       
     2   (require 'cl))
       
     3 
       
     4 (defconst solarized-description
       
     5   "Color theme by Ethan Schoonover, created 2011-03-24.
       
     6 Ported to Emacs by Greg Pfeil, http://ethanschoonover.com/solarized.")
       
     7 
       
     8 (defcustom solarized-degrade nil
       
     9   "For test purposes only; when in GUI mode, forces Solarized to use the 256
       
    10 degraded color mode to test the approximate color values for accuracy."
       
    11   :type 'boolean
       
    12   :group 'solarized)
       
    13 
       
    14 (defcustom solarized-diff-mode 'normal
       
    15   "Sets the level of highlighting to use in diff-like modes."
       
    16   :type 'symbol
       
    17   :options '(high normal low)
       
    18   :group 'solarized)
       
    19 
       
    20 (defcustom solarized-bold t
       
    21   "Stops Solarized from displaying bold when nil."
       
    22   :type 'boolean
       
    23   :group 'solarized)
       
    24 
       
    25 (defcustom solarized-underline t
       
    26   "Stops Solarized from displaying underlines when nil."
       
    27   :type 'boolean
       
    28   :group 'solarized)
       
    29 
       
    30 (defcustom solarized-italic t
       
    31   "Stops Solarized from displaying italics when nil."
       
    32   :type 'boolean
       
    33   :group 'solarized)
       
    34 
       
    35 (defcustom solarized-termcolors 16
       
    36   "This setting applies to emacs in terminal (non-GUI) mode.
       
    37 If set to 16, emacs will use the terminal emulator's colorscheme (best option
       
    38 as long as you've set your emulator's colors to the Solarized palette). If
       
    39 set to 256 and your terminal is capable of displaying 256 colors, emacs will
       
    40 use the 256 degraded color mode."
       
    41   :type 'integer
       
    42   :options '(16 256)
       
    43   :group 'solarized)
       
    44 
       
    45 (defcustom solarized-contrast 'normal
       
    46   "Stick with normal! It's been carefully tested. Setting this option to high or
       
    47 low does use the same Solarized palette but simply shifts some values up or
       
    48 down in order to expand or compress the tonal range displayed."
       
    49   :type 'symbol
       
    50   :options '(high normal low)
       
    51   :group 'solarized)
       
    52 
       
    53 (defcustom solarized-broken-srgb (if (eq system-type 'darwin) t nil)
       
    54   "Emacs bug #8402 results in incorrect color handling on Macs. If this is t
       
    55 (the default on Macs), Solarized works around it with alternative colors.
       
    56 However, these colors are not totally portable, so you may be able to edit
       
    57 the \"Gen RGB\" column in solarized-definitions.el to improve them further."
       
    58   :type 'boolean
       
    59   :group 'solarized)
       
    60 
       
    61 ;; FIXME: The Generic RGB colors will actually vary from device to device, but
       
    62 ;;        hopefully these are closer to the intended colors than the sRGB values
       
    63 ;;        that Emacs seems to dislike
       
    64 (defvar solarized-colors
       
    65   ;; name    sRGB      Gen RGB   degraded  ANSI(Solarized terminal)
       
    66   '((base03  "#002b36" "#042028" "#1c1c1c" "#7f7f7f")
       
    67     (base02  "#073642" "#0a2832" "#262626" "#000000")
       
    68     (base01  "#586e75" "#465a61" "#585858" "#00ff00")
       
    69     (base00  "#657b83" "#52676f" "#626262" "#ffff00")
       
    70     (base0   "#839496" "#708183" "#808080" "#5c5cff")
       
    71     (base1   "#93a1a1" "#81908f" "#8a8a8a" "#00ffff")
       
    72     (base2   "#eee8d5" "#e9e2cb" "#e4e4e4" "#e5e5e5")
       
    73     (base3   "#fdf6e3" "#fcf4dc" "#ffffd7" "#ffffff")
       
    74     (yellow  "#b58900" "#a57705" "#af8700" "#cdcd00")
       
    75     (orange  "#cb4b16" "#bd3612" "#d75f00" "#ff0000")
       
    76     (red     "#dc322f" "#c60007" "#d70000" "#cd0000")
       
    77     (magenta "#d33682" "#c61b6e" "#af005f" "#cd00cd")
       
    78     (violet  "#6c71c4" "#5859b7" "#5f5faf" "#ff00ff")
       
    79     (blue    "#268bd2" "#2075c7" "#0087ff" "#0000ee")
       
    80     (cyan    "#2aa198" "#259185" "#00afaf" "#00cdcd")
       
    81     (green   "#859900" "#728a05" "#5f8700" "#00cd00"))
       
    82   "This is a table of all the colors used by the Solarized color theme. Each
       
    83    column is a different set, one of which will be chosen based on term
       
    84    capabilities, etc.")
       
    85 
       
    86 (defun solarized-color-definitions (mode)
       
    87   (flet ((find-color (name)
       
    88            (let ((index (if window-system
       
    89                             (if solarized-degrade
       
    90                                 3
       
    91 			      (if solarized-broken-srgb 2 1))
       
    92 			  (if (= solarized-termcolors 256)
       
    93 			      3
       
    94 			    4))))
       
    95              (nth index (assoc name solarized-colors)))))
       
    96     (let ((base03      (find-color 'base03))
       
    97           (base02      (find-color 'base02))
       
    98           (base01      (find-color 'base01))
       
    99           (base00      (find-color 'base00))
       
   100           (base0       (find-color 'base0))
       
   101           (base1       (find-color 'base1))
       
   102           (base2       (find-color 'base2))
       
   103           (base3       (find-color 'base3))
       
   104           (yellow      (find-color 'yellow))
       
   105           (orange      (find-color 'orange))
       
   106           (red         (find-color 'red))
       
   107           (magenta     (find-color 'magenta))
       
   108           (violet      (find-color 'violet))
       
   109           (blue        (find-color 'blue))
       
   110           (cyan        (find-color 'cyan))
       
   111           (green       (find-color 'green))
       
   112           (bold        (if solarized-bold 'bold 'normal))
       
   113           (bright-bold (if solarized-bold 'normal 'bold))
       
   114           (underline   (if solarized-underline t nil))
       
   115           (opt-under   nil)
       
   116           (italic      (if solarized-italic 'italic 'normal)))
       
   117       (when (eq 'light mode)
       
   118         (rotatef base03 base3)
       
   119         (rotatef base02 base2)
       
   120         (rotatef base01 base1)
       
   121         (rotatef base00 base0))
       
   122       (let ((back base03))
       
   123         (cond ((eq 'high solarized-contrast)
       
   124                (let ((orig-base3 base3))
       
   125                  (rotatef base01 base00 base0 base1 base2 base3)
       
   126                  (setf base3 orig-base3)))
       
   127               ((eq 'low solarized-contrast)
       
   128                (setf back      base02
       
   129                      opt-under t)))
       
   130         (let ((bg-back `(:background ,back))
       
   131               (bg-base03 `(:background ,base03))
       
   132               (bg-base02 `(:background ,base02))
       
   133               (bg-base01 `(:background ,base01))
       
   134               (bg-base00 `(:background ,base00))
       
   135               (bg-base0 `(:background ,base0))
       
   136               (bg-base1 `(:background ,base1))
       
   137               (bg-base2 `(:background ,base2))
       
   138               (bg-base3 `(:background ,base3))
       
   139               (bg-green `(:background ,green))
       
   140               (bg-yellow `(:background ,yellow))
       
   141               (bg-orange `(:background ,orange))
       
   142               (bg-red `(:background ,red))
       
   143               (bg-magenta `(:background ,magenta))
       
   144               (bg-violet `(:background ,violet))
       
   145               (bg-blue `(:background ,blue))
       
   146               (bg-cyan `(:background ,cyan))
       
   147               
       
   148               (fg-base03 `(:foreground ,base03))
       
   149               (fg-base02 `(:foreground ,base02))
       
   150               (fg-base01 `(:foreground ,base01))
       
   151               (fg-base00 `(:foreground ,base00))
       
   152               (fg-base0 `(:foreground ,base0))
       
   153               (fg-base1 `(:foreground ,base1))
       
   154               (fg-base2 `(:foreground ,base2))
       
   155               (fg-base3 `(:foreground ,base3))
       
   156               (fg-green `(:foreground ,green))
       
   157               (fg-yellow `(:foreground ,yellow))
       
   158               (fg-orange `(:foreground ,orange))
       
   159               (fg-red `(:foreground ,red))
       
   160               (fg-magenta `(:foreground ,magenta))
       
   161               (fg-violet `(:foreground ,violet))
       
   162               (fg-blue `(:foreground ,blue))
       
   163               (fg-cyan `(:foreground ,cyan))
       
   164 
       
   165               (fmt-bold `(:weight ,bold))
       
   166               (fmt-bldi `(:weight ,bold))
       
   167               (fmt-undr `(:underline ,underline))
       
   168               (fmt-undb `(:underline ,underline :weight ,bold))
       
   169               (fmt-undi `(:underline ,underline))
       
   170               (fmt-uopt `(:underline ,opt-under))
       
   171               (fmt-curl `(:underline t)) ; FIXME: not quite the same
       
   172               (fmt-ital `(:slant ,italic))
       
   173               (fmt-stnd `(:inverse-video t)) ; FIXME: not quite the same
       
   174               (fmt-revr `(:inverse-video t))
       
   175               (fmt-revb `(:inverse-video t :weight ,bold))
       
   176               (fmt-revbb `(:inverse-video t :weight ,bright-bold))
       
   177               (fmt-revbbu `(:inverse-video t
       
   178                             :weight ,bright-bold
       
   179                             :underline ,underline)))
       
   180           `((;; basic
       
   181              (default ((t (,@fg-base0 ,@bg-back)))) ; Normal
       
   182              (cursor ((t (,@fg-base03 ,@bg-base0)))) ; Cursor
       
   183              (escape-glyph-face ((t (,@fg-red))))
       
   184              (fringe ((t (,@fg-base01 ,@bg-base02))))
       
   185              (linum ((t (,@fg-base01 ,@bg-base02))))
       
   186              (header-line ((t (,@fg-base0 ,@bg-base2))))
       
   187              (highlight ((t (,@bg-base02))))
       
   188 
       
   189              (hl-line ((t (,@fmt-uopt ,@bg-base02)))) ; CursorLine
       
   190              (isearch ((t (,@fmt-stnd ,@fg-orange)))) ; IncSearch
       
   191              (lazy-highlight ((t (,@bg-base2 ,@fg-base00))))
       
   192              (link ((t (,@fmt-undr ,@fg-violet))))
       
   193              (link-visited ((t (,@fmt-undr ,@fg-magenta))))
       
   194              (menu ((t (,@fg-base0 ,@bg-base02))))
       
   195              (minibuffer-prompt ((t (,@fg-blue))))
       
   196              (mode-line
       
   197               ((t (,@fg-base1 ,@bg-base02 :box (:line-width 1 :color ,base1)))))
       
   198              (mode-line-buffer-id ((t (,@fg-base1))))
       
   199              (mode-line-inactive
       
   200               ((t (,@fg-base0  ,@bg-base02
       
   201                                :box (:line-width 1 :color ,base02)))))
       
   202              (region ((t (,@fg-base01 ,@bg-base03 ,@fmt-revbb)))) ; Visual
       
   203              (secondary-selection ((t (,@bg-base02))))
       
   204              (shadow ((t (,@fg-base01))))
       
   205              (trailing-whitespace ((t (,@fmt-revr ,@fg-red))))
       
   206              (vertical-border ((t (,@fg-base0))))
       
   207              ;; comint
       
   208              (comint-highlight-prompt ((t (,@fg-blue))))
       
   209              ;; compilation
       
   210              (compilation-info ((t (,@fmt-bold ,@fg-green))))
       
   211              (compilation-warning ((t (,@fmt-bold ,@fg-orange))))
       
   212              ;; custom
       
   213              (custom-button
       
   214               ((t (,@fg-base1 ,@bg-base02
       
   215                               :box (:line-width 2 :style released-button)))))
       
   216              (custom-button-mouse
       
   217               ((t (,@fmt-revr ,@fg-base1 ,@bg-base02 :inherit custom-button))))
       
   218              (custom-button-pressed
       
   219               ((t (,@fmt-revr ,@fg-base1 ,@bg-base02
       
   220                               :box (:line-width 2 :style pressed-button)
       
   221                               :inherit custom-button-mouse))))
       
   222              (custom-changed ((t (,@fmt-revr ,@fg-blue ,@bg-base3))))
       
   223              (custom-comment ((t (,@fg-base1 ,@bg-base02))))
       
   224              (custom-comment-tag ((t (,@fg-base1 ,@bg-base02))))
       
   225              (custom-documentation ((t (:inherit default))))
       
   226              (custom-group-tag ((t (,@fg-base1))))
       
   227              (custom-group-tag-1 ((t (,fmt-bold ,@fg-base1))))
       
   228              (custom-invalid ((t (,@fmt-revr ,@fg-red ,@bg-back))))
       
   229              (custom-link ((t (,@fg-violet))))
       
   230              (custom-state ((t (,@fg-green))))
       
   231              (custom-variable-tag ((t (,@fg-base1))))
       
   232              ;; diff - DiffAdd, DiffChange, DiffDelete, and DiffText
       
   233              ,@(case solarized-diff-mode
       
   234                  (high
       
   235                   `((diff-added ((t (,@fmt-revr ,@fg-green))))
       
   236                     (diff-changed ((t (,@fmt-revr ,@fg-yellow))))
       
   237                     (diff-removed ((t (,@fmt-revr ,@fg-red))))
       
   238                     (diff-header ((t (,@fmt-revr ,@fg-blue ,@bg-back))))))
       
   239                  (low
       
   240                   `((diff-added ((t (,@fmt-undr ,@fg-green))))
       
   241                     (diff-changed ((t (,@fmt-undr ,@fg-yellow))))
       
   242                     (diff-removed ((t (,@fmt-bold ,@fg-red))))
       
   243                     (diff-header ((t (,@fmt-undr ,@fg-blue ,@bg-back))))))
       
   244                  (normal
       
   245                   (if window-system
       
   246                       `((diff-added ((t (,@fmt-bold ,@fg-green))))
       
   247                         (diff-changed ((t (,@fmt-bold ,@fg-yellow))))
       
   248                         (diff-removed ((t (,@fmt-bold ,@fg-red))))
       
   249                         (diff-header ((t (,@fmt-bold ,@fg-blue ,@bg-back)))))
       
   250                     `((diff-added ((t (,@fg-green))))
       
   251                       (diff-changed ((t (,@fg-yellow))))
       
   252                       (diff-removed ((t (,@fg-red))))
       
   253                       (diff-header ((t (,@fg-blue ,@bg-back))))))))
       
   254              (diff-file-header ((t (,@bg-back))))
       
   255              (diff-refine-change ((t (,@bg-base3))))
       
   256              ;; IDO
       
   257              (ido-only-match ((t (,@fg-green))))
       
   258              (ido-subdir ((t (,@fg-blue))))
       
   259              (ido-first-match ((t (,@fmt-bold ,@fg-green))))
       
   260              ;; emacs-wiki
       
   261              (emacs-wiki-bad-link-face ((t (,@fmt-undr ,@fg-red))))
       
   262              (emacs-wiki-link-face ((t (,@fmt-undr ,@fg-blue))))
       
   263              (emacs-wiki-verbatim-face ((t (,@fmt-undr ,@fg-base00))))
       
   264              ;; eshell
       
   265              (eshell-ls-archive ((t (,@fg-magenta))))
       
   266              (eshell-ls-backup ((t (,@fg-yellow))))
       
   267              (eshell-ls-clutter ((t (,@fg-orange))))
       
   268              (eshell-ls-directory ((t (,@fg-blue))))
       
   269              (eshell-ls-executable ((t (,@fg-green))))
       
   270              (eshell-ls-missing ((t (,@fg-red))))
       
   271              (eshell-ls-product ((t (,@fg-yellow))))
       
   272              (eshell-ls-readonly ((t (,@fg-base1))))
       
   273              (eshell-ls-special ((t (,@fg-violet))))
       
   274              (eshell-ls-symlink ((t (,@fg-cyan))))
       
   275              (eshell-ls-unreadable ((t (,@fg-base00))))
       
   276              (eshell-prompt ((t (,@fmt-bold ,@fg-green))))
       
   277              ;; font-lock
       
   278              (font-lock-builtin-face ((t (,@fg-green)))) ; Statement
       
   279              (font-lock-comment-face ((t (,@fmt-ital ,@fg-base01)))) ; Comment
       
   280              (font-lock-constant-face ((t (,@fg-cyan)))) ; Constant
       
   281              (font-lock-function-name-face ((t (,@fg-blue)))) ; Identifier
       
   282              (font-lock-keyword-face ((t (,@fg-green)))) ; Statement
       
   283              (font-lock-string-face ((t (,@fg-cyan)))) ; Constant
       
   284              (font-lock-type-face ((t (,@fg-yellow)))) ; Type
       
   285              (font-lock-variable-name-face ((t (,@fg-blue)))) ; Identifier
       
   286              (font-lock-warning-face ((t (,@fmt-bold ,@fg-red)))) ; Error
       
   287              (font-lock-doc-face ((t (,@fmt-ital ,@fg-cyan))))
       
   288              (font-lock-color-constant-face ((t (,@fg-green))))
       
   289              (font-lock-comment-delimiter-face  ; Comment
       
   290               ((t (,@fmt-ital ,@fg-base01))))
       
   291              (font-lock-doc-string-face ((t (,@fg-green))))
       
   292              (font-lock-preprocessor-face ((t (,@fg-orange)))) ; PreProc
       
   293              (font-lock-reference-face ((t (,@fg-cyan))))
       
   294              (font-lock-negation-char-face ((t (,@fg-red))))
       
   295              (font-lock-other-type-face ((t (,@fmt-ital ,@fg-blue))))
       
   296              (font-lock-regexp-grouping-construct ((t (,@fg-orange))))
       
   297              (font-lock-special-keyword-face ((t (,@fg-magenta))))
       
   298              (font-lock-exit-face ((t (,@fg-red))))
       
   299              (font-lock-other-emphasized-face ((t (,@fmt-bldi ,@fg-violet))))
       
   300              (font-lock-regexp-grouping-backslash ((t (,@fg-yellow))))
       
   301              ;; info
       
   302              (info-xref ((t (,@fmt-undr ,@fg-blue))))
       
   303              (info-xref-visited ((t (,@fg-magenta :inherit info-xref))))
       
   304              ;; org
       
   305              (org-hide ((t (,@fg-base03))))
       
   306              (org-todo ((t (,@fmt-bold ,@fg-base03 ,@bg-red))))
       
   307              (org-done ((t (,@fmt-bold ,@fg-green))))
       
   308              (org-todo-kwd-face ((t (,@fg-red ,@bg-base03))))
       
   309              (org-done-kwd-face ((t (,@fg-green ,@bg-base03))))
       
   310              (org-project-kwd-face ((t (,@fg-violet ,@bg-base03))))
       
   311              (org-waiting-kwd-face ((t (,@fg-orange ,@bg-base03))))
       
   312              (org-someday-kwd-face ((t (,@fg-blue ,@bg-base03))))
       
   313              (org-started-kwd-face ((t (,@fg-yellow ,@bg-base03))))
       
   314              (org-cancelled-kwd-face ((t (,@fg-green ,@bg-base03))))
       
   315              (org-delegated-kwd-face ((t (,@fg-cyan ,@bg-base03))))
       
   316              ;; show-paren - MatchParen
       
   317              (show-paren-match-face ((t (,@fg-cyan ,@fg-base01))))
       
   318              (show-paren-mismatch-face ((t (,@fg-red ,@fg-base01))))
       
   319              ;; widgets
       
   320              (widget-field
       
   321               ((t (,@fg-base1 ,@bg-base02 :box (:line-width 1 :color ,base2)
       
   322                               :inherit default))))
       
   323              (widget-single-line-field ((t (:inherit widget-field))))
       
   324              ;; extra modules
       
   325              ;; -------------
       
   326              ;; gnus
       
   327              (gnus-cite-1 ((t (,@fg-magenta))))
       
   328              (gnus-cite-2 ((t (,@fg-base2))))
       
   329              (gnus-cite-3 ((t (,@fg-base3))))
       
   330              (gnus-cite-4 ((t (,@fg-base1))))
       
   331              (gnus-cite-5 ((t (,@fg-magenta))))
       
   332              (gnus-cite-6 ((t (,@fg-base2))))
       
   333              (gnus-cite-7 ((t (,@fg-base3))))
       
   334              (gnus-cite-8 ((t (,@fg-base1))))
       
   335              (gnus-cite-9 ((t (,@fg-base2))))
       
   336              (gnus-cite-10 ((t (,@fg-base3))))
       
   337              (gnus-cite-11 ((t (,@fg-blue))))
       
   338              (gnus-group-mail-1 ((t (,@fmt-bold ,@fg-base3))))
       
   339              (gnus-group-mail-1-empty ((t (,@fg-base3))))
       
   340              (gnus-group-mail-2 ((t (,@fmt-bold ,@fg-base2))))
       
   341              (gnus-group-mail-2-empty ((t (,@fg-base2))))
       
   342              (gnus-group-mail-3 ((t (,@fmt-bold ,@fg-magenta))))
       
   343              (gnus-group-mail-3-empty ((t (,@fg-magenta))))
       
   344              (gnus-group-mail-low ((t (,@fmt-bold ,@fg-base00))))
       
   345              (gnus-group-mail-low-empty ((t (,@fg-base00))))
       
   346              (gnus-group-news-1 ((t (,@fmt-bold ,@fg-base1))))
       
   347              (gnus-group-news-1-empty ((t (,@fg-base1))))
       
   348              (gnus-group-news-2 ((t (,@fmt-bold ,@fg-blue))))
       
   349              (gnus-group-news-2-empty ((t (,@fg-blue))))
       
   350              (gnus-group-news-low ((t (,@fmt-bold ,@fg-violet))))
       
   351              (gnus-group-news-low-empty ((t (,@fg-violet))))
       
   352              (gnus-header-content ((t (,@fmt-ital ,@fg-cyan))))
       
   353              (gnus-header-from ((t (,@fg-base2))))
       
   354              (gnus-header-name ((t (,@fg-blue))))
       
   355              (gnus-header-newsgroups ((t (,@fmt-ital ,@fg-green))))
       
   356              (gnus-header-subject ((t (,@fg-base1))))
       
   357              (gnus-server-agent ((t (,@fmt-bold ,@fg-base3))))
       
   358              (gnus-server-closed ((t (,@fmt-ital ,@fg-base1))))
       
   359              (gnus-server-denied ((t (,@fmt-bold ,@fg-base2))))
       
   360              (gnus-server-offline ((t (,@fmt-bold ,@fg-green))))
       
   361              (gnus-server-opened ((t (,@fmt-bold ,@fg-cyan))))
       
   362              (gnus-splash ((t (,@fg-base2))))
       
   363              (gnus-summary-high-ancient ((t (,@fmt-bold ,@fg-magenta))))
       
   364              (gnus-summary-high-read ((t (,@fmt-bold ,@fg-base1))))
       
   365              (gnus-summary-high-ticked ((t (,@fmt-bold ,@fg-base3))))
       
   366              (gnus-summary-high-undownloaded ((t (,@fmt-bold ,@fg-base2))))
       
   367              (gnus-summary-low-ancient ((t (,@fmt-ital ,@fg-magenta))))
       
   368              (gnus-summary-low-read ((t (,@fmt-ital ,@fg-base1))))
       
   369              (gnus-summary-low-ticked ((t (,@fmt-ital ,@fg-base3))))
       
   370              (gnus-summary-low-undownloaded ((t (,@fmt-ital ,@fg-base2))))
       
   371              (gnus-summary-normal-ancient ((t (,@fg-magenta))))
       
   372              (gnus-summary-normal-read ((t (,@fg-base1))))
       
   373              (gnus-summary-normal-ticked ((t (,@fg-base3))))
       
   374              (gnus-summary-normal-undownloaded ((t (,@fg-base2))))
       
   375              ;; Flymake
       
   376              (flymake-errline ((t (,@bg-base3))))
       
   377              (flymake-warnline ((t (,@bg-base02))))
       
   378              ;; whitespace
       
   379              (whitespace-empty ((t (,@fg-red))))
       
   380              (whitespace-hspace ((t (,@fg-orange))))
       
   381              (whitespace-indentation ((t (,@fg-base02))))
       
   382              (whitespace-space ((t (,@fg-base02))))
       
   383              (whitespace-space-after-tab ((t (,@fg-cyan))))
       
   384              (whitespace-space-before-tab ((t (,@fmt-bold ,@fg-red))))
       
   385              (whitespace-tab ((t (,@fg-base02))))
       
   386              (whitespace-trailing ((t (,@fmt-bold ,@fg-red ,@bg-base02))))
       
   387              (whitespace-highlight-face ((t (,@fg-red ,@bg-blue))))
       
   388              ;; Message
       
   389              (message-mml ((t (,@fg-blue))))
       
   390              (message-cited-text ((t (,@fg-base2))))
       
   391              (message-separator ((t (,@fg-base3))))
       
   392              (message-header-xheader ((t (,@fg-violet))))
       
   393              (message-header-name ((t (,@fg-cyan))))
       
   394              (message-header-other ((t (,@fg-red))))
       
   395              (message-header-newsgroups ((t (,@fmt-bldi ,@fg-yellow))))
       
   396              (message-header-subject ((t (,@fg-base00))))
       
   397              (message-header-cc ((t (,@fmt-bold ,@fg-green))))
       
   398              (message-header-to ((t (,@fmt-bold ,@fg-base1))))
       
   399              ;; rainbow-delimiters
       
   400              (rainbow-delimiters-depth-1-face ((t (,@fg-cyan))))
       
   401              (rainbow-delimiters-depth-2-face ((t (,@fg-yellow))))
       
   402              (rainbow-delimiters-depth-3-face ((t (,@fg-blue))))
       
   403              (rainbow-delimiters-depth-4-face ((t (,@fg-red))))
       
   404              (rainbow-delimiters-depth-5-face ((t (,@fg-green))))
       
   405              (rainbow-delimiters-depth-6-face ((t (,@fg-blue))))
       
   406              (rainbow-delimiters-depth-7-face ((t (,@fg-orange))))
       
   407              (rainbow-delimiters-depth-8-face ((t (,@fg-magenta))))
       
   408              (rainbow-delimiters-depth-9-face ((t (,@fg-base0)))))
       
   409             ((foreground-color . ,base0)
       
   410              (background-color . ,base03)
       
   411              (background-mode . ,mode)
       
   412              (cursor-color . ,base0))))))))
       
   413 
       
   414 (defmacro create-solarized-theme (mode)
       
   415   (let* ((theme-name (intern (concat "solarized-" (symbol-name mode))))
       
   416          (defs (solarized-color-definitions mode))
       
   417          (theme-vars (mapcar (lambda (def) (list (car def) (cdr def)))
       
   418                              (second defs)))
       
   419          (theme-faces (first defs)))
       
   420     `(progn
       
   421        (deftheme ,theme-name ,solarized-description)
       
   422        (apply 'custom-theme-set-variables ',theme-name ',theme-vars)
       
   423        (apply 'custom-theme-set-faces ',theme-name ',theme-faces)
       
   424        (provide-theme ',theme-name))))
       
   425 
       
   426 (provide 'solarized-definitions)