原文(日本語に翻訳)
インド文字の合字やZWJ絵文字が行をまたいで折り返す際に、Ctrl+E/A/K/U/矢印キーでカーソルが書記素の途中に着地する問題を修正しました。
原文(英語)
Fixed cursor landing mid-grapheme on Ctrl+E/A/K/U/arrow keys when an Indic conjunct or ZWJ emoji wraps across lines
概要
Unicodeの複合文字(インド系文字の合字や、ZWJ(ゼロ幅接合子)を使った複合絵文字など)がターミナルの行末で折り返す際に、Ctrl+E(行末移動)、Ctrl+A(行頭移動)、Ctrl+K(行末まで削除)、Ctrl+U(行頭まで削除)および矢印キーを使うとカーソルが文字の途中に誤って配置される問題がありました。この修正により、マルチコードポイント文字の扱いが改善され、カーソルが常に書記素の境界に正しく配置されます。
基本的な使い方
この修正はキーボード操作に自動的に適用されます。インド系言語のテキストや複合絵文字を入力する際のカーソル操作が正確になります。
# 影響を受けるキー操作
Ctrl+A → 行頭にカーソルを移動
Ctrl+E → 行末にカーソルを移動
Ctrl+K → カーソルから行末まで削除
Ctrl+U → 行頭からカーソルまで削除
←/→ → 1文字移動実践例
インド系言語テキストの入力と編集
# デーヴァナーガリー文字(ヒンディー語など)の例
# 合字文字(क्ष など)が行末で折り返す場合
# プロンプトに以下を入力したとする
> हिंदी में कोड समीक्षा करें। यह एक लंबा वाक्य है जो लाइन के अंत में रैप होता है।
# 修正前: Ctrl+AやCtrl+Eでカーソルが文字の途中に移動してしまう
# 修正後: カーソルが書記素(文字の意味単位)の境界に正しく移動するZWJ複合絵文字の取り扱い
# ZWJ(U+200D)で結合された複合絵文字の例
# 例: 👨💻(男性技術者 = 👨 + ZWJ + 💻)
# 👩👩👦(家族 = 複数の絵文字 + ZWJ)
# 🏳️🌈(レインボーフラッグ = 🏳 + ZWJ + 🌈)
# これらの絵文字が行末で折り返す際
# 修正前: カーソー移動で絵文字が分断される
# 修正後: 絵文字全体を1つの単位として正しく扱う
# テスト例
> このバグを修正した開発者は👨💻で、チームは👩👩👦👦のような多様性があります。
# Ctrl+Eで行末に移動 → 修正後は正確に動作
# 矢印キーで1文字ずつ移動 → 絵文字全体をスキップ多言語混在テキストの編集
# 多言語が混在するコメントやドキュメントの編集
> /* デバッグ用: यह फ़ंक्शन 👨💻 द्वारा लिखा गया है */
# 修正後のカーソル操作:
# Ctrl+A → 行頭(/の前)に正確に移動
# Ctrl+E → 行末(*/の後)に正確に移動
# Ctrl+K → カーソル位置から行末まで正確に削除注意点
- この修正はターミナルエミュレータ自体ではなく、Claude Codeの入力処理に適用されます。ターミナルエミュレータのUnicode処理の問題は別途対処が必要な場合があります。
- 書記素クラスターの処理はUnicode規格に準拠していますが、ターミナルのフォントによっては表示上の問題が残る場合があります。
- インド系文字の合字(結合文字)は言語によって動作が異なります。デーヴァナーガリー、タミル文字、テルグ文字などで改善が見られます。
- ZWJ絵文字はUnicode 13.0以降で追加されたものも含め、すべて書記素クラスターとして正しく処理されます。