From 4cde9afd93a0a4c2e74a782ec005e3788ca77aca Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 18 May 2019 18:12:49 -0400 Subject: [PATCH] Refactor setq-hook! Simplifies its expanded form and names the hook function to make the hook's value more readable in help buffers. --- core/core-lib.el | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/core/core-lib.el b/core/core-lib.el index 810efc8bc..94917cc21 100644 --- a/core/core-lib.el +++ b/core/core-lib.el @@ -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'.