Dlaczego Ctrl + mi Ctrl + q nie są używane w skrótach bash?

15

Ostatnio przeglądałem klawisze skrótów bash i próbowałem znaleźć odpowiedni dla mojego klucza aktywacyjnego tmux.

Uważam to za interesujące ctrl + mi ctrl + qnie są używane w skrótach bash, zgodnie z https://en.wikipedia.org/wiki/Bash_(Unix_shell) .

Dlaczego nie są używane? Czuję ctrl + msię całkiem przydatny.

Czy te dwie kombinacje są z założenia przeznaczone do DIY (define it yourself)użycia? Czy jest jeszcze inna historia?

Zen
źródło
1
Korzystanie ALT + mjest jeszcze wygodniejszym imho.
Rolf,

Odpowiedzi:

16

Ctrl + M wysyła ten sam znak (RET), co klawisz Enter w terminalu. Programy nie mają możliwości ich rozróżnienia, więc tych kluczy nie można skonfigurować osobno.

Ctrl + Q jest już domyślnie używany dla XON , więc nie może być używany przez Bash, ale nadal powinieneś być w stanie używać go w tmux, ponieważ tmux używa trybu surowego wprowadzania.

Program GUI może odczytać z klawiatury, że klawisz m został wciśnięty z modyfikatorem Ctrl i użyć Ctrl + m jako skrótu, ale powłoka lub dowolny program terminalowy odbiera kombinacje Ctrl + klawisz tak samo, jak znaki ascii od 0 do 26

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

i tak dalej. Możesz spróbować to, aby zobaczyć wartości

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

Aby wprowadzić wartości, naciśnij Ctrl + v przed Ctrl + [af], aby nie interpretować ich jako wartości surowej.

Gdy spojrzysz na tabelę ascii (7), zobaczysz kody kontrolne w tabeli z odpowiednimi znakami @ .. Z po lewej stronie. Na przykład

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

lub

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

Następna warstwa, która interpretuje kody sterujące przed bash, jest sztywna (zmień i wydrukuj ustawienia terminala)

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;

patrz stty (1) w odniesieniu do znaczeń lnextlub starti stop.

Zobacz także readline (3), ponieważ bash i inne programy GNU cli używają tej biblioteki do sterowania liniami wejściowymi i oczywiście bash (1) / READLINE, sekcja readline strony podręcznika bash.

Uwaga: XYZ (NUM) oznacza stronę podręcznika XYZ z sekcji NUM, więc wynik man NUM XYZ.

użytkownik4098326
źródło
1
Bash ma domyślne powiązanie dla Cs (XOFF), więc mogliby również umieścić jedno dla Cq.
Gilles „SO- przestań być zły”
W rzeczywistości domyślnie biblioteka GNU Readline, z której korzysta Bash, wiąże się C-qz tym samym, co C-vklon funkcji Emacsa, quoted-insertktóry jest użyteczny przy ustalaniu kodów ucieczki generowanych przez klucze i kombinacje klawiszy. Oto odpowiednia część podręcznika Readline
ssokolow