原文(日本語に翻訳)
生の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)