Keybinding set to null consumes keystroke instead of passing through
Issue Description
When setting a keybinding to null in ~/.claude/keybindings.json to unbind it, the keystroke is still consumed rather than being passed through to the host application.
Environment
- Claude Code Version: 2.1.29
- Platform: macOS (Darwin 25.2.0)
- Context: Running via IntelliJ IDEA plugin with Emacs keybindings
Problem Details
I want to use Ctrl+B for Emacs-style backward-character movement. I've configured keybindings.json to:
- Unbind Ctrl+B by setting it to
null - Rebind the background task feature to Alt+B
{
"bindings": [
{
"context": "Global",
"bindings": {
"ctrl+b": null
}
},
{
"context": "Task",
"bindings": {
"task:background": "alt+b"
}
}
]
}
Expected Behavior
Setting "ctrl+b": null should cause Claude Code to not handle the Ctrl+B keystroke at all, allowing it to pass through to:
- The terminal's readline (in CLI mode)
- The IDE's keymap (in IDEA plugin mode)
Actual Behavior
- Ctrl+B no longer triggers the "background task" action (good)
- Ctrl+B does nothing - it is consumed/swallowed (bad)
- The keystroke never reaches IDEA's Emacs keybindings for cursor movement
Impact
Users who rely on Emacs keybindings (Ctrl+A, Ctrl+B, Ctrl+E, Ctrl+F, etc.) cannot reclaim Ctrl+B for cursor navigation even after unbinding it in Claude Code.
Suggested Fix
When a keybinding is set to null, Claude Code should not register a handler for that keystroke at all, allowing it to propagate to the underlying input system.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