forked from bbatsov/solarized-emacs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
solarized-theme-utils.el
75 lines (64 loc) · 3.01 KB
/
solarized-theme-utils.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
;;; solarized-theme-utils.el --- Utilities for solarized theme development -*- lexical-binding: t -*-
;; Copyright (C) 2012 Thomas Frössman
;; Author: Thomas Frössman <thomasf@jossystem.se>
;; URL: http://github.com/bbatsov/solarized-emacs
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;;
;; Development utilities, these are not needed for normal theme usage
;;
;;;; Code:
(require 'cl-lib)
(require 'solarized)
(defun solarized-import-faces (&optional regexp already-defined)
"Imports current effective face definitions by regular expression
in the format of solarized-theme.el."
(interactive (list (read-regexp "List faces matching regexp")))
(let*
((all-faces (zerop (length regexp)))
(faces
(delq nil
(mapcar (lambda (face)
(let ((s (symbol-name face)))
(when (or all-faces (string-match regexp s))
face)))
(sort (face-list) #'string-lessp)))))
(mapc (lambda(face)
(when (or (not (get face 'theme-face)) already-defined)
(insert (format
"`(%s ((,class %s)))%s
"
face
(let (result)
(dolist (entry face-attribute-name-alist result)
(let* ((attribute (car entry))
(value (face-attribute face attribute)))
(unless (eq value 'unspecified)
(setq result
(nconc (list attribute
(cond
((cl-member attribute
'(":background"
":foreground")
:test 'string=)
(format "\"%s\"" value))
(t value))) result))))))
(if (get face 'theme-face)
(format " ;; Already set by current theme!")
"")))))
faces)))
(provide 'solarized-theme-utils)
;; Local Variables:
;; byte-compile-warnings: (not cl-functions)
;; indent-tabs-mode: nil
;; End:
;;; solarized-theme-utils.el ends here