summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-04-08 18:50:48 +0800
committerPo Lu <luangruo@yahoo.com>2022-04-08 18:57:29 +0800
commit410690085e011d9c474d1e2a1bf3e4d713d04174 (patch)
tree9451d08b723ec840d9c9321b0769c5e6682181b1
parentd9851c6df2d5b5e950329968ac268a06ef4adfbf (diff)
downloademacs-410690085e011d9c474d1e2a1bf3e4d713d04174.tar.gz
Interpolate scrolls coming from mice by default
* lisp/pixel-scroll.el (pixel-scroll-precision-interpolate-mice): New user option. (pixel-scroll-precision): If the class of the last event device is `mouse', interpolate the next scroll.
-rw-r--r--lisp/pixel-scroll.el32
1 files changed, 22 insertions, 10 deletions
diff --git a/lisp/pixel-scroll.el b/lisp/pixel-scroll.el
index 688a054896b..b0fe2f56c03 100644
--- a/lisp/pixel-scroll.el
+++ b/lisp/pixel-scroll.el
@@ -214,6 +214,14 @@ This is only effective when `pixel-scroll-precision-mode' is enabled."
:type 'boolean
:version "29.1")
+(defcustom pixel-scroll-precision-interpolate-mice t
+ "Whether or not to interpolate scrolling from a mouse.
+If non-nil, scrolling from the mouse wheel of an actual mouse (as
+opposed to a touchpad) will cause Emacs to interpolate the scroll."
+ :group 'scrolling
+ :type 'boolean
+ :version "29.1")
+
(defun pixel-scroll-in-rush-p ()
"Return non-nil if next scroll should be non-smooth.
When scrolling request is delivered soon after the previous one,
@@ -681,16 +689,20 @@ wheel."
(if (> (abs delta) (window-text-height window t))
(mwheel-scroll event nil)
(with-selected-window window
- (if (and pixel-scroll-precision-large-scroll-height
- (> (abs delta)
- pixel-scroll-precision-large-scroll-height)
- (let* ((kin-state (pixel-scroll-kinetic-state))
- (ring (aref kin-state 0))
- (time (aref kin-state 1)))
- (or (null time)
- (> (- (float-time) time) 1.0)
- (and (consp ring)
- (ring-empty-p ring)))))
+ (if (or (and pixel-scroll-precision-interpolate-mice
+ (eq (device-class last-event-frame
+ last-event-device)
+ 'mouse))
+ (and pixel-scroll-precision-large-scroll-height
+ (> (abs delta)
+ pixel-scroll-precision-large-scroll-height)
+ (let* ((kin-state (pixel-scroll-kinetic-state))
+ (ring (aref kin-state 0))
+ (time (aref kin-state 1)))
+ (or (null time)
+ (> (- (float-time) time) 1.0)
+ (and (consp ring)
+ (ring-empty-p ring))))))
(progn
(let ((kin-state (pixel-scroll-kinetic-state)))
(aset kin-state 0 (make-ring 30))