// $XKeyboardConfig$
// $Xorg: group,v 1.3 2000/08/17 19:54:43 cpqbld Exp $
// using the group(switch) map, the right alt key temporarily chooses 
// the second keyboard group (until it is released).
//
// $XFree86: xc/programs/xkbcomp/symbols/group,v 3.9 2003/12/30 13:26:25 pascal Exp $
partial modifier_keys 
xkb_symbols "switch" {
    key <RALT>	{ 	
	symbols[Group1]= [	Mode_switch, Multi_key 	],
	virtualMods= AltGr
    };
};

// using the group(lswitch) map, the left alt key temporarily chooses
// the second keyboard group (until it is released).
//
partial modifier_keys 
xkb_symbols "lswitch" {
    key <LALT>	{ 	
	symbols[Group1]= [	Mode_switch, Multi_key 	],
	virtualMods= AltGr
    };
};


// using the group(win_switch) map, both Windows'logo keys temporarily
// choose the second keyboard group (until release).  If you use this
// map, you would declare you keyboard as pc101 or pc102 instead of
// pc104 or pc105.
partial modifier_keys
xkb_symbols "win_switch" {
    include "group(lwin_switch)"
    include "group(rwin_switch)"
};

// using the group(lwin_switch) map, the left Windows' logo key
// temporarily chooses the second keyboard group (until it is
// released).  If you use this map, you would declare you keyboard as
// pc101 or pc102 instead of pc104 or pc105.
partial modifier_keys
xkb_symbols "lwin_switch" {
  key <LWIN> {
    symbols[Group1] = [ Mode_switch, Multi_key ],
    virtualMods= AltGr
    };
};

// using the group(rwin_switch) map, the right Windows' logo key
// temporarily chooses the second keyboard group (until it is
// released).  If you use this map, you would declare you keyboard as
// pc101 or pc102 instead of pc104 or pc105.
partial modifier_keys
xkb_symbols "rwin_switch" {
  key <RWIN> {
    symbols[Group1] = [ Mode_switch, Multi_key ],
    virtualMods= AltGr
    };
};

// Right Ctrl key temporary chooses the second keyboard group.
// Needed mainly for Canadian keyboard
partial modifier_keys
xkb_symbols "rctrl_switch" {
    key <RCTL>  {
        symbols[Group1]= [ Mode_switch ]
    };
};

// using the group(toggle) map, pressing the right alt key switches to
// the next sequential group (until the next explicit group change).
partial modifier_keys 
xkb_symbols "toggle" {
    virtual_modifiers AltGr;
    key <RALT>	{	
	symbols[Group1]= [	ISO_Next_Group	],
	virtualMods= AltGr
    };
};

// using the group(shifts_toggle) map, pressing both shift keys together
// locks the next or previous sequential keyboard group 
// (depending on which shift is pressed first - right or left, 
// correspongingly)
partial modifier_keys 
xkb_symbols "shifts_toggle" {
    key <LFSH>	{	[	Shift_L,	ISO_Prev_Group ]	};
    key <RTSH>	{	[	Shift_R,	ISO_Next_Group ]	};
};

// using the group(ctrl_shift_toggle) map, pressing:
//     Control_L+Shift_L locks the previous group
//     Control_R+Shift_R locks the next group
// If you have two groups and group wrap is enabled, the effect is
// indistinguishable.
partial modifier_keys 
xkb_symbols "ctrl_shift_toggle" {
    key <LFSH> {
	type[Group1]="PC_CONTROL_LEVEL2",
	symbols[Group1]= [ Shift_L,	ISO_Prev_Group ]
    };
    key <RTSH> {
	type[Group1]="PC_CONTROL_LEVEL2",
	symbols[Group1]= [ Shift_R,	ISO_Next_Group ]
    };
    key <LCTL>	{	[	Control_L,	ISO_Prev_Group ]	};
    key <RCTL>	{	[	Control_R,	ISO_Next_Group ]	};
};

