Rewrite :defer semantics
:defer now supports a hook, a cons cell with (SYMBOL . INTEGER) where SYMBOL is a hook and INTEGER is a number of idle seconds before the package is autoloaded, or just the integer (as per the default behavior of :defer). Also fixes an issue where switch-buffer-deffered packages (like smartparens) wouldn't load.
This commit is contained in:
parent
9a2c4f297c
commit
94f9e43f25
9 changed files with 22 additions and 28 deletions
|
@ -70,14 +70,14 @@ fundamental-mode) for performance sake."
|
||||||
|
|
||||||
;; revert buffers for changed files
|
;; revert buffers for changed files
|
||||||
(def-package! autorevert
|
(def-package! autorevert
|
||||||
:defer buffer
|
:defer doom-after-switch-buffer-hook
|
||||||
:config
|
:config
|
||||||
(setq auto-revert-verbose nil)
|
(setq auto-revert-verbose nil)
|
||||||
(global-auto-revert-mode +1))
|
(global-auto-revert-mode +1))
|
||||||
|
|
||||||
;; persist variables across sessions
|
;; persist variables across sessions
|
||||||
(def-package! savehist
|
(def-package! savehist
|
||||||
:defer (input . 1)
|
:defer (pre-command-hook . 1)
|
||||||
:config
|
:config
|
||||||
(setq savehist-file (concat doom-cache-dir "savehist")
|
(setq savehist-file (concat doom-cache-dir "savehist")
|
||||||
savehist-save-minibuffer-history t
|
savehist-save-minibuffer-history t
|
||||||
|
@ -87,7 +87,7 @@ fundamental-mode) for performance sake."
|
||||||
|
|
||||||
;; persistent point location in buffers
|
;; persistent point location in buffers
|
||||||
(def-package! saveplace
|
(def-package! saveplace
|
||||||
:defer buffer
|
:defer doom-after-switch-buffer-hook
|
||||||
:config
|
:config
|
||||||
(setq save-place-file (concat doom-cache-dir "saveplace"))
|
(setq save-place-file (concat doom-cache-dir "saveplace"))
|
||||||
(defun doom*recenter-on-load-saveplace (&rest _)
|
(defun doom*recenter-on-load-saveplace (&rest _)
|
||||||
|
@ -99,7 +99,7 @@ fundamental-mode) for performance sake."
|
||||||
|
|
||||||
;; Keep track of recently opened files
|
;; Keep track of recently opened files
|
||||||
(def-package! recentf
|
(def-package! recentf
|
||||||
:defer (input . 1)
|
:defer (pre-command-hook . 1)
|
||||||
:commands recentf-open-files
|
:commands recentf-open-files
|
||||||
:config
|
:config
|
||||||
(setq recentf-save-file (concat doom-cache-dir "recentf")
|
(setq recentf-save-file (concat doom-cache-dir "recentf")
|
||||||
|
@ -131,7 +131,7 @@ fundamental-mode) for performance sake."
|
||||||
|
|
||||||
;; Auto-close delimiters and blocks as you type
|
;; Auto-close delimiters and blocks as you type
|
||||||
(def-package! smartparens
|
(def-package! smartparens
|
||||||
:defer (buffer . 2)
|
:defer doom-after-switch-buffer-hook
|
||||||
:config
|
:config
|
||||||
(require 'smartparens-config)
|
(require 'smartparens-config)
|
||||||
(setq sp-highlight-pair-overlay nil
|
(setq sp-highlight-pair-overlay nil
|
||||||
|
@ -150,7 +150,7 @@ fundamental-mode) for performance sake."
|
||||||
|
|
||||||
;; Branching undo
|
;; Branching undo
|
||||||
(def-package! undo-tree
|
(def-package! undo-tree
|
||||||
:defer input
|
:defer pre-command-hook
|
||||||
:config
|
:config
|
||||||
(global-undo-tree-mode +1)
|
(global-undo-tree-mode +1)
|
||||||
;; persistent undo history is known to cause undo history corruption, which
|
;; persistent undo history is known to cause undo history corruption, which
|
||||||
|
|
|
@ -247,7 +247,8 @@ FORCE-P is non-nil, do it anyway.
|
||||||
(cl-pushnew doom-core-dir load-path :test #'string=)
|
(cl-pushnew doom-core-dir load-path :test #'string=)
|
||||||
(add-hook 'doom-internal-init-hook #'doom|refresh-cache))
|
(add-hook 'doom-internal-init-hook #'doom|refresh-cache))
|
||||||
(when doom-debug-mode
|
(when doom-debug-mode
|
||||||
(message "Doom initialized")))
|
(message "Doom initialized"))
|
||||||
|
(setq doom-init-p t))
|
||||||
;; initialize Doom core
|
;; initialize Doom core
|
||||||
(require 'core-lib)
|
(require 'core-lib)
|
||||||
(require 'core-os)
|
(require 'core-os)
|
||||||
|
@ -255,13 +256,7 @@ FORCE-P is non-nil, do it anyway.
|
||||||
(require 'core-ui)
|
(require 'core-ui)
|
||||||
(require 'core-editor)
|
(require 'core-editor)
|
||||||
(require 'core-projects)
|
(require 'core-projects)
|
||||||
(require 'core-keybinds))
|
(require 'core-keybinds)))
|
||||||
;; load input-deferred packages on first `pre-command-hook'
|
|
||||||
(add-transient-hook! 'pre-command-hook
|
|
||||||
(mapc #'require (cdr (assq 'input doom-deferred-packages))))
|
|
||||||
(add-transient-hook! 'doom-after-switch-buffer-hook
|
|
||||||
(when (get-buffer-window)
|
|
||||||
(mapc #'require (cdr (assq 'buffer doom-deferred-packages))))))
|
|
||||||
|
|
||||||
(defun doom-initialize-autoloads ()
|
(defun doom-initialize-autoloads ()
|
||||||
"Ensures that `doom-autoload-file' exists and is loaded. Otherwise run
|
"Ensures that `doom-autoload-file' exists and is loaded. Otherwise run
|
||||||
|
@ -475,11 +470,11 @@ MODULES is an malformed plist of modules to load."
|
||||||
(and (plist-member plist :unless) (eval (plist-get plist :unless) t))))
|
(and (plist-member plist :unless) (eval (plist-get plist :unless) t))))
|
||||||
`(progn
|
`(progn
|
||||||
,(when-let* ((defer (plist-get plist :defer))
|
,(when-let* ((defer (plist-get plist :defer))
|
||||||
(type (or (car-safe defer) defer)))
|
(value (or (car-safe defer) defer)))
|
||||||
(setq plist (plist-put plist :defer (or (cdr-safe defer) t)))
|
(setq plist (plist-put plist :defer (or (cdr-safe defer) t)))
|
||||||
(when (and (not doom-init-p)
|
(unless (or (memq value '(t nil))
|
||||||
(assq type doom-deferred-packages))
|
(number-or-marker-p value))
|
||||||
`(push ',name (cdr (assq ',type doom-deferred-packages)))))
|
`(add-transient-hook! ',value (require ',name))))
|
||||||
(use-package ,name ,@plist))))
|
(use-package ,name ,@plist))))
|
||||||
|
|
||||||
(defmacro def-package-hook! (package when &rest body)
|
(defmacro def-package-hook! (package when &rest body)
|
||||||
|
|
|
@ -281,13 +281,13 @@ DEFAULT is non-nil, set the default mode-line for all buffers."
|
||||||
|
|
||||||
;; undo/redo changes to Emacs' window layout
|
;; undo/redo changes to Emacs' window layout
|
||||||
(def-package! winner
|
(def-package! winner
|
||||||
:defer buffer
|
:defer doom-after-switch-buffer-hook
|
||||||
:preface (defvar winner-dont-bind-my-keys t) ; I'll bind keys myself
|
:preface (defvar winner-dont-bind-my-keys t) ; I'll bind keys myself
|
||||||
:config (winner-mode +1))
|
:config (winner-mode +1))
|
||||||
|
|
||||||
;; highlight matching delimiters
|
;; highlight matching delimiters
|
||||||
(def-package! paren
|
(def-package! paren
|
||||||
:defer input
|
:defer pre-command-hook
|
||||||
:config
|
:config
|
||||||
(setq show-paren-delay 0.1
|
(setq show-paren-delay 0.1
|
||||||
show-paren-highlight-openparen t
|
show-paren-highlight-openparen t
|
||||||
|
|
|
@ -173,8 +173,7 @@ this, you'll get stuttering and random freezes) and resets
|
||||||
`file-name-handler-alist'."
|
`file-name-handler-alist'."
|
||||||
(unless noninteractive
|
(unless noninteractive
|
||||||
(run-hooks 'doom-init-hook))
|
(run-hooks 'doom-init-hook))
|
||||||
(setq doom-init-p t
|
(setq file-name-handler-alist doom--file-name-handler-alist
|
||||||
file-name-handler-alist doom--file-name-handler-alist
|
|
||||||
gc-cons-threshold 16777216
|
gc-cons-threshold 16777216
|
||||||
gc-cons-percentage 0.15))
|
gc-cons-percentage 0.15))
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ MODES should be one major-mode symbol or a list of them."
|
||||||
|
|
||||||
(def-package! company
|
(def-package! company
|
||||||
:when (featurep! +auto)
|
:when (featurep! +auto)
|
||||||
:defer input
|
:defer pre-command-hook
|
||||||
:config (setq company-idle-delay 0.2))
|
:config (setq company-idle-delay 0.2))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
;;
|
;;
|
||||||
|
|
||||||
(def-package! helm-mode
|
(def-package! helm-mode
|
||||||
:defer (input . 1)
|
:defer (pre-command-hook . 1)
|
||||||
:config
|
:config
|
||||||
(helm-mode +1)
|
(helm-mode +1)
|
||||||
;; helm is too heavy for find-file-at-point
|
;; helm is too heavy for find-file-at-point
|
||||||
|
|
|
@ -24,7 +24,7 @@ immediately runs it on the current candidate (ending the ivy session)."
|
||||||
;;
|
;;
|
||||||
|
|
||||||
(def-package! ivy
|
(def-package! ivy
|
||||||
:defer input
|
:defer (pre-command-hook . 1)
|
||||||
:config
|
:config
|
||||||
(setq ivy-height 12
|
(setq ivy-height 12
|
||||||
ivy-do-completion-in-region nil
|
ivy-do-completion-in-region nil
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
(def-package! evil-collection
|
(def-package! evil-collection
|
||||||
:when (featurep! +everywhere)
|
:when (featurep! +everywhere)
|
||||||
:defer input
|
:defer pre-command-hook
|
||||||
:preface
|
:preface
|
||||||
;; must be set before evil/evil-collcetion is loaded
|
;; must be set before evil/evil-collcetion is loaded
|
||||||
(setq evil-want-integration nil
|
(setq evil-want-integration nil
|
||||||
|
@ -325,7 +325,7 @@ the new algorithm is confusing, like in python or ruby."
|
||||||
(def-package! evil-snipe
|
(def-package! evil-snipe
|
||||||
:commands (evil-snipe-mode evil-snipe-override-mode
|
:commands (evil-snipe-mode evil-snipe-override-mode
|
||||||
evil-snipe-local-mode evil-snipe-override-local-mode)
|
evil-snipe-local-mode evil-snipe-override-local-mode)
|
||||||
:defer input
|
:defer pre-command-hook
|
||||||
:init
|
:init
|
||||||
(setq evil-snipe-smart-case t
|
(setq evil-snipe-smart-case t
|
||||||
evil-snipe-scope 'line
|
evil-snipe-scope 'line
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
(def-package! evil-goggles
|
(def-package! evil-goggles
|
||||||
:when (featurep! :feature evil)
|
:when (featurep! :feature evil)
|
||||||
:defer input
|
:defer pre-command-hook
|
||||||
:init
|
:init
|
||||||
(setq evil-goggles-duration 0.05
|
(setq evil-goggles-duration 0.05
|
||||||
evil-goggles-pulse nil ; too slow
|
evil-goggles-pulse nil ; too slow
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue