diff options
Diffstat (limited to 'xorg-server')
-rw-r--r-- | xorg-server/configure.ac | 4 | ||||
-rw-r--r-- | xorg-server/glx/Makefile.am | 1 | ||||
-rw-r--r-- | xorg-server/hw/xfree86/man/xorg.conf.man | 2 | ||||
-rw-r--r-- | xorg-server/os/client.c | 69 | ||||
-rw-r--r-- | xorg-server/xkeyboard-config/rules/base.o_s.part | 17 | ||||
-rw-r--r-- | xorg-server/xkeyboard-config/rules/base.xml.in | 6 | ||||
-rw-r--r-- | xorg-server/xkeyboard-config/symbols/group | 856 |
7 files changed, 537 insertions, 418 deletions
diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac index 261af5f68..6de92b435 100644 --- a/xorg-server/configure.ac +++ b/xorg-server/configure.ac @@ -26,8 +26,8 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.60) -AC_INIT([xorg-server], 1.11.99.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) -RELEASE_DATE="2011-12-17" +AC_INIT([xorg-server], 1.11.99.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +RELEASE_DATE="2011-12-27" AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE diff --git a/xorg-server/glx/Makefile.am b/xorg-server/glx/Makefile.am index f61a4081a..ced78b76a 100644 --- a/xorg-server/glx/Makefile.am +++ b/xorg-server/glx/Makefile.am @@ -43,7 +43,6 @@ glapi_sources = \ glapi.c \ glapi.h \ glapi_gentable.c \ - glapioffsets.h \ glprocs.h \ glthread.c \ glthread.h diff --git a/xorg-server/hw/xfree86/man/xorg.conf.man b/xorg-server/hw/xfree86/man/xorg.conf.man index 996798f1c..57901853b 100644 --- a/xorg-server/hw/xfree86/man/xorg.conf.man +++ b/xorg-server/hw/xfree86/man/xorg.conf.man @@ -2,7 +2,7 @@ .ds q \N'34' .TH __xconfigfile__ __filemansuffix__ __vendorversion__ .SH NAME -__xconfigfile__ and __xconfigdir__ \- configuration files for +__xconfigfile__, __xconfigdir__ \- configuration files for __xservername__ X server .SH INTRODUCTION .B __xservername__ diff --git a/xorg-server/os/client.c b/xorg-server/os/client.c index 4aec097e1..8f4707b09 100644 --- a/xorg-server/os/client.c +++ b/xorg-server/os/client.c @@ -59,6 +59,11 @@ #include "os.h" #include "dixstruct.h" +#ifdef __sun +#include <errno.h> +#include <procfs.h> +#endif + /** * Try to determine a PID for a client from its connection * information. This should be called only once when new client has @@ -117,8 +122,6 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) { char path[PATH_MAX + 1]; int totsize = 0; - int cmdsize = 0; - int argsize = 0; int fd = 0; if (cmdname) @@ -129,6 +132,48 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) if (pid == -1) return; +#ifdef __sun /* Solaris */ + /* Solaris does not support /proc/pid/cmdline, but makes information + * similar to what ps shows available in a binary structure in the + * /proc/pid/psinfo file. */ + if (snprintf(path, sizeof(path), "/proc/%d/psinfo", pid) < 0) + return; + fd = open(path, O_RDONLY); + if (fd < 0) + { + ErrorF ("Failed to open %s: %s\n", path, strerror(errno)); + return; + } + else + { + psinfo_t psinfo = { 0 }; + char *sp; + + totsize = read(fd, &psinfo, sizeof(psinfo_t)); + close(fd); + if (totsize <= 0) + return; + + /* pr_psargs is the first PRARGSZ (80) characters of the command + * line string - assume up to the first space is the command name, + * since it's not delimited. While there is also pr_fname, that's + * more limited, giving only the first 16 chars of the basename of + * the file that was exec'ed, thus cutting off many long gnome + * command names, or returning "isapython2.6" for all python scripts. + */ + psinfo.pr_psargs[PRARGSZ-1] = '\0'; + sp = strchr(psinfo.pr_psargs, ' '); + if (sp) + *sp++ = '\0'; + + if (cmdname) + *cmdname = strdup(psinfo.pr_psargs); + + if (cmdargs && sp) + *cmdargs = strdup(sp); + } +#else /* not Solaris */ + /* Check if /proc/pid/cmdline exists. It's not supported on all * operating systems. */ if (snprintf(path, sizeof(path), "/proc/%d/cmdline", pid) < 0) @@ -146,17 +191,20 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) path[totsize - 1] = '\0'; /* Contruct the process name without arguments. */ - cmdsize = strlen(path) + 1; if (cmdname) { *cmdname = strdup(path); } /* Construct the arguments for client process. */ - argsize = totsize - cmdsize; - if (cmdargs && (argsize > 0)) + if (cmdargs) { - char *args = malloc(argsize); + int cmdsize = strlen(path) + 1; + int argsize = totsize - cmdsize; + char *args = NULL; + + if (argsize > 0) + args = malloc(argsize); if (args) { int i = 0; @@ -169,6 +217,7 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) *cmdargs = args; } } +#endif } /** @@ -192,9 +241,9 @@ void ReserveClientIds(struct _Client *client) DetermineClientCmd(client->clientIds->pid, &client->clientIds->cmdname, &client->clientIds->cmdargs); DebugF("client(%lx): Reserved pid(%d).\n", - client->clientAsMask, client->clientIds->pid); + (unsigned long) client->clientAsMask, client->clientIds->pid); DebugF("client(%lx): Reserved cmdname(%s) and cmdargs(%s).\n", - client->clientAsMask, + (unsigned long) client->clientAsMask, client->clientIds->cmdname ? client->clientIds->cmdname : "NULL", client->clientIds->cmdargs ? client->clientIds->cmdargs : "NULL"); #endif /* CLIENTIDS */ @@ -216,9 +265,9 @@ void ReleaseClientIds(struct _Client *client) return; DebugF("client(%lx): Released pid(%d).\n", - client->clientAsMask, client->clientIds->pid); + (unsigned long) client->clientAsMask, client->clientIds->pid); DebugF("client(%lx): Released cmdline(%s) and cmdargs(%s).\n", - client->clientAsMask, + (unsigned long) client->clientAsMask, client->clientIds->cmdname ? client->clientIds->cmdname : "NULL", client->clientIds->cmdargs ? client->clientIds->cmdargs : "NULL"); diff --git a/xorg-server/xkeyboard-config/rules/base.o_s.part b/xorg-server/xkeyboard-config/rules/base.o_s.part index e1188ba34..b4772b4c6 100644 --- a/xorg-server/xkeyboard-config/rules/base.o_s.part +++ b/xorg-server/xkeyboard-config/rules/base.o_s.part @@ -16,17 +16,12 @@ grp:shifts_toggle = +group(shifts_toggle) grp:ctrls_toggle = +group(ctrls_toggle) grp:alts_toggle = +group(alts_toggle) - grp:ctrl_shift_toggle = +group(ctrl_shift_toggle) - grp:lctrl_lshift_toggle = +group(lctrl_lshift_toggle) - grp:rctrl_rshift_toggle = +group(rctrl_rshift_toggle) grp:caps_toggle = +capslock(grouplock) grp:caps_switch = +capslock(groupshift) grp:shift_caps_toggle = +group(shift_caps_toggle) grp:shift_caps_switch = +group(shift_caps_switch) grp:win_menu_switch = +group(win_menu_switch) grp:alt_caps_toggle = +group(alt_caps_toggle) - grp:ctrl_alt_toggle = +group(ctrl_alt_toggle) - grp:alt_shift_toggle = +group(alt_shift_toggle) grp:alt_space_toggle = +group(alt_space_toggle) grp:menu_toggle = +group(menu_toggle) grp:lwin_toggle = +group(lwin_toggle) @@ -40,6 +35,18 @@ grp:sclk_toggle = +group(sclk_toggle) grp:lctrl_rctrl_switch = +group(lctrl_rctrl_switch) grp:lctrl_lwin_rctrl_menu = +group(lctrl_lwin_rctrl_menu) + grp:lctrl_lalt_toggle = +group(lctrl_lalt_toggle) + grp:rctrl_ralt_toggle = +group(rctrl_ralt_toggle) + grp:ctrl_alt_toggle = +group(ctrl_alt_toggle) + grp:ctrl_alt_toggle_bidir = +group(ctrl_alt_toggle_bidir) + grp:lctrl_lshift_toggle = +group(lctrl_lshift_toggle) + grp:rctrl_rshift_toggle = +group(rctrl_rshift_toggle) + grp:ctrl_shift_toggle = +group(ctrl_shift_toggle) + grp:ctrl_shift_toggle_bidir = +group(ctrl_shift_toggle_bidir) + grp:lalt_lshift_toggle = +group(lalt_lshift_toggle) + grp:ralt_rshift_toggle = +group(ralt_rshift_toggle) + grp:alt_shift_toggle = +group(alt_shift_toggle) + grp:alt_shift_toggle_bidir = +group(alt_shift_toggle_bidir) lv3:switch = +level3(switch) lv3:ralt_switch = +level3(ralt_switch) lv3:ralt_switch_multikey = +level3(ralt_switch_multikey) diff --git a/xorg-server/xkeyboard-config/rules/base.xml.in b/xorg-server/xkeyboard-config/rules/base.xml.in index 7c94620ab..22b720f20 100644 --- a/xorg-server/xkeyboard-config/rules/base.xml.in +++ b/xorg-server/xkeyboard-config/rules/base.xml.in @@ -5604,6 +5604,12 @@ </option> <option> <configItem> + <name>grp:lalt_lshift_toggle</name> + <_description>Left Alt+Left Shift</_description> + </configItem> + </option> + <option> + <configItem> <name>grp:alt_space_toggle</name> <_description>Alt+Space</_description> </configItem> diff --git a/xorg-server/xkeyboard-config/symbols/group b/xorg-server/xkeyboard-config/symbols/group index e85cd6778..fb2f879d0 100644 --- a/xorg-server/xkeyboard-config/symbols/group +++ b/xorg-server/xkeyboard-config/symbols/group @@ -1,399 +1,457 @@ -// using the group(switch) map, the right alt key temporarily chooses
-// the second keyboard group (until it is released).
-//
-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(rctrl_rshift_toggle) map, pressing:
-// 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 "rctrl_rshift_toggle" {
- key <RTSH> {
- type[Group1]="PC_CONTROL_LEVEL2",
- symbols[Group1]= [ Shift_R, ISO_Next_Group ]
- };
- key <RCTL> { [ Control_R, 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(lctrl_rctrl_switch) map, pressing:
-// Left Control selects the first group
-// Right Control selects the last group
-partial modifier_keys
-xkb_symbols "lctrl_rctrl_switch" {
- virtual_modifiers AltGr;
- key <LCTL> {
- virtualMods= AltGr,
- symbols[Group1] = [ ISO_First_Group ]
- };
- key <RCTL> {
- 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 ]
- };
-};
-
-// Control_L+Win_L locks the first group (presumably Lat).
-// Control_R+Menu locks the second group (presumably Rus).
-partial modifier_keys
-xkb_symbols "lctrl_lwin_rctrl_menu" {
- key <LWIN> {
- type[ Group1 ] = "PC_CONTROL_LEVEL2",
- symbols[ Group1 ] = [ Super_L, ISO_First_Group ]
- };
- key <MENU> {
- type[ Group1 ] = "PC_CONTROL_LEVEL2",
- symbols[ Group1 ] = [ Menu, ISO_Last_Group ]
- };
-}; // lctrl_lwin_rctrl_menu
+// using the group(switch) map, the right alt key temporarily chooses +// the second keyboard group (until it is released). +// +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(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(lctrl_rctrl_switch) map, pressing: +// Left Control selects the first group +// Right Control selects the last group +partial modifier_keys +xkb_symbols "lctrl_rctrl_switch" { + virtual_modifiers AltGr; + key <LCTL> { + virtualMods= AltGr, + symbols[Group1] = [ ISO_First_Group ] + }; + key <RCTL> { + virtualMods= AltGr, + symbols[Group1] = [ ISO_Last_Group ] + }; +}; + + +// +// CTRL-SHIFT toggle section +// +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 ] }; +}; + +partial modifier_keys +xkb_symbols "lctrl_lshift_toggle_rev" { + key <LFSH> { + type[Group1]="PC_CONTROL_LEVEL2", + symbols[Group1]= [ Shift_L, ISO_Prev_Group ] + }; + key <LCTL> { [ Control_L, ISO_Prev_Group ] }; +}; + +partial modifier_keys +xkb_symbols "rctrl_rshift_toggle" { + key <RTSH> { + type[Group1]="PC_CONTROL_LEVEL2", + symbols[Group1]= [ Shift_R, ISO_Next_Group ] + }; + key <RCTL> { [ Control_R, ISO_Next_Group ] }; +}; + +partial modifier_keys +xkb_symbols "ctrl_shift_toggle" { + include "group(lctrl_lshift_toggle)" + include "group(rctrl_rshift_toggle)" +}; + +partial modifier_keys +xkb_symbols "ctrl_shift_toggle_bidir" { + include "group(lctrl_lshift_toggle_rev)" + include "group(rctrl_rshift_toggle)" +}; + + +// +// CTRL-ALT toggle section +// +partial modifier_keys +xkb_symbols "lctrl_lalt_toggle" { + virtual_modifiers Alt; + key <LALT> { + 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_Next_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "lctrl_lalt_toggle_rev" { + virtual_modifiers Alt; + key <LALT> { + type[Group1]="PC_CONTROL_LEVEL2", + symbols[Group1]= [ NoSymbol, ISO_Prev_Group ], + virtualMods= Alt + }; + key <LCTL> { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Control_L, ISO_Prev_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "rctrl_ralt_toggle" { + virtual_modifiers Alt; + key <RALT> { + type[Group1]="PC_CONTROL_LEVEL2", + symbols[Group1]= [ NoSymbol, ISO_Next_Group ], + virtualMods= Alt + }; + key <RCTL> { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Control_R, ISO_Next_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "ctrl_alt_toggle" { + include "group(lctrl_lalt_toggle)" + include "group(rctrl_ralt_toggle)" +}; + +partial modifier_keys +xkb_symbols "ctrl_alt_toggle_bidir" { + include "group(lctrl_lalt_toggle_rev)" + include "group(rctrl_ralt_toggle)" +}; + + +// +// ALT-SHIFT toggle section +// +partial modifier_keys +xkb_symbols "lalt_lshift_toggle" { + virtual_modifiers Alt; + key <LALT> { + symbols[Group1]= [ NoSymbol, ISO_Next_Group ], + virtualMods= Alt + }; + key <LFSH> { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Shift_L, ISO_Next_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "lalt_lshift_toggle_rev" { + virtual_modifiers Alt; + key <LALT> { + symbols[Group1]= [ NoSymbol, ISO_Prev_Group ], + virtualMods= Alt + }; + key <LFSH> { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Shift_L, ISO_Prev_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "ralt_rshift_toggle" { + virtual_modifiers Alt; + key <RALT> { + symbols[Group1]= [ NoSymbol, ISO_Next_Group ], + virtualMods= Alt + }; + key <RTSH> { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Shift_R, ISO_Next_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "alt_shift_toggle" { + include "group(lalt_lshift_toggle)" + include "group(ralt_rshift_toggle)" +}; + +partial modifier_keys +xkb_symbols "alt_shift_toggle_bidir" { + include "group(lalt_lshift_toggle_rev)" + include "group(ralt_rshift_toggle)" +}; + + +// 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 ] + }; +}; + +// Control_L+Win_L locks the first group (presumably Lat). +// Control_R+Menu locks the second group (presumably Rus). +partial modifier_keys +xkb_symbols "lctrl_lwin_rctrl_menu" { + key <LWIN> { + type[ Group1 ] = "PC_CONTROL_LEVEL2", + symbols[ Group1 ] = [ Super_L, ISO_First_Group ] + }; + key <MENU> { + type[ Group1 ] = "PC_CONTROL_LEVEL2", + symbols[ Group1 ] = [ Menu, ISO_Last_Group ] + }; +}; // lctrl_lwin_rctrl_menu |