Ich wollte herausfinden, was mein Terminal für Strg+Rücktaste und Alt+Rücktaste sendet. Die Standardmethode hierfür ist die Ausführung cat
auf dem Terminal, und das Eintippen von Daten funktioniert normalerweise, aber bei bestimmten Ausgaben wie diesen sind die Ergebnisse knifflig.
Ich vermute, dass Alt+Backspace sendet \x1b\x7f
(also die Rücktaste entkommt), aber was passiert, wenn ich laufe cat
und Strg+V und Alt+Backspace oder nur Alt+Backspace eingebe, ist, dass das Escape „eingetippt“ und dann sofort mit der Rücktaste entfernt wird, sodass es so aussieht, als ob nichts passiert. Ich habe das nur einmal bemerkt, als ich sah, wie mein Computer ein einzelnes Bild des ^[
Escape renderte.
Bisher bin ich mir nicht sicher, wie ich herausfinden soll, was Strg+Rücktaste sendet. Es ist nicht Strg+W, obwohl beide in der Bash-Eingabeaufforderung ein Wort löschen, weil darunter cat
nichts passiert, während Strg+W ein Wort löscht!
Antwort1
Verwenden Sie einfach diesen Befehl:
showkey -a
Antwort2
In zsh
, mit:
$ STTY='raw -echo min 0 time 40' cat -vte
^[^?
Oder mit bash
:
$ s=$(stty -g); stty raw -echo min 0 time 40; cat -vte; stty "$s"
^[^?
Sie sehen die Rohdaten der Terminaleingabe, wie sie gesendet und gerendert wird cat -vte
. Geben Sie 4 Sekunden (40 Dezisekunden) lang nichts ein, um anzuhalten.
Sie können es cat -vte
durch ersetzen od -An -w1 -tu1 -tx1 -to1 -ta
(vorausgesetzt GNU od
oder kompatibel), um beispielsweise jeden Bytewert dezimal, hexadezimal, oktal oder als Zeichen anzuzeigen.
27
1b
033
esc
127
7f
177
del
Antwort3
Ich habe anderswo einen Trick gefunden, um ein einzelnes Zeichen in Bash anzuzeigen, indem ich verwendet habe read -rsn1 key && echo "$key" | xxd
. Damit war ich zu 90 % am Ziel, aber ich blieb eine Weile hängen, weil ich nur 0x1b (Escape) zurückbekam, was nicht das vollständige Bild war.
Dann habe ich es geändert in read -rsn2 key && echo "$key" | xxd
und das skaliert auf die Anzahl der Zeichen, die Ihre Escape-Sequenz zufällig hat, ein bisschen Experimentieren reicht aus. Auf meinem Terminal hatte ich alsobeideStrg+ und Alt+Backspace wurden in der Vergangenheit aus praktischen Gründen 0x1b, 0x7f (Meta-Backspace, wenn Sie so wollen) zugeordnet. Ich gehe diesen Weg in erster Linie, weil ich einen neuen Terminalemulator so konfigurieren möchte, dass ich mit beiden Kombinationen Wörter löschen kann, aber nur eine davon funktioniert. Das read -rsn
in Bash ist ein gutes Tool für ein niedrigeres Ausgabe-Debugging als cat
.