[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#29737: 27.0.50; pixel-scroll-mode is laggy
From: |
Tak Kunihiro |
Subject: |
bug#29737: 27.0.50; pixel-scroll-mode is laggy |
Date: |
Mon, 25 Dec 2017 12:48:45 +0900 (JST) |
>>Can you try scrolling with following configuration?
>>
>> (setq mouse-wheel-scroll-amount '(1 ((shift) . 5) ((control))))
>> (setq mouse-wheel-progressive-speed nil)
>>
>>Those are two that are already suggested by Eli. Please try both at
>>the same time.
> I've tried these both at the same time already. As I've said -
> scrolling down is a bit laggy (and it eats the CPU and turns on my
> fans up high). And scroll up is much laggier. It's when I scroll
> slowly.
I got what the laggy meant. I think we want the second spin to be
coarse. How about something like below?
diff --git a/lisp/pixel-scroll.el b/lisp/pixel-scroll.el
index 70244873b4..92563a2b71 100644
--- a/lisp/pixel-scroll.el
+++ b/lisp/pixel-scroll.el
@@ -82,6 +82,15 @@ case you need scrolling resolution of a pixel, set to 1.
After a
pixel scroll, typing \\[next-line] or \\[previous-line] scrolls the window to
make it
fully visible, and undoes the effect of the pixel-level scroll.")
+(defvar pixel-dead-time 0.1
+ "Interval that requires for the next smooth scrolling in seconds.
+When there is a scrolling request within this period, the
+scrolling will be carried out without pixel resolution. If zero,
+scrolling is with pixel resolution always.")
+
+(defvar pixel-last-scroll-time 0
+ "Time when the last scrolling was made in seconds since the epoch.")
+
;;;###autoload
(define-minor-mode pixel-scroll-mode
"A minor mode to scroll text pixel-by-pixel.
@@ -104,35 +113,50 @@ if ARG is omitted or nil."
This is an alternative of `scroll-up'. Scope moves downward."
(interactive)
(or arg (setq arg 1))
- (dotimes (ii arg) ; move scope downward
- (let ((amt (if pixel-resolution-fine-flag
- (if (integerp pixel-resolution-fine-flag)
- pixel-resolution-fine-flag
- (frame-char-height))
- (pixel-line-height))))
- (if (pixel-eob-at-top-p) ; when end-of-the-buffer is close
- (scroll-up 1) ; relay on robust method
- (while (pixel-point-at-top-p amt) ; prevent too late (multi tries)
- (vertical-motion 1)) ; move point downward
- (pixel-scroll-pixel-up amt))))) ; move scope downward
+ (if (pixel-scroll-in-rush-p)
+ (scroll-up arg)
+ (dotimes (ii arg) ; move scope downward
+ (let ((amt (if pixel-resolution-fine-flag
+ (if (integerp pixel-resolution-fine-flag)
+ pixel-resolution-fine-flag
+ (frame-char-height))
+ (pixel-line-height))))
+ (if (pixel-eob-at-top-p) ; when end-of-the-buffer is close
+ (scroll-up 1) ; relay on robust method
+ (while (pixel-point-at-top-p amt) ; prevent too late (multi tries)
+ (vertical-motion 1)) ; move point downward
+ (pixel-scroll-pixel-up amt)))))) ; move scope downward
(defun pixel-scroll-down (&optional arg)
"Scroll text of selected window down ARG lines.
This is and alternative of `scroll-down'. Scope moves upward."
(interactive)
(or arg (setq arg 1))
- (dotimes (ii arg)
- (let ((amt (if pixel-resolution-fine-flag
- (if (integerp pixel-resolution-fine-flag)
- pixel-resolution-fine-flag
- (frame-char-height))
- (pixel-line-height -1))))
- (while (pixel-point-at-bottom-p amt) ; prevent too late (multi tries)
- (vertical-motion -1)) ; move point upward
- (if (or (pixel-bob-at-top-p amt) ; when beginning-of-the-buffer is
seen
- (pixel-eob-at-top-p)) ; for file with a long line
- (scroll-down 1) ; relay on robust method
- (pixel-scroll-pixel-down amt)))))
+ (if (pixel-scroll-in-rush-p)
+ (scroll-down arg)
+ (dotimes (ii arg)
+ (let ((amt (if pixel-resolution-fine-flag
+ (if (integerp pixel-resolution-fine-flag)
+ pixel-resolution-fine-flag
+ (frame-char-height))
+ (pixel-line-height -1))))
+ (while (pixel-point-at-bottom-p amt) ; prevent too late (multi tries)
+ (vertical-motion -1)) ; move point upward
+ (if (or (pixel-bob-at-top-p amt) ; when beginning-of-the-buffer is seen
+ (pixel-eob-at-top-p)) ; for file with a long line
+ (scroll-down 1) ; relay on robust method
+ (pixel-scroll-pixel-down amt))))))
+
+(defun pixel-scroll-in-rush-p ()
+ "Return if scroll is in rush.
+WHen request is delivered soon after the previous one, user is in
+hurry. It is not ready for another smooth scroll."
+ (let* ((current-time (float-time))
+ (scroll-in-rush-p (< (- current-time pixel-last-scroll-time)
+ pixel-dead-time)))
+ (setq pixel-last-scroll-time current-time)
+ ;; (message (if scroll-in-rush-p "normal-scroll" "pixel-scroll"))
+ scroll-in-rush-p))
(defun pixel-bob-at-top-p (amt)
"Return non-nil if window-start is at beginning of the current buffer.
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, (continued)
- Message not available
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Eli Zaretskii, 2017/12/16
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Valentin Ignatyev, 2017/12/16
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Tak Kunihiro, 2017/12/16
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Eli Zaretskii, 2017/12/22
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Tak Kunihiro, 2017/12/22
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Eli Zaretskii, 2017/12/23
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Valentin Ignatyev, 2017/12/23
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Valentin Ignatyev, 2017/12/23
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Tak Kunihiro, 2017/12/23
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Valentin Ignatyev, 2017/12/24
- bug#29737: 27.0.50; pixel-scroll-mode is laggy,
Tak Kunihiro <=
- bug#29737: 27.0.50; pixel-scroll-mode is laggy, Tak Kunihiro, 2017/12/31