Qual è la storia dei tasti Maiusc + Freccia nel terminale?


21

Mi chiedo il motivo per cui Shift+ Arrow Keyrisultato in una delle zone A, B, Co Dlettere.

Perché non altre lettere? Perché una lettera a tutti?


Intrigante: D La mia scommessa? Ha a che fare con i giochi basati sul testo: D
Rinzwind,

2
Solo un'osservazione: in tty Shift + Arrow Keysnon fa nulla.
Radu Rădeanu,

@Rinzwind: :)))
Radu Rădeanu,

1
Ho posto questa domanda su Unix / Linux Stack Exchange. Ci sono alcune risposte utili. Forse vuoi guardarli. unix.stackexchange.com/questions/73669/…
yfklon

Risposte:


27

Emulatori di terminale come gnome-terminal("Terminale" in Ubuntu) ma anche xterme urxvtsono chiamati "emulatori" perché riproducono il comportamento di terminali più vecchi che erano l'unico display di un computer. Tali terminali comunicavano con il computer con un protocollo testuale e inizialmente erano progettati per ricevere solo testo. Rapidamente, era necessario un maggiore controllo: come cancellare una linea? Usa i colori? O cambiare la posizione del cursore?

Terminale VT-100 Fonte: The Art of Unix Usability - Command-Interfaces

Le sequenze di escape sono state progettate per ogni terminale per fare queste cose. Essi sono chiamati fuga perché iniziano con il codice di escape ASCII: 33. Non c'è modo di stampare direttamente un personaggio del genere, il che lo rende adatto a tali sequenze. Quando vogliamo ancora visualizzare questo carattere, ^[[viene utilizzato e questo è ciò che userò nelle mie spiegazioni.

Quando il terminale ha ricevuto ^[[A, non significava "stampa ^ [[A", ma "l'utente ha premuto il tasto freccia su". "A" qui è del tutto arbitrario: capita solo che sia la lettera concordata da tutti, perché è quello che hanno utilizzato il DEC VT-52 e il suo successore il popolare terminale VT-100.

DEC VT-52 Manutenzione Manuel 1976

Fonte: DEC VT-52 Manuale di manutenzione 1976

Questo è ancora il modo in cui funzionano oggi gli emulatori di terminali: a seconda della $TERMvariabile, un database chiamato terminfoè responsabile per dire quali codici dovrebbero essere inviati alla shell (bash, sh, zsh ...), che è quindi responsabile della loro comprensione e reazione a loro.

Ora, il codice per Shift+ upsembra essere ^[[1;2A: l'emulatore di terminale invia questo codice alla shell, che cerca di interpretare ^[[1;2ma non mostra nulla perché non conosce quella sequenza di escape. Ma Aviene lasciato e visualizzato.


5
Wow, interessante. Ora tutto ciò ha ^[[Asenso quando faccio clic sui tasti freccia mentre un processo è in esecuzione sul terminale.
Dan,

4
Puoi premere CTRL-v poco prima di premere MAIUSC-UpArrow per "visualizzare" le sequenze di escape in forma grezza. A meno che non siano state modificate le impostazioni predefinite, ESC dovrebbe apparire sullo schermo del terminale come ^ [
ari

@arielf Puoi anche eseguire cat >/dev/nullquindi digitare e premere Ctrl + C (o Invio quindi Ctrl + D) al termine.
wjandrea,
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.