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

20

Mi chiedo perché Shift + tasto freccia abbia come risultato una delle lettere A , B , C o D .

Perché non altre lettere? Perché nessuna lettera?

    
posta Dan 23.04.2013 - 19:17

1 risposta

26

Gli emulatori di terminale come gnome-terminal ("Terminale" in Ubuntu) ma anche xterm e urxvt sono denominati "emulatori" perché riproducono il comportamento dei terminali più vecchi che erano l'unica visualizzazione 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: L'usabilità Art of Unix - Interfacce della riga di comando

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

Quando il terminale ha ricevuto ^[[A , non significava "print ^ [[A", ma "l'utente ha premuto il tasto freccia su". "A" qui è totalmente arbitrario: sembra essere la lettera che tutti hanno concordato, perché è ciò che il DEC VT-52 e il suo successore hanno utilizzato il popolare terminale VT-100.

Fonte: DEC VT-52 Maintenance Manual 1976

Questo è ancora il modo in cui gli emulatori di terminali funzionano oggi: in base alla variabile $TERM , un database chiamato terminfo è responsabile di dire quali codici devono essere inviati alla shell (bash, sh, zsh ...), che è quindi responsabile di comprenderli e reagire a loro.

Ora, il codice per Shift + su sembra essere ^[[1;2A : l'emulatore di terminale invia questo codice alla shell, che prova a interpretare ^[[1;2 ma non mostra nulla perché non sa di quella sequenza di escape. Ma A è rimasto e visualizzato.

    
risposta data Jennifer Wilson 23.04.2013 - 21:51

Leggi altre domande sui tag