Il mar, 2002-12-31 alle 16:53, ferdyz ha scritto: > come faccio a fare il contrario, ovvero come faccio > a sapere a quale tasto corrisponde "\eOE" ? Dovrebbe equivalere alla sequenza "M-O E" (leggi: Meta+Shift+o seguito da Shift+E). Probabilmente è solo una delle possibilità, e su alcune tastiere probabilmente c'è un tasto che, quando premuto, genera quella sequenza di caratteri. L'idea è che (come in Emacs) le sequenze "ESC <tasto>" (premuti in successione) sono equivalenti a "META+<tasto>" (premuti contemporaneamente). La cosa era a beneficio di chi aveva terminali ASCII (solo codici ASCII, quindi solo 7 bit per carattere) sprovvisti di un tasto META. Ad esempio, se fai bind '"\el": display-shell-version' vedrai che puoi accedere alla cosa sia tramite M-l che facendo "ESC l". > e per esempio per fare <ctrl-freccia_su> va bene > "\M-C-[A" ? "Control+Up" te lo scordi, semplicemente perché non esiste come carattere diverso dal solo "Up", non nell'ambito di un emulatore terminale come xterm o simili: infatti, in entrambi i casi, l'emulatore terminale spedisce alla shell la sequenza "ESC [ A". Se vuoi, puoi provare a digitarla velocemente (ovvero: "ESC [ Shift+a") e a vedere che ha esattamente lo stesso effetto della freccia in su. Quello che voglio dire è che gli emulatori di terminale non fanno distinzioni per tutte le possibili combinazioni di tasti e di modificatori. In breve: 1) C-a ... C-z si mappano sui caratteri ASCII 1 ... 26. 2) ESC è il carattere ASCII con codice 27. Equivalente a C-[ 3) C-<spazio> viene mappato nel carattere ASCII 0, ed è sostanzialmente equivalente a un C-@ 4) <backspace> viene mappato o nel carattere ASCII 8 (C-h) o nel carattere ASCII 127 (a seconda della configurazione dell'emulatore del terminale). 5) <invio> viene reso o solo come un newline (ASCII 10) o come la sequenza carriage-return newline (13 10), a seconda di come è impostato l'emulatore del terminale E di come è impostata nel kernel la linea di comunicazione del terminale (man stty per maggiori info). 6) <tab> viene reso con il carattere ASCII 9 (C-i). 7) I tasti cursore vengono resi con le sequenze "ESC [ A" ... "ESC [ D" (A=up,B=down,C=right,D=left) 8) I primi quattro tasti funzione (non shiftati) vengono solitamente resi con le sequenze "ESC [ P"... "ESC [ S" 9) I rimanenti tasti funzione vengono resi con "ESC [ <numero> ~", ed esistono anche nella variante shiftata (fino a F20), per un totale di venti tasti funzione. Shift+F11 e Shift+F12 non sono distinguibili da F11 e F12. 10) Home, End, PgUp, PgDown, Insert e Delete vengono resi con altre sequenze "ESC [ <numero> ~" e "ESC [ <lettere maiuscole>" 11) Meta+<singolo carattere ASCII> viene reso come "ESC <carattere>". A dire il vero, esiste una modalità in cui Meta+<carattere ASCII> viene reso come il carattere stesso con però l'ottavo bit impostato a uno, ma chiaramente la cosa crea problemi nel momento in cui si vanno ad usare caratteri al di fuori del set ASCII (le accentate iso-latin-1 e 15, ad esempio). Capito il perchè dell'equivalenza? In definitiva: puoi distinguere "C-a" da "M-C-a", ma non puoi distinguere "C-a" da "C-A", o "Up" da "M-Up" o da "C-Up", quantomeno non in un emulatore di terminale VT102/VT220. Il perchè di tutto questo casino? Perchè liberarsi dal proprio passato è, detto in due parole, sorprendentemente difficile. -- | \ \ | ___|_ |_ | ianezz a casa sua... :-) | _ \ | \ | _| / / Visita il LinuxTrent a _|_/ _\_| _|____|___|___| http://www.linuxtrent.it -- Per iscriversi (o disiscriversi), basta spedire un messaggio con SOGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx