From: luik@isa.de (Andreas Luik)
Subject: Re: Xmodmap Problem!
Organization: ISA GmbH, Stuttgart, FRG
Date: Mon, 14 Sep 1992 22:26:20 GMT

In article <18pmc9INN2b8@alcbase.gun.de> harry@alcbase.gun.de (Harry Forker) writes:
   Ich will bestimmten Tasten in Verbindung mit der ALT-Taste
   Sonderzeichen zuweisen. Die Alt-Tasten sind als Modifier 1
   eingetragen (Beide Alt-Tasten liefern den gleichen Keycode 0x40
   laut xev):

   [/home/harry]$ xmodmap
   xmodmap:  up to 2 keys per modifier, (keycodes in parentheses):

   shift       Shift_L (0x32),  Shift_R (0x3e)
   lock        Caps_Lock (0x42)
   control     Control_L (0x25),  Control_R (0x6d)
   mod1        Alt_L (0x40)
   mod2      
   mod3        Scroll_Lock (0x4e)
   mod4      
   mod5        Mode_switch (0x71)

   Wenn ich einem Keycode neu belege:

   keycode  12 = 3                 section                 threesuperior

   dann gilt der erste Parameter ohne Shift, der zweite mit Shift und weitere
   Parameter? 
   Haben die ueberhaupt ne Bedeutung? Die Manpage zu xmodmap schweigt sich
   aus.
   Threesuperior erreiche ich so jedenfalls mit keiner Tastenkombination.
   Geht das ueberhaupt mit der Alt-Taste Sonderzeichen anzusprechen?
   Waere schoen wenn mir jemand weiterhelfen koennte.

Das gehoerte schon fast in ein FAQ, leider wird das ganze nur im "X
Window System Protocol", Kapitel 5: Keyboards erklaert, und das hat
natuerlich noch niemand gelesen :-) Nachfolgendes gilt also fuer ALLE
X11-Server (sonst duerfen sie sich nicht so nennen :-)

Das KEYCODE zu KeySym mapping wird im Server durch eine Tabelle
bewerkstelligt. Der Index ist der HW-abhaengige KEYCODE (von 8 bis
255). Jede Zeile der Tabelle enthaelt eine Liste von KeySyms, wobei
folgende Faelle auftreten koennen (wobei NoSymbol-Eintraege am Ende
einer Liste ignoriert werden):

1. Liste: K		wird interpretiert als: K NoSymbol K NoSymbol
2. Liste: K1 K2		wird interpretiert als: K1 K2 K1 K2
3. Liste: K1 K2 K3	wird interpretiert als: K1 K2 K3 NoSymbol
4. Liste: K1 K2 K3 K4

Die ersten 4 Eintraege einer Liste werden aufgespalten in Gruppe 1
(erster und zweiter KeySym) und Gruppe 2 (dritter und vierter KeySym).
Ist innerhalb einer Gruppe der zweite Eintrag NoSymbol, so gilt:
1. wenn der erste KeySym alphabetisch ist, wird fuer den ersten KeySym
der Kleinbuchstabe und fuer den zweiten der entsprechende
Grossbuchstabe genommen.
2. sonst wird fuer den zweiten KeySym der Wert des ersten genommen.

Innerhalb einer Gruppe wird der erste KeySym verwendet, wenn weder die
Shift- noch die Lock-Mask gesetzt sind, sonst der zweite KeySym [Anm.:
tatsaechlich wird noch zwischen Shift-Lock und Caps-Lock
unterschieden, wie das zu interpretieren ist, ist aber intuitiv klar.]

Der Standard definiert dann die Behandlung der ersten und zweiten
Gruppe (weitere Gruppen muessen von der Applikation behandelt werden):

Ist der "Group-Modifier" aus, wird Gruppe 1 verwendet, ist der
"Group-Modifier" an, wird Gruppe 2 verwendet. Der "Group-Modifier" ist
derjenige, der in der Modifier-Liste den KeySym-Wert "Mode_switch"
hat.

Anders gesagt: Um die zweite Gruppe zu verwenden, muss:
1. Das KeySym "Mode_switch" an irgendein (!) Keycode gebunden werden.
Der Keycode muss von der Tastatur nicht geliefert werden.
2. Der KeySym "Mode_switch" muss in irgendeiner Modifier-Liste
auftauchen.
3. In dieser Modifier-Liste muessen diejenigen Keys eingetragen sein,
mit denen der Benutzer umschalten koenne soll (z.B. Alt_L).


In deinem Fall musst du also nur noch sicherstellen, dass "Alt_L" und
"Mode_switch" in der gleichen Modifier-Liste (entweder mod1 oder mod5)
eingetragen sind:

    xmodmap -
    add mod1 = Mode_switch
    ^D

--
Andreas Luik                E-Mail: luik@isa.de
(postmaster@isa.de)         UUCP:   ...!{uunet!unido,pyramid}!isaak!luik
Newsgroups: de.comp.os.unix,bln.comp.unix