;; Author: Artur Malabarba <emacs@endlessparentheses.com>
;; URL: https://github.com/Malabarba/beacon
;; Keywords: convenience
-;; Version: 1.0
-;; 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
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)
(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))
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
(cond
;; Sanity check.
((not (markerp beacon--previous-place)))
+ ;; Blink for switching buffers.
+ ((and beacon-blink-when-buffer-changes
+ (not (eq (marker-buffer beacon--previous-place)
+ (current-buffer))))
+ (beacon-blink-automated))
;; Blink for switching windows.
((and beacon-blink-when-window-changes
(not (eq beacon--previous-window (selected-window))))
(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)))