// using the group(lctrl_lshift_toggle) map, pressing:
//     Control_L+Shift_L locks the next group
// If you have two groups and group wrap is enabled, the effect is
// indistinguishable.
partial modifier_keys 
xkb_symbols "lctrl_lshift_toggle" {
    key <LFSH> {
	type[Group1]="PC_CONTROL_LEVEL2",
	symbols[Group1]= [ Shift_L,	ISO_Next_Group ]
    };
    key <LCTL>	{	[	Control_L,	ISO_Next_Group ]	};
};

// using the group(shift_caps_toggle) map, pressing:
//     Shift+Caps Lock toggles group
partial modifier_keys
xkb_symbols "shift_caps_toggle" {
    key	<CAPS> {	[  Caps_Lock,		ISO_Next_Group	]	};
};

// using the group(shift_caps_switch) map, pressing:
// Caps Lock selects the first group
// Shift+Caps Lock selects the last group
partial modifier_keys
xkb_symbols "shift_caps_switch" {
    key <CAPS> { [ ISO_First_Group, ISO_Last_Group ] };
};

// using the group(win_menu_switch) map, pressing:
// LWIN selects the first group
// RWIN or MENU selects the last group
partial modifier_keys
xkb_symbols "win_menu_switch" {
    virtual_modifiers AltGr;
    key <LWIN> {
        virtualMods= AltGr,
        symbols[Group1] = [ ISO_First_Group ]
    };
    key <MENU> {
        virtualMods= AltGr,
        symbols[Group1] = [ ISO_Last_Group ]
    };
    key <RWIN> {
        virtualMods= AltGr,
        symbols[Group1] = [ ISO_Last_Group ]
    };
};

// using the group(ctrl_alt_toggle) map, pressing:
//     Control_L+Alt_L locks the previous group
//     Control_R+Alt_R locks the next group
// If you have two groups and group wrap is enabled, the effect is
// indistinguishable.
partial modifier_keys 
xkb_symbols "ctrl_alt_toggle" {
    virtual_modifiers Alt;
    key <LALT> {
	type[Group1]="PC_CONTROL_LEVEL2",
	symbols[Group1]= [ NoSymbol,	ISO_Prev_Group ],
	virtualMods= Alt
    };
    key <RALT> {
	type[Group1]="PC_CONTROL_LEVEL2",
	symbols[Group1]= [ NoSymbol,	ISO_Next_Group ],
	virtualMods= Alt
    };
    key <LCTL> {
	type[Group1]="PC_ALT_LEVEL2",
	symbols[Group1]= [ Control_L,	ISO_Prev_Group ]
    };
    key <RCTL> {
	type[Group1]="PC_ALT_LEVEL2",
	symbols[Group1]= [ Control_R,	ISO_Next_Group ]
    };
};

// using the group(alt_shift_toggle) map, pressing:
//     Shift_L+Alt_L locks the previous group
//     Shift_R+Alt_R locks the next group
// If you have two groups and group wrap is enabled, the effect is
// indistinguishable.
partial modifier_keys 
xkb_symbols "alt_shift_toggle" {
    virtual_modifiers Alt;
    key <LALT> {
	symbols[Group1]= [ NoSymbol,	ISO_Prev_Group ],
	virtualMods= Alt
    };
    key <RALT> {
	symbols[Group1]= [ NoSymbol,	ISO_Next_Group ],
	virtualMods= Alt
    };
    key <LFSH> {
	type[Group1]="PC_ALT_LEVEL2",
	symbols[Group1]= [ Shift_L,	ISO_Prev_Group ]
    };
    key <RTSH> {
	type[Group1]="PC_ALT_LEVEL2",
	symbols[Group1]= [ Shift_R,	ISO_Next_Group ]
    };
};

// using the group(menu_toggle) map, pressing:
//     Menu key toggles groups
//     Shift+Menu acts as Menu
partial modifier_keys
xkb_symbols "menu_toggle" {
    key	<MENU> {	[  ISO_Next_Group,	 Menu	]	};
};

// using the group(lwin_toggle) map, pressing the left Windows' logo key
// toggles groups.  If you use this map, you would declare you keyboard
// as pc101 or pc102 instead of pc104 or pc105.
partial modifier_keys
xkb_symbols "lwin_toggle" {
  virtual_modifiers AltGr;
  key <LWIN> {
    virtualMods= AltGr,
    symbols[Group1] = [ ISO_Next_Group ]
    };
};

