From 7f004f321a81b117d869ccfd1d77cef9166f76d4 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 4 May 2019 18:55:24 -0400 Subject: [PATCH] Optimize set-transient-hook! In case HOOK-OR-FUNCTION is an expensive lisp form. --- core/core-lib.el | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/core-lib.el b/core/core-lib.el index 5795e0b42..8e43b71a8 100644 --- a/core/core-lib.el +++ b/core/core-lib.el @@ -228,18 +228,18 @@ advised)." (fn (if (symbolp (car forms)) (intern (format "doom|transient-hook-%s" (pop forms))) (make-symbol "doom|transient-hook-")))) - `(progn + `(let ((sym ,hook-or-function)) (fset ',fn (lambda (&rest _) ,@forms - (cond ((functionp ,hook-or-function) (advice-remove ,hook-or-function #',fn)) - ((symbolp ,hook-or-function) (remove-hook ,hook-or-function #',fn))) + (cond ((functionp sym) (advice-remove sym #',fn)) + ((symbolp sym) (remove-hook sym #',fn))) (unintern ',fn nil))) - (cond ((functionp ,hook-or-function) + (cond ((functionp sym) (advice-add ,hook-or-function ,(if append :after :before) #',fn)) - ((symbolp ,hook-or-function) + ((symbolp sym) (put ',fn 'permanent-local-hook t) - (add-hook ,hook-or-function #',fn ,append)))))) + (add-hook sym #',fn ,append)))))) (defmacro add-hook! (&rest args) "A convenience macro for adding N functions to M hooks.