Refactor add-transient-hook!

Use gensym instead of counter (and unintern the function symbol after
it's been used).
This commit is contained in:
Henrik Lissner 2018-06-15 23:54:07 +02:00
parent 8e6519ef1a
commit 2047a52fcd
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -262,7 +262,6 @@ compilation. This will no-op on features that have been disabled by the user."
(save-silently t)) (save-silently t))
,@forms)))) ,@forms))))
(defvar doom--transient-counter 0)
(defmacro add-transient-hook! (hook &rest forms) (defmacro add-transient-hook! (hook &rest forms)
"Attaches transient forms to a HOOK. "Attaches transient forms to a HOOK.
@ -272,17 +271,17 @@ invoked, then never again.
HOOK can be a quoted hook or a sharp-quoted function (which will be advised)." HOOK can be a quoted hook or a sharp-quoted function (which will be advised)."
(declare (indent 1)) (declare (indent 1))
(let ((append (if (eq (car forms) :after) (pop forms))) (let ((append (if (eq (car forms) :after) (pop forms)))
(fn (intern (format "doom|transient-hook-%s" (fn (if (symbolp (car forms))
(if (not (symbolp (car forms))) (intern (format "doom|transient-hook-%s" (pop forms)))
(cl-incf doom--transient-counter) (gensym "doom|transient-hook-"))))
(pop forms))))))
`(progn `(progn
(fset ',fn (fset ',fn
(lambda (&rest _) (lambda (&rest _)
,@forms ,@forms
(cond ((functionp ,hook) (advice-remove ,hook #',fn)) (cond ((functionp ,hook) (advice-remove ,hook #',fn))
((symbolp ,hook) (remove-hook ,hook #',fn))) ((symbolp ,hook) (remove-hook ,hook #',fn)))
(fmakunbound ',fn))) (fmakunbound ',fn)
(unintern ',fn nil)))
(cond ((functionp ,hook) (cond ((functionp ,hook)
(advice-add ,hook ,(if append :after :before) #',fn)) (advice-add ,hook ,(if append :after :before) #',fn))
((symbolp ,hook) ((symbolp ,hook)