Ctrl+Backspace と Alt+Backspace に対してターミナルが何を送信しているかを知りたいのですが、これを行う標準的な方法はcat
ターミナルで実行し、何かを入力すると通常は機能しますが、このような特定の出力では結果がわかりにくいです。
\x1b\x7f
Alt+Backspaceで (つまり、エスケープ バックスペースが)送信されていると推測していますが、Ctrl+V と Alt+Backspace、または Alt+Backspace だけを入力して実行した場合、エスケープが「入力」されてからすぐにバックスペースとともに削除されるため、何も起こっていないように見えます。コンピューターがエスケープが存在するcat
1 つのフレームをレンダリングしたのを見て、このことに気付いたのは 1 度だけです。^[
今のところ、Ctrl+Backspace が何を送信しているのか、よくわかりません。どちらも bash プロンプトで単語を削除しますが、cat
Ctrl+W ではありません。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 デシ秒) 何も入力しないでください。
たとえば、各バイト値を 10 進数、16 進数、8 進数、または文字として表示するには、を(GNUまたは互換)cat -vte
に置き換えることができます。od -An -w1 -tu1 -tx1 -to1 -ta
od
27
1b
033
esc
127
7f
177
del
答え3
私は、 を使用して bash で 1 つの文字を表示するトリックを別の場所で見つけましたread -rsn1 key && echo "$key" | xxd
。 これは 90% の道のりでしたが、0x1b (Escape) が返されるだけで、全体像がわからなかったため、しばらくこの作業に行き詰まりました。
その後、これをread -rsn2 key && echo "$key" | xxd
次のように変更しました。エスケープシーケンスに何文字あるかに応じて、少し実験してみるとうまくいきます。私の端末では、両方Ctrl+ および Alt+Backspace は、以前は利便性のために 0x1b、0x7f (いわゆるメタバックスペース) にマップされていました。私がこの道を進むことになったのは、新しいターミナル エミュレーターを設定して、両方の組み合わせで単語を削除できるようにしたいのですが、そのうちの 1 つしか機能しないからです。bashread -rsn
の は、 よりも低レベルの出力デバッグを行うのに適したツールですcat
。