Skip to content

v4.1: "escape" shortcut is registered as a global hotkey with no modifier — breaks the Escape key system-wide #380

Description

@Jekudy

Summary

After updating to v4.1, the Escape key stopped working in every application (browsers, terminals, Vim, native dialogs, Spotlight…) — not just inside Onit.

Root cause: Onit registers its escape (and searchbackCancel) shortcut as a global hotkey bound to a bare Escape, no modifiers. As a global monitor it consumes the Escape keystroke system-wide, so Escape never reaches the focused app.

Evidence

defaults read inc.synth.Onit (default shortcuts) contains:

"KeyboardShortcuts_escape" = "{\"carbonKeyCode\":53,\"carbonModifiers\":0}";
"KeyboardShortcuts_searchbackCancel" = "{\"carbonKeyCode\":53,\"carbonModifiers\":0}";

carbonKeyCode 53 = Escape, carbonModifiers 0 = no modifier.

Proof the swallow happens at Onit's global-hotkey layer:

  • Remapping Escape → another key at the kernel level (hidutil, 0x700000029 → 0x700000004) makes Escape work again — the global hotkey only matches keycode 53, and after the remap the event reaching it is no longer 53.
  • Quitting Onit immediately restores Escape everywhere.
  • No other running app holds a bare-Escape global shortcut (verified by scanning all running apps' prefs).

Steps to reproduce

  1. Run Onit v4.1 with default shortcuts.
  2. Open any app (browser, or vim in a terminal).
  3. Press the physical Escape key → nothing happens; the keystroke is consumed globally.

Impact

Severe. Escape closes dialogs, exits Vim insert mode, dismisses menus, cancels. The whole machine becomes hard to use, and the cause looks like a hardware/keyboard failure — very hard to diagnose.

Workaround

defaults delete … KeyboardShortcuts_escape does not stick — Onit recreates the bare-Escape default on next launch. Overwriting it with a non-bare value while Onit is closed does:

osascript -e 'tell application "Onit" to quit'; pkill -f "Onit.app/Contents/MacOS"
defaults write inc.synth.Onit KeyboardShortcuts_escape -string '{"carbonKeyCode":53,"carbonModifiers":256}'        # Cmd+Esc
defaults write inc.synth.Onit KeyboardShortcuts_searchbackCancel -string '{"carbonKeyCode":53,"carbonModifiers":256}'
open -a Onit

(Onit preserves an existing non-default value, so bare Escape is freed.)

Suggested fix

Use a local event monitor for the panel/typeahead/searchback Escape-to-dismiss, active only while that UI is focused — instead of a global hotkey that swallows Escape for every app. If a global shortcut is really intended, it shouldn't default to a modifier-less, universally-relied-upon key like Escape.

Related: #105 (make escape shortcut customizable), #110 (ESC no longer closes Onit window), #378 (shortcut resets to default after restart — same KeyboardShortcuts persistence behavior).

Environment

  • Onit 4.1
  • macOS 26.0 (25A5351b)
  • MacBook Pro (Mac14,9), Apple M2 Pro

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions