[BUG] Ctrl+J newline broken under Korean IME after v2.1.84 cursor tracking fix

Status Fixed / completed
Reported on v2.1.84
Maintainer reply None cached
Activity 5 comments · opened Mar 26, 2026 · closed Mar 27, 2026

Description

After updating to Claude Code v2.1.84, Ctrl+J no longer inserts a newline when the Korean (Hangul) IME is active. It still works correctly in English input mode.

This regression appears to be caused by the v2.1.84 change:

"Fixed native terminal cursor not tracking the text input caret, so IME composition (CJK input) now renders inline and screen readers can follow the input position."

Steps to Reproduce

  1. Open Claude Code in Warp terminal
  2. Switch macOS input source to Korean (한국어)
  3. Press Ctrl+J in the chat input
  4. Expected: A newline is inserted
  5. Actual: Nothing happens

Switch back to English input → Ctrl+J works as expected.

Before v2.1.84

Ctrl+J inserted a newline in both Korean and English input modes without any custom keybinding configuration.

After v2.1.84

  • English input: Ctrl+J → newline ✅
  • Korean IME active: Ctrl+J → no response ❌

Workaround Attempted

Adding "ctrl+j": "chat:newline" to ~/.claude/keybindings.json restores newline in English mode only. Korean IME mode remains broken, suggesting the issue is in how key events are captured/dispatched when IME composition is active.

Root Cause Hypothesis

The v2.1.84 cursor tracking fix changed the key input processing path so that IME composition now renders inline. This likely moved key event handling from the terminal's native layer (where Ctrl+J = LF regardless of IME state) to Claude Code's internal keybinding system, which does not receive Ctrl+J when the Korean IME is active.

Environment

  • Claude Code: 2.1.84
  • Terminal: Warp 0.2026.03.18.08.24.03
  • OS: macOS Sequoia 15.5 (24F74) x86_64
  • Input Method: macOS built-in Korean IM
  • Machine: iMac (Retina 5K, 27-inch, 2019), Intel Core i5-9600K

Related Issues

  • #26075 — Add chat:newline keybinding action
  • #22732 — Korean IME composition visibility
  • #10547 — Ctrl+Backspace / Ctrl+Arrow with CJK input

View original on GitHub ↗

5 Comments

ragtimelab · 5 months ago

Additional context: This is likely related to #16764 (Option+Enter newline regression in v2.1.1). In that issue's comments, a user reported the exact same Ctrl+J newline breakage starting from v2.1.1:

"Emacs-style Ctrl+j (newline) no longer inserts a line break. This worked correctly until just before upgrading to v2.1.1."

The root cause may trace back to the terminal keyboard mode changes introduced in v2.1.0:

  • "Changed Shift+Enter to work out of the box in iTerm2, WezTerm, Ghostty, and Kitty without modifying terminal configs"
  • "Fixed terminal keyboard mode not being reset on exit"

The v2.1.84 IME cursor tracking fix appears to have further broken this for CJK IME active states specifically, making Ctrl+J unresponsive only when Korean IME is engaged.

github-actions[bot] · 5 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/17649
  2. https://github.com/anthropics/claude-code/issues/39206
  3. https://github.com/anthropics/claude-code/issues/38694

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

ragtimelab · 5 months ago

❌ Not a duplicate — here's why

The three suggested duplicates are all distinct issues:

#17649 (CLOSED) — AquaSKK Ctrl+J for IME mode switching

  • Their problem: Ctrl+J should trigger AquaSKK's Hiragana mode switch (SKK_JMODE), but Claude Code swallows the key event
  • Our problem: Ctrl+J should insert a newline in the chat input, but fails when Korean IME is active
  • Different intent, different IME, different expected behavior

#39206 — Numpad Enter outputs raw CSI u sequence

  • Their problem: Numpad Enter emits 57414u text instead of submitting (Kitty protocol parsing failure)
  • Our problem: Ctrl+J produces no output at all — it's silently dropped, not mis-encoded
  • Different key, different symptom

#38694 — Caps Lock IME switching intercepted

  • Their problem: Caps Lock outputs [57358u instead of switching IME (Kitty protocol intercepting modifier keys)
  • Our problem: Ctrl+J is a control character (LF, 0x0A), not a modifier key — and it produces no stray escape sequence
  • Different key class, different symptom

---

What makes this issue unique

  1. Ctrl+J worked as newline before v2.1.x — confirmed by a commenter in #16764 who reported the same Ctrl+J breakage at v2.1.1
  2. IME-state-dependent: English input → Ctrl+J works. Korean IME active → Ctrl+J silently dropped. This is not a general keybinding failure.
  3. chat:newline keybinding workaround doesn't fix it for Korean IME — the key event never reaches Claude Code's keybinding system when IME is composing
  4. The v2.1.84 IME cursor tracking change made this worse by altering the input processing path for CJK composition

This is a regression in IME-aware key event dispatching, not a Kitty protocol encoding issue or an IME mode-switching conflict. Please keep this issue open.

ragtimelab · 5 months ago

Resolved in v2.1.85

The Ctrl+J newline issue under Korean IME is no longer reproducible as of v2.1.85.

The likely fix is this entry from the v2.1.85 release notes:

Fixed shift+enter and meta+enter being intercepted by typeahead suggestions instead of inserting newlines

While Ctrl+J / Korean IME isn't explicitly mentioned, the newline insertion path appears to have been corrected as part of this fix. Closing — will reopen if it regresses.

github-actions[bot] · 4 months ago

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.