diff --git a/modules/ui/smooth-scroll/config.el b/modules/ui/smooth-scroll/config.el index 77db49da8..924df1b3f 100644 --- a/modules/ui/smooth-scroll/config.el +++ b/modules/ui/smooth-scroll/config.el @@ -10,13 +10,23 @@ :config (add-hook 'ultra-scroll-hide-functions #'hl-todo-mode) (add-hook 'ultra-scroll-hide-functions #'diff-hl-flydiff-mode) - (add-hook 'ultra-scroll-hide-functions #'jit-lock-mode)) + (add-hook 'ultra-scroll-hide-functions #'jit-lock-mode) + (add-hook 'ultra-scroll-hide-functions #'good-scroll-mode)) (use-package good-scroll :when (modulep! +interpolate) :hook (doom-first-input . good-scroll-mode) :config + ;; HACK: We're using good-scroll only for interpolation; ultra-scroll is + ;; responsible for smoothing input scrolling (e.g. the mouse wheel), so do + ;; this to ensure good-scroll keeps its hands off mouse wheels/trackpads. + (add-hook! 'good-scroll-mode-hook + (defun +smooth-scroll-coexist-with-ultra-scroll-h () + (if good-scroll-mode + (setq mwheel-scroll-up-function #'scroll-up + mwheel-scroll-down-function #'scroll-down)))) + (defun good-scroll--convert-line-to-step (line) (cond ((integerp line) (* line (line-pixel-height))) ((or (null line) (memq '- line)) @@ -24,10 +34,14 @@ (* next-screen-context-lines (line-pixel-height)))) ((line-pixel-height)))) - (defadvice! good-scroll--scroll-up (&optional arg) - :override #'scroll-up - (good-scroll-move (good-scroll--convert-line-to-step arg))) + (defadvice! good-scroll--scroll-up (fn &optional arg) + :around #'scroll-up + (if good-scroll-mode + (good-scroll-move (good-scroll--convert-line-to-step arg)) + (funcall fn arg))) - (defadvice! good-scroll--scroll-down (&optional arg) - :override #'scroll-down - (good-scroll-move (- (good-scroll--convert-line-to-step arg))))) + (defadvice! good-scroll--scroll-down (fn &optional arg) + :around #'scroll-down + (if good-scroll-mode + (good-scroll-move (- (good-scroll--convert-line-to-step arg))) + (funcall fn arg))))