catが表示しない特別なコードについて、私の端末が送信するエスケープコードが何であるかをどうやって知ることができますか?

catが表示しない特別なコードについて、私の端末が送信するエスケープコードが何であるかをどうやって知ることができますか?

私の端末がCtrl + BackspaceとAlt + Backspaceについて何を送信するのか知りたいです。これを行う標準的な方法は、cat端末で実行し、一般的に機能する項目を入力することです。しかし、このようないくつかの出力では結果が難しいです。

\x1b\x7fAlt + Backspaceが転送中(つまり、バックスペースエスケープ)のようですが、cat実行してCtrl + VとAlt + Backspaceと入力するか、Alt + Backspaceのみを入力するとどうなりますか?エスケープ文字が「入力」され、すぐに削除されます。バックスペースキーを使用すると、何も起こっていないようです。一度、私は私のコンピュータがエスケープフレームをレンダリングするのを見て^[手がかりを得ました。

これまで、Ctrl + Backspaceがどのように送信するのかを理解する方法がわかりません。どちらもbashプロンプトから単語を削除してもCtrl + Wではありません。 bashプロンプトではcat何もしませんが、Ctrl + Wは単語を削除するためです!

答え1

次のコマンドを使用してください。

showkey -a

答え2

からzsh

$ STTY='raw -echo min 0 time 40' cat -vte
^[^?

または以下を使用してbash

$ s=$(stty -g); stty raw -echo min 0 time 40; cat -vte; stty "$s"
^[^?

端末が生の入力を送信してによってレンダリングされるのを見ることができますcat -vte。 4秒(40分秒)の間何も入力せずに停止します。

たとえば、代わりにcat -vteod -An -w1 -tu1 -tx1 -to1 -taGNUodまたは互換性があると仮定)、各バイト値を10進数、16進数、8進数、または文字形式で表示できます。

  27
  1b
 033
 esc
 127
  7f
 177
 del

答え3

.bashを使用してbashで単一の文字を表示する方法を他の場所で見つけましたread -rsn1 key && echo "$key" | xxd。 90%が完了したが全体の画像ではなく0x1b(エスケープ)のみが返されるため、しばらくこの問題は解決されませんでした。

次にそれをに変更し、read -rsn2 key && echo "$key" | xxdこれはエスケープシーケンスの文字数まで正確に拡張されました。いくつかの実験でトリックを作成しました。だから私の端末では両方便宜上、Ctrl+ および Alt+Backspace を 0x1b、0x7f (メタバックスペース) にマッピングするために使用されました。 2つの組み合わせで単語を削除できるように新しいターミナルエミュレータを設定したかったのですが、そのうちの1つだけが機能するため、最初にこのパスを選択しました。 bash内のbashはread -rsn比較を実行するための素晴らしいツールですcat

関連情報