From c44bc81a05f3758ceaa28921dd9c830b9c571e61 Mon Sep 17 00:00:00 2001 From: ivanbrennan Date: Mon, 15 Aug 2022 23:24:23 -0400 Subject: [PATCH] fix(lib): defer-feature! fallback FNS If defer-feature! was called with one argument (as is the case in the :lang common-lisp module), FNS defaulted to an empty list. As a result, FEATURE was deferred but never re-added to the features list, and after! blocks were never triggered. Instead of defaulting to an empty list, fallback to a singleton list containing just (FEATURE). This aligns with the behavior this macro had prior to 5b8b04f0c8b6458a3ac4b41417c69413a3bae92e, which generalized FNS to support a list of functions rather than just one. --- lisp/doom-lib.el | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lisp/doom-lib.el b/lisp/doom-lib.el index 688d6d05b..33f4ae1bb 100644 --- a/lisp/doom-lib.el +++ b/lisp/doom-lib.el @@ -595,14 +595,15 @@ serve as a predicated alternative to `after!'." (add-hook 'after-load-functions #',fn))))) (defmacro defer-feature! (feature &rest fns) - "Pretend FEATURE hasn't been loaded yet, until FEATURE-hook or FN runs. + "Pretend FEATURE hasn't been loaded yet, until FEATURE-hook or FNS run. Some packages (like `elisp-mode' and `lisp-mode') are loaded immediately at startup, which will prematurely trigger `after!' (and `with-eval-after-load') blocks. To get around this we make Emacs believe FEATURE hasn't been loaded yet, -then wait until FEATURE-hook (or MODE-hook, if FN is provided) is triggered to -reverse this and trigger `after!' blocks at a more reasonable time." - (let ((advice-fn (intern (format "doom--defer-feature-%s-a" feature)))) +then wait until FEATURE-hook (or any of FNS, if FNS are provided) is triggered +to reverse this and trigger `after!' blocks at a more reasonable time." + (let ((advice-fn (intern (format "doom--defer-feature-%s-a" feature))) + (fns (or fns (list feature)))) `(progn (delq! ',feature features) (defadvice! ,advice-fn (&rest _)