This small utility fixes macOS's unnecessary scroll wheel acceleration. It runs in the background, allowing you to scroll a constant number of lines with each notch of the wheel.
As of November 2024, this application works on macOS versions 10.9–15.0.
You may download the binary here. DiscreteScroll requires access to accessibility features. Upon startup, if it does not have access, it will prompt you and wait. You do not need to restart the application after you grant it access to accessibility features.
Caution
You should not revoke accessibility access for DiscreteScroll while it is running. Otherwise, your mouse might become unresponsive, requiring a reboot to fix.
If you want the application to run automatically when you log in, do the following:
- On macOS 13.0 and later, go to
System Settings > General > Login Items
; otherwise, go toSystem Preferences > Users & Groups > Login Items
. - Add
DiscreteScroll
to the list.
If you want to quit the application, either run killall DiscreteScroll
or do the following:
- Launch
Activity Monitor
. - Search for
DiscreteScroll
and select it. - Click the stop button in the upper-left corner and choose Quit.
The default behavior is to scroll 3 lines with each notch of the wheel.
If you want to change this, run the following command,
replacing LINES
with the number of lines to scroll with each notch.
This number may even be negative, which inverts scrolling direction.
defaults write com.emreyolcu.DiscreteScroll lines -int LINES
Warning
If you set lines
to some value other than an integer,
then the default value of 3 is used as a fallback.
You should restart the application for the setting to take effect.
To uninstall DiscreteScroll, quit the application, move it to trash, and remove it from the lists for accessibility access and login items. You can remove any stored preferences by running the following:
defaults delete com.emreyolcu.DiscreteScroll
Recent versions of macOS have made it difficult to run unsigned binaries.
If you experience issues launching the application, try the following:
- Remove the quarantine attribute by running the command
xattr -dr com.apple.quarantine /path/to/DiscreteScroll.app
, where the path points to the application bundle. - Disable Gatekeeper by running the command
spctl --add /path/to/DiscreteScroll.app
, where the path points to the application bundle.
If on startup the application asks for accessibility permissions even though you have previously granted it access, try the following:
- On macOS 13.0 and later, go to
System Settings > Privacy & Security > Accessibility
; otherwise, go toSystem Preferences > Security & Privacy > Privacy > Accessibility
. - Remove
DiscreteScroll
from the list and add it again.
- Fix: Release event tap and run loop source after adding source.
- Remove accessibility observer once granted access.
- Observe changes in accessibility access continuously.
- Fix: Fall back to defaults if user preference is set to incorrect type.
- Handle errors and check for accessibility access.
- Allow configuring the number of lines scrolled per notch.
- Fix: Use point delta instead of line delta.
- Initial release.