Skip to content

原文(日本語に翻訳)

インド文字の合字や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以降で追加されたものも含め、すべて書記素クラスターとして正しく処理されます。

関連情報