(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
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
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)))"
- :type 'hook)
+ (add-hook \\='beacon-dont-blink-predicates
+ (lambda () (bound-and-true-p hl-line-mode)))")
(add-hook 'beacon-dont-blink-predicates #'window-minibuffer-p)
(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."
(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: