Voice push-to-talk broken with modifier-combo bindings (meta+space, f9) in 2.1.84 — only bare space works
Title
Voice push-to-talk does not activate with modifier-combo or function key bindings (meta+space, f9, etc.) — only bare space works
Description
After configuring voice:pushToTalk to use meta+space (or f9) in keybindings.json, activating /voice and pressing the bound key produces no response — no recording indicator, no visual feedback. The default space binding works correctly.
Steps to Reproduce
- Add to
~/.claude/keybindings.json:
``json``
{ "context": "Chat", "bindings": { "meta+space": "voice:pushToTalk" } }
- Run
claude(version 2.1.84) - Type
/voice→ "Voice mode enabled. Hold meta+Space to record." - Hold Alt+Space — nothing happens
- Change binding to
"space": "voice:pushToTalk" - Toggle
/voiceoff then on - Hold Space — voice recording activates correctly
Expected Behavior
meta+space should activate voice recording immediately (as it did in earlier versions).
Actual Behavior
No response. Voice handler silently returns without activating recording.
Environment
- Claude Code: 2.1.84
- OS: Linux 6.18.7 (Pop!_OS/Ubuntu based)
- Terminal: bash (xterm-256color) and VS Code integrated terminal
- Auth: OAuth claude.ai, Max subscription
- GNOME Alt+Space unbound (confirmed via gsettings)
Analysis
Binary analysis shows the handler Umf splits into two code paths:
- Character path (O !== null): for single-char bindings like
space— works - Modifier-combo path (O === null): for bindings like
meta+spaceorf9— broken
The modifier path calls kiD() for key matching and should activate immediately (the condition O === null makes activation unconditional), but empirically no activation occurs.
Changelog notes:
- 2.1.78: "Fixed voice mode modifier-combo push-to-talk keybindings requiring a hold"
- 2.1.84: "Fixed voice push-to-talk: holding the voice key no longer leaks characters"
The 2.1.84 character-leak fix likely re-introduced the modifier-combo regression that 2.1.78 had fixed.
Workaround
Use the default space binding instead of modifier combos.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