xmodmap a ISO_Prev_Group a ISO_Next_Group (LONG)

Jindrich Makovicka jmakovicka_jr na volny.cz
Středa Srpen 30 19:10:59 CEST 2000


Hi!

Zkousel jsem metodou pokus-omyl laborovat s XKB, specielne s 
definicemi dalsich grup. Nasledujici definice obsahuji 4 grupy, mezi 
kterymi se rotuje pomoci ScrollLocku a aktivni grupa se indikuje 
ledkama pro Caps a Scroll lock binarne. Jako mode switch o jednu, dve 
nebo 3 grupy funguji AltGr, pravy Ctrl a (win)Menu.

Pokud chcete, aby ISO_(Next|Prev)_Group rotovaly o dve grupy misto o 
jednu, tak do compat pridejte jeste

    interpret ISO_Next_Group {
        useModMapMods= level1;
        virtualModifier= AltGr;
        action= LockGroup(group=+2);
    };

    interpret ISO_Prev_Group {
        useModMapMods= level1;
        virtualModifier= AltGr;
        action= LockGroup(group=-2);
    };

Nebo muzete temhle symbolum nechat puvodni vyznam, v XKeysymDB 
definovat (viz nize) symbol ISO_*_Group2 (predtim se podivejte do 
include/X11/keysymdef.h a dejte si pozor na pripadne konflikty) a 
napsat

	interpret ISO_Next_Group2
	... (jako vyse)
	interpret ISO_Prev_Group2
	... (napodobne)

Potom budou ISO_*_Group rotovat o jednu grupu a ISO_*_Group2 o dve.

--- 8< ----------------------------------------------------- >8 ---
xkb/compat/space_cadet:

// This is a "default" compatibility with a small modification:
// "Scroll Lock" & "Caps Lock" LEDs now show the active keyboard group
default xkb_compatibility "space_cadet"  {
    include "basic"
    augment "mousekeys"
    augment "accessx(basic)"
    augment "misc"
    augment "iso9995"
    augment "japan"
    virtual_modifiers AltGr,RightCtrl,Menu;
    group 3 = RightCtrl;
    group 4 = Menu;
    interpret Mode_switch {
        useModMapMods= level1;
        virtualModifier= AltGr;
        action= SetGroup(group=2);
    };
    interpret Mode_switch2 {
        useModMapMods= level1;
        virtualModifier= RightCtrl;
        action= SetGroup(group=3);
    };
    interpret Mode_switch3 {
        useModMapMods= level1;
        virtualModifier= Menu;
        action= SetGroup(group=4);
    };
    // Yeah ... now Caps Lock & Scroll Lock LEDs display
    // the selected group in binary ...
    indicator "Scroll Lock" {
        allowExplicit;
        groups= Group2+Group4;
    };
    indicator "Caps Lock" {
        allowExplicit;
        groups= Group3+Group4;
    };
};

--- 8< ----------------------------------------------------- >8 ---
xkb/symbols/czskx: (upraveny czsk, pouze zkouska)

					...

xkb_symbols "us_cz_prog" {
    Name[Group1] = "US/ASCII";
    Name[Group2] = "Czech";
    Name[Group3] = "Datel";
    Name[Group4] = "Datel2";

    include "czskx(def_basic)"
    include "czskx(def_qwerty)"
    include "czskx(def_us_cz_prog)"
};

                   ...

    key <AD01> {	[	  q,	Q 		],
                        [	  q,	Q 		],
                        [	  z,	Z 		],
                        [	  a,	A 		]       
			    };

                   ...

    key <MENU> {	[	Mode_switch3, Multi_key		] };

				   ...

    modifier_map Mod3   { Mode_switch, Mode_switch2, Mode_switch3 };

					...
    key <RALT> {        [ Mode_switch,  Multi_key       	]       };
    key <RCTL> {        [ Mode_switch2, Multi_key       	]       };

					...

--- 8< ----------------------------------------------------- >8 ---
do XKeysymDB se prida na konec 


Mode_switch2		:77FD
Mode_switch3		:77FC

nebo jeste

ISO_Next_Group2		:neco
ISO_Prev_Group2		:neco_jineho

--- 8< ----------------------------------------------------- >8 ---

V XF86Config se zmeni XkbCompat a XkbKeymap:

XkbKeymap "czskx(us_cz_prog)"
XkbCompat "space_cadet"

--
Jindrich Makovicka


Další informace o konferenci Linux