HistoryShow HN: Scoot – efficiently move your mouse cursor...

Show HN: Scoot – efficiently move your mouse cursor using keyboard shortcuts


- Advertisment -

Meet Scoot, your friendly cursor teleportation and actuation tool.

build status

@mjrusso on Twitter

Scoot, MacOS Cursor Actuator

Scoot App Icon

- Advertisement -

Scoot is a tiny utility app that provides fast, keyboard-driven control over the mouse pointer. Scoot lets you move your mouse—and click and drag, too—all from the comfort of your keyboard!

Scoot supports two navigation modes: element-based, and grid-based.

  • Element-based navigation: MacOS accessibility APIs are used to find user interface elements, such as buttons and links, on the user’s screen. (In this mode, Scoot will look for elements in the focused window of the frontmost app.) Here, for example, Scoot has identified the only link on the page (“More information…”), and assigned it the key sequence “aa”:

Scoot using the element-based navigation mode

  • Grid-based navigation: all connected screens are subdivided into a grid of equally-sized cells.

Scoot using the grid-based navigation mode

Each location is identified by a unique character sequence, making each element (or cell) uniquely addressable with the keyboard — simply type the associated key sequence to teleport your mouse cursor to that location.


  • Scoot is experimental. Is it possible to craft a keyboard-driven mouse movement utility that’s actually efficient? Something that you’ll actually want to use? This is going to take some trial and error.

  • Scoot is in the early proof of concept + prototyping stage.

  • Scoot runs on MacOS 11 (Big Sur), and 12 (Monterey).

  • Scoot is an AppKit app, written in Swift. (There’s still some Carbon in here, too!)

  • - Advertisement -

    Scoot complements mouse-related accessibility tools that ship as part of MacOS, such as Mouse Keys and other accessibility shortcuts, in addition to mouse emulation provided via keyboard firmware like QMK.


To activate Scoot in the element-based navigation mode, use the ⇧⌘J global keyboard shortcut. Alternatively, to activate Scoot in the grid-based navigation mode, use the ⇧⌘K global keyboard shortcut.

(As long as Scoot is running, either hotkey will bring the app to the foreground, and activate the requested navigation mode.)

When Scoot is in the foreground:

  • You can jump directly to a cell (a UI element, or a location in the grid, depending on the active navigation mode). Each cell is marked with a label (e.g. “aaa”, “aas”, “aad”); type the characters, one letter at a time, and, as soon as a complete sequence is entered, the mouse cursor will move directly to the center of the corresponding cell. (This approach, including the use of a char-based decision tree, is heavily inspired by avy.)

    • If you make a mistake while entering a label, hit the escape key (⎋) to cancel and start over. (Alternatively, you can type ⌘. or C-G.)
  • You can also move the cursor via the standard Mac keyboard shortcuts for moving the insertion point. (This means that keyboard shortcuts intended for navigating around in a document have been re-purposed to control movement on a 2-dimensional grid. Some liberties have been taken with this mapping; hopefully you find these keybindings intuitive.)

  • You can click with the left mouse button (at the current cursor location) by hitting the Return (↵) key.

  • You can hold the left mouse button down by hitting ⌘↵. (To release the button, type ⌘↵ again, or, alternatively, just press ↵ on its own.)

    • To perform a drag-and-drop operation: situate the cursor above the object you want to drag and press ⌘↵, then move the mouse cursor to the desired drag destination (using one or more of the mechanisms that Scoot makes available), and then press ⌘↵ again to perform the drop.
  • You can double-click with the left mouse button (at the current cursor location) by hitting the Shift and Return keys together (⇧↵).

  • You can scroll, by pressing the Shift key in conjunction with the arrow key (↑, ↓, ←, →) pointing in the desired scroll direction.

After clicking, the grid will automatically hide. You can also hide the grid at any time by pressing ⌘H.


Not sure what these symbols mean? See the symbol reference, and Emacs key notation.

⇧⌘JUse element-based navigation (bring Scoot to foreground)
⇧⌘KUse grid-based navigation (bring Scoot to foreground)
⌘HHide UI (bring Scoot to background)
⎋ (or ⌘.)C-gCancel: if currently typing a label, clears all currently-typed characters; otherwise, brings Scoot to background

