[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 111.   Personalizzazione della mappa della tastiera

Per configurare la propria tastiera si usa generalmente loadkeys con file di mappa già predisposti; tuttavia può essere utile comprendere come si realizzano questi file per una propria personalizzazione.

All'interno del file sono ammessi i commenti, prefissati con un punto esclamativo (!) oppure con il simbolo #; nello stesso modo sono ignorate le righe vuote e quelle bianche. Le righe che definiscono qualcosa possono essere continuate con una barra obliqua inversa (\) che precede il codice di interruzione di riga.

Possono essere usate diverse definizioni; in particolare quelle descritte nella tabella seguente.

Tabella 111.1. Direttive principali.

Direttiva Descrizione
charset "codifica"
Questa direttiva definisce l'insieme di caratteri utilizzato; generalmente si tratta di iso-8859-1 o di iso-10646-18 (nel secondo caso si fa riferimento a Unicode). Quando si tratta della codifica ISO 8859-1, oppure ISO 10646-18, non è nemmeno necessario inserire questo tipo di dichiarazione nei file. Lo scopo di questa direttiva è di evitare ambiguità, quando un carattere può essere rappresentato con codici differenti a seconda della codifica.
keycode numero_tasto = simbolo simbolo...
Questa definizione attribuisce a un tasto diversi significati, in funzione della combinazione eventuale con altri.
string nome = stringa
strings as usual
Per facilitare la costruzione di un file di mappa del genere, si possono definire alcuni nomi di tasti il cui significato viene chiarito in seguito attraverso questo tipo di dichiarazione. Lo si fa normalmente con i tasti funzionali ([F1], [F2], ecc.). Al posto della dichiarazione esplicita di queste stringhe, si può usare la seconda forma, che richiama automaticamente tutte quelle predefinite.
compose 'x' 'y' to 'z'
compose as usual for iso-8859-1
La direttiva compose consente di stabilire l'uso degli accenti morti, x, da associare a un carattere successivo, y, per generare un carattere composto, z. Utilizzando la seconda forma del modello, si acquisiscono tutte le sequenze predefinite.

A proposito della direttiva charset è bene chiarire che il codice associato ai caratteri è da intendersi come punto di codifica; pertanto, per fare un esempio, non c'è differenza tra il codice generato da una lettera «à» (a minuscola con accento grave) da una codifica ISO 8859-1 a una codifica ISO 10646-18, perché in questa fase non entra in gioco il fatto che nell'adattamento in UTF-8 si utilizzano due byte invece di uno solo.

111.1   Modificatori

I modificatori sono quei tasti che si possono usare per ottenere delle combinazioni. La tabella 111.2 ne mostra l'elenco e il peso.

Tabella 111.2. Elenco dei tasti modificatori e del loro peso.

Modificatore Sigla peso
(nessuno) 0
Maiuscole (tasto sinistro o destro indifferentemente)
Shift
1
Alt destro
AltGr
2
Control (tasto sinistro o destro indifferentemente)
Ctrl
4
Alt sinistro
Alt
8
Maiuscole sinistro
ShiftL
16
Maiuscole destro
ShiftR
32
Control sinistro
CtrlL
64
Control destro
CtrlR
128

I modificatori sono otto, a cui si somma la situazione normale in cui nessun modificatore viene utilizzato. Volendo indicare tutte le combinazioni possibili di modificatori, queste sarebbero 255, ma di solito ci si limita a configurarne solo un sottoinsieme.

Attraverso il numero del peso, si può fare riferimento a un modificatore o a una combinazione di modificatori, in modo molto semplice: sommandone i valori. Per esempio, uno rappresenta Shift, due rappresenta AltGr e tre rappresenta Shift+AltGr. Si osservi comunque che si sta facendo riferimento a nomi che poi devono essere associati alla tastiera reale: si presume che l'associazione avvenga nel modo «corretto», ma occorre sapere a cosa si sta facendo riferimento. In pratica, nulla vieta di dare la funzione di AltGr a un tasto [Win], o [Menù].

111.2   Specificazione di mappa

Quando si specifica la funzione di un tasto attraverso l'istruzione keycode, si indicano una serie di funzioni in sequenza. Il significato di questa sequenza dipende dai tipi di modificatori e dalle loro combinazioni che si intendono utilizzare. Questo viene definito attraverso un'istruzione keymaps iniziale.

keymaps peso[,peso]...

Per esempio, l'istruzione seguente indica l'utilizzo dei pesi 0, 1, 2, 4, 6, 8, 9 e 12:

keymaps 0-2,4,6,8-9,12

Come si vede nell'esempio, si fa riferimento anche a intervalli, quindi, 0-2 rappresenta tutti i valori da zero a due, ovvero, zero, uno e due. La stessa cosa avrebbe potuto essere dichiarata in un modo più esplicito come nell'esempio seguente:

keymaps 0,1,2,4,6,8,9,12

Questi valori indicano che nella mappa definita dalle direttive successive, si fa riferimento ai tasti premuti da soli, in combinazione con i modificatori Shift, AltGr, Ctrl (indifferentemente sinistro o destro), Ctrl+AltGr, Alt, Alt+Shift e Ctrl+Alt. Le istruzioni keycode successive all'istruzione keymaps dell'esempio vengono interpretate di conseguenza. L'esempio seguente dovrebbe chiarirlo:

keycode 26 = egrave  eacute  bracketleft  Escape  VoidSymbol  Meta_bracketleft

In questo caso, premendo il tasto corrispondente alla lettera è, nella tastiera italiana, si ottiene esattamente questa lettera (egrave). In combinazione con:

In tutti i casi rimanenti non si ottiene alcun risultato.

111.3   Istruzione «keycode»

L'istruzione keycode permette di indicare in sequenza il significato di un certo tasto, in funzione dell'eventuale combinazione con i modificatori previsti con l'istruzione keymaps.

Quando si vuole indicare un'azione nulla, si usa il nome VoidSymbol; inoltre, ciò che non viene scritto nella parte finale vale come se fosse sempre VoidSymbol.

Per facilitare l'indicazione del risultato di combinazioni si possono usare dichiarazioni keycode successive, precedute dai nomi dei modificatori coinvolti, che valgono per una singola situazione. L'esempio seguente è identico, per risultato, a quello visto in precedenza; la differenza sta nel fatto che così ci si limita a indicare un'istruzione keycode normale per le situazioni comuni (tasto premuto da solo, oppure in combinazione con il modificatore Shift, o anche AltGr), aggiungendo sotto, eventualmente, le altre combinazioni utili.

keymaps 0,1,2,4,6,8,9,12
...
keycode  26 = egrave           eacute           bracketleft
        control keycode  26 = Escape          
        alt     keycode  26 = Meta_bracketleft

Volendo essere precisi e dettagliati, si può indicare il modificatore plain per fare riferimento alla pressione del tasto senza modificatori. L'esempio appena mostrato si traduce in quello seguente:

keymaps 0,1,2,4,6,8,9,12
...
plain   keycode 26 = egrave
shift   keycode 26 = eacute
altgr   keycode 26 = braceleft
control keycode 26 = Escape          
alt     keycode 26 = Meta_bracketleft

111.3.1   Denominazioni simboliche

Quando si usa la direttiva keycode si fa riferimento ai caratteri e alle funzioni speciali attraverso dei nomi, che eccezionalmente corrisponde alla lettera quando questa nell'ambito di quelle dell'alfabeto inglese, senza accenti. I nomi disponibili si possono consultare nell'elenco che si ottiene con il programma dumpkeys, utilizzato con l'opzione -l:

dumpkeys -l[Invio]

...
Symbols recognized by dumpkeys:
(numeric value, symbol)

0x0000  nul
0x0001  Control_a
0x0002  Control_b
...
0x00fe  thorn
0x00ff  ydiaeresis
0x0100  F1
0x0101  F2
...
0x0112  F19
0x0113  F20
0x0114  Find
0x0115  Insert
0x0116  Remove
...
0x01fe  F245
0x01ff  F246
0x0200  VoidSymbol
0x0201  Return
...
0x0404  dead_diaeresis
0x0405  dead_cedilla
0x0500  Console_1
0x0501  Console_2
...
0x0c06  SCtrlL
0x0c07  SCtrlR

The following synonyms are recognized:

Control_h       for BackSpace
Control_i       for Tab
...
Recognized modifier names and their column numbers:
shift             1
altgr             2
control           4
alt               8
shiftl           16
shiftr           32
ctrll            64
ctrlr           128

Quando si tratta di caratteri tipografici particolari, può capitare di non riconoscere un nome già previsto, oppure questo può mancare del tutto. In quel caso, si può indicare il punto di codifica Unicode, secondo la notazione seguente:

U+hhhh

Per esempio, ecco come potrebbe apparire la definizione relativa al tasto [o], quando non si sa che la chiocciola si identifica con il nome at:

keycode  24 = o
        shift         keycode  22 = O
        altgr         keycode  22 = U+00F6

In pratica, con il modificatore AltGr si intende ottenere il simbolo «@», ma non sapendo come fare, si utilizza la notazione U+00F6.

La notazione attraverso l'indicazione del punto di codifica va bene sempre, anche se si usa una codifica del tipo ISO 8859 (a soli 8 bit).

111.4   Funzionalità speciali

Studiando un file di mappa della tastiera si possono trovare alcune cose interessanti, come la definizione di combinazioni particolari. Gli estratti riportati di seguito provengono dalla mappa italiana normale: /usr/share/keymaps/i386/qwerty/it.kmap. I modificatori utilizzati sono quelli degli esempi precedenti, ovvero: 0, 1, 2, 4, 6, 8, 9 e 12.

keycode  57 = space            space           
        control keycode  57 = nul             
        alt     keycode  57 = Meta_space      
        control alt keycode 57 = Meta_nul

Nell'esempio appena mostrato si nota che la combinazione [Ctrl Spazio] genera un carattere <NUL>.

keycode  59 = F1               F11              Console_13      
        control keycode  59 = F1              
        alt     keycode  59 = Console_1       
        control alt     keycode  59 = Console_1       
keycode  60 = F2               F12              Console_14      
        control keycode  60 = F2              
        alt     keycode  60 = Console_2       
        control alt     keycode  60 = Console_2       
...
string F1 = "\033[[A"
string F2 = "\033[[B"
...
string F11 = "\033[23~"
string F12 = "\033[24~"
...

Quello che appare sopra è la dichiarazione del comportamento dei tasti funzionali. I nomi di questi tasti non sono riconosciuti e quindi si dichiara più avanti la stringa che deve essere generata quando si fa riferimento a questi.

Si può osservare che la combinazione [Maiuscole F1] genera l'equivalente di [F11].

La combinazione [Alt F1] o [Ctrl Alt F1] serve notoriamente per selezionare la prima console virtuale, cosa che viene definita chiaramente con le istruzioni alt keycode 59 = Console_1 e control alt keycode 59 = Console_1. Nello stesso modo si può osservare che la combinazione [AltGr F1] seleziona la tredicesima console virtuale (ammesso che ci sia).

keycode  70 = Scroll_Lock      Show_Memory      Show_Registers  
        control keycode  70 = Show_State      
        alt     keycode  70 = Scroll_Lock     

Da questa dichiarazione, si osserva che la combinazione [Maiuscole BlocScorr] visualizza la situazione dell'uso della memoria, la combinazione [AltGr BlocScorr] mostra la situazione dei registri e la combinazione [Ctrl BlocScorr] mostra lo stato.

L'esempio seguente è tratto da una mappa per una tastiera russa, che prevede i primi due livelli con un alfabeto latino, mentre il terzo livello può essere fissato utilizzando il tasto [Ctrl] destro:

# Russian Cyrillic keyboard.map. "Cyrillic" mode is toggled by
# Right_Ctrl key and shifted by AltGr key.
keymaps 0-4,6,8,10,12
strings as usual
...
                keycode 96 =    KP_Enter        
                keycode 97 =    AltGr_Lock
                keycode 98 =    KP_Divide
...

Si può osservare l'uso della definizione AltGr_Lock per ottenere il passaggio stabile al terzo livello, come se qualcuno tenesse sempre premuto il tasto [AltGr]. Naturalmente, per sbloccare la selezione del terzo livello basta ripremere lo stesso tasto già usato per inserirlo.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome personalizzazione_della_mappa_della_tastiera.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!