Korean IME composition window jumps around during input

Resolved 💬 3 comments Opened Mar 1, 2026 by JJs23 Closed Mar 4, 2026

Description

When typing Korean (Hangul) in Claude Code on Windows, the IME composition window jumps to incorrect positions — sometimes below the input line, sometimes behind the cursor. This makes Korean input very difficult to use.

Environment

  • OS: Windows 11
  • Terminal: Windows Terminal / VS Code integrated terminal
  • Claude Code: Latest version

Steps to Reproduce

  1. Launch Claude Code in Windows Terminal or VS Code terminal
  2. Start typing Korean at the prompt (e.g. "한글 처리")
  3. Observe the IME composition window position during input

Expected Behavior

The IME composition window should stay anchored at the text cursor position, following the input naturally.

Actual Behavior

  • The composition window jumps to a different line (below the input area)
  • The composition window drifts behind the cursor as more characters are typed
  • The position becomes increasingly wrong with longer input

Screenshots

Composition window drops below the prompt

!image1

Composition window drifts behind cursor during "한글 처리" input

!image2

Root Cause Analysis

This appears to be caused by the ink/react-ink rendering framework moving the terminal cursor via ANSI escape sequences during UI re-renders (spinners, progress indicators, layout updates). The OS IME composition window tracks the terminal's physical cursor position, so when ink repositions the cursor for rendering, the composition window follows it to the wrong location.

This issue also reproduces in VS Code's integrated terminal with Claude Code extension.

Notes

  • This is not a terminal emulator bug — it's caused by cursor movement during ink re-renders
  • Native terminal apps that don't move the cursor during IME composition don't have this issue
  • A potential fix would be to suppress cursor movement (or use a hidden cursor) during re-renders while IME composition is active

View original on GitHub ↗

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