Chinese IME composition text still appears at bottom of terminal — useCursor fix not yet integrated (v2.1.83)
Summary
Chinese IME (输入法) composition/preedit text appears at the bottom-left corner of the terminal instead of inline at the cursor position. This makes Chinese input nearly unusable — users must resort to copy-paste as a workaround.
This is the same root cause as #25186 (closed), #30982, and #38407. The fix (useCursor from Ink 6.7.0) has been identified for over a month, upstream PRs exist (ink-text-input#93), but it has not been integrated into Claude Code. Meanwhile, both Gemini CLI and Codex CLI handle CJK IME correctly.
Reopening as a new issue because the prior issues appear stalled with no response from the team.
Environment
- OS: macOS 15.7.4 (Darwin 24.6.0)
- Claude Code: 2.1.83
- Terminal: Ghostty 1.3.1 / iTerm2 (reproducible in both)
- Input method: macOS Chinese IME (简体拼音)
Steps to Reproduce
- Launch Claude Code in terminal
- Switch to Chinese input method
- Type pinyin in the input prompt
- Observe: composition candidates appear at bottom-left corner, not at cursor
Expected vs Actual
- Expected: Preedit text appears inline at cursor position (like every other TUI app)
- Actual: Preedit text appears at bottom-left (0,0), typed characters invisible until committed
Root Cause (known)
Claude Code's React Ink TUI hides the real terminal cursor and renders a fake one via chalk.inverse(). macOS IME relies on real cursor position → falls back to (0,0).
Known Fix (not yet applied)
Ink 6.7.0 introduced useCursor hook (PR #866) which syncs the real terminal cursor. Community PR ink-text-input#93 implements this. This has not been integrated into Claude Code.
Competitive comparison
| CLI Tool | IME inline composition | Status |
|----------|----------------------|--------|
| Claude Code | Broken | Not fixed |
| Gemini CLI | Works | — |
| Codex CLI | Works | — |
Impact
This affects all CJK users (Chinese, Japanese, Korean). Copy-paste is the only workaround, severely degrading the interactive experience that Claude Code is designed for.
Related: #25186 (closed, root cause analysis), #30982, #38407, #32173
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