私の端末がCtrl + BackspaceとAlt + Backspaceについて何を送信するのか知りたいです。これを行う標準的な方法は、cat
端末で実行し、一般的に機能する項目を入力することです。しかし、このようないくつかの出力では結果が難しいです。
\x1b\x7f
Alt + 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 -vte
(od -An -w1 -tu1 -tx1 -to1 -ta
GNUod
または互換性があると仮定)、各バイト値を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
。