💥 Refactor add-hook! macro & change arg order

This update may potentially break your usage of add-hook! if you pass
the :local or :append properties to it. This is how they used to work:

  (add-hook! :append 'some-mode-hook #'do-something)

Thsoe properties must now follow the hooks, e.g.

  (add-hook! 'some-mode-hook :append #'do-something)

Other changes:
- Various add-hook calls have been renamed to add-hook! because I
  incorrectly assumed `defun` always returned its definition's symbol,
  when in fact, its return value is "undefined" (so sayeth the
  documentation). This should fix #1597.
- This update adds the ability to add multiple functions to hooks
  without a list:

    (add-hook! 'some-mode-hook
               #'do-something
               #'do-something-else)

- The indentation logic has been changed so that consecutive function
  symbols at indented at the same level as the first argument, but forms
  are indent like a defun.

    (add-hook! 'some-mode-hook
               #'do-something
               #'do-something-else)

    (add-hook! 'some-mode-hook
      (message "Hello"))
This commit is contained in:
Henrik Lissner 2019-07-26 19:57:13 +02:00
parent c2ae6f30a5
commit a3e262c7ac
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
42 changed files with 248 additions and 225 deletions

View file

@ -43,7 +43,7 @@
(use-package! solaire-mode
:defer t
:init
(add-hook 'doom-load-theme-hook
(add-hook! 'doom-load-theme-hook
(defun +doom-solaire-mode-swap-bg-maybe-h ()
(pcase-let ((`(,theme . ,swap) (assq doom-theme +doom-solaire-themes)))
(require 'solaire-mode)
@ -53,8 +53,8 @@
;; fringe can become unstyled when deleting or focusing frames
(add-hook 'focus-in-hook #'solaire-mode-reset)
;; Prevent color glitches when reloading either DOOM or loading a new theme
(add-hook! :append '(doom-load-theme-hook doom-reload-hook)
#'solaire-mode-reset)
(add-hook! '(doom-load-theme-hook doom-reload-hook) :append
#'solaire-mode-reset)
;; org-capture takes an org buffer and narrows it. The result is erroneously
;; considered an unreal buffer, so solaire-mode must be restored.
(add-hook 'org-capture-mode-hook #'turn-on-solaire-mode)
@ -78,7 +78,7 @@
;; Because fringes can't be given a buffer-local face, they can look odd, so
;; we remove them in the minibuffer and which-key popups (they serve no
;; purpose there anyway).
(add-hook 'solaire-mode-hook
(add-hook! 'solaire-mode-hook
(defun +doom-disable-fringes-in-minibuffer-h (&rest _)
(set-window-fringes (minibuffer-window) 0 0 nil)))
@ -88,6 +88,6 @@
(set-window-fringes (get-buffer-window which-key--buffer) 0 0 nil))
(add-hook! '(minibuffer-setup-hook window-configuration-change-hook)
#'+doom-disable-fringes-in-minibuffer-h)
#'+doom-disable-fringes-in-minibuffer-h)
(solaire-global-mode +1))

View file

@ -3,4 +3,5 @@
;;;###autoload (autoload 'hl-fill-column-mode "hl-fill-column" nil t)
;;;###autoload
(add-hook! (text-mode prog-mode conf-mode) #'hl-fill-column-mode)
(add-hook! '(text-mode-hook prog-mode-hook conf-mode-hook)
#'hl-fill-column-mode)

View file

@ -10,10 +10,11 @@
:init
;; NOTE In :tools lookup `recenter' is hooked to a bunch of jumping
;; commands, which will trigger nav-flash.
(add-hook!
'(imenu-after-jump-hook better-jumper-post-jump-hook
counsel-grep-post-action-hook dumb-jump-after-jump-hook)
#'+nav-flash-blink-cursor-maybe-h)
(add-hook! '(imenu-after-jump-hook
better-jumper-post-jump-hook
counsel-grep-post-action-hook
dumb-jump-after-jump-hook)
#'+nav-flash-blink-cursor-maybe-h)
(add-hook 'doom-switch-window-hook #'+nav-flash-blink-cursor-maybe-h)

View file

@ -55,7 +55,7 @@ adjustment.")
:global t
:keymap +popup-mode-map
(cond (+popup-mode
(add-hook 'doom-escape-hook #'+popup-close-on-escape-h t)
(add-hook 'doom-escape-hook #'+popup-close-on-escape-h 'append)
(setq +popup--old-display-buffer-alist display-buffer-alist
display-buffer-alist +popup--display-buffer-alist
window--sides-inhibit-check t)
@ -79,7 +79,8 @@ that window has been changed or closed."
:keymap +popup-buffer-mode-map
(if (not +popup-buffer-mode)
(remove-hook 'after-change-major-mode-hook #'+popup-set-modeline-on-enable-h t)
(add-hook 'after-change-major-mode-hook #'+popup-set-modeline-on-enable-h nil t)
(add-hook 'after-change-major-mode-hook #'+popup-set-modeline-on-enable-h
nil 'local)
(when (timerp +popup--timer)
(remove-hook 'kill-buffer-hook #'+popup-kill-buffer-hook-h t)
(cancel-timer +popup--timer)
@ -160,13 +161,13 @@ prevent the popup(s) from messing up the UI (or vice versa)."
("^\\*CPU-Profiler-Report " :side bottom :vslot 100 :slot 1 :height 0.4 :width 0.5 :quit nil)
("^\\*Memory-Profiler-Report " :side bottom :vslot 100 :slot 2 :height 0.4 :width 0.5 :quit nil)))
(add-hook 'doom-init-ui-hook #'+popup-mode :append)
(add-hook 'doom-init-ui-hook #'+popup-mode 'append)
(add-hook! '+popup-buffer-mode-hook
#'(+popup-adjust-fringes-h
+popup-adjust-margins-h
+popup-set-modeline-on-enable-h
+popup-unset-modeline-on-disable-h))
#'+popup-adjust-fringes-h
#'+popup-adjust-margins-h
#'+popup-set-modeline-on-enable-h
#'+popup-unset-modeline-on-disable-h)
;;

View file

@ -22,7 +22,7 @@ to the right fringe.")
(use-package! git-gutter
:commands git-gutter:revert-hunk git-gutter:stage-hunk
:init
(add-hook 'find-file-hook
(add-hook! 'find-file-hook
(defun +vc-gutter-init-maybe-h ()
"Enable `git-gutter-mode' in the current buffer.
@ -67,7 +67,7 @@ is deferred until the file is saved. Respects `git-gutter:disabled-modes'."
;; Update git-gutter on focus (in case I was using git externally)
(add-hook 'focus-in-hook #'git-gutter:update-all-windows)
(add-hook! :append '(doom-escape-hook doom-switch-window-hook)
(add-hook! '(doom-escape-hook doom-switch-window-hook) :append
(defun +vc-gutter-update-h (&rest _)
"Refresh git-gutter on ESC. Return nil to prevent shadowing other
`doom-escape-hook' hooks."

View file

@ -1,4 +1,5 @@
;;; ui/vi-tilde-fringe/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(add-hook! (prog-mode text-mode conf-mode) #'vi-tilde-fringe-mode)
(add-hook! '(prog-mode-hook text-mode-hook conf-mode-hook)
#'vi-tilde-fringe-mode)

View file

@ -83,7 +83,7 @@ stored in `persp-save-dir'.")
(display-buffer-in-side-window
warnings '((window-height . shrink-window-if-larger-than-buffer)))))))))))
(add-hook 'persp-mode-hook
(add-hook! 'persp-mode-hook
(defun +workspaces-init-persp-mode-h ()
(cond (persp-mode
;; `uniquify' breaks persp-mode. It renames old buffers, which causes
@ -109,7 +109,7 @@ stored in `persp-save-dir'.")
(setq persp-add-buffer-on-find-file nil
persp-add-buffer-on-after-change-major-mode nil)
(add-hook 'doom-switch-buffer-hook
(add-hook! 'doom-switch-buffer-hook
(defun +workspaces-add-current-buffer-h ()
"Add current buffer to focused perspective."
(when persp-mode