[BUG] Ctrl-key shortcuts (e.g. Ctrl+V image paste) don't fire on non-Latin keyboard layouts after Kitty keyboard protocol was enabled

Open 💬 2 comments Opened Jun 17, 2026 by antonreshetov

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Ctrl-based shortcuts in the TUI silently do nothing when a non-Latin keyboard layout is active (tested with Russian ЙЦУКЕН, but this affects any Cyrillic/Greek/etc. layout). The most visible symptom is image paste: pressing Ctrl+V with a Russian layout active does not paste the image. Switching the OS layout to English and pressing the same physical key works.

This is a regression introduced together with the Kitty keyboard protocol (enabled in v2.1.0 for native Shift+Enter).

What Should Happen?

  • In legacy terminal mode, Ctrl+<key> masks to a control byte independently of layout. Ctrl+V and Ctrl+М (the physical V key in Russian layout) both emit 0x16. You can verify this in a plain shell: both echo ^V.
  • Claude Code requests the Kitty keyboard protocol on capable terminals (iTerm2, kitty, WezTerm, ghostty). In that mode the terminal no longer sends the masked control byte — it sends a CSI u sequence carrying the layout-dependent keysym (e.g. \x1b[118;5u for Ctrl+v, but the Cyrillic codepoint U+043C for Ctrl+М).
  • Claude Code's keybinding matcher compares against the Latin key (v, c, r, …), so on a Cyrillic layout nothing matches and the shortcut is dropped.

So the same keystroke that produces ^V in the shell (layout-independent) becomes layout-dependent the moment Claude Code switches the terminal into Kitty mode.

Error Messages/Logs

Steps to Reproduce

  1. macOS, iTerm2, OS keyboard layout set to Russian (ЙЦУКЕН).
  2. In a plain shell, press Ctrl+V and Ctrl+М — both echo ^V (proves the bytes are identical in legacy mode).
  3. Copy an image to the clipboard.
  4. Launch Claude Code, press Ctrl+V (physical V key, Russian layout active).

Claude Model

None

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.179 (Claude Code)

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

iTerm2

Additional Information

_No response_

View original on GitHub ↗

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