Note: ⎋ signifies the Escape key.

Cursor Movement

C-pMove cursor up (partial step)
C-nMove cursor down (partial step)
C-bMove cursor left (partial step)
C-fMove cursor right (partial step)
⌥↑M-aMove cursor up (full step)
⌥↓M-eMove cursor down (full step)
⌥←M-bMove cursor left (full step)
⌥→M-fMove cursor right (full step)
⌘↑M-<Move cursor to top edge of screen
⌘↓M->Move cursor to bottom edge of screen
⌘←C-aMove cursor to left edge of screen
⌘→C-eMove cursor to right edge of screen
⌃LC-lMove cursor to center, and (on repeat) cycle around corners


Click left mouse button (at current cursor location)
⌘↵Press and hold left mouse button (once activated, type ⌘↵ again to release)
⇧↵Double-click left mouse button (at current cursor location)

Note: ↵ signifies the Return (a.k.a Enter) key. (Technically, Return and Enter are two different keys.)


⇧↑⇧-pScroll up (at current cursor location)
⇧↓⇧-nScroll down (at current cursor location)
⇧←⇧-bScroll left (at current cursor location)
⇧→⇧-fScroll right (at current cursor location)


⌃=Toggle visibility of grid lines
⌃⇧=Toggle visibility of grid labels
⇧⌘=Increase size of grid cells
⇧⌘-Decrease size of grid cells
⌘=Increase contrast of user interface
⌘-Decrease contrast of user interface


To install Scoot:

  1. Download and extract the latest build of Scoot.
  2. Drag the extracted Scoot.app into your computer’s Applications folder.
  3. Double-click on Scoot.app (from the Applications folder) to launch it.

On first run, you’ll be presented with a prompt like the following:

Scoot.app would like to control this computer using accessibility features

Scoot will not work unless access is granted. (Note that Scoot does not collect any user or usage-related information, and does not make any network requests. The app runs entirely locally, and treats its privileged access with the utmost respect.)

To grant this permission, click “Open System Preferences”. Next, click the lock in the bottom left corner (“Click the lock to make changes”).

Locked accessibility settings

Finally, check “Scoot.app” to give Scoot the ability to move your cursor, and to click, drag, and scroll.

Scoot.app granted accessibility access

See the usage documentation for details on how to use Scoot.

If you’re finding Scoot helpful, you may want to configure the app to launch automatically when you log in. To set this up, open System Preferences again, click “Users & Groups”, and then “Login Items”:

Locked login items settings

As before, you’ll need to click the lock in the bottom left corner to unlock this preference pane. Once unlocked, click the “+” button, and select “Scoot.app” from the Applications folder. Checking the “Hide” checkbox is recommended.

Scoot configured to start automatically

If you encounter any problems, feel free to file an issue.


Drag and Drop

Here’s what it’s like to drag and drop with Scoot, using the grid-based navigation mode:


For reference, the following key sequence was used to grab the file and drop it in a new location:

  • ⇧⌘K to activate Scoot
  • kh to jump cursor to cell
  • ⌘↵ to press and hold the left mouse button
  • fd to jump cursor to cell
  • to release the left mouse button

Feature Backlog

See the issue tracker. Contributions welcome!


Scoot is released under the terms of the BSD 3-Clause License.

Copyright (c) 2021-20

NOW WITH OVER +8500 USERS. people can Join Knowasiak for free. Sign up on Knowasiak.com
Read More

- Advertisement -
Charlie avatar
Fill your life with experiences so you always have a great story to tell

