Hallo,

ich suche nach einem Weg, für eine Ebene eines Tastaturlayoutes die zu 
drückenden Tasten (Modifier) zu identifizieren. Leider kann ich diesen Prozess 
bisher nicht vollständig automatisieren.

Ziel ist es für einen Symbol aus keysymdef.h (Z.B. XK_t, XK_tau ) die 
zu drückende Taste und zu drückenden Modifier auf der Tastatur zu ermitteln.


Bisher gehe ich wie folgt vor:

1. Erzeugung der Tabelle (xmodmap -pk), die jeder Taste (keycode) eine Liste 
von Symbolen (keysym) zuordnet. 

Die Reihenfolge der Spalten unterscheidet sich hier leider bei verschiedenen 
Neo-Versionen. Z.B. (Zeile für die Taste 't')

A) 0x0074 (t)  0x0054 (T)  0x0074 (t)  0x0054 (T)  0x002d (minus)  
   0x07f4 (Greek_tau)  0xffb6 (KP_6) 0xffb6 (KP_6) 0x08ef (partialderivative)

B) 0x0074 (t)  0x0054 (T)  0x002d (minus)  0x07f4 (Greek_tau)
   0xffb6 (KP_6) 0xffb6 (KP_6) 0x08ef (partialderivative)

Mittels dieser Tabelle kann also bestimmt werden, auf welcher Taste und Ebene 
das gewünschte Symbol liegt. Doch es ist nicht klar, welche Tasten gedrückt 
gehalten werden müssen, um diese Ebene zu selektieren.


2. Für jeden Modifier (keysym) kann eine Taste ermittelt werden, die ihn 
auslöst. (xmodmap -pm) Auch diese Werte hängen von der verwendeten Neo-Version 
ab.

Beispielausgabe:
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Shift_L (0x32)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        BadKey (0xcf)
mod3        ISO_Level5_Shift (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce)
mod5        ISO_Level3_Shift (0x33),  ISO_Level3_Shift (0x5c)

Jetzt benötige ich aber noch die Information, welche Modifier-Kombination mit 
welcher Ebene des Tastaturlayouts assoziiert werden muss. Derzeit gebe ich 
die Verbindung manuell vor, aber leider musste ich feststellen, dass ich auf 
drei Systeme jeweils eine andere Konfiguration nutzen musste...


Hat jemand eine Idee, wie die Verbindung zwischen Ebenen und Mod-Tasten 
ermittelt werden kann?



Vielen Dank
Olaf




Antwort per Email an