]> code.delx.au - gnu-emacs-elpa/blobdiff - beacon.el
Version 1.3.1
[gnu-emacs-elpa] / beacon.el
index adf6e1da76f71f0f1b6d1cba0102a2718701e549..9a3edacb1404affab6eefabca27d3d2cd9c032a6 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: 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
@@ -150,6 +150,7 @@ For instance, if you want to disable beacon on buffers where
 (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
@@ -165,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)
@@ -235,12 +240,14 @@ 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))
-  (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
@@ -320,6 +327,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
@@ -386,6 +394,11 @@ The same is true for DELTA-X and horizonta movement."
   (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))))
@@ -442,11 +455,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)))