From 0b804db84b122931bececc460100e07a03271c6e Mon Sep 17 00:00:00 2001 From: Arseniy Alekseyev Date: Sun, 19 Feb 2017 13:04:02 +0000 Subject: [PATCH] Correctly compute the effective margin when the point is beyond the edge of the window Previously, smooth-scroll-count-lines, which we use to determine effective margin, would return non-negative values, which would be incorrect in case point is moved beyond the edge of the screen. Now it is able to return negative values. --- smooth-scrolling.el | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/smooth-scrolling.el b/smooth-scrolling.el index 98df30e..167d5ff 100644 --- a/smooth-scrolling.el +++ b/smooth-scrolling.el @@ -184,7 +184,7 @@ the logical line." #'beginning-of-line)) (point))) -(defun smooth-scroll-count-lines (start end) +(defun smooth-scroll-count-lines-positive (start end) "Return number of (logical/visual) lines between START and END. If `smooth-scroll-strict-margins' is non-nil, this counts visual @@ -199,6 +199,18 @@ to pass them in order." #'count-lines) start end))) +(defun smooth-scroll-count-lines (start end) + "Return number of (logical/visual) lines between START and END. + +If `smooth-scroll-strict-margins' is non-nil, this counts visual +lines. Otherwise it counts logical lines. + +If END is less than START, this can return a negative number." + (if (< end start) + (- (smooth-scroll-count-lines-positive end start)) + (smooth-scroll-count-lines-positive start end) + )) + (defun smooth-scroll-lines-above-point () "Return the number of lines in window above point.