Cos'è esattamente Ctrl + x su un terminale Linux?
(tl; dr: lunga indagine. ordina le domande proprio alla fine.)
Ho appena notato che quando premo super+ alcune lettere (ad esempio command + n, o windowsKey + a, ecc.), Ottengo un elenco del mio file hosts in un formato strano e una nuova riga con due lettere.
Per esempio:
user@host $ <here i press Super+n>
::1 localhost test.com
test2.com test3.com
user@host $sn
se avvio il mio editor di testo e premo gli stessi tasti, vedo: @sne nient'altro.
$ hexdump x
0000000 7340 0a6e
0000004
il che non sembra corretto, poiché non accadrebbe nulla se fosse quello che stava inviando la combinazione di tasti. Quindi devono mancare informazioni. Proviamo qualcos'altro
$ cat `tty` | hexdump
^X@sn
0000000 4018 6e73 000a
0000005
Immagino che 000asia la conseguenza del fatto che devo inserire una nuova riga e premere ctrl + D per lasciare la tty e consentire il reindirizzamento a hexdump. Quindi ignoriamolo.
Sono rimasto con il resto dei valori esadecimali, che sarebbero nell'ordine corretto:
18: CAN cancel
40: @
73: s
6E: n
Non sono riuscito a trovare cosa fa CAN char. non è elencato sustty -a
$ stty -a
speed 38400 baud; rows 33; columns 151; line = 0;
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; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
Non c'è da nessuna ^Xparte. Ma è stato bello catmostrarlo mappato come tale, altrimenti sarei molto perso.
Wikipedia sul carattere di controllo dell'annullamento non spiega cosa sta succedendo. Ma conferma la ^Xmappatura.
Ora che sappiamo che CAN è ^X, posso digitare: ^X(che lascia il terminale in uno stato strano, senza eco, molto simile a START, che stty mostra corretto come ^Q), e poi premendo @mostra lo stesso elenco di host di prima!
OK, quindi ^Xpotrebbe essere una caratteristica di qualcosa oltre al terminale. Questo lascia Bash. che mi ha portato a questa risposta (che ironicamente indica informazioni cancellate da wikipedia e non è la risposta scelta). Il manuale di bash mostra ^X(con la notazione C-x), è usato ovunque:
C-x @è usato per possibili-hostname-completions (Cx @)
Non ha nulla a che fare con Annulla il carattere di controllo, ma se sttynon sa che questo carattere è ^ X, cosa fa la mappatura? cioè, se ^V ^Xdigito ottengo il carattere 0x18.
Quindi l'intera indagine mi lascia con alcune domande:
Cosa è responsabile del carattere Control+ x= cancel (ascii 0x18) che mappano il terminale? perché non è elencato su
stty -a? Ma locatsa, come? Perché posso digitare Annulla carattere con^V ^X?perché premendo super + alcune lettere risultano
^X@s+ lettera? (questa è l'unica parte che accade solo sulla konsole di KDE, tutto il resto funziona anche su xterm. Non ho alcun tasto di scelta rapida speciale configurato da nessuna parte) (modifica: domanda più dettagliata qui )
Risposte
Come dici tu, C-x @è usato per possibili completamenti-hostname. Se lo cerchi nel link del manuale di bash che hai fornito, è nella sezione "Letting Readline Type For You".
Readline è una libreria che consente la modifica della riga e altre cose come il completamento con tabulazioni. È usato in bash, ma anche in altri programmi.
Quindi readline all'interno di bash, con una configurazione particolare per bash, è responsabile della visualizzazione dell'elenco degli host. Questo non ha nulla a che fare con stty, che fa parte delle impostazioni di tty, in una parte di unix che è arrivata molto prima della libreria readline.
L'interpretazione delle impostazioni di tty avviene molto prima che readline ne rilevi una.
cat non "sa" niente di tutto questo.
Per quanto riguarda il motivo per cui Superinsieme ad altri tasti producono questa sequenza: sul mio sistema non lo fa, e non ho idea del perché lo faccia sul tuo sistema. Il primo posto in cui guarderei è il tuo emulatore di terminale (non hai detto quale usi, io uso xterm). Il secondo posto è il tuo desktop manager / window manager.