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
- Run Onit v4.1 with default shortcuts.
- Open any app (browser, or
vim in a terminal).
- 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
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(andsearchbackCancel) 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:carbonKeyCode 53= Escape,carbonModifiers 0= no modifier.Proof the swallow happens at Onit's global-hotkey layer:
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.Steps to reproduce
vimin a terminal).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_escapedoes not stick — Onit recreates the bare-Escape default on next launch. Overwriting it with a non-bare value while Onit is closed does:(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