1 Comment

  1. Hi HN! I started building Scoot as an experiment, to see if it was possible to meaningfully reduce my reliance on a physical mouse and trackpad during day-to-day usage of my Mac.

    Quick backstory: I was experiencing pain in my ulnar nerve, which was definitely exacerbated by using a mouse. I was making a lot of changes to get that under control, but was curious if there was also a software-based solution that I could throw into the mix. As it happens, I had recently started using the excellent avy [0] Emacs package, and wondered if some of the ideas in avy could be brought to the operating system level.

    (Quick sidenote: some physical keyboards, e.g. those running the QMK firmware, support mouse emulation, which allows you to move your mouse by pressing keys. I like this feature, but it's not as efficient as what I had in mind.)

    I threw together a prototype, to see what was possible. The initial version subdivided the screen into a grid of equally-sized cells, and assigned each cell a unique character sequence. Type the character sequence, and your mouse cursor moves right to that location. (You can also move the mouse cursor up, down, left, and right, using similar keyboard shortcuts for text editing. The app also lets you click and drag with your keyboard.)

    Over the holiday break, I added a new navigation mode that leverages the Mac OS accessibility APIs (like a screenreader) to find relevant UI elements on the screen (buttons, hyperlinks, etc.). Each element is assigned a unique character sequence, just like the grid-based navigation mode.

    Now, with element-based navigation, Scoot feels much more useful, and I thought it would be worth sharing more broadly in case anyone else finds it useful. (Note that Scoot is Mac only, relying heavily on Apple-provided frameworks.)

    Usage details (and a more detailed description) are available in the README. [1]

    Feedback is much appreciated! (And the app is open source, with a lot of missing features and bugs to squash. All contributions are welcome.)

    [0]: https://github.com/abo-abo/avy
    [1]: https://github.com/mjrusso/scoot

You might also likeRELATED
Recommended to you

System Design Primer: Learn how to design large-scale systems

English ∙ 日本語 ∙ 简体中文 ∙ 繁體中文 | العَرَبِيَّة‎ ∙ বাংলা ∙ Português do Brasil ∙ Deutsch ∙ ελληνικά ∙ עברית ∙ Italiano ∙ 한국어 ∙ فارسی ∙ Polski ∙ русский язык ∙ Español ∙ ภาษาไทย ∙ Türkçe ∙ tiếng Việt ∙ Français | Add Translation Help translate this guide! Motivation Learn how to design…

“Microsoft Edge will internet and exhaust data out of your internet searches”

Article 12/10/2021 74 minutes to read In this article Our browser privacy promise is to provide you with the protection, transparency, control, and respect you deserve. To uphold commitments to give you transparency into Microsoft products, the Microsoft Edge team provides this privacy whitepaper. It explains how Microsoft Edge features and services work and how…

1953: The Year That Revolutionized Existence, Dying, and the Digital Bit (2012)

Three technological eras began in 1953: thermonuclear weapons, stored-program computers, and modern genetics. At 10:38 p.m. on March 3, 1953, in a one-story brick building at the end of Olden Lane in Princeton, New Jersey, Italian Norwegian mathematical biologist Nils Aall Barricelli inoculated a 5-kilobyte digital universe with random numbers generated by drawing playing cards…
- Advertisement -

Thich Nhat Hanh, Vietnamese Zen Master, Dies at 95

Thich Nhat Hanh at the Plum Village monastery in southern France | Courtesy Plum Village Community of Engaged Buddhism Vietnamese Zen Master Thich Nhat Hanh—a world-renowned spiritual leader, author, poet, and peace activist—died on January 22, 2022 at midnight (ICT) at his root temple, Tu Hien Temple, in Hue, Vietnam. He was 95. “Our beloved…

Before wave of train thefts, Union Pacific laid off some of its police force

News organizations both locally and nationally have been covering the rise of cargo theft in L.A.’s northeast train tracks in the past few days. Anchors on morning news have been quick to point out that there have been over 100 arrests, and even Forbes have been quick to point out the staggering $5 million worth…

Must read

The American prison system’s war on reading

Alex SkopicThis April, the Iowa Department of Corrections issued...

Meta sued for £2.3bn over claim Facebook users in UK were exploited

Mark Zuckerberg’s Meta is being sued for £2.3bn in a class action lawsuit that claims 44 million Facebook users in the UK had their data exploited after signing up to the social network.The case argues that Meta has broken the 1998 Competition Act by setting an “unfair price” for Facebook’s UK users when they are…
- Advertisement -