Perché Ctrl + m e Ctrl + q non sono usati nelle scorciatoie bash?


15

Recentemente ho esaminato i tasti di scelta rapida bash e ho cercato di trovarne uno appropriato per il mio tasto di attivazione di tmux.

Lo trovo interessante ctrl + me ctrl + qnon sono usato nelle scorciatoie di bash, secondo https://en.wikipedia.org/wiki/Bash_(Unix_shell) .

Perché non vengono utilizzati? Mi sento ctrl + mabbastanza utile.

Queste due combinazioni sono state progettate per l' DIY (define it yourself)uso? O c'è un'altra storia?


1
L'uso ALT + mè un imho ancora più conveniente.
Rolf,

Risposte:


16

Ctrl + M invia lo stesso carattere (RET) del tasto Invio nel terminale. I programmi non hanno modo di distinguerli, quindi questi tasti non possono essere configurati separatamente.

Ctrl + Q è già utilizzato per XON per impostazione predefinita, quindi non può essere utilizzato da Bash, ma dovresti comunque essere in grado di usarlo in tmux, perché tmux utilizza la modalità di input non elaborata.

Un programma GUI potrebbe leggere dalla tastiera, che il tasto m è stato premuto con il modificatore Ctrl e usare Ctrl + m come scorciatoia, ma una shell o qualsiasi programma terminale riceve le combinazioni Ctrl + tasto proprio come caratteri ASCII da 0 a 26

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

e così via. Puoi provare questo per vedere i valori

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

Per inserire i valori premere Ctrl + v prima di Ctrl + [af] per non interpretarli come valore non elaborato.

Quando guardi la tabella ascii (7) puoi vedere i codici di controllo in una tabella con i corrispondenti caratteri @ .. Z a sinistra. Per esempio

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

o

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

Il livello successivo che interpreta i codici di controllo prima di bash è stty (modifica e stampa le impostazioni del terminale)

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;

vedi stty (1) per i significati di lnexto starte stop.

Vedi anche readline (3) come bash e altri programmi cli GNU usano quella libreria per controllare le linee di input e ovviamente bash (1) / READLINE, la sezione readline della pagina del manuale di bash.

Nota: XYZ (NUM) indica la pagina manuale XYZ della sezione NUM, quindi il risultato di man NUM XYZ.


1
Bash ha un'associazione predefinita per Cs (XOFF), quindi potrebbero averne inserito uno anche per Cq.
Gilles 'SO- smetti di essere malvagio' il

In realtà, per impostazione predefinita, la libreria GNU Readline che Bash usa si lega C-qalla stessa cosa di C-v, un clone della funzione Emacs quoted-insertche è utile per capire i codici di escape generati da chiavi e combinazioni di tasti. Ecco la parte pertinente del manuale di Readline: tiswww.case.edu/php/chet/readline/readline.html#SEC9
ssokolow
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.