]> code.delx.au - gnu-emacs-elpa/blobdiff - beacon.el
Version 1.3.0
[gnu-emacs-elpa] / beacon.el
index e978a7c72bc1dd9f801b3831d8200d665106160a..8126c43448c824665a1655d4f9b32169db4d1af0 100644 (file)
--- a/beacon.el
+++ b/beacon.el
@@ -5,8 +5,8 @@
 ;; Author: Artur Malabarba <emacs@endlessparentheses.com>
 ;; URL: https://github.com/Malabarba/beacon
 ;; Keywords: convenience
-;; Version: 1.1
-;; Package-Requires: ((seq "1.11"))
+;; Version: 1.3.0
+;; Package-Requires: ((seq "2.14"))
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -166,6 +166,10 @@ predictable ways, when the blink would be more distracting
 than helpful.."
   :type '(repeat symbol))
 
+(defcustom beacon-before-blink-hook nil
+  "Hook run immediately before blinking the beacon."
+  :type 'hook)
+
 \f
 ;;; Internal variables
 (defvar beacon--window-scrolled nil)
@@ -236,7 +240,7 @@ COLORS applied to each one."
            (seq-filter (lambda (o) (overlay-get o 'beacon))
                        (overlays-at (point))))))
 
-(defun beacon--vanish ()
+(defun beacon--vanish (&rest _)
   "Turn off the beacon."
   (when (timerp beacon--timer)
     (cancel-timer beacon--timer))
@@ -321,6 +325,7 @@ unconditionally (even if `beacon-mode' is disabled), and this can
 be invoked as a user command or called from lisp code."
   (interactive)
   (beacon--vanish)
+  (run-hooks 'beacon-before-blink-hook)
   (beacon--shine)
   (setq beacon--timer
         (run-at-time beacon-blink-delay
@@ -448,11 +453,13 @@ unreliable, so just blink immediately."
         (add-hook 'window-scroll-functions #'beacon--window-scroll-function)
         (add-hook 'focus-in-hook #'beacon--blink-on-focus)
         (add-hook 'post-command-hook #'beacon--post-command)
+        (add-hook 'before-change-functions #'beacon--vanish)
         (add-hook 'pre-command-hook #'beacon--record-vars)
         (add-hook 'pre-command-hook #'beacon--vanish))
     (remove-hook 'focus-in-hook #'beacon--blink-on-focus)
     (remove-hook 'window-scroll-functions #'beacon--window-scroll-function)
     (remove-hook 'post-command-hook #'beacon--post-command)
+    (remove-hook 'before-change-functions #'beacon--vanish)
     (remove-hook 'pre-command-hook #'beacon--record-vars)
     (remove-hook 'pre-command-hook #'beacon--vanish)))