Add :when support to after!
This lets you delay a body of code until an arbitrary condition is met (which is checked whenever a file is loaded). Also refactors set-file-template! to wait until +file-templates-alist is defined.
This commit is contained in:
parent
d8b1e469bc
commit
2496e0348d
2 changed files with 18 additions and 3 deletions
|
@ -226,7 +226,20 @@ compilation. This will no-op on features that have been disabled by the user."
|
|||
(load next :no-message :no-error))))
|
||||
#'progn
|
||||
#'with-no-warnings)
|
||||
(cond ((symbolp targets)
|
||||
(cond ((eq (car-safe targets) :when)
|
||||
`(if ,(cadr targets)
|
||||
(progn ,@body)
|
||||
,(let* ((hook 'after-load-functions)
|
||||
(fun (intern (format "doom|delay-form-in-%s" hook))))
|
||||
`(progn
|
||||
(fset ',fun (lambda (&rest args)
|
||||
(when ,(or (car (cdr-safe targets)) t)
|
||||
(remove-hook ',hook #',fun)
|
||||
(ignore args)
|
||||
,@body)))
|
||||
(put ',fun 'permanent-local-hook t)
|
||||
(add-hook ',hook #',fun)))))
|
||||
((symbolp targets)
|
||||
`(eval-after-load ',targets '(progn ,@body)))
|
||||
((and (consp targets)
|
||||
(memq (car targets) '(:or :any)))
|
||||
|
|
|
@ -22,12 +22,14 @@ these properties:
|
|||
:ignore BOOL
|
||||
If non-nil, don't expand any template for this file and don't test any other
|
||||
file template rule against this buffer."
|
||||
`(push (list ,pred ,@plist) +file-templates-alist))
|
||||
(after! (:when (boundp '+file-templates-alist))
|
||||
(push `(,pred ,@plist) +file-templates-alist)))
|
||||
|
||||
;;;###autodef
|
||||
(defun set-file-templates! (&rest templates)
|
||||
"Like `doom--set:file-template', but register many file templates at once."
|
||||
`(setq +file-templates-alist (append (list ,@templates) +file-templates-alist)))
|
||||
(after! (:when (boundp '+file-templates-alist))
|
||||
(setq +file-templates-alist (append (list templates) +file-templates-alist))))
|
||||
|
||||
;; FIXME obsolete :file-template
|
||||
;;;###autoload
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue