From af3eb37c8e51084261f2ad4bfe1d36fffbcfaebf Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Wed, 8 Jun 2022 17:59:53 -0500 Subject: blep --- lisp/+avy.el | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) (limited to 'lisp/+avy.el') diff --git a/lisp/+avy.el b/lisp/+avy.el index 8056f00..b0837a3 100644 --- a/lisp/+avy.el +++ b/lisp/+avy.el @@ -50,17 +50,35 @@ (defvar-local +avy-buffer-face-mode-face nil "The state of `buffer-face-mode' before calling `avy-with'.") -(defun +avy@un-buffer-face (&rest _) +;;; XXX: Doesn't switch back if avy errors out or quits +(defun +avy@un-buffer-face (win) "BEFORE advice on `avy-with' to disable `buffer-face-mode'." - (when buffer-face-mode - (setq +avy-buffer-face-mode-face buffer-face-mode-face) - (buffer-face-mode -1))) + (with-current-buffer (window-buffer win) + (when buffer-face-mode + (setq +avy-buffer-face-mode-face buffer-face-mode-face) + (buffer-face-mode -1)))) -(defun +avy@re-buffer-face (&rest _) +(defun +avy@re-buffer-face (win) "AFTER advice on `avy-with' to re-enable `buffer-face-mode'." - (when +avy-buffer-face-mode-face - (setq buffer-face-mode-face +avy-buffer-face-mode-face) - (buffer-face-mode +1))) + (with-current-buffer (window-buffer win) + (when +avy-buffer-face-mode-face + (setq buffer-face-mode-face +avy-buffer-face-mode-face) + (buffer-face-mode +1))) + (let ((bounds (bounds-of-thing-at-point 'symbol))) + (when (and (car bounds) + (cdr bounds)) + (pulse-momentary-highlight-region (car bounds) (cdr bounds))))) + +(defun +avy@buffer-face (fn &rest r) + "AROUND advice for avy to dis/enable `buffer-face-mode'." + (if avy-all-windows + (walk-windows #'+avy@un-buffer-face nil (eq avy-all-windows 'all-frames))) + (condition-case e + (apply fn r) + ((quit error) (message "Avy: %S" e) nil) + (:sucess e)) + (if avy-all-windows + (walk-windows #'+avy@re-buffer-face nil (eq avy-all-windows 'all-frames)))) (define-minor-mode +avy-buffer-face-mode "Turn off `buffer-face-mode' before doing Avy selections. @@ -71,11 +89,9 @@ Restore the mode after the selection." (cond (+avy-buffer-face-mode (dolist (fn +avy-buffer-face-functions) - (advice-add fn :before #'+avy@un-buffer-face)) - (advice-add 'avy--done :after #'+avy@re-buffer-face)) + (advice-add fn :around #'+avy@buffer-face))) (t (dolist (fn +avy-buffer-face-functions) - (advice-remove fn #'+avy@un-buffer-face)) - (advice-remove 'avy--done #'+avy@re-buffer-face)))) + (advice-remove fn #'+avy@buffer-face))))) (provide '+avy) ;;; avy.el ends here -- cgit 1.4.1-21-gabe81