私が理解したように、端末は通常、英数字以外の文字のシーケンスを表すためにANSI制御コードを使用します。たとえば、.inputrc
Linux で Bash を編集するときは、次のコードシーケンスを簡単に見つけることができます。
"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
上記のコマンド定義Bashコマンドhistory-search-backward
などのキーバインディング
bashでは、read
キーボードに入力された文字がANSI制御コードにどのようにマップされているかを確認できます。たとえば、実行してread
入力すると、Ctrl-P
次のような結果が表示されます^P
。同様にと入力すると、 Alt-W
次の結果が表示されます^[W
。
私の質問は:その逆を実行するプログラム、ツール、またはウェブサイトはありますか?つまり、特定のANSI制御コードシーケンスを取得するためにキーボードに入力する必要があるキーボードキーシーケンスを出力または表示するツールです。たとえば、入力は次のように出力する必要が^[W
あります。Alt-W
ありがとうございます!
答え1
infocmp
助けることができるorの\E
代わりにescapeを書き込みます。\e
^[
たとえば、これを見つけるには、\e[A
履歴を逆にします。
$ infocmp -1x | grep -F '=\E[A,'
cuu1=\E[A,
$ man 5 terminfo | grep ' cuu1 '
cursor_up cuu1 up up one line
上矢印とも呼ばれるカーソルを上に押すように求められます。
+-x
などの特定の組み合わせを表示するには、上記のフラグが必要です。Ctrl<-
これらの拡張キーは標準の一部ではないため、terminfoのマニュアルページには表示されませんが、次の文書に文書化されています。用語情報ファイル。
また、使用する端末によって制御手順が異なりますのでご注意ください。
infocmp -1x <terminal>
たとえば、などを使用してさまざまな端末に関する情報を取得できますinfocmp -1x rxvt
。infocmp -1x putty
どのterminfoを持っていると思うかを理解したら、変数を一致させるように設定するとTERM
作業が簡単になります。
答え2
これcat
はキーボードが実際に送信内容を表示するために使用できるため、これを行う一般的な方法です。 bash は端末データベースの拡張情報を使用しません。サブセット伝統的なtermcap機能の一部)。
cat
もちろん使用の欠点は
^[[A
はい^
[
A
または escapeA
\e
(Bashはこの文字の印刷可能な表現を提供しますescape。)
実際には、電子を無視することができます。デフォルトでは、誰もこの3文字の文字を送信せず、「すべての人」が文字として^[
送信しますescape。
追加資料:
- キーボードの送信内容をどのように確認できますか?(ncurses FAQ)
- マッピング解除escape(に翻訳できるプログラム
\E
)。