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))
|
||||
(unless (= 0 (% (length rest) 2))
|
||||
(signal 'wrong-number-of-arguments (list #'evenp (length rest))))
|
||||
`(add-hook! :append ,hooks
|
||||
,@(let (forms)
|
||||
(while rest
|
||||
(let ((var (pop rest))
|
||||
(val (pop rest)))
|
||||
(push `(setq-local ,var ,val) forms)))
|
||||
(nreverse forms))))
|
||||
(let* ((vars (let ((args rest)
|
||||
vars)
|
||||
(while args
|
||||
(push (symbol-name (car args)) vars)
|
||||
(setq args (cddr args)))
|
||||
vars))
|
||||
(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)
|
||||
"Variadic version of `advice-add'.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue