[Linuxtrent] Re: bash & history

  • From: Matteo Ianeselli <m.ianeselli@xxxxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: 01 Jan 2003 22:28:04 +0100

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


Other related posts: