Skip to content

原文(日本語に翻訳)

生のC0コントロールバイトを送信するターミナル(Terminal.app、デフォルトのiTerm2、xterm)で ctrl+]ctrl+\ctrl+^ のキーバインドが機能しない問題を修正しました。

原文(英語)

Fixed ctrl+], ctrl+, and ctrl+^ keybindings not firing in terminals that send raw C0 control bytes (Terminal.app, default iTerm2, xterm)

概要

macOSのTerminal.app、デフォルト設定のiTerm2、xtermなど、C0コントロールバイトを生のバイトとして送信するターミナルエミュレーターでは、ctrl+]ctrl+\ctrl+^ のキーバインドが機能していませんでした。このアップデートにより、これらのターミナルでも正しくキーバインドが認識されるようになりました。

基本的な使い方

bash
# 影響を受けるターミナル:
# - macOS Terminal.app
# - デフォルト設定の iTerm2
# - xterm

# 修正されたキーバインド:
# ctrl+]  → カスタムアクション
# ctrl+\  → カスタムアクション
# ctrl+^  → カスタムアクション

# これらのキーが正しく機能するようになった

実践例

カスタムキーバインドの設定

json
// ~/.claude/keybindings.json
{
  "bindings": [
    {
      "key": "ctrl+]",
      "action": "compact",
      "description": "コンテキストを圧縮"
    },
    {
      "key": "ctrl+\\",
      "action": "cancel",
      "description": "現在の操作をキャンセル"
    },
    {
      "key": "ctrl+^",
      "action": "newSession",
      "description": "新しいセッションを開始"
    }
  ]
}

Terminal.appでの確認

bash
# macOS Terminal.app での動作確認

# キーバインド設定を確認
cat ~/.claude/keybindings.json

# Terminal.app で Claude Code を起動
claude

# 修正後: ctrl+] などのキーが正しく機能する
# Terminal.app はC0コントロールバイトを使用するため、
# 修正前はこれらのキーが認識されなかった

iTerm2での設定(デフォルト設定の場合)

bash
# デフォルト設定のiTerm2での確認

# iTerm2 のキー送信モードを確認
# Preferences > Profiles > Keys > Key Mappings

# デフォルトでは、iTerm2はC0コントロールバイトを使用
# 修正後: このデフォルト動作でもキーバインドが機能する

# Claude Codeのキーバインドをテスト
claude
# ctrl+] を押してみる → 設定したアクションが実行される

xterm互換ターミナルでの使用

bash
# Linuxなどでxterm互換ターミナルを使用している場合

# xtermでClaude Codeを起動
xterm -e claude

# または WSL (Windows Subsystem for Linux) で
wsl -- claude

# 修正後: ctrl+]、ctrl+\、ctrl+^ が正しく機能する

ターミナルの互換性確認スクリプト

bash
#!/bin/bash
# ターミナルのキーエスケープシーケンスを確認するスクリプト

echo "キーを押してそのエスケープシーケンスを確認します"
echo "ctrl+C で終了"
echo ""

# xev(X環境)またはcat -v でキーシーケンスを確認
if command -v xxd > /dev/null 2>&1; then
  echo "ctrl+] のエスケープシーケンス:"
  # 実際にキーを押してシーケンスを確認
  # C0コントロールバイトの場合: \x1d
  # 修正前: このシーケンスが認識されなかった
  # 修正後: 正しく認識される
fi

注意点

  • この修正はC0コントロールバイトを送信するターミナルでのみ影響があります
  • Ghostty、WezTermなどの一部のモダンなターミナルはすでに正常に動作していました
  • iTerm2の場合、設定変更でエスケープシーケンスの形式を変更できますが、デフォルト設定でも動作するようになりました
  • カスタムキーバインドは ~/.claude/keybindings.json で設定できます
  • C0コントロールバイトとは、ASCIIコードの0-31の範囲の制御文字のことです(ctrl+] は0x1D)

関連情報