From be595062e62981841e93a7a4d4ef7a3eb2f80b05 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Fri, 22 Apr 2022 22:44:22 +0100 Subject: [PATCH] feat(ui): define custom siren-pixel-scroll-mode This makes it easy to toggle all per-pixel scrolling related settings on and off. --- modules/ui/siren-pixel-scroll.el | 37 ++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/modules/ui/siren-pixel-scroll.el b/modules/ui/siren-pixel-scroll.el index 85907b9..9da3268 100644 --- a/modules/ui/siren-pixel-scroll.el +++ b/modules/ui/siren-pixel-scroll.el @@ -12,17 +12,36 @@ :straight (:type built-in) :if window-system - :custom - ;; Only affects keyboard-based scrolling when pixel scrolling is enabled. - (scroll-preserve-screen-position 'always) - (scroll-margin 0) - (pixel-scroll-precision-interpolate-page t) - (pixel-scroll-precision-large-scroll-height 40.0) - (pixel-scroll-precision-interpolation-factor 30) - (pixel-scroll-precision-use-momentum (not (eq system-type 'darwin))) + :preface + (defvar siren-pixel-scroll--original-scroll-margin scroll-margin) + (defvar siren-pixel-scroll--original-scroll-preserve-screen-position + scroll-preserve-screen-position) + + (define-minor-mode siren-pixel-scroll-mode + "enable pixel-scroll-precision-mode with other tweaks." + :global t + (if siren-pixel-scroll-mode + (progn + (setq pixel-scroll-precision-interpolate-page t) + (setq pixel-scroll-precision-large-scroll-height 40.0) + (setq pixel-scroll-precision-interpolation-factor 30) + (setq pixel-scroll-precision-use-momentum + (not (eq system-type 'darwin))) + (setq siren-pixel-scroll--original-scroll-margin scroll-margin) + (setq scroll-margin 0) + (setq siren-pixel-scroll--original-scroll-preserve-screen-position + scroll-preserve-screen-position) + (setq scroll-preserve-screen-position 'always) + + (pixel-scroll-precision-mode +1)) + (progn + (pixel-scroll-precision-mode -1) + (setq scroll-margin siren-pixel-scroll--original-scroll-margin) + (setq scroll-preserve-screen-position + siren-pixel-scroll--original-scroll-preserve-screen-position)))) :config - (pixel-scroll-precision-mode +1))) + (siren-pixel-scroll +1))) (provide 'siren-pixel-scroll) ;;; siren-pixel-scroll.el ends here