Keybinding set to null consumes keystroke instead of passing through

Open 💬 3 comments Opened Feb 2, 2026 by tiessa

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:

  1. Unbind Ctrl+B by setting it to null
  2. 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.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