Skip to content

原文(日本語に翻訳)

フォーカスイベントやマウストラッキングのレポートがブラケットペーストに割り込んだ際に、不要なエスケープシーケンスがプロンプトに出力されていた問題を修正しました。

原文(英語)

Fixed pasting dumping stray escape sequences into the prompt when focus events or mouse-tracking reports interleave with the bracketed paste

概要

テキストを貼り付ける際に、ターミナルのフォーカスイベントやマウストラッキングのレポートがブラケットペーストシーケンスの間に割り込むことで、プロンプトに不要なエスケープシーケンス(^[[?2004l などの制御文字)が表示される問題がありました。この問題は特にターミナルを切り替えたり、マウスを動かしながら貼り付けを行った場合に発生していました。修正により、貼り付け処理中に受信したフォーカスイベントやマウスレポートが適切にフィルタリングされます。

基本的な使い方

この修正は自動的に適用されます。テキストの貼り付け時にエスケープシーケンスが混入しなくなります。

bash
# 修正前の問題(起きることがあった):
# テキストを貼り付けると以下のような文字化けが混入
# ^[[?2004l^[[I hello world ^[[O
# ↑ これらはフォーカスイベントやマウストラッキングのシーケンス

# 修正後:
# 貼り付けたテキストがそのままクリーンに表示される
# hello world

実践例

マウスを動かしながらの貼り付け

マウスを動かしながらCtrl+Vで貼り付けても、制御文字が混入しなくなります。

修正前の問題:
1. コードをコピー
2. Claude Codeのウィンドウをクリック(フォーカスイベント発生)
3. 同時にCtrl+Vで貼り付け
4. → フォーカスイベントのエスケープシーケンスが貼り付けテキストに混入
5. → プロンプトが "^[[I def hello():^[[O" のように表示される

修正後:
1. コードをコピー
2. Claude Codeのウィンドウをクリック
3. Ctrl+Vで貼り付け
4. → クリーンな状態でテキストが表示される

tmux/screenでのペイン切り替え時の貼り付け

tmuxでペインを切り替えながら貼り付ける際の問題が修正されます。

bash
# tmux環境での操作例
# ペイン1: コードをコピー
# ペイン2(Claude Code)に移動してCtrl+V
# → ペイン切り替えのフォーカスイベントが貼り付けに割り込まなくなる

# マウスモードが有効なtmux設定でも正常に動作する
# ~/.tmux.conf
# set -g mouse on

ターミナルマウストラッキング有効時の貼り付け

一部のターミナル設定でマウストラッキングが有効な場合の問題が修正されます。

bash
# マウストラッキングを有効にするターミナル設定がある場合
# (例: vimやlive serverなどがマウストラッキングを有効化した後)
# そのままClaude Codeで貼り付けしても問題が発生しなくなった

# ターミナルの状態確認(デバッグ用)
stty -a  # 現在のターミナル設定を確認

長いコードブロックの貼り付け

長いコードを貼り付ける際に途中でフォーカスイベントが割り込んでも問題が発生しません。

python
# このような長いコードを貼り付けても正しく処理される
class DataProcessor:
    def __init__(self, config):
        self.config = config
        self.data = []

    def process(self, input_data):
        """データを処理するメソッド"""
        for item in input_data:
            processed = self._transform(item)
            self.data.append(processed)
        return self.data

    def _transform(self, item):
        # 変換ロジック
        return item * 2

注意点

  • エスケープシーケンスの混入問題は特定の条件(フォーカスイベントレポートとマウストラッキングが有効で、かつ貼り付けタイミングが重なる場合)で発生していました。すべてのユーザーに影響するわけではありませんでした。
  • ブラケットペーストはターミナルエミュレータの機能です。サポートしていないターミナルでは、この修正の恩恵を受けない場合があります。現代的なターミナル(iTerm2、Kitty、Alacritty、WezTermなど)はほぼすべてサポートしています。
  • 修正後もエスケープシーケンスが表示される場合は、ターミナルの設定(フォーカスイベントレポートやマウストラッキングの設定)を確認してください。
  • reset コマンドでターミナルの状態をリセットすることで、残存する問題を解決できる場合があります。

関連情報