mirror of
https://github.com/doomemacs/doomemacs
synced 2025-08-01 12:17:25 -05:00
fix(smooth-scroll): good-scroll & ultra-scroll interop
Makes these two packages coexist better and more efficiently.
Ref: 5f04b56229
This commit is contained in:
@ -10,13 +10,23 @@
|
|||||||
:config
|
:config
|
||||||
(add-hook 'ultra-scroll-hide-functions #'hl-todo-mode)
|
(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 #'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
|
(use-package good-scroll
|
||||||
:when (modulep! +interpolate)
|
:when (modulep! +interpolate)
|
||||||
:hook (doom-first-input . good-scroll-mode)
|
:hook (doom-first-input . good-scroll-mode)
|
||||||
:config
|
: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)
|
(defun good-scroll--convert-line-to-step (line)
|
||||||
(cond ((integerp line) (* line (line-pixel-height)))
|
(cond ((integerp line) (* line (line-pixel-height)))
|
||||||
((or (null line) (memq '- line))
|
((or (null line) (memq '- line))
|
||||||
@ -24,10 +34,14 @@
|
|||||||
(* next-screen-context-lines (line-pixel-height))))
|
(* next-screen-context-lines (line-pixel-height))))
|
||||||
((line-pixel-height))))
|
((line-pixel-height))))
|
||||||
|
|
||||||
(defadvice! good-scroll--scroll-up (&optional arg)
|
(defadvice! good-scroll--scroll-up (fn &optional arg)
|
||||||
:override #'scroll-up
|
:around #'scroll-up
|
||||||
(good-scroll-move (good-scroll--convert-line-to-step arg)))
|
(if good-scroll-mode
|
||||||
|
(good-scroll-move (good-scroll--convert-line-to-step arg))
|
||||||
|
(funcall fn arg)))
|
||||||
|
|
||||||
(defadvice! good-scroll--scroll-down (&optional arg)
|
(defadvice! good-scroll--scroll-down (fn &optional arg)
|
||||||
:override #'scroll-down
|
:around #'scroll-down
|
||||||
(good-scroll-move (- (good-scroll--convert-line-to-step arg)))))
|
(if good-scroll-mode
|
||||||
|
(good-scroll-move (- (good-scroll--convert-line-to-step arg)))
|
||||||
|
(funcall fn arg))))
|
||||||
|
Reference in New Issue
Block a user