// using the group(rwin_toggle) map, pressing the right Windows' logo key
// toggles groups.  If you use this map, you would declare you keyboard
// as pc101 or pc102 instead of pc104 or pc105.
partial modifier_keys
xkb_symbols "rwin_toggle" {
  virtual_modifiers AltGr;
  key <RWIN> {
    virtualMods= AltGr,
    symbols[Group1] = [ ISO_Next_Group ]
    };
};

// Both Ctrls pressed together toggle group
partial modifier_keys
xkb_symbols "ctrls_toggle" {
  virtual_modifiers LControl, RControl;
    key <LCTL> {
	type[Group1]="PC_RCONTROL_LEVEL2",
	symbols[Group1]= [ NoSymbol,	ISO_Prev_Group ],
	virtualMods= LControl
    };
    key <RCTL> {
	type[Group1]="PC_LCONTROL_LEVEL2",
	symbols[Group1]= [ NoSymbol,	ISO_Next_Group ],
	virtualMods= RControl
    };
};

// Both Alts pressed together toggle group
partial modifier_keys
xkb_symbols "alts_toggle" {
  virtual_modifiers LAlt, RAlt;
    key <LALT> {
	type[Group1]="PC_RALT_LEVEL2",
	symbols[Group1]= [ NoSymbol,	ISO_Prev_Group ],
	virtualMods= LAlt
    };
    key <RALT> {
	type[Group1]="PC_LALT_LEVEL2",
	symbols[Group1]= [ NoSymbol,	ISO_Next_Group ],
	virtualMods= RAlt
    };
};

// Left Shift key toggles group
partial modifier_keys
xkb_symbols "lshift_toggle" {
  virtual_modifiers AltGr;
    key <LFSH>	{	
	symbols[Group1]= [	ISO_Next_Group	],
	virtualMods= AltGr
    };
};

// Right Shift key toggles group
partial modifier_keys
xkb_symbols "rshift_toggle" {
  virtual_modifiers AltGr;
    key <RTSH>	{	
	symbols[Group1]= [	ISO_Next_Group	],
	virtualMods= AltGr
    };
};

// Left Alt key toggles group
partial modifier_keys
xkb_symbols "lalt_toggle" {
  virtual_modifiers AltGr;
    key <LALT>	{	
	symbols[Group1]= [	ISO_Next_Group	],
	virtualMods= AltGr
    };
};

// Left Ctrl key toggles group
partial modifier_keys
xkb_symbols "lctrl_toggle" {
  virtual_modifiers AltGr;
    key <LCTL>	{	
	symbols[Group1]= [	ISO_Next_Group	],
	virtualMods= AltGr
    };
};

// Right Ctrl key toggles group
partial modifier_keys
xkb_symbols "rctrl_toggle" {
  virtual_modifiers AltGr;
    key <RCTL>	{	
	symbols[Group1]= [	ISO_Next_Group	],
	virtualMods= AltGr
    };
};

// using the group(alt_caps_toggle) map, pressing:
//     Alt+Caps Lock toggles group
//     Caps Lock toggles caps lock
partial modifier_keys
xkb_symbols "alt_caps_toggle" {
    key        <CAPS> {
       type="PC_ALT_LEVEL2",
       symbols[Group1]= [  Caps_Lock,  ISO_Next_Group]
    };
};

partial hidden modifier_keys
xkb_symbols "olpc" {
  key <I219>  { [ ISO_Next_Group, ISO_Prev_Group ] };
};

partial modifier_keys
xkb_symbols "alt_space_toggle" {
    key <SPCE> {
    type[Group1]="PC_ALT_LEVEL2",
    symbols[Group1]= [ space,   ISO_Next_Group ]
    };
};

// using the group(sclk_toggle) map, pressing the Scroll Lock key
// toggles groups.
partial modifier_keys
xkb_symbols "sclk_toggle" {
  virtual_modifiers AltGr;
  key <SCLK> {
    virtualMods= AltGr,
    symbols[Group1] = [ ISO_Next_Group ]
    };
};