X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/ce03c017c31e6943dcc9dbcafd33f56f52a22b3c..a1cdea05e8cbfe15ba075c64417db20b814e48e8:/packages/beacon/beacon.el diff --git a/packages/beacon/beacon.el b/packages/beacon/beacon.el index 7b2289f40..9a3edacb1 100644 --- a/packages/beacon/beacon.el +++ b/packages/beacon/beacon.el @@ -5,8 +5,8 @@ ;; Author: Artur Malabarba ;; 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) + ;;; 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))) ;;; Colors @@ -300,8 +307,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)) @@ -318,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 @@ -384,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)))) @@ -440,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)))