From 2b9536f242ab2c408b9e87a04c1e6aad3596a073 Mon Sep 17 00:00:00 2001 From: Ted Zlatanov Date: Sat, 6 Feb 2021 10:16:10 +0000 Subject: [PATCH] Add use-package-use-theme and avoid missing theme errors --- lisp/use-package/use-package-core.el | 47 ++++++++++++++++------ test/lisp/use-package/use-package-tests.el | 8 ++++ 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/use-package-core.el index 72e080001b2..28bc5a50ed0 100644 --- a/lisp/use-package/use-package-core.el +++ b/lisp/use-package/use-package-core.el @@ -135,6 +135,13 @@ arguments will be ignored in the `use-package' expansion." :type 'boolean :group 'use-package) +(defcustom use-package-use-theme t + "If non-nil, use a custom theme to avoid saving :custom +variables twice (once in the Custom file, once in the use-package +call)." + :type 'boolean + :group 'use-package) + (defcustom use-package-verbose nil "Whether to report about loading and configuration details. If you customize this, then you should require the `use-package' @@ -1397,18 +1404,34 @@ no keyword implies `:all'." (defun use-package-handler/:custom (name _keyword args rest state) "Generate use-package custom keyword code." (use-package-concat - `((let ((custom--inhibit-theme-enable nil)) - (custom-theme-set-variables - 'use-package - ,@(mapcar - #'(lambda (def) - (let ((variable (nth 0 def)) - (value (nth 1 def)) - (comment (nth 2 def))) - (unless (and comment (stringp comment)) - (setq comment (format "Customized with use-package %s" name))) - `'(,variable ,value nil () ,comment))) - args)))) + (if (bound-and-true-p use-package-use-theme) + `((let ((custom--inhibit-theme-enable nil)) + ;; Declare the theme here so use-package can be required inside + ;; eval-and-compile without warnings about unknown theme. + (unless (memq 'use-package custom-known-themes) + (deftheme use-package) + (enable-theme 'use-package) + (setq custom-enabled-themes (remq 'use-package custom-enabled-themes))) + (custom-theme-set-variables + 'use-package + ,@(mapcar + #'(lambda (def) + (let ((variable (nth 0 def)) + (value (nth 1 def)) + (comment (nth 2 def))) + (unless (and comment (stringp comment)) + (setq comment (format "Customized with use-package %s" name))) + `'(,variable ,value nil () ,comment))) + args)))) + (mapcar + #'(lambda (def) + (let ((variable (nth 0 def)) + (value (nth 1 def)) + (comment (nth 2 def))) + (unless (and comment (stringp comment)) + (setq comment (format "Customized with use-package %s" name))) + `(customize-set-variable (quote ,variable) ,value ,comment))) + args)) (use-package-process-keywords name rest state))) ;;;; :custom-face diff --git a/test/lisp/use-package/use-package-tests.el b/test/lisp/use-package/use-package-tests.el index a68491cfb7b..3825aa36487 100644 --- a/test/lisp/use-package/use-package-tests.el +++ b/test/lisp/use-package/use-package-tests.el @@ -1136,6 +1136,10 @@ `(progn (let ((custom--inhibit-theme-enable nil)) + (unless (memq 'use-package custom-known-themes) + (deftheme use-package) + (enable-theme 'use-package) + (setq custom-enabled-themes (remq 'use-package custom-enabled-themes))) (custom-theme-set-variables 'use-package '(foo bar nil nil "Customized with use-package foo"))) (require 'foo nil nil)))) @@ -1146,6 +1150,10 @@ `(progn (let ((custom--inhibit-theme-enable nil)) + (unless (memq 'use-package custom-known-themes) + (deftheme use-package) + (enable-theme 'use-package) + (setq custom-enabled-themes (remq 'use-package custom-enabled-themes))) (custom-theme-set-variables 'use-package '(foo bar nil nil "commented"))) (require 'foo nil nil))))