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:
Henrik Lissner 2019-05-18 18:12:49 -04:00
parent 4d20655f78
commit 4cde9afd93
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -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'.