2009-10-13 9 views
7

Sto cercando un modo per aggiungere un altro "layout" alla mia tastiera. Sto già utilizzando un layout che utilizza altgr per le lettere dell'alfabeto locale. Quello che vorrei aggiungere è una tastiera specchiata sul lato destro attivata con il blocco maiuscole (una descritta in http://xkcd.com/mirrorboard.xkb)Rimappatura tastiera con più modificatori

Sfortunatamente lo ISO_LEVEL3_SHIFT è già occupato dall'alfabeto locale. (AFAIK) Se uso mode_shift per cambiare gruppo, non posso più usare più di 2 livelli in un gruppo. C'è un modo per creare gruppi diversi sia per altgr che per mode_shift?

+0

Questa domanda è fondamentalmente sulla compilazione di una mappa di tasti in un modo piuttosto insolito che richiede hack di basso livello. Ho pensato di metterlo su superuser, ma non otterrà nessuna risposta lì. È più vicino alla programmazione (sì - questo è fondamentalmente programmando xkb) che al semplice settaggio delle impostazioni (che è ciò in cui specialista è superuser). – viraptor

risposta

11

Per ogni definizione di codice tasto è possibile avere fino a otto tasti. Questi sono organizzati a coppie in quattro gruppi. Esiste una famiglia di tastiere ISO_Next_Group, ISO_Prev_Group, ISO_First_Group e ISO_Last_Group che, quando premuti, consentono di scorrere l'output del keysym colpendo il tasto tra i gruppi keysym. Queste chiavi sono il modo in cui ottieni più layout.

Ad esempio, supponendo ISO_Next_Group è stato legato ad un codice prodotto e assegnato a un modificatore, per questa definizione:

keycode 53 = x X Greek_xi Greek_XI multiply U2297 U24E7 U24CD

premendo il tasto della tastiera con l'etichetta “X” a tipi out “x” . Dopo aver premuto il tasto ISO_Next_Group, ottengo "ξ". Premendolo di nuovo, ottengo "×". Premendolo di nuovo, "ⓧ". Alla fine, premendolo una quarta volta le cose tornano alla normalità.


Avere trascorrere alcuni giorni (a causa Xkb¹ ha documentazione orribile; finalmente trovato una guida bene here), è possibile creare un file di definizione il simbolo con le voci in questo modo:

 
    key <SPCE> { 
// Level I  II  III IV 
     [ space, space, U2395, U2592 ], // Group 1 
     [ U2423, emspace, U2420, hairspace ] // Group 2 
    }; 

    key <RALT> { 
     [ Mode_switch, Mode_switch ] 
    }; 

    key <RCTL> { 
     [ ISO_Level3_Shift, ISO_Level3_Shift ] 
    }; 

Le parentesi racchiudono un unico gruppo. Normalmente, il primo gruppo è attivo. Il gruppo può essere temporaneamente incrementato di uno con ISO_Group_Shift, a.k.a Mode_switch. All'interno di un gruppo, i simboli emessi sono definiti in livelli crescenti. Il livello I è con un semplice tasto di pressione. Shift aggiunge uno al livello corrente. ISO_Level3_Shift imposta il livello su III.

L'esempio mappe sette simboli al barra spazio più vari tasti shift tale che:

spazio ⟨⟩ U + 0020 SPACE
Shift + spazio ⟨⟩ U + 0020 SPACE
R. Alt + spazio ⟨␣⟩ U + 2423 APRA LA CASELLA
R. Alt + Maiusc + spazio ⟨⟩ U + 2003 EM SPACE
R. Ctl + spazio ⟨⎕⟩ U + 2395 Simbolo di funzione APL
R. Ctl + Shift + spazio ⟨▒⟩ U + 2592 OMBRA MEDIA
R. Alt + R. Ctl. + Spazio ⟨␠⟩ U + 2420 SIMBOLO PER SPAZIO
R. Alt + R. Ctl.+ Maiusc + spazio ⟨⟩ U + 200A CAPELLI SPACE

C'è anche una chiave ISO_Level5_Shift per il livello V. Così si può avere almeno sei simboli per un livello. Con il tasto shift della modalità questo implica che puoi configurare la tua tastiera per digitare circa 1.200 simboli distinti, ma a quel punto tenere premuto tanti modificatori probabilmente metterà a dura prova alcuni tasti.

P.S. I nomi di tutti i simboli nominati sono memorizzati in /usr/include/X11/keysymdef.h.


¹ Risulta che xmodmap (1) è buggy e obsoleto.

+0

Mi chiedo solo: c'è un modo per fare in modo che qualche chiave sia un modificatore in questo modo? In modo che faccia ISO_Next_Group alla stampa e ISO_Prev_Group alla release? – viraptor

Problemi correlati