Replace :defer HOOK/FN with :after-call keyword

This commit is contained in:
Henrik Lissner 2018-05-20 20:07:15 +02:00
parent 89c52e7d99
commit 1369c51000
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
3 changed files with 48 additions and 23 deletions

View file

@ -83,14 +83,15 @@ fundamental-mode) for performance sake."
;; revert buffers for changed files
(def-package! autorevert
:defer doom-before-switch-buffer-hook
:after-call doom-before-switch-buffer-hook
:config
(setq auto-revert-verbose nil)
(global-auto-revert-mode +1))
;; persist variables across sessions
(def-package! savehist
:defer (pre-command-hook . 1)
:defer 1
:after-call post-command-hook
:config
(setq savehist-file (concat doom-cache-dir "savehist")
savehist-save-minibuffer-history t
@ -100,7 +101,7 @@ fundamental-mode) for performance sake."
;; persistent point location in buffers
(def-package! saveplace
:defer doom-before-switch-buffer-hook
:after-call doom-before-switch-buffer-hook
:config
(setq save-place-file (concat doom-cache-dir "saveplace"))
(defun doom*recenter-on-load-saveplace (&rest _)
@ -112,7 +113,8 @@ fundamental-mode) for performance sake."
;; Keep track of recently opened files
(def-package! recentf
:defer (pre-command-hook . 1)
:defer 1
:after-call find-file-hook
:commands recentf-open-files
:config
(setq recentf-save-file (concat doom-cache-dir "recentf")
@ -135,7 +137,7 @@ fundamental-mode) for performance sake."
;; Auto-close delimiters and blocks as you type
(def-package! smartparens
:defer doom-before-switch-buffer-hook
:after-call doom-before-switch-buffer-hook
:commands (sp-pair sp-local-pair sp-with-modes)
:config
(require 'smartparens-config)
@ -155,7 +157,7 @@ fundamental-mode) for performance sake."
;; Branching undo
(def-package! undo-tree
:defer doom-before-switch-buffer-hook
:after-call doom-before-switch-buffer-hook
:config
;; persistent undo history is known to cause undo history corruption, which
;; can be very destructive! So disable it!
@ -176,7 +178,7 @@ fundamental-mode) for performance sake."
command-log-mode-open-log-turns-on-mode t))
(def-package! dtrt-indent
:defer t
:after-call doom-before-switch-buffer-hook
:config
(setq dtrt-indent-verbosity (if doom-debug-mode 2 0))

View file

@ -459,11 +459,44 @@ added, if the file exists."
;; Use-package modifications
;;
(autoload 'use-package "use-package" nil nil 'macro)
(autoload 'use-package "use-package-core" nil 'macro)
;; TODO :after-hook HOOK (load packages on first run of HOOK)
;; TODO Make
(after! use-package-core
(add-to-list 'use-package-deferring-keywords :after-call nil #'eq)
(setq use-package-keywords
(use-package-list-insert :after-call use-package-keywords :after))
(defalias 'use-package-normalize/:after-call
'use-package-normalize-symlist)
(defvar doom--deferred-packages-alist ()
"TODO")
(defun use-package-handler/:after-call (name-symbol _keyword hooks rest state)
(let ((fn (intern (format "doom|transient-hook--load-%s" name-symbol)))
(hooks (delete-dups hooks)))
(if (plist-get state :demand)
(use-package-process-keywords name rest state)
(use-package-concat
`((fset ',fn
(lambda (&rest _)
(require ',name-symbol)
(dolist (hook (cdr (assq ',name-symbol doom--deferred-packages-alist)))
(if (functionp hook)
(advice-remove hook #',fn)
(remove-hook hook #',fn)))
(map-delete doom--deferred-packages-alist ',name-symbol)
(fmakunbound ',fn))))
(cl-mapcan (lambda (hook)
(if (functionp hook)
`((advice-add #',hook :before #',fn))
`((add-hook ',hook #',fn))))
hooks)
`((map-put doom--deferred-packages-alist
',name-symbol
'(,@hooks ,@(cdr (assq name-symbol doom--deferred-packages-alist)))))
(use-package-process-keywords name rest state))))))
;;
@ -515,17 +548,7 @@ MODULES is an malformed plist of modules to load."
(or (and (plist-member plist :if) (not (eval (plist-get plist :if) t)))
(and (plist-member plist :when) (not (eval (plist-get plist :when) t)))
(and (plist-member plist :unless) (eval (plist-get plist :unless) t))))
`(progn
;; TODO Replace with custom use-package keyword
,(when-let* ((defer (plist-get plist :defer))
(value (or (car-safe defer) defer)))
(setq plist (plist-put plist :defer (or (cdr-safe defer) t)))
(unless (or (memq value '(t nil))
(number-or-marker-p value))
`(add-transient-hook! ',value
,(intern (format "load-%s" name))
(require ',name))))
(use-package ,name ,@plist))))
`(use-package ,name ,@plist)))
(defmacro def-package-hook! (package when &rest body)
"Reconfigures a package's `def-package!' block.

View file

@ -290,13 +290,13 @@ DEFAULT is non-nil, set the default mode-line for all buffers."
;; undo/redo changes to Emacs' window layout
(def-package! winner
:defer doom-before-switch-window-hook
:after-call doom-before-switch-window-hook
:preface (defvar winner-dont-bind-my-keys t) ; I'll bind keys myself
:config (winner-mode +1))
;; highlight matching delimiters
(def-package! paren
:defer doom-before-switch-buffer-hook
:after-call doom-before-switch-buffer-hook
:config
(setq show-paren-delay 0.1
show-paren-highlight-openparen t