Kürzlich habe ich die Bash-Tastenkombinationen überprüft und versucht, eine geeignete für meinen tmux-Aktivierungsschlüssel zu finden.
Interessant finde ich das ctrl + m
und ctrl + q
werden laut https://en.wikipedia.org/wiki/Bash_(Unix_shell).
Warum werden sie nicht verwendet? Ich fühle ctrl + m
ist ziemlich praktisch.
Sind diese beiden Kombinationen vom Design her für DIY (define it yourself)
vorgesehen Verwendungszweck? Oder gibt es eine andere Geschichte?
Akzeptierte Antwort:
Strg+M sendet dasselbe Zeichen (RET) wie die Eingabetaste im Terminal. Programme können sie nicht unterscheiden, daher können diese Tasten nicht separat konfiguriert werden.
Strg+Q wird standardmäßig bereits für XON verwendet, daher kann es nicht von Bash verwendet werden, aber Sie sollten es trotzdem in tmux verwenden können, da tmux den Raw-Eingabemodus verwendet.
Ein GUI-Programm könnte von der Tastatur lesen, dass die Taste m mit dem Modifikator Strg gedrückt wurde, und Strg+m als Abkürzung verwenden, aber eine Shell oder ein beliebiges Terminalprogramm empfängt die Strg+Tasten-Kombinationen nur als ASCII-Zeichen von 0 bis 26
[email protected] = 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+[a-f], um sie uninterpretiert als Rohwert zu erhalten.
Wenn Sie sich die ASCII(7)-Tabelle ansehen, sehen Sie die Steuercodes in einer Tabelle mit den entsprechenden Zeichen @..Z auf der linken Seite. Zum Beispiel
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 Schicht, die Steuercodes vor 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 Bedeutung von lnext
oder start
und stop
.
Siehe auch readline(3), da Bash und andere GNU-CLI-Programme diese Bibliothek verwenden, um Eingabezeilen zu steuern, und natürlich bash(1) /READLINE, den readline-Abschnitt der Bash-Manpage.
Verwandte:Den Wert einer Variablen in Bash in Anführungszeichen setzen oder nicht?
Hinweis:XYZ(NUM) bedeutet Handbuchseite XYZ aus Abschnitt NUM, also das Ergebnis von man NUM XYZ
.