Fix hook collisions by setq-hook!
Fixes an edge case where setq-hook! would override the setq hooks of other calls to setq-hook! I want to avoid make-symbol/gensym so users can refer to these hook functions by name, in case users want to remove these hooks by hand, if necessary (e.g. for debugging purposes).
This commit is contained in:
parent
648e81f765
commit
9c15bb82f9
1 changed files with 18 additions and 17 deletions
|
@ -334,24 +334,25 @@ 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))))
|
||||||
(let* ((vars (let ((args rest)
|
(let ((vars (let ((args rest)
|
||||||
vars)
|
vars)
|
||||||
(while args
|
(while args
|
||||||
(push (symbol-name (car args)) vars)
|
(push (symbol-name (car args)) vars)
|
||||||
(setq args (cddr args)))
|
(setq args (cddr args)))
|
||||||
vars))
|
(string-join (sort vars #'string-lessp) "-"))))
|
||||||
(fnsym (intern (format "doom|setq-%s" (string-join (sort vars #'string-lessp) "-")))))
|
|
||||||
(macroexp-progn
|
(macroexp-progn
|
||||||
(append `((fset ',fnsym
|
(cl-loop for hook in (doom--resolve-hook-forms hooks)
|
||||||
(lambda (&rest _)
|
for mode = (string-remove-suffix "-hook" (symbol-name hook))
|
||||||
,@(let (forms)
|
for fn = (intern (format "doom|setq-%s-for-%s" vars mode))
|
||||||
(while rest
|
collect `(fset ',fn
|
||||||
(let ((var (pop rest))
|
(lambda (&rest _)
|
||||||
(val (pop rest)))
|
,@(let (forms)
|
||||||
(push `(set (make-local-variable ',var) ,val) forms)))
|
(while rest
|
||||||
(nreverse forms)))))
|
(let ((var (pop rest))
|
||||||
(cl-loop for hook in (doom--resolve-hook-forms hooks)
|
(val (pop rest)))
|
||||||
collect `(add-hook ',hook #',fnsym 'append))))))
|
(push `(setq-local ,var ,val) forms)))
|
||||||
|
(nreverse forms))))
|
||||||
|
collect `(add-hook ',hook #',fn '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