From 372e93fce43047d6bb212d3cf1f12dd8cd7e3ea6 Mon Sep 17 00:00:00 2001 From: Daneel Date: Mon, 23 Feb 2026 14:26:01 +0100 Subject: [PATCH] fix(scroll): enable pixel-scroll-precision-mode for smooth macOS trackpad scrolling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace mwheel.el fallback with pixel-scroll-precision-mode (Emacs 29+). Works on NS/Cocoa builds — previous comment was wrong. - ns-use-mwheel-momentum t: pass through macOS kinetic scroll events - pixel-scroll-precision-use-momentum nil: avoid double-momentum (macOS already handles inertia; Emacs simulation would stack on top) - pixel-scroll-precision-large-scroll-height 40.0: reasonable page-jump size - Removed global-set-key mwheel-scroll overrides (were blocking precision mode) - Kept mouse-wheel-follow-mouse + mouse-wheel-tilt-scroll for horizontal --- config.el | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/config.el b/config.el index 1afdeb1..efcaf53 100644 --- a/config.el +++ b/config.el @@ -180,22 +180,23 @@ Bound to cmd+v in org-mode and markdown-mode." (global-set-key key #'ignore)) (setq mouse-highlight nil)) -;; macOS scroll wheel best practice (NS/Cocoa build): -;; - pixel-scroll-precision-mode is NOT used: it targets X11/Haiku and breaks -;; NS/Cocoa scroll event delivery (rebinds [wheel-up/down] to non-working handlers) -;; - Standard mwheel.el with conservative settings is reliable on macOS -;; - NS backend converts trackpad + physical wheel to [wheel-up]/[wheel-down] events +;; macOS smooth scrolling — pixel-scroll-precision-mode (Emacs 29+, works on NS/Cocoa) +;; pixel-scroll-precision-mode handles [wheel-up/down] → pixel-scroll-precision. +;; ns-use-mwheel-momentum: macOS sends momentum-phase events after finger lift; +;; setting t passes them through so kinetic/inertial scrolling works. +;; pixel-scroll-precision-use-momentum nil: let macOS handle momentum (Emacs +;; momentum simulation would double-apply on top of NS momentum events). (when (display-graphic-p) - (require 'mwheel) - ;; 3 lines per scroll tick; shift = 1 line; no progressive acceleration - (setq mouse-wheel-scroll-amount '(3 ((shift) . 1) ((meta) . 0) ((control) . text-scale)) - mouse-wheel-progressive-speed nil ; constant speed, no acceleration - mouse-wheel-follow-mouse t ; scroll window under cursor - mouse-wheel-tilt-scroll t ; horizontal scroll with tilt/two-finger - mouse-wheel-flip-direction nil) ; standard direction (not natural) - ;; Ensure mwheel-scroll is bound (Doom may remap these) - (global-set-key [wheel-up] #'mwheel-scroll) - (global-set-key [wheel-down] #'mwheel-scroll)) + ;; NS/macOS: honour trackpad kinetic (inertial) scrolling + (setq ns-use-mwheel-momentum t) + ;; Horizontal scroll + follow-mouse still go through mwheel.el + (setq mouse-wheel-follow-mouse t + mouse-wheel-tilt-scroll t) + ;; Pixel-precise vertical scrolling (Emacs 29+) + (when (fboundp 'pixel-scroll-precision-mode) + (setq pixel-scroll-precision-use-momentum nil ; macOS provides its own momentum + pixel-scroll-precision-large-scroll-height 40.0) + (pixel-scroll-precision-mode 1)))