X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/57e2f37d5cde26a6dab938fc5dfe96b41f2b6909..0c75f1dc52104b21f550aa5009f70b789931bf18:/packages/beacon/beacon.el diff --git a/packages/beacon/beacon.el b/packages/beacon/beacon.el index feda34b88..777e80998 100644 --- a/packages/beacon/beacon.el +++ b/packages/beacon/beacon.el @@ -5,7 +5,7 @@ ;; Author: Artur Malabarba ;; URL: https://github.com/Malabarba/beacon ;; Keywords: convenience -;; Version: 0.1 +;; Version: 0.1.1 ;; Package-Requires: ((seq "1.9")) ;; This program is free software; you can redistribute it and/or modify @@ -46,7 +46,7 @@ (defvar beacon--timer nil) -(defcustom beacon-push-mark nil +(defcustom beacon-push-mark 35 "Should the mark be pushed before long movements? If nil, `beacon' will not push the mark. Otherwise this should be a number, and `beacon' will push the @@ -96,14 +96,18 @@ If it is a string, it is a color name or specification, e.g. \"#666600\"." :type '(choice number color)) -(defcustom beacon-dont-blink-predicates nil +(defvar beacon-dont-blink-predicates nil "A list of predicates that prevent the beacon blink. These predicate functions are called in order, with no arguments, before blinking the beacon. If any returns -non-nil, the beacon will not blink." - :type 'hook) +non-nil, the beacon will not blink. + +For instance, if you want to disable beacon on buffers where +`hl-line-mode' is on, you can do: + + (add-hook \\='beacon-dont-blink-predicates + (lambda () (bound-and-true-p hl-line-mode)))") -(add-hook 'beacon-dont-blink-predicates (lambda () (bound-and-true-p hl-line-mode))) (add-hook 'beacon-dont-blink-predicates #'window-minibuffer-p) (defcustom beacon-dont-blink-major-modes '(magit-status-mode) @@ -267,11 +271,18 @@ If DELTA is nil, return nil." (markerp beacon--previous-place) (equal (marker-buffer beacon--previous-place) (current-buffer)) + ;; Quick check that prevents running the code below in very + ;; short movements (like typing). (> (abs (- (point) beacon--previous-place)) delta) - (> (count-screen-lines (min (point) beacon--previous-place) - (max (point) beacon--previous-place)) - delta))) + ;; Check if the movement was >= DELTA lines by moving DELTA + ;; lines. `count-screen-lines' is too slow if the movement had + ;; thousands of lines. + (save-excursion + (goto-char (min beacon--previous-place (point))) + (vertical-motion delta) + (> (max (point) beacon--previous-place) + (line-beginning-position))))) (defun beacon--maybe-push-mark () "Push mark if it seems to be safe." @@ -339,11 +350,17 @@ unreliable, so just blink immediately." (if beacon-mode (progn (add-hook 'window-scroll-functions #'beacon--window-scroll-function) + (add-hook 'focus-in-hook #'beacon-blink) (add-hook 'post-command-hook #'beacon--post-command) (add-hook 'pre-command-hook #'beacon--vanish)) + (remove-hook 'focus-in-hook #'beacon-blink) (remove-hook 'window-scroll-functions #'beacon--window-scroll-function) (remove-hook 'post-command-hook #'beacon--post-command) (remove-hook 'pre-command-hook #'beacon--vanish))) (provide 'beacon) ;;; beacon.el ends here + +;; Local Variables: +;; indent-tabs-mode: nil +;; End: