;; Author: Artur Malabarba <emacs@endlessparentheses.com>
;; URL: https://github.com/Malabarba/beacon
;; Keywords: convenience
-;; Version: 0.6.1
-;; Package-Requires: ((seq "1.11"))
+;; Version: 1.3.1
+;; 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
(add-hook 'beacon-dont-blink-predicates #'window-minibuffer-p)
(defcustom beacon-dont-blink-major-modes '(t magit-status-mode magit-popup-mode
+ inf-ruby-mode
gnus-summary-mode gnus-group-mode)
"A list of major-modes where the beacon won't blink.
Whenever the current buffer satisfies `derived-mode-p' for
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))
- (mapc #'delete-overlay beacon--ovs)
- (setq beacon--ovs nil))
+ (unless (string-match "\\` \\*\\(temp-buffer\\|Echo Area.*\\)\\*"
+ (buffer-name))
+ (when (timerp beacon--timer)
+ (cancel-timer beacon--timer))
+ (mapc #'delete-overlay beacon--ovs)
+ (setq beacon--ovs nil)))
\f
;;; Colors
(o
(delete-overlay o)
(save-excursion
- (while (progn (forward-char 1)
- (setq o (beacon--ov-at-point)))
+ (while (and (condition-case nil
+ (progn (forward-char 1) t)
+ (end-of-buffer nil))
+ (setq o (beacon--ov-at-point)))
(let ((colors (overlay-get o 'beacon-colors)))
(if (not colors)
(move-overlay o (1- (point)) (point))
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)))