branch: master commit 69843d3c084f3648aa3792f396f5fe076665b41c Author: Artur Malabarba <bruce.connor...@gmail.com> Commit: Artur Malabarba <bruce.connor...@gmail.com>
Simplify beacon--movement-> a bit --- beacon.el | 30 ++++++++++-------------------- 1 files changed, 10 insertions(+), 20 deletions(-) diff --git a/beacon.el b/beacon.el index 138c3ba..54b11e4 100644 --- a/beacon.el +++ b/beacon.el @@ -264,11 +264,6 @@ Only returns `beacon-size' elements." (defvar beacon--previous-mark-head nil) (defvar beacon--previous-window nil) -(defun beacon--pos-on-current-line-p (pos) - "Return non-nil if POS is on the current line." - (and (<= (save-excursion (beginning-of-line) (point)) pos) - (<= pos (save-excursion (end-of-line) (point))))) - (defun beacon--movement-> (delta) "Return non-nil if latest point movement is > DELTA. If DELTA is nil, return nil." @@ -276,23 +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) - ;; Check if the movement was larger than DELTA lines by testing if - ;; `point' is still on the same line or on any line DELTA lines up or - ;; down. This is much cheaper than computing the actual number of lines - ;; moved using `count-screen-lines'. - (let ((prev-pos (marker-position beacon--previous-place))) - (catch 'movement - (when (beacon--pos-on-current-line-p prev-pos) - (throw 'movement nil)) - (dolist (inc '(1 -1)) - (save-excursion - (dotimes (i delta) - (vertical-motion inc) - (when (beacon--pos-on-current-line-p prev-pos) - (throw 'movement nil))))) - (throw 'movement t))))) + ;; 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."