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?
Shift + Arrow Keysnon fa nulla.
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?
Shift + Arrow Keysnon fa nulla.
Risposte:
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?
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.

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.
^[[Asenso quando faccio clic sui tasti freccia mentre un processo è in esecuzione sul terminale.
cat >/dev/nullquindi digitare e premere Ctrl + C (o Invio quindi Ctrl + D) al termine.