Note
🤖 Claude Opus 5.5 responding on behalf of Sam (samanyudas)
Triage result: I found no defect in the engine, the recorder, or the configuration that would stop a Hyper key or a Karabiner-Elements rule from working.
Acceptance criteria 1 and 2 cannot pass as written, because ⌃⌥⇧⌘H is already a default shortcut.
I added needs-info until the criteria name a free chord.
The gap in the criteria
ctrl+alt+cmd+shift-his a default chord for Move column to first position or monitor left (window_moveedge_west,Sources/MiriCore/Bindings.swift:156onmainatffefedfa). Sam's liveconfig.tomlholds it too.- Criterion 2: the recorder rejects a chord that another action holds (
Sources/MiriCore/Shortcuts.swift:102). Recording Caps Lock and H for Focus column left would show "⌃⌥⇧⌘H is already used by Move column to first position or monitor left." and save nothing. This is inferred from the code. I did not run it. - Criterion 1: if the file binds the chord to both actions, the engine runs the first match from a
HashMap(vendor/paneru/src/config.rs:436, map at:1209). Which action wins can change at each engine start, so focus might or might not move. This is also inferred from the code.
Proposed rewording, for Sam to accept or change:
- With the Hyper rule on, Caps Lock and H runs its default, Move column to first position or monitor left. This needs no config edit.
- With the Hyper rule on, the recorder records Caps Lock and U for Focus column left as ⌃⌥⇧⌘U, and Caps Lock and U then moves focus one column left.
No binding in
config.tomluses the U key today. - With the Hyper rule on, recording Caps Lock and H for Focus column left shows the "already used" warning. This checks the conflict bullet under Proposed behavior.
Criteria 3 to 7 can be checked as written.
Why I expect the rest to work
- The engine builds modifiers from the left and right device bits, then falls back to the generic flags (
vendor/paneru/src/platform/input.rs:827and:856). The Caps Lock flag is in no group, so the engine ignores it. - Miri's defaults already use all four modifiers on twelve chords: the arrows, H, J, K, L, W, A, S, and D for edge and display moves.
- The recorder's tap sits at the head of the HID event tap and reads all four modifiers (
Sources/Miri/ShortcutRecorder.swift:68and:133). It needs only one of Control, Option, or Command, and it saves the chord asctrl+alt+cmd+shift-<key>. - Karabiner-Elements 16.3.0 on this Mac has grabbed the Apple Internal Keyboard since 5 November at 23:40, according to its
core_service.log. That keyboard is the only physical keyboard attached. So every Miri shortcut typed on this Mac since then reached macOS through Karabiner's virtual keyboard. The record does not show which Miri shortcuts Sam pressed in that time.
What only Sam can check
An agent cannot test the Karabiner path. Karabiner-Elements reads the physical keyboard through IOKit, and a synthetic CGEvent never passes through it. This comes from Karabiner's design, and I did not test it here.
Karabiner-Elements on this Mac now has two extra profiles, "Miri 302 Hyper test" and "Miri 302 no rules". The Default profile is unchanged and still selected. The Hyper test profile maps Caps Lock to ⌃⌥⇧⌘ and Right Option to ⌃⌥←.
Open guess
macOS reserves some Hyper chords, such as ⌃⌥⇧⌘. for sysdiagnose.
Miri's conflict table holds only symbolic hot keys, so the recorder might not warn about those.
I have not checked this.
docs/limitations.md can name it once someone confirms it.