Demo
kb-scroller-demo.mp4
Keyboard Scroller helps you scroll through apps, websites, and documents without lifting your fingers off the keyboard. à la Vimium's scroll feature.
PgUp
and PgDn
to scroll?
Why not just use PgDn
scrolls really quickly by a whole page per keypress, which I find disorientating. Keyboard Scroller allows PgUp
and PgDn
(or custom shortcuts) to scroll continuously and smoothly.
Features
- 😎 Trackpad-smooth scrolling with
PgUp
andPgDn
- ⌨️ Bind custom shortcuts to scroll
- 🦘 Two types of scrolling - Normal and Jump (scrolls by a fixed distance)
- ⚙️ Customize scroll speed and jump distance
- 🎯 Automatically moves your cursor to the active window when scrolling
Download
Download the latest release here. View all versions and changelog here.
Requires macOS 12.3 or later.
How to use it
Simply set the Remap PgUp & PgDn
option to either Scroll
or Jump
!
Alternatively, you can set custom keyboard shortcuts for easier access to scrolling.
Personally, to avoid lifting my fingers off the home row, I use Hyperkey to remap Caps Lock
to ⌃⌥⇧⌘
.
Then I use the following bindings in Keyboard Scroller's Preferences:
Scroll up
to⌃⌥⇧⌘K
Scroll down
to⌃⌥⇧⌘J
Jump up
to⌃⌥⇧⌘U
Jump down
to⌃⌥⇧⌘D
For slowly scrolling through a document I use Scroll, and for dashing through I use Jump.
Known issues
- Scrolls super fast in VSCode
- "Mouse scroll fixer" apps (e.g. Mos and Mac Mouse Fix) cause scrolling to jump long distances
Why I made this
I work on Homerow, which has a modal workflow for scrolling. You hit a shortcut to enter "Scroll-mode", then hit HJKL
to scroll, and hit Tab
to switch the active scroll area.
I wanted to experiment with an ephemeral workflow using keyboard shortcuts to scroll directly and see how it compares with the modal workflow in Homerow.
However, that was not the plan from the start. I originally wanted to rewrite Homerow's Scroll-mode to explore SwiftUI, play with additional features like Jumpers and Freestyle, and snapshot testing the Accessibility API integration to prevent regressions. The poor code quality in Homerow may have played some part in wanting to do a rewrite. I found myself having to find workarounds to implement everything with SwiftUI that would have been fairly simple with AppKit, and overall it was just not fun. Since I plan on continuing using AppKit, there wasn't a point in making Scroll-mode a separate app, and a refactor in Homerow makes more sense. Keyboard Scroller is simply a by-product of the prior mentioned explorations.
FAQ
Do you track any data?
Nope.
Why do you need Accessibility API permission?
To emit scroll events using the CGEvent
API.
Do you plan on making it open source?
I might.
How can I support this project?
Share it with a friend and buy me a coffee!