💥 Rethink core hook order & naming

- doom-post-init-hook was renamed doom-init-modules-hook
- doom-init-hook was renamed doom-before-init-modules-hook
- doom-init-modules-hook now runs before the user's config.el is run
- Moved doom-init-ui-hook to run later (on window-setup-hook rather than
  emacs-startup-hook).

Yield a modest improvement in startup times.
This commit is contained in:
Henrik Lissner 2019-03-04 20:35:47 -05:00
parent 843b29a4b5
commit 05303c0fdb
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
9 changed files with 55 additions and 46 deletions

View file

@ -51,19 +51,19 @@ non-nil."
(doom--current-flags (plist-get plist :flags)))
(load! "init" (plist-get plist :path) t)))
doom-modules)
(run-hook-wrapped 'doom-init-hook #'doom-try-run-hook)
(run-hook-wrapped 'doom-before-init-modules-hook #'doom-try-run-hook)
(unless noninteractive
(maphash (lambda (key plist)
(let ((doom--current-module key)
(doom--current-flags (plist-get plist :flags)))
(load! "config" (plist-get plist :path) t)))
doom-modules)
(run-hook-wrapped 'doom-init-modules-hook #'doom-try-run-hook)
(load! "config" doom-private-dir t)
(unless custom-file
(setq custom-file (concat doom-local-dir "custom.el")))
(when (stringp custom-file)
(load custom-file t t t))
(run-hook-wrapped 'doom-post-init-hook #'doom-try-run-hook))))
(load custom-file t t t)))))
;;
@ -294,12 +294,13 @@ The overall load order of Doom is as follows:
~/.emacs.d/core/core.el
$DOOMDIR/init.el
{$DOOMDIR,~/.emacs.d}/modules/*/*/init.el
`doom-init-hook'
`doom-before-init-modules-hook'
{$DOOMDIR,~/.emacs.d}/modules/*/*/config.el
`doom-init-modules-hook'
$DOOMDIR/config.el
`after-init-hook'
`emacs-startup-hook'
`doom-post-init-hook' (at end of `emacs-startup-hook')
`window-setup-hook'
Module load order is determined by your `doom!' block. See `doom-modules-dirs'
for a list of all recognized module trees. Order defines precedence (from most

View file

@ -32,7 +32,7 @@
;; Fix the clipboard in terminal or daemon Emacs (non-GUI)
(when (or (daemonp) (not (display-graphic-p)))
(add-hook 'doom-post-init-hook #'osx-clipboard-mode))
(add-hook 'doom-init-modules-hook #'osx-clipboard-mode))
(when (or (daemonp) (display-graphic-p))
;; Syncs ns frame parameters with theme (and fixes mismatching text

View file

@ -492,14 +492,13 @@ frame's window-system, the theme will be reloaded.")
(condition-case e
(progn
(cond (doom-font
;; We avoid `set-frame-font' for performance reasons.
;; Manipulating `default-frame-alist' is effective enough.
(add-to-list
'default-frame-alist
(cons 'font
(cond ((stringp doom-font) doom-font)
((fontp doom-font) (font-xlfd-name doom-font))
((signal 'wrong-type-argument (list '(fontp stringp) doom-font)))))))
((signal 'wrong-type-argument (list '(fontp stringp) doom-font))))))
(set-frame-font doom-font t t))
((display-graphic-p)
(setq doom-font (face-attribute 'default :font))))
(when doom-serif-font
@ -544,28 +543,34 @@ frame's window-system, the theme will be reloaded.")
(setq doom-last-window-system nil)
(doom|reload-theme-in-frame (selected-frame))))
;; fonts
(add-hook 'doom-init-ui-hook #'doom|init-fonts)
;; themes
(unless (daemonp)
(add-hook 'doom-init-ui-hook #'doom|init-theme))
(add-hook 'after-make-frame-functions #'doom|reload-theme-in-frame-maybe)
(add-hook 'after-delete-frame-functions #'doom|reload-theme-maybe)
;;
;;; Bootstrap
(defun doom|init-ui ()
"Initialize Doom's user interface by applying all its advice and hooks."
(run-hook-wrapped 'doom-init-ui-hook #'doom-try-run-hook)
(add-to-list 'kill-buffer-query-functions #'doom|protect-fallback-buffer nil 'eq)
(add-to-list 'kill-buffer-query-functions #'doom|protect-visible-buffer nil 'eq)
(add-hook 'after-change-major-mode-hook #'doom|highlight-non-default-indentation)
(run-hook-wrapped 'doom-init-ui-hook #'doom-try-run-hook))
(add-hook 'after-make-frame-functions #'doom|reload-theme-in-frame-maybe)
(add-hook 'after-delete-frame-functions #'doom|reload-theme-maybe)
;; Set up `doom-enter-buffer-hook', `doom-exit-buffer-hook',
;; `doom-enter-window-hook' and `doom-exit-window-hook'
(doom-init-switch-hooks))
;; Set fonts
(add-hook 'doom-init-ui-hook #'doom|init-fonts)
;; Apply themes
(unless (daemonp)
(add-hook 'doom-init-ui-hook #'doom|init-theme))
;; Run `doom-load-theme-hook'
(advice-add #'load-theme :after #'doom*load-theme-hooks)
(add-hook 'emacs-startup-hook #'doom|init-switch-hooks)
(add-hook 'emacs-startup-hook #'doom|init-ui)
;; Run `doom-init-ui-hook'
(add-hook 'window-setup-hook #'doom|init-ui)
;;

View file

@ -113,14 +113,13 @@ Doom was setup, which can cause problems.")
;;
;; Custom hooks
(defvar doom-init-hook nil
"Hooks run after all init.el files are loaded, including your private and all
module init.el files, but before their config.el files are loaded.")
(defvar doom-before-init-modules-hook nil
"A list of hooks to run before Doom's modules' config.el files are loaded, but
after their init.el files are loaded.")
(defvar doom-post-init-hook nil
"A list of hooks run when Doom is fully initialized. Fires near the end of
`emacs-startup-hook', as late as possible. Guaranteed to run after everything
else (except for `window-setup-hook').")
(defvar doom-init-modules-hook nil
"A list of hooks to run after Doom's modules' config.el files have loaded.
This includes the user's private module in `doom-private-dir'.")
(defvar doom-reload-hook nil
"A list of hooks to run when `doom/reload' is called.")
@ -303,7 +302,7 @@ If this is a daemon session, load them all immediately instead."
nil #'doom-load-packages-incrementally
(cdr doom-incremental-packages) t))))
(add-hook 'emacs-startup-hook #'doom|load-packages-incrementally)
(add-hook 'window-setup-hook #'doom|load-packages-incrementally)
;;
@ -399,12 +398,14 @@ The overall load order of Doom is as follows:
~/.emacs.d/core/core.el
~/.doom.d/init.el
Module init.el files
`doom-init-hook'
`doom-before-init-modules-hook'
Module config.el files
~/.doom.d/config.el
`doom-post-init-hook'
`doom-init-modules-hook'
`after-init-hook'
`emacs-startup-hook'
`doom-init-ui-hook'
`window-setup-hook'
Module load order is determined by your `doom!' block. See `doom-modules-dirs'
for a list of all recognized module trees. Order defines precedence (from most
@ -438,7 +439,7 @@ to least)."
(require 'core-os)
(when (or force-load-core-p (not noninteractive))
(add-hook 'emacs-startup-hook #'doom|display-benchmark)
(add-hook 'window-setup-hook #'doom|display-benchmark)
(require 'core-ui)
(require 'core-editor)