Refactor setq-hook!
Simplifies its expanded form and names the hook function to make the hook's value more readable in help buffers.
This commit is contained in:
parent
4d20655f78
commit
4cde9afd93
1 changed files with 18 additions and 7 deletions
|
@ -319,13 +319,24 @@ If N and M = 1, there's no benefit to using this macro over `remove-hook'.
|
||||||
(declare (indent 1))
|
(declare (indent 1))
|
||||||
(unless (= 0 (% (length rest) 2))
|
(unless (= 0 (% (length rest) 2))
|
||||||
(signal 'wrong-number-of-arguments (list #'evenp (length rest))))
|
(signal 'wrong-number-of-arguments (list #'evenp (length rest))))
|
||||||
`(add-hook! :append ,hooks
|
(let* ((vars (let ((args rest)
|
||||||
,@(let (forms)
|
vars)
|
||||||
(while rest
|
(while args
|
||||||
(let ((var (pop rest))
|
(push (symbol-name (car args)) vars)
|
||||||
(val (pop rest)))
|
(setq args (cddr args)))
|
||||||
(push `(setq-local ,var ,val) forms)))
|
vars))
|
||||||
(nreverse forms))))
|
(fnsym (intern (format "doom|setq-%s" (string-join (sort vars #'string-lessp) "-")))))
|
||||||
|
(macroexp-progn
|
||||||
|
(append `((fset ',fnsym
|
||||||
|
(lambda (&rest _)
|
||||||
|
,@(let (forms)
|
||||||
|
(while rest
|
||||||
|
(let ((var (pop rest))
|
||||||
|
(val (pop rest)))
|
||||||
|
(push `(set (make-local-variable ',var) ,val) forms)))
|
||||||
|
(nreverse forms)))))
|
||||||
|
(cl-loop for hook in (doom--resolve-hook-forms hooks)
|
||||||
|
collect `(add-hook ',hook #',fnsym 'append))))))
|
||||||
|
|
||||||
(defun advice-add! (symbols where functions)
|
(defun advice-add! (symbols where functions)
|
||||||
"Variadic version of `advice-add'.
|
"Variadic version of `advice-add'.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue