refactor(lib): use uninterned symbols for transient/chained hooks
The debugger appears to display uninterned symbols properly, and since these symbols should never be touched/referenced by users, there's no reason to pollute the obarray with these transient symbols.
This commit is contained in:
parent
cf1c6e9a68
commit
701f51c3d6
1 changed files with 6 additions and 12 deletions
|
@ -214,7 +214,7 @@ HOOK-VAR is triggered, it is reset to nil.
|
||||||
HOOK-VAR is a quoted hook.
|
HOOK-VAR is a quoted hook.
|
||||||
TRIGGER-HOOK is a list of quoted hooks and/or sharp-quoted functions."
|
TRIGGER-HOOK is a list of quoted hooks and/or sharp-quoted functions."
|
||||||
(dolist (hook trigger-hooks)
|
(dolist (hook trigger-hooks)
|
||||||
(let ((fn (intern (format "%s-init-on-%s-h" hook-var hook))))
|
(let ((fn (make-symbol (format "chain-%s-to-%s-h" hook-var hook))))
|
||||||
(fset
|
(fset
|
||||||
fn (lambda (&rest _)
|
fn (lambda (&rest _)
|
||||||
;; Only trigger this after Emacs has initialized.
|
;; Only trigger this after Emacs has initialized.
|
||||||
|
@ -709,13 +709,8 @@ again.
|
||||||
HOOK-OR-FUNCTION can be a quoted hook or a sharp-quoted function (which will be
|
HOOK-OR-FUNCTION can be a quoted hook or a sharp-quoted function (which will be
|
||||||
advised)."
|
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)))
|
||||||
;; Avoid `make-symbol' and `gensym' here because an interned symbol is
|
(fn (gensym "doom-transient-hook")))
|
||||||
;; easier to debug in backtraces (and is visible to `describe-function')
|
|
||||||
(fn (intern (format "doom--transient-%d-h"
|
|
||||||
(put 'add-transient-hook! 'counter
|
|
||||||
(1+ (or (get 'add-transient-hook! 'counter)
|
|
||||||
0)))))))
|
|
||||||
`(let ((sym ,hook-or-function))
|
`(let ((sym ,hook-or-function))
|
||||||
(defun ,fn (&rest _)
|
(defun ,fn (&rest _)
|
||||||
,(format "Transient hook for %S" (doom-unquote hook-or-function))
|
,(format "Transient hook for %S" (doom-unquote hook-or-function))
|
||||||
|
@ -725,10 +720,10 @@ advised)."
|
||||||
((symbolp sym) (remove-hook sym #',fn))))
|
((symbolp sym) (remove-hook sym #',fn))))
|
||||||
(unintern ',fn nil))
|
(unintern ',fn nil))
|
||||||
(cond ((functionp sym)
|
(cond ((functionp sym)
|
||||||
(advice-add ,hook-or-function ,(if append :after :before) #',fn))
|
(advice-add ,hook-or-function ,(if append? :after :before) #',fn))
|
||||||
((symbolp sym)
|
((symbolp sym)
|
||||||
(put ',fn 'permanent-local-hook t)
|
(put ',fn 'permanent-local-hook t)
|
||||||
(add-hook sym #',fn ,append))))))
|
(add-hook sym #',fn ,append?))))))
|
||||||
|
|
||||||
(defmacro add-hook! (hooks &rest rest)
|
(defmacro add-hook! (hooks &rest rest)
|
||||||
"A convenience macro for adding N functions to M hooks.
|
"A convenience macro for adding N functions to M hooks.
|
||||||
|
@ -807,8 +802,7 @@ If N and M = 1, there's no benefit to using this macro over `remove-hook'.
|
||||||
collect `(defun ,fn (&rest _)
|
collect `(defun ,fn (&rest _)
|
||||||
,(format "%s = %s" var (pp-to-string val))
|
,(format "%s = %s" var (pp-to-string val))
|
||||||
(setq-local ,var ,val))
|
(setq-local ,var ,val))
|
||||||
collect `(remove-hook ',hook #',fn) ; ensure set order
|
collect `(add-hook ',hook #',fn -90))))
|
||||||
collect `(add-hook ',hook #',fn))))
|
|
||||||
|
|
||||||
(defmacro unsetq-hook! (hooks &rest vars)
|
(defmacro unsetq-hook! (hooks &rest vars)
|
||||||
"Unbind setq hooks on HOOKS for VARS.
|
"Unbind setq hooks on HOOKS for VARS.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue