fix(lib): infinite recursion in doom-first-*-hook

It's possible for these hooks to be triggered recursively, such as in
the case of emojify's "Emoji images not available should I download them
now?" prompt (reported upstream).

Fix: iqbalansari/emacs-emojify#100
This commit is contained in:
Henrik Lissner 2022-10-01 17:09:15 +02:00
parent 4d24a3f1a7
commit a6f0bf3123
No known key found for this signature in database
GPG key ID: B60957CA074D39A3

View file

@ -240,11 +240,13 @@ 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 (make-symbol (format "chain-%s-to-%s-h" hook-var hook)))) (let ((fn (make-symbol (format "chain-%s-to-%s-h" hook-var hook)))
running?)
(fset (fset
fn (lambda (&rest _) fn (lambda (&rest _)
;; Only trigger this after Emacs has initialized. ;; Only trigger this after Emacs has initialized.
(when (and after-init-time (when (and after-init-time
(not running?)
(or (daemonp) (or (daemonp)
;; In some cases, hooks may be lexically unset to ;; In some cases, hooks may be lexically unset to
;; inhibit them during expensive batch operations on ;; inhibit them during expensive batch operations on
@ -253,6 +255,7 @@ TRIGGER-HOOK is a list of quoted hooks and/or sharp-quoted functions."
;; hook wasn't invoked interactively. ;; hook wasn't invoked interactively.
(and (boundp hook) (and (boundp hook)
(symbol-value hook)))) (symbol-value hook))))
(setq running? t) ; prevent infinite recursion
(doom-run-hooks hook-var) (doom-run-hooks hook-var)
(set hook-var nil)))) (set hook-var nil))))
(cond ((daemonp) (cond ((daemonp)