diff options
author | John Wiegley <johnw@newartisans.com> | 2022-08-07 08:56:06 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-07 08:56:06 -0700 |
commit | cf3bfeccede60089e1b1e0cd6099244c3c71b98b (patch) | |
tree | 14fd3ff1abecc138b61eed28df48557fcec02b04 /lisp/use-package | |
parent | a0ba027ee50df6bf4e2e74ee60d3a1812bce1f25 (diff) | |
parent | 620fe443c2e7598191cb5d6c6a41064471edb57c (diff) | |
download | emacs-cf3bfeccede60089e1b1e0cd6099244c3c71b98b.tar.gz emacs-cf3bfeccede60089e1b1e0cd6099244c3c71b98b.tar.bz2 emacs-cf3bfeccede60089e1b1e0cd6099244c3c71b98b.zip |
Merge pull request from matzebond/master
GitHub-reference: https://github.com/jwiegley/use-package/issues/787
Diffstat (limited to 'lisp/use-package')
-rw-r--r-- | lisp/use-package/use-package-core.el | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/use-package-core.el index 49187e527ff..3cbcd69ffff 100644 --- a/lisp/use-package/use-package-core.el +++ b/lisp/use-package/use-package-core.el @@ -100,7 +100,8 @@ :load ;; This must occur almost last; the only forms which should appear after ;; are those that must happen directly after the config forms. - :config) + :config + :local) "The set of valid keywords, in the order they are processed in. The order of this list is *very important*, so it is only advisable to insert new keywords, never to delete or reorder @@ -1547,6 +1548,31 @@ no keyword implies `:all'." (when use-package-compute-statistics `((use-package-statistics-gather :config ',name t)))))) +;;;; :local + +(defun use-package-normalize/:local (name keyword args) + (let ((first-arg-name (symbol-name (caar args)))) + (if (not (string-suffix-p "-hook" first-arg-name)) + (let* ((sym-name (symbol-name name)) + (addition (if (string-suffix-p "-mode" sym-name) + "-hook" + "-mode-hook")) + (hook (intern (concat sym-name addition)))) + `((,hook . ,(use-package-normalize-forms name keyword args)))) + (cl-loop for (hook . code) in args + collect `(,hook . ,(use-package-normalize-forms name keyword code)))))) + +(defun use-package-handler/:local (name _keyword arg rest state) + (let* ((body (use-package-process-keywords name rest state))) + (use-package-concat + body + (cl-loop for (hook . code) in arg + for func-name = (intern (concat "use-package-func/" (symbol-name hook))) + collect (progn + (push 'progn code) + `(defun ,func-name () ,code)) + collect `(add-hook ',hook ',func-name))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; The main macro |