Scoot
repository·main·Indexed 19 days ago
https://github.com/mjrusso/scootA macOS utility for keyboard-driven mouse control featuring element-based, grid-based, and freestyle navigation modes. It allows users to teleport the cursor, click, and drag using keyboard shortcuts, including support for standard macOS, Emacs, and vi keybindings. Compatible with macOS 11 (Big Sur) and 12 (Monterey).
What's inside Scoot
- Scoot is a macOS utility designed for keyboard-driven mouse control. It allows users to teleport the cursor, click, and drag using keyboard shortcuts, augmenting rather than replacing the mouse or trackpad. It is built as an AppKit app in Swift and is compatible with macOS 11 (Big Sur) and 12 (Monterey).
How Scoot navigation modes work
mainScoot provides three distinct modes for navigating and controlling the mouse cursor:
- Element-based navigation: Uses macOS accessibility APIs to identify UI elements (like buttons and links) within the focused window of the frontmost application. Each element is assigned a unique character sequence (e.g., "aa"). Typing the sequence teleports the cursor to that element.
- Grid-based navigation: Subdivides all connected screens into a grid of equally-sized cells. Each cell is assigned a unique character sequence. Typing the sequence teleports the cursor to that specific cell.
- Freestyle mode: A freeform mode that provides no visual assistance (no grid or element overlays). This is useful for quickly nudging the cursor using text-editing shortcuts without visual clutter.
Use text editing shortcuts to move the cursor
mainIn addition to grid and element navigation, Scoot repurposes standard text editing keyboard shortcuts to move the mouse cursor. It supports:
- Standard macOS text editing shortcuts.
- Emacs keybindings.
- vi keybindings.
These shortcuts are particularly useful in Freestyle mode for fine-grained cursor movement (nudging) without needing to trigger a visual grid or element view.
How to use Scoot navigation modes
mainScoot provides three distinct navigation modes that can be activated via global keyboard shortcuts. Activating a mode brings Scoot to the foreground and enables specific UI overlays.
- Element-based navigation mode: Uses a char-based decision tree to jump to UI elements. Each element is marked with a label (e.g., "aaa"). Type the characters one by one to move the cursor to the center of the corresponding cell.
- Grid-based navigation mode: Uses a 2D grid overlay for navigation.
- Freestyle mode: A mode without special UI or char-based navigation assistance, allowing for direct cursor movement.
To activate these modes, use the following global shortcuts (which can be customized in Preferences):
⇧⌘J: Element-based navigation⇧⌘K: Grid-based navigation⇧⌘L: Freestyle mode
Global Shortcuts: - ⇧⌘J -> Element-based - ⇧⌘K -> Grid-based - ⇧⌘L -> FreestyleNavigate and interact with the cursor in Scoot
mainOnce Scoot is in the foreground, you can control the mouse cursor and perform clicks using keyboard shortcuts.
Cursor Movement
Movement works in all modes using standard Mac, Emacs, or vi keybindings (vi must be enabled in Preferences).
- Standard/Emacs: Use arrow keys or Emacs-style bindings (e.g.,
C-p,C-n,C-b,C-f) for partial steps, and⌥(Option) modifiers for full steps. - vi: If enabled, use
h,j,k,lfor movement. - Edge Navigation: Use
⌘(Command) with arrow keys to jump to the top, bottom, left, or right edges of the screen. - Center: Use
⌃L(Control-L) to move the cursor to the center.
Mouse Actions
- Left Click: Press
↵(Return). You can combine this with modifiers (e.g.,⌘↵for Command-click). - Double-click: Press
⇧↵(Shift + Return). - Hold/Drag: Press
=to hold the left mouse button down. To release (and perform a drop during a drag operation), press↵. - Middle Click: Press
[. - Right Click: Press
].
Scrolling
Use the
⇧(Shift) key in conjunction with arrow keys (or Emacs/vi bindings) to scroll in the desired direction.- Standard/Emacs: Use arrow keys or Emacs-style bindings (e.g.,
Configure Scoot to Launch Automatically at Login
mainTo ensure Scoot is always available, you can add it to your macOS Login Items:
- Open System Preferences.
- Navigate to “Users & Groups” and then “Login Items”.
- Click the lock icon in the bottom left corner to unlock the settings.
- Click the “+” button and select
Scoot.appfrom yourApplicationsfolder. - It is recommended to check the “Hide” checkbox so the app launches in the background.
Install Scoot via Homebrew or Manual Download
mainYou can install Scoot using Homebrew or by manually downloading the app bundle.
Using Homebrew
Run the following command in your terminal:
brew install --cask scootManual Installation
- Download and extract the latest build of Scoot.
- Drag the extracted
_Scoot.app_into yourApplicationsfolder. - Double-click
_Scoot.app_from theApplicationsfolder to launch it.
Configure Accessibility Permissions for Scoot
mainScoot requires macOS accessibility permissions to function. Without these, it cannot move your cursor, click, drag, or scroll.
- When prompted on the first run, click “Open System Preferences”.
- Click the lock icon in the bottom left corner of the System Preferences window to make changes.
- Locate and check the box for “Scoot.app” to grant it accessibility access.
Note: Scoot runs entirely locally and does not collect user data or make network requests.
Manage Scoot UI and settings
mainHiding UI
- Hide and Background: Press
⌘Hto hide overlaid UI elements and send Scoot to the background. - Cancel Typing: If you are currently typing a label in element-based mode, press
⎋(Escape),⌘.(Command-.), orC-gto clear the sequence and cancel.
Customization and Troubleshooting
- Preferences: Access settings by clicking the Scoot menu bar icon and selecting "Preferences...", or by pressing
⌘,while Scoot is in the foreground. You can modify keybindings, appearance (font size, color, opacity), and keybinding modes (System vs. vi). - Menu Bar Icon: The icon changes from an outlined mode (background) to a filled mode (foreground). Clicking the icon provides access to "Help" and "Preferences".
- Fixing Window Placement: If using multiple displays and windows appear in the wrong location, click the menu bar icon, select "Debug", and then "Rebuild Jump Windows".
- Hide and Background: Press
Example: Drag and Drop using Grid-based Navigation
mainThe following sequence demonstrates how to perform a drag-and-drop operation using Scoot's grid-based navigation mode:
⇧⌘K: Activate Scoot.kh: Jump the cursor to a specific cell.=: Press and hold the left mouse button.fd: Jump the cursor to the destination cell.↵: Release the left mouse button.
This pattern allows you to grab a file and drop it into a new location using only keyboard commands.
⇧⌘K -> kh -> = -> fd -> ↵Reference: Local Keybindings
mainLocal keybindings are only active when Scoot is in the foreground. Note that vi keybindings must be explicitly enabled in Preferences; when enabled, they disable Emacs/System bindings.
##### General | Shortcut | Alternate | Description | |-----------|-----------|-------------| | ⌘H | | Hide UI | | ⎋ (or ⌘.) | C-g | Cancel | ##### Clicking | Shortcut | Description | |-----------|-------------| | ↵ | Click left mouse button | | = | Press and hold left mouse button | | \ | Double-click left mouse button | | [ | Click middle mouse button | | ] | Click right mouse button | ##### Presentation | Shortcut | Description | |----------|-------------| | ⌃= | 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 |Reference: Global Keybindings
mainGlobal keybindings are always active as long as Scoot is running. They are used to bring Scoot to the foreground in a specific mode.
| Default Shortcut | Description | |------------------|-------------| | ⇧⌘J | Use element-based navigation | | ⇧⌘K | Use grid-based navigation | | ⇧⌘L | Use freestyle mode |