]> git.eshelyaron.com Git - emacs.git/commitdiff
Interpolate scrolls coming from mice by default
authorPo Lu <luangruo@yahoo.com>
Fri, 8 Apr 2022 10:50:48 +0000 (18:50 +0800)
committerPo Lu <luangruo@yahoo.com>
Fri, 8 Apr 2022 10:57:29 +0000 (18:57 +0800)
* 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.

lisp/pixel-scroll.el

index 688a054896b2e407e1c64640b87ca41cb5ffeb68..b0fe2f56c03cf5260061731879662140309d60d7 100644 (file)
@@ -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))