Scoot

repository·main·Indexed 19 days ago

https://github.com/mjrusso/scoot

A 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).

Tokens
2.2K
Snippets
5
Records
12
Agent score
18%

What's inside Scoot

  1. What is Scoot?

    main
    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).
  2. How Scoot navigation modes work

    main

    Scoot provides three distinct modes for navigating and controlling the mouse cursor:

    1. 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.
    2. 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.
    3. 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.
  3. Use text editing shortcuts to move the cursor

    main

    In 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.

  4. How to use Scoot navigation modes

    main

    Scoot 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 -> Freestyle
  5. Navigate and interact with the cursor in Scoot

    main

    Once 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, l for 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.

  6. Configure Scoot to Launch Automatically at Login

    main

    To ensure Scoot is always available, you can add it to your macOS Login Items:

    1. Open System Preferences.
    2. Navigate to “Users & Groups” and then “Login Items”.
    3. Click the lock icon in the bottom left corner to unlock the settings.
    4. Click the “+” button and select Scoot.app from your Applications folder.
    5. It is recommended to check the “Hide” checkbox so the app launches in the background.
  7. Install Scoot via Homebrew or Manual Download

    main

    You can install Scoot using Homebrew or by manually downloading the app bundle.

    Using Homebrew

    Run the following command in your terminal:

    brew install --cask scoot

    Manual Installation

    1. Download and extract the latest build of Scoot.
    2. Drag the extracted _Scoot.app_ into your Applications folder.
    3. Double-click _Scoot.app_ from the Applications folder to launch it.
  8. Configure Accessibility Permissions for Scoot

    main

    Scoot requires macOS accessibility permissions to function. Without these, it cannot move your cursor, click, drag, or scroll.

    1. When prompted on the first run, click “Open System Preferences”.
    2. Click the lock icon in the bottom left corner of the System Preferences window to make changes.
    3. 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.

  9. Manage Scoot UI and settings

    main

    Hiding UI

    • Hide and Background: Press ⌘H to 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-.), or C-g to 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".
  10. Example: Drag and Drop using Grid-based Navigation

    main

    The following sequence demonstrates how to perform a drag-and-drop operation using Scoot's grid-based navigation mode:

    1. ⇧⌘K: Activate Scoot.
    2. kh: Jump the cursor to a specific cell.
    3. =: Press and hold the left mouse button.
    4. fd: Jump the cursor to the destination cell.
    5. : 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 -> ↵
  11. Reference: Local Keybindings

    main

    Local 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 |
  12. Reference: Global Keybindings

    main

    Global 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 |