feature/evil: refactor evil-force-normal-state advice into +evil-esc-hook
This commit is contained in:
parent
69f6eab913
commit
cce294fcf6
7 changed files with 29 additions and 16 deletions
|
@ -249,7 +249,7 @@ properties."
|
||||||
(define-key map [remap evil-window-vsplit] 'ignore)
|
(define-key map [remap evil-window-vsplit] 'ignore)
|
||||||
(define-key map [remap evil-force-normal-state] 'doom/popup-close-maybe))
|
(define-key map [remap evil-force-normal-state] 'doom/popup-close-maybe))
|
||||||
|
|
||||||
(defun doom*popup-close-all-maybe ()
|
(defun doom|popup-close-all-maybe ()
|
||||||
"Close popups with an :autoclose property when pressing ESC from normal
|
"Close popups with an :autoclose property when pressing ESC from normal
|
||||||
mode in any evil-mode buffer."
|
mode in any evil-mode buffer."
|
||||||
(unless (or (doom-popup-p)
|
(unless (or (doom-popup-p)
|
||||||
|
@ -257,7 +257,7 @@ mode in any evil-mode buffer."
|
||||||
(and (bound-and-true-p evil-mode)
|
(and (bound-and-true-p evil-mode)
|
||||||
(evil-ex-hl-active-p 'evil-ex-search)))
|
(evil-ex-hl-active-p 'evil-ex-search)))
|
||||||
(doom/popup-close-all)))
|
(doom/popup-close-all)))
|
||||||
(advice-add #'evil-force-normal-state :after #'doom*popup-close-all-maybe)
|
(add-hook '+evil-esc-hook #'doom|popup-close-all-maybe)
|
||||||
|
|
||||||
;; Make evil-mode cooperate with popups
|
;; Make evil-mode cooperate with popups
|
||||||
(advice-add #'evil-command-window :override #'doom*popup-evil-command-window)
|
(advice-add #'evil-command-window :override #'doom*popup-evil-command-window)
|
||||||
|
|
|
@ -94,13 +94,26 @@
|
||||||
;; evil hacks
|
;; evil hacks
|
||||||
;;
|
;;
|
||||||
|
|
||||||
(defun +evil*esc ()
|
(defvar +evil-esc-hook nil
|
||||||
"Disable search highlights and quit the minibuffer if open."
|
"A hook run after ESC is pressed in normal mode (invoked by
|
||||||
|
`evil-force-normal-state').")
|
||||||
|
|
||||||
|
(defun +evil*attach-escape-hook ()
|
||||||
|
"Run the `+evil-esc-hook'."
|
||||||
|
(run-hooks '+evil-esc-hook))
|
||||||
|
(advice-add #'evil-force-normal-state :after #'+evil*attach-escape-hook)
|
||||||
|
|
||||||
|
(defun +evil|escape-minibuffer ()
|
||||||
|
"Quit the minibuffer if open."
|
||||||
(when (minibuffer-window-active-p (minibuffer-window))
|
(when (minibuffer-window-active-p (minibuffer-window))
|
||||||
(abort-recursive-edit))
|
(abort-recursive-edit)))
|
||||||
|
|
||||||
|
(defun +evil|escape-highlights ()
|
||||||
|
"Disable ex search buffer highlights."
|
||||||
(when (evil-ex-hl-active-p 'evil-ex-search)
|
(when (evil-ex-hl-active-p 'evil-ex-search)
|
||||||
(evil-ex-nohighlight)))
|
(evil-ex-nohighlight)))
|
||||||
(advice-add #'evil-force-normal-state :after #'+evil*esc)
|
|
||||||
|
(add-hook! '+evil-esc-hook '(+evil|escape-minibuffer +evil|escape-highlights))
|
||||||
|
|
||||||
(defun +evil*restore-normal-state-on-windmove (orig-fn &rest args)
|
(defun +evil*restore-normal-state-on-windmove (orig-fn &rest args)
|
||||||
"If in anything but normal or motion mode when moving to another window,
|
"If in anything but normal or motion mode when moving to another window,
|
||||||
|
@ -272,9 +285,9 @@ across windows."
|
||||||
(def-package! evil-exchange
|
(def-package! evil-exchange
|
||||||
:commands evil-exchange
|
:commands evil-exchange
|
||||||
:config
|
:config
|
||||||
(defun +evil*exchange-off ()
|
(defun +evil|escape-exchange ()
|
||||||
(if evil-exchange--overlays (evil-exchange-cancel)))
|
(if evil-exchange--overlays (evil-exchange-cancel)))
|
||||||
(advice-add #'evil-force-normal-state :after #'+evil*exchange-off))
|
(add-hook '+evil-esc-hook #'+evil|escape-exchange))
|
||||||
|
|
||||||
|
|
||||||
(def-package! evil-indent-plus
|
(def-package! evil-indent-plus
|
||||||
|
@ -330,7 +343,7 @@ algorithm is just confusing, like in python or ruby."
|
||||||
:commands (evil-textobj-anyblock-inner-block evil-textobj-anyblock-a-block)
|
:commands (evil-textobj-anyblock-inner-block evil-textobj-anyblock-a-block)
|
||||||
:config
|
:config
|
||||||
(global-evil-search-highlight-persist t)
|
(global-evil-search-highlight-persist t)
|
||||||
(advice-add #'evil-force-normal-state :after #'evil-search-highlight-persist-remove-all))
|
(add-hook '+evil-esc-hook #'evil-search-highlight-persist-remove-all))
|
||||||
|
|
||||||
|
|
||||||
(def-package! evil-snipe :demand t
|
(def-package! evil-snipe :demand t
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
:v "<tab>" #'+snippets/expand-on-region))
|
:v "<tab>" #'+snippets/expand-on-region))
|
||||||
|
|
||||||
;; Exit snippets on ESC in normal mode
|
;; Exit snippets on ESC in normal mode
|
||||||
(advice-add #'evil-force-normal-state :before #'yas-exit-all-snippets)
|
(add-hook '+evil-esc-hook #'yas-exit-all-snippets)
|
||||||
;; Once you're in normal mode, you're out
|
;; Once you're in normal mode, you're out
|
||||||
(add-hook 'evil-normal-state-entry-hook #'yas-abort-snippet)
|
(add-hook 'evil-normal-state-entry-hook #'yas-abort-snippet)
|
||||||
;; Strip out whitespace before a line selection
|
;; Strip out whitespace before a line selection
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
;; Flycheck buffer on ESC in normal mode.
|
;; Flycheck buffer on ESC in normal mode.
|
||||||
(defun +syntax-checkers|flycheck-buffer ()
|
(defun +syntax-checkers|flycheck-buffer ()
|
||||||
(if flycheck-mode (flycheck-buffer)))
|
(if flycheck-mode (flycheck-buffer)))
|
||||||
(advice-add #'evil-force-normal-state :after #'+syntax-checkers|flycheck-buffer)))
|
(add-hook '+evil-esc-hook #'+syntax-checkers|flycheck-buffer)))
|
||||||
|
|
||||||
|
|
||||||
(def-package! flycheck-pos-tip
|
(def-package! flycheck-pos-tip
|
||||||
|
|
|
@ -25,8 +25,8 @@
|
||||||
(add-hook 'focus-in-hook #'git-gutter:update-all-windows)
|
(add-hook 'focus-in-hook #'git-gutter:update-all-windows)
|
||||||
|
|
||||||
(after! evil
|
(after! evil
|
||||||
;; Refreshing git-gutter on ESC
|
;; Refresh git-gutter on ESC
|
||||||
(advice-add #'evil-force-normal-state :after #'git-gutter)))
|
(add-hook '+evil-esc-hook #'git-gutter)))
|
||||||
|
|
||||||
|
|
||||||
(def-package! git-timemachine
|
(def-package! git-timemachine
|
||||||
|
|
|
@ -363,10 +363,10 @@
|
||||||
(IS-LINUX "xdg-open \"%s\"")))))
|
(IS-LINUX "xdg-open \"%s\"")))))
|
||||||
|
|
||||||
;; Remove highlights on ESC
|
;; Remove highlights on ESC
|
||||||
(defun +org*remove-occur-highlights (&rest args)
|
(defun +org|remove-occur-highlights (&rest args)
|
||||||
(when (eq major-mode 'org-mode)
|
(when (eq major-mode 'org-mode)
|
||||||
(org-remove-occur-highlights)))
|
(org-remove-occur-highlights)))
|
||||||
(advice-add #'evil-force-normal-state :before #'+org*remove-occur-highlights)
|
(add-hook '+evil-esc-hook #'+org|remove-occur-highlights)
|
||||||
|
|
||||||
(after! org-bullets
|
(after! org-bullets
|
||||||
(define-minor-mode org-bullets-mode
|
(define-minor-mode org-bullets-mode
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
;; Ensure anzu state is cleared when searches & iedit are done
|
;; Ensure anzu state is cleared when searches & iedit are done
|
||||||
(add-hook! '(kill-buffer-hook find-file-hook) #'+doom-modeline|reset-anzu)
|
(add-hook! '(kill-buffer-hook find-file-hook) #'+doom-modeline|reset-anzu)
|
||||||
(after! evil
|
(after! evil
|
||||||
(advice-add #'evil-force-normal-state :after #'+doom-modeline|reset-anzu)
|
(add-hook '+evil-esc-hook #'+doom-modeline|reset-anzu t)
|
||||||
(advice-add #'evil-ex-search-abort :after #'+doom-modeline|reset-anzu)
|
(advice-add #'evil-ex-search-abort :after #'+doom-modeline|reset-anzu)
|
||||||
(after! evil-multiedit
|
(after! evil-multiedit
|
||||||
(add-hook 'iedit-mode-end-hook #'+doom-modeline|reset-anzu))))
|
(add-hook 'iedit-mode-end-hook #'+doom-modeline|reset-anzu))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue