5th value in xmodmap (was: ctrl-alt-2 as at (@))

Ingo Krabbe ikrabbe.ask at gmail.com
Sun Jun 7 07:36:44 PDT 2015


I just found one other useful addition to my study below is that the ISO_Level3 is part of the ISO 9995 standard: https://en.wikipedia.org/wiki/ISO/IEC_9995

> My researches had led me to the statements, that the way xmodmap specifies the keycode and
> modifier combinations isn't flexible enough to describe modern Keyboards and the symbols that
> are produced from them.
> 
> I assume its the "XKEYBOARD" X Server Extension that configures the keyboard through xkb files,
> that should live somewhere near /usr/share/X11/xkb (system dependent).
> 
> To view your current configuration the command
> 
> 	xkbcomp -xkb :0 - # produces a lot of output
> 
> . The files that affect this configuration can be found if you check the output of
> 
> 	setxkbmap -print
> 
> . For example on my system that is
> 
> 	xkb_keymap {
> 		xkb_keycodes  { include "evdev+aliases(qwertz)"	};
> 		xkb_types	 { include "complete"	};
> 		xkb_compat	{ include "complete"	};
> 		xkb_symbols   { include "pc+de(nodeadkeys)+inet(evdev)"	};
> 		xkb_geometry  { include "pc(pc104)"	};
> 	};
> 
> . When I want to find the produced symbols for that configuration I have to read the files
> "symbols/pc", "symbols/de" and "symbols/inet". From the above output I can search the line
> starting with 
> 
> 	xkb_symbols "pc+de(nodeadkeys)+inet(evdev)"
> 
> . Each key on the keyboard is configured in such structure similar to
> 
> 	key <AD01> {
> 		type= "FOUR_LEVEL_SEMIALPHABETIC",
> 		symbols[Group1]= [			   q,			   Q,			  at,	 Greek_OMEGA ]
> 	};
> 
> . The term "<AD01>" comes from the xkb_geometry files and is evaluated as
> 
> 	<AD01> = 24;
> 
> here, so that is for keycode 24.
> 
> The interesting thing is the "type" field, that comes from the "compat/complete" file
> here and contains the structure
> 
> 	type "FOUR_LEVEL_SEMIALPHABETIC" {
> 		modifiers= Shift+Lock+LevelThree;
> 		map[Shift]= Level2;
> 		map[Lock]= Level2;
> 		map[LevelThree]= Level3;
> 		map[Shift+LevelThree]= Level4;
> 		map[Lock+LevelThree]= Level3;
> 		preserve[Lock+LevelThree]= Lock;
> 		map[Shift+Lock+LevelThree]= Level4;
> 		preserve[Shift+Lock+LevelThree]= Lock;
> 		level_name[Level1]= "Base";
> 		level_name[Level2]= "Shift";
> 		level_name[Level3]= "Alt Base";
> 		level_name[Level4]= "Shift Alt";
> 	};
> 
> . Don't let be confused from the "level_name" Alt, that contains no or even misleading information.
> We need to search for the term "LevelThree", that is overdefined as
> 
> 	interpret ISO_Level3_Shift+AnyOf(all) {
> 		virtualModifier= LevelThree;
> 		useModMapMods=level1;
> 		action= SetMods(modifiers=LevelThree,clearLocks);
> 	};
> 	interpret ISO_Level3_Shift+AnyOfOrNone(all) {
> 		action= SetMods(modifiers=LevelThree,clearLocks);
> 	};
> 
> and "ISO_Level3_Shift" is
> 
> 	<LVL3> = 92;
> 	key <LVL3> {
> 		type= "ONE_LEVEL",
> 		symbols[Group1]= [ ISO_Level3_Shift ]
> 	};
> 
> . I haven't found why my keyboard produces keycode 92 for AltGr, though the layout
> uses "<RALT> = 108;" so it should produce 108.
> 
> I leave that last question for anyone who knows even more.
> 
> After all I would say that the xkb configuration is too complex and bad documented, but
> understandable in the end.
> 
> I would recommend to forget about xmodmap and use xkbcomp(1) and setxkbmap(1) to
> temporarily modify the produced symbols. You can define more than FOUR_LEVEL symbols. I found
> definitions with up to EIGHT_LEVEL types. Can you define even more?
> 
> Another left-over question is: Is there a default or configured "system directory" to overwrite
> the "installation directory" settings in "/usr/share/X11/xkb", such as "/etc/X11/xkb"?
> 
> Regards,
> 
> Ingo Krabbe
> 
> 
>> Regarding the ayer's discussion, it pop'ed up a small question re/ xmodmap;
>> 
>> if I do:
>> 
>> $ xmodmap -pke | fgrep ' 24 ='
>> keycode  24 = q Q q Q at Greek_OMEGA at Greek_OMEGA
>> 
>> I see that the at-sign in my environment is assigned as the 5th keysym
>> to the keycode 24 and Alt-gr q gives @, even more Alt-gr Shift q gives
>> the Greek_OMEGA: ΩΩΩΩΩΩΩ (perhaps you need an UTF-8 terminal to see it
>> correctly). So far so good. But why the man page of xmodmap(1) says:
>> 
>>		keycode NUMBER = KEYSYMNAME ...
>>				The list of keysyms is assigned to the indicated keycode (which
>>				may be specified in decimal, hex or octal and can be determined
>>				by running the xev program).  Up to eight keysyms may be
>>				attached to a key, however the last four are not used in any
>>				major X server implementation.  The first keysym is used when
>>				no modifier key is pressed in conjunction with this key, the
>>				second with Shift, the third when the Mode_switch key is used
>>				with this key and the fourth when both the Mode_switch and
>>				Shift keys are used.
>> 
>> i.e. it says that four last values are unused? This is on my system with
>> xorg-7.7 on FreeBSD 11-CURRENT.
>> 
>> Thanks
>> 
>> 	matthias
>> -- 
>> Matthias Apitz, guru at unixarea.de, http://www.unixarea.de/ +49-170-4527211	+49-176-38902045
>> "Wenn der Mensch von den Umständen gebildet wird, so muß man die Umstände menschlich bilden."
>> "Si el hombre es formado por las circunstancias entonces es necesario formar humanamente
>> las circunstancias", Karl Marx in Die heilige Familie / La sagrada familia (MEW 2, 138)
>> _______________________________________________
>> xorg at lists.x.org: X.Org support
>> Archives: http://lists.freedesktop.org/archives/xorg
>> Info: http://lists.x.org/mailman/listinfo/xorg
>> Your subscription address: %(user_address)s
> 
> 
> _______________________________________________
> xorg at lists.x.org: X.Org support
> Archives: http://lists.freedesktop.org/archives/xorg
> Info: http://lists.x.org/mailman/listinfo/xorg
> Your subscription address: %(user_address)s




More information about the xorg mailing list