Skip to content

Korean IME: All Ctrl+key shortcuts silently ignored when Hangul input is active #40291

Closed as not planned

Description

@pereng11

Preflight Checklist

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

What's Wrong?

When the Korean (Hangul) IME is active, all Ctrl+key shortcuts are completely non-functional in Claude Code. This includes Ctrl+C, Ctrl+A, Ctrl+L, Ctrl+E, and every other Ctrl combination. Switching to English input mode immediately restores all shortcuts.

This is not a system-wide or terminal issue — the same shortcuts work perfectly in:

  • Terminal.app (bare shell)
  • iTerm2
  • tmux

The problem only occurs inside Claude Code's TUI.

What Should Happen?

Ctrl+key shortcuts should work regardless of the active input source, as they do in standard terminal applications. Terminal emulators pass Ctrl+key as raw control characters (e.g., Ctrl+C = 0x03) independent of IME state.

Error Messages/Logs

No error messages — the shortcuts are silently ignored with no feedback.

Steps to Reproduce

  1. Open Claude Code in any terminal (Terminal.app, iTerm2, etc.)
  2. Switch macOS input source to Korean (한국어)
  3. Try any Ctrl+key shortcut:
    • Ctrl+C — Expected: interrupt/cancel → Actual: nothing
    • Ctrl+A — Expected: cursor to line start → Actual: nothing
    • Ctrl+L — Expected: clear screen → Actual: nothing
    • Ctrl+E — Expected: cursor to line end → Actual: nothing
  4. Switch input source back to English
  5. All shortcuts work again

Claude Model

Sonnet (default)

Is this a regression?

I don't know

Claude Code Version

2.1.86 (Claude Code)

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Other

Additional Information

  • Terminal used: cmux (Ghostty/libghostty-based macOS terminal)
  • Also tested in Terminal.app, iTerm2 — same behavior in all terminals.

Workaround: Using Karabiner-Elements to intercept Ctrl+key at the OS level — temporarily switching to English, sending the shortcut, then switching back to Korean. This is an OS-level hack, not a proper fix — the issue should be resolved in Claude Code's input handling layer.

Activity

  1. github-actions commented on Mar 28, 2026

    @github-actions

    Found 3 possible duplicate issues:

    1. [BUG] Kitty keyboard protocol: Ctrl shortcuts fail on non-Latin keyboard layouts (e.g. Russian/Cyrillic) #36549
    2. [BUG] Keyboard shortcuts don't work with non-Latin keyboard layouts #27859
    3. [BUG] Ctrl+C, Ctrl+U, Ctrl+V shortcuts not working with Russian keyboard layout #19704

    This issue will be automatically closed as a duplicate in 3 days.

    • If your issue is a duplicate, please close it and 👍 the existing issue instead
    • To prevent auto-closure, add a comment or 👎 this comment

    🤖 Generated with Claude Code

  2. pereng11 commented on Mar 28, 2026

    @pereng11
    Author

    Not a duplicate — here's why

    The three suggested duplicates are related but distinct:

    #36549 — Ctrl shortcuts fail on non-Latin keyboard layouts (Kitty-specific)

    • Their scope: Kitty terminal only, Russian/Cyrillic layout
    • Root cause identified: Kitty keyboard protocol reports Unicode codepoints of the current layout's character, and Claude Code doesn't recognize non-Latin codepoints
    • Our scope: Reproduces across all terminals (Terminal.app, iTerm2, cmux/Ghostty) — not limited to Kitty keyboard protocol
    • Same symptom, broader impact

    #27859 (CLOSED) — Shortcuts don't work with non-Latin layouts

    • General report about Meta+T / Opt+T with Russian layout
    • Closed as duplicate

    #19704 (CLOSED) — Ctrl+C/U/V not working with Russian layout

    • Closed, reported as a regression in a specific version
    • Russian layout specific

    What makes this issue worth keeping open

    1. Terminal-agnostic: This reproduces on Terminal.app, iTerm2, and cmux (Ghostty-based) — terminals that do NOT use the Kitty keyboard protocol. This means the root cause is broader than [BUG] Kitty keyboard protocol: Ctrl shortcuts fail on non-Latin keyboard layouts (e.g. Russian/Cyrillic) #36549's Kitty protocol analysis suggests.
    2. Korean IME is architecturally different from Russian layout: Russian is a simple keyboard layout swap (1:1 key mapping). Korean IME involves a composition engine (jamo → syllable) with intermediate states — the input handling path is fundamentally different.
    3. Massive user impact: Korean is one of the largest non-Latin user bases for developer tools on macOS.

    I've added a comment to #36549 linking back here. These issues should be tracked together but not merged, as the fix for Kitty protocol may not resolve the Terminal.app/iTerm2 case.


    Workaround

    Using Karabiner-Elements to intercept Ctrl+key at the OS level — temporarily switching to English, sending the shortcut, then switching back to Korean:

    bash <(curl -fsSL https://raw.githubusercontent.com/pereng11/karabiner-korean-shortcuts/main/install.sh)

    Source: https://github.com/pereng11/karabiner-korean-shortcuts

  3. github-actions commented on Apr 28, 2026

    @github-actions

    Closing for now — inactive for too long. Please open a new issue if this is still relevant.

  4. github-actions commented on May 8, 2026

    @github-actions

    This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.

  5. locked as resolved and limited conversation to collaborators on May 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:tuibugSomething isn't workinghas reproHas detailed reproduction stepsplatform:macosIssue specifically occurs on macOSstaleIssue is inactive

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions