]> code.delx.au - gnu-emacs-elpa/blobdiff - beacon.el
[Fix #44] Vanish the beacon if anything in the buffer changes
[gnu-emacs-elpa] / beacon.el
index 7b2289f406268493785f3a3cbed24c6221cbd684..a4024a04385597684ca67fa037d2ebfffb3dc6c1 100644 (file)
--- a/beacon.el
+++ b/beacon.el
@@ -5,7 +5,7 @@
 ;; Author: Artur Malabarba <emacs@endlessparentheses.com>
 ;; URL: https://github.com/Malabarba/beacon
 ;; Keywords: convenience
-;; Version: 0.6.1
+;; Version: 1.2
 ;; Package-Requires: ((seq "1.11"))
 
 ;; This program is free software; you can redistribute it and/or modify
@@ -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
@@ -235,7 +236,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))
@@ -300,8 +301,10 @@ Only returns `beacon-size' elements."
     (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))
@@ -384,6 +387,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))))
@@ -440,11 +448,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)))