Warum werden Strg + m und Strg + q in Bash-Verknüpfungen nicht verwendet?

15

Vor kurzem habe ich die Tastenkombinationen für Bash überprüft und versucht, eine geeignete für meinen tmux-Aktivierungsschlüssel zu finden.

Ich finde es interessant, dass ctrl + mund ctrl + qin bash Verknüpfungen laut https://en.wikipedia.org/wiki/Bash_(Unix_shell) nicht verwendet werden .

Warum werden sie nicht verwendet? Ich finde ctrl + mdas ganz praktisch.

Sind diese beiden Kombinationen für die DIY (define it yourself)Verwendung vorgesehen? Oder gibt es eine andere Geschichte?

Zen
quelle
1
Verwenden ALT + mist noch bequemer imho.
Rolf

Antworten:

16

Strg + M sendet dasselbe Zeichen (RET) wie die Eingabetaste im Terminal. Programme können sie nicht unterscheiden, daher können diese Schlüssel nicht separat konfiguriert werden.

Strg + Q wird bereits standardmäßig für XON verwendet , kann also nicht von Bash verwendet werden. Sie sollten es jedoch weiterhin in tmux verwenden können, da tmux den unformatierten Eingabemodus verwendet.

Ein GUI-Programm könnte über die Tastatur lesen, dass die Taste m mit dem Modifikator Strg gedrückt wurde und Strg + m als Tastenkombination verwenden. Eine Shell oder ein beliebiges Terminalprogramm empfängt die Strg + Tastenkombinationen jedoch nur als ASCII-Zeichen von 0 bis 26

Ctrl+@ = 0
Ctrl+A = 1
Ctrl+B = 2

und so weiter. Sie können dies versuchen, um die Werte zu sehen

cat ctrlkeys <<EOF
^A^B^C^D^E^F
EOF
od -c ctrlkeys
0000000 001 002 003 004 005 006  \n

Um die Werte einzugeben, drücken Sie Strg + v vor Strg + [af], um sie als Rohwert zu interpretieren.

Wenn Sie sich die ASCII-Tabelle (7) ansehen, sehen Sie die Steuercodes in einer Tabelle mit den entsprechenden Zeichen @ .. Z auf der linken Seite. Beispielsweise

015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M

oder

011   9     09    HT  '\t' (horizontal tab)   111   73    49    I

Die nächste Ebene, die Steuercodes vor der Bash interpretiert, ist stty (Ändern und Drucken der Terminaleinstellungen).

stty -a
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;

siehe stty (1) für die Bedeutungen von lnextoder startund stop.

Siehe auch readline (3) als Bash und andere GNU CLI-Programme verwenden diese Bibliothek zur Steuerung von Eingabezeilen und natürlich bash (1) / READLINE, den Readline-Abschnitt der Bash-Handbuchseite.

Hinweis: XYZ (NUM) bedeutet Manualpage XYZ aus Abschnitt NUM, also das Ergebnis von man NUM XYZ.

user4098326
quelle
1
Bash hat eine Standardbindung für Cs (XOFF), daher hätten sie auch eine für Cq setzen können.
Gilles 'SO- hör auf böse zu sein'
Tatsächlich ist die von Bash verwendete GNU Readline-Bibliothek standardmäßig an C-qdas Gleiche gebunden wie C-vein Klon der Emacs-Funktion quoted-insert, mit der Sie die von Schlüsseln und Tastenkombinationen erzeugten Escape-Codes ermitteln können. Hier ist der relevante Teil des Readline-Handbuchs: tiswww.case.edu/php/chet/readline/readline.html#SEC9
ssokolow