I terminali erano dispositivi hardware costituiti da una tastiera e un dispositivo di output (inizialmente una stampante su carta, in seguito un monitor CRT). Un computer di grandi dimensioni potrebbe avere diversi terminali remoti collegati ad esso. Ciascun terminale avrebbe un protocollo per comunicare in modo efficiente con il computer, per i terminali basati su CRT questo include avere speciali "sequenze di controllo" per cambiare posizione del cursore, cancellare parti della linea/schermo corrente, passare a una modalità a schermo intero alternato,. ..
Un emulatore di terminale è un'applicazione che emula uno di quei vecchi terminali. Permette di fare funzioni come il posizionamento del cursore, l'impostazione di colori di primo piano e di sfondo, ... Gli emulatori di terminali cercano di emulare un protocollo specifico, ma ognuno ha il proprio set di stranezze e deviazioni.
I sistemi Unix dispongono di database che descrivono terminali ed emulatori di terminale, pertanto le applicazioni vengono sottratte dal particolare terminale (o emulatore di terminale) in uso. Un database precedente è termcap(5)
, mentre terminfo(5)
è un database più recente. Questi database consentono alle applicazioni di richiedere le funzionalità del terminale in uso. Le funzionalità possono essere booleane, capacità numeriche o anche capacità di stringa, ad esempio: se uno specifico tipo di terminale ha/supporta una chiave F12, avrà una capacità "key_f12" (nome terminfo lungo), "kf12" (nome terminfo breve), "F2" (nome termcap) che descrive la stringa che la chiave produce. Provalo con: tput kf12 | od -tx1
.
Dal momento che la programmazione direttamente con funzionalità può essere ingombrante, le applicazioni utilizzano in genere una libreria di livello superiore come maledizioni/ncurses, slang, ecc ...
C'è una variabile d'ambiente speciale chiamato TERM
che racconta le applicazioni che tipo terminale stanno parlando. Questa variabile deve essere impostata sul tipo di terminale esatto se esiste nel database, per ottenere i migliori risultati. Questo dice all'applicazione quali protocolli e deviazioni del protocollo precisi capiscono il terminale. La modifica della variabile TERM
fa non cambia il tipo di terminale, cambia semplicemente il tipo di terminale con cui l'applicazione pensa di parlare.
Tutto ciò detto, Ctrl+arrow
è un comportamento xterm (dipendente da un'opzione di configurazione) che non viene riflessa affatto nei database terminfo/termcap, quindi la maggior parte delle applicazioni non ne sarà a conoscenza. In entrambi i casi, l'emulatore di terminale (nel tuo caso pyte
) lo supporta oppure no.
Supponendo che l'applicazione principale è bash
o qualche altra applicazione che utilizza la libreria readline
, si può farla franca con l'utilizzo di readline backward-word
(Meta-b/Alt-b/ESC b per default, configurabile in inputrc
), invece.
Una tipica configurazione di readline predefinita (bash usa readline) ha 'Alt-B' per ** backward-word **. terminfo non ha nemmeno una voce per 'Ctrl- ←'. – ninjalj
Ma funziona su console xterm ... Potresti dirci di più su terminfo, preferibilmente in una risposta? – johndodo
La console Linux non è nemmeno * vicino * a vt220. È un sottoinsieme di (meno capace) vt100. Ciascuna delle risposte a questa domanda ha almeno un errore. –