Add nested face support to custom-theme-set-faces!

And convert it and custom-set-faces! to functions because they didn't
need to be macros.
This commit is contained in:
Henrik Lissner 2019-07-25 12:21:26 +02:00
parent 5cc0e92a48
commit ecb655dc01
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -1,8 +1,16 @@
;;; ../work/conf/doom-emacs/core/autoload/themes.el -*- lexical-binding: t; -*-
(defun doom--custom-theme-set-face (spec)
(cond ((listp (car spec))
(cl-loop for face in (car spec)
collect `(,face ,(cdr spec))))
((keywordp (car spec))
`((,(car spec) ((t ,(cdr spec))))))
(`((,(car spec) ,(cdr spec))))))
;;;###autoload
(defmacro custom-theme-set-faces! (theme &rest specs)
"Apply a list of face specs as user customizations for THEME.
(defun custom-theme-set-faces! (theme &rest specs)
"Apply a list of face SPECS as user customizations for THEME.
THEME can be a single symbol or list thereof. If nil, apply these settings to
all themes. It will apply to all themes once they are loaded.
@ -14,7 +22,7 @@ all themes. It will apply to all themes once they are loaded.
'(org-tag :background \"#4499FF\")
'(org-ellipsis :inherit org-tag)
'(which-key-docstring-face :inherit font-lock-comment-face))"
`(let* ((themes (doom-enlist (or ,theme 'user)))
`(let* ((themes (doom-enlist (or theme 'user)))
(fn (gensym (format "doom--customize-%s-h-" (mapconcat #'symbol-name themes "-")))))
(fset fn
(lambda ()
@ -22,16 +30,14 @@ all themes. It will apply to all themes once they are loaded.
(when (or (eq theme 'user)
(custom-theme-enabled-p theme))
(apply #'custom-theme-set-faces 'user
(cl-loop for (face . spec) in (list ,@specs)
if (keywordp (car spec))
collect `(,face ((t ,spec)))
else collect `(,face ,spec)))))))
(mapcan #'doom--custom-theme-set-face
specs))))))
(funcall fn)
(add-hook 'doom-load-theme-hook fn)))
;;;###autoload
(defmacro custom-set-faces! (&rest specs)
"Apply a list of face specs as user customizations.
(defun custom-set-faces! (&rest specs)
"Apply a list of face SPECS as user customizations.
SPECS is a list of face specs.
@ -45,7 +51,7 @@ face format, e.g.
'(org-tag :background \"#4499FF\")
'(org-ellipsis :inherit org-tag)
'(which-key-docstring-face :inherit font-lock-comment-face))"
`(custom-theme-set-faces! 'user ,@specs))
(apply #'custom-theme-set-faces! 'user specs))
;;;###autoload
(defun doom/reload-theme ()