summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2022-08-07 08:56:06 -0700
committerGitHub <noreply@github.com>2022-08-07 08:56:06 -0700
commitcf3bfeccede60089e1b1e0cd6099244c3c71b98b (patch)
tree14fd3ff1abecc138b61eed28df48557fcec02b04
parenta0ba027ee50df6bf4e2e74ee60d3a1812bce1f25 (diff)
parent620fe443c2e7598191cb5d6c6a41064471edb57c (diff)
downloademacs-cf3bfecced.tar.gz
Merge pull request from matzebond/master
GitHub-reference: https://github.com/jwiegley/use-package/issues/787
-rw-r--r--lisp/use-package/use-package-core.el28
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