diff --git a/emoji/.local/share/fonts/NotoColorEmoji.ttf b/emoji/.local/share/fonts/NotoColorEmoji.ttf new file mode 100644 index 0000000..943741d Binary files /dev/null and b/emoji/.local/share/fonts/NotoColorEmoji.ttf differ diff --git a/packages/lisgd/.gitignore b/packages/lisgd/.gitignore new file mode 100644 index 0000000..9413c58 --- /dev/null +++ b/packages/lisgd/.gitignore @@ -0,0 +1,2 @@ +lisgd +lisgd.o diff --git a/packages/lisgd/LICENSE b/packages/lisgd/LICENSE new file mode 100644 index 0000000..9046ebc --- /dev/null +++ b/packages/lisgd/LICENSE @@ -0,0 +1,21 @@ +MIT/X Consortium License + +© 2020 Miles Alan + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/packages/lisgd/Makefile b/packages/lisgd/Makefile new file mode 100644 index 0000000..88de296 --- /dev/null +++ b/packages/lisgd/Makefile @@ -0,0 +1,56 @@ +PREFIX = /usr +SRC = lisgd.c +OBJ = ${SRC:.c=.o} +LDFLAGS = -g +LIBS = -linput -lm + +X11INC = /usr/X11R6/include +X11LIB = /usr/X11R6/lib + +ifndef WITHOUT_X11 +CPPFLAGS += -I${X11INC} -DWITH_X11 +LIBS += -L${X11LIB} -lX11 +endif + +ifndef WITHOUT_WAYLAND +CPPFLAGS += -DWITH_WAYLAND +LIBS += -lwayland-client +endif + +all: options lisgd + +options: + @echo lisgd build options: + @echo "CFLAGS = ${CFLAGS}" + @echo "CPPFLAGS = ${CPPFLAGS}" + @echo "LDFLAGS = ${LDFLAGS}" + @echo "LIBS = ${LIBS}" + @echo "CC = ${CC}" + +.c.o: + ${CC} -c ${CFLAGS} ${CPPFLAGS} $< + +${OBJ}: config.h + +config.h: + cp config.def.h $@ + +lisgd: ${OBJ} + ${CC} -o $@ ${OBJ} ${LDFLAGS} ${LIBS} + +install: all + mkdir -p ${DESTDIR}${PREFIX}/bin + cp -f lisgd ${DESTDIR}${PREFIX}/bin + chmod 755 ${DESTDIR}${PREFIX}/bin/lisgd + + mkdir -p ${DESTDIR}${PREFIX}/share/man/man1 + cp lisgd.1 ${DESTDIR}${PREFIX}/share/man/man1 + chmod 755 ${DESTDIR}${PREFIX}/share/man/man1 + +uninstall: + rm -f ${DESTDIR}${PREFIX}/bin/lisgd ${DESTDIR}${PREFIX}/share/man/man1/lisgd.1 + +clean: + rm -f lisgd.o lisgd + +.PHONY: all options install clean diff --git a/packages/lisgd/README.md b/packages/lisgd/README.md new file mode 100644 index 0000000..b73e0dc --- /dev/null +++ b/packages/lisgd/README.md @@ -0,0 +1,72 @@ +# lisgd + +Lisgd (libinput **synthetic** gesture daemon) lets you bind gestures based on +libinput touch events to run specific commands to execute. For example, +dragging left to right with one finger could execute a particular command +like launching a terminal. Directional L-R, R-L, U-D, and D-U gestures and +diagnol LD-RU, RD-LU, UR-DL, UL-DR gestures are supported with 1 through +n fingers. + +Unlike other libinput gesture daemons, lisgd uses touch events to +recognize **synthetic swipe gestures** rather than using the *libinput*'s +gesture events. The advantage of this is that the synthetic gestures +you define via lisgd can be used on touchscreens, which normal libinput +gestures don't support. + +This program was built for use on the [Pinephone](https://www.pine64.org/pinephone/); +however it could be used in general for any device that supports touch events, +like laptop touchscreens or similar. You may want to adjust the threshold +depending on the device you're using. + +## Configuration + +Configuration can be done in two ways: + +1. Through a suckless style `config.h`; see the `config.def.h` +2. Through commandline flags which override the default config.h values + +### Suckless-style config.h based configuration + +Copy the example `config.def.h` configuration to `config.h`. + +### Commandline flags based configuration + +Flags: + +- **-d [devicenodepath]**: Defines the dev filesystem device to monitor + - Example: `lisgd -d /dev/input/input1` +- **-g [nfingers,gesture,edge,distance,actmode,command]**: Allows you to bind a gesture wherein nfingers is an integer, gesture is +one of {LR,RL,DU,UD,DLUR,URDL,ULDR,DLUR}, edge is one of * (any), N (none), L (left), R (right), T (top), B (bottom), TL (top left), TR (top right), BL (bottom left), BR (bottom right) and distance is one of * (any), S (short), M (medium), L (large). actmode is R (release) for normal mode and P (pressed) for pressed mode (but this field may be omitted entirely for backward +compatibility), command is the shell command to be executed. The -g option can be used + multiple times to bind multiple gestures. + - Single Gesture Example: `lisgd -g "1,LR,*,*,R,notify-send swiped lr"` + - Multiple Gestures Example: `lisgd -g "1,LR,*,*,R,notify-send swiped lr" -g "1,RL,R,*,R,notify-send swiped rl from right edge"` +- **-m [timeoutms]**: Number of milliseconds gestures must be performed within + to be registered. After the timeoutms value; the gesture won't be registered. + - Example: `lisgd -m 1200` +- **-o [orientation]**: Number of 90-degree rotations to translate gestures by. + Can be set to 0-3. For example using 1; a L-R gesture would become a U-D + gesture. Meant to be used for screen-rotation. + - Example `lisgd -o 1` +- **-r [degrees]**: Number of degrees offset each 45-degree interval may still + be recognized within. Maximum value is 45. Default value is 15. E.g. U-D + is a 180 degree gesture but with 15 degrees of leniency will be recognized + between 165-195 degrees. + - Example: `lisgd -r 20` +- **-t [threshold_units]**: Threshold in libinput units (pixels) after which a + gesture registers. Defaults to 125. + - Example: `lisgd -t 125` +- **-T [threshold_units]**: Threshold in libinput units (pixels) after which a + gesture registers for 'pressed' gestures where fingers are not lifted. + Defaults to 60. + - Example: `lisgd -t 60` +- **-w [screenwidth]**: Width of screen used for edge-based gestures. Use in + conjunction with -h. If unset dynamic X/Wayland screen geometry detection is + used. + - Example: `lisgd -w 600` +- **-h [screenheight]**: Height of screen used for edge-based gestures. Use in + conjunction with -w. If unset dynamic X/Wayland screen geometry detection is + used. + - Example: `lisgd -h 500` +- **-v**: Verbose mode, useful for debugging + - Example: `lisgd -v` diff --git a/packages/lisgd/config.def.h b/packages/lisgd/config.def.h new file mode 100644 index 0000000..f02e624 --- /dev/null +++ b/packages/lisgd/config.def.h @@ -0,0 +1,39 @@ +/* + distancethreshold: Minimum cutoff for a gestures to take effect + degreesleniency: Offset degrees within which gesture is recognized (max=45) + timeoutms: Maximum duration for a gesture to take place in miliseconds + orientation: Number of 90 degree turns to shift gestures by + verbose: 1=enabled, 0=disabled; helpful for debugging + device: Path to the /dev/ filesystem device events should be read from + gestures: Array of gestures; binds num of fingers / gesturetypes to commands + Supported gestures: SwipeLR, SwipeRL, SwipeDU, SwipeUD, + SwipeDLUR, SwipeURDL, SwipeDRUL, SwipeULDR +*/ + +unsigned int distancethreshold = 125; +unsigned int distancethreshold_pressed = 60; +unsigned int degreesleniency = 15; +unsigned int timeoutms = 800; +unsigned int orientation = 0; +unsigned int verbose = 0; +double edgesizeleft = 50.0; +double edgesizetop = 50.0; +double edgesizeright = 50.0; +double edgesizebottom = 50.0; +double edgessizecaling = 1.0; +char *device = "/dev/input/touchscreen"; + +//Gestures can also be specified interactively from the command line using -g +Gesture gestures[] = { + /* nfingers gesturetype command */ + { 1, SwipeLR, EdgeAny, DistanceAny, ActModeReleased, "xdotool key --clearmodifiers Alt+Shift+e" }, + { 1, SwipeRL, EdgeAny, DistanceAny, ActModeReleased, "xdotool key --clearmodifiers Alt+Shift+r" }, + { 1, SwipeDLUR, EdgeAny, DistanceAny, ActModeReleased, "sxmo_vol.sh up" }, + { 1, SwipeURDL, EdgeAny, DistanceAny, ActModeReleased, "sxmo_vol.sh down" }, + { 1, SwipeDRUL, EdgeAny, DistanceAny, ActModeReleased, "sxmo_brightness.sh up" }, + { 1, SwipeULDR, EdgeAny, DistanceAny, ActModeReleased, "sxmo_brightness.sh down" }, + { 2, SwipeLR, EdgeAny, DistanceAny, ActModeReleased, "xdotool key --clearmodifiers Alt+e" }, + { 2, SwipeRL, EdgeAny, DistanceAny, ActModeReleased, "xdotool key --clearmodifiers Alt+r" }, + { 2, SwipeDU, EdgeAny, DistanceAny, ActModeReleased, "pidof $KEYBOARD || $KEYBOARD &" }, + { 2, SwipeUD, EdgeAny, DistanceAny, ActModeReleased, "pkill -9 -f $KEYBOARD" }, +}; diff --git a/packages/lisgd/config.h b/packages/lisgd/config.h new file mode 100644 index 0000000..60aa80b --- /dev/null +++ b/packages/lisgd/config.h @@ -0,0 +1,60 @@ +/* + distancethreshold: Minimum cutoff for a gestures to take effect + degreesleniency: Offset degrees within which gesture is recognized (max=45) + timeoutms: Maximum duration for a gesture to take place in miliseconds + orientation: Number of 90 degree turns to shift gestures by + verbose: 1=enabled, 0=disabled; helpful for debugging + device: Path to the /dev/ filesystem device events should be read from + gestures: Array of gestures; binds num of fingers / gesturetypes to commands + Supported gestures: SwipeLR, SwipeRL, SwipeDU, SwipeUD, + SwipeDLUR, SwipeURDL, SwipeDRUL, SwipeULDR +*/ + +unsigned int distancethreshold = 125; +unsigned int distancethreshold_pressed = 60; +unsigned int degreesleniency = 15; +unsigned int timeoutms = 800; +unsigned int orientation = 0; +unsigned int verbose = 1; +double edgesizeleft = 50.0; +double edgesizetop = 50.0; +double edgesizeright = 50.0; +double edgesizebottom = 50.0; +double edgessizecaling = 2.0; +char *device = "/dev/touchscreen"; + +// Gestures can also be specified interactively from the command line using -g +Gesture gestures[] = { + {1, SwipeRL, EdgeRight, DistanceAny, ActModeReleased, + "niri msg action focus-column-right"}, + {1, SwipeLR, EdgeLeft, DistanceAny, ActModeReleased, + "niri msg action focus-column-left"}, + {1, SwipeDU, CornerBottomRight, DistanceMedium, ActModeReleased, + "niri msg action focus-workspace-down"}, + {1, SwipeUD, CornerTopRight, DistanceMedium, ActModeReleased, + "niri msg action focus-workspace-up"}, + {1, SwipeDU, CornerBottomLeft, DistanceShort, ActModeReleased, + "niri msg action switch-preset-column-width"}, + //{1, SwipeUD, EdgeTop, DistanceAny, ActModeReleased, "nwggrid -o 0.98"}, + //"pkill -SIGRTMIN -f wvkbd"}, + //{2, SwipeUD, EdgeAny, DistanceAny, ActModeReleased, + //"sway-interactive-screenshot -s focused-output"}, + //{3, SwipeLR, EdgeAny, DistanceAny, ActModeReleased, + //"swaymsg layout tabbed"}, + //{3, SwipeRL, EdgeAny, DistanceAny, ActModeReleased, + //"swaymsg layout toggle split"}, + {2, SwipeUD, EdgeLeft, DistanceShort, ActModePressed, + "niri msg action fullscreen-window"}, + {2, SwipeUD, EdgeRight, DistanceMedium, ActModeReleased, + "niri msg action close-window"}, + {2, SwipeDU, EdgeBottom, DistanceAny, ActModeReleased, + "pkill -34 -f wvkbd"}, + //{3, SwipeUD, EdgeTop, DistanceLong, ActModeReleased, + // "systemctl --user restart desktop-shell.service"}, + {2, SwipeUD, EdgeTop, DistanceLong, ActModeReleased, + "grim -g \"$(slurp -w 0)\" -t ppm - | satty --early-exit --copy-command 'wl-copy' --filename='-' -o '~/Pictures/Screenshots/Screenshot-%Y-%m-%d_%H:%M:%S.png' --initial-tool brush"}, + //{2, SwipeUD, EdgeBottom, DistanceAny, ActModeReleased, + //"pkill -9 -f wvkbd-mobintl"}, + {3, SwipeDU, EdgeAny, DistanceAny, ActModeReleased, + "niri msg action toggle-overview"}, +}; diff --git a/packages/lisgd/lisgd.1 b/packages/lisgd/lisgd.1 new file mode 100644 index 0000000..dd197cc --- /dev/null +++ b/packages/lisgd/lisgd.1 @@ -0,0 +1,118 @@ +.TH LISGD 1 + +.SH NAME +lisgd \- libinput synthetic gesture daemon + +.SH SYNOPSIS +.B lisgd +[\fB\-d\fR \fIdevicepath\fR] +[\fB\-g\fR \fIgesturespec\fR]... +[\fB\-t\fR \fIthreshold\fR] +[\fB\-m\fR \fItimeoutms\fR] +[\fB\-o\fR \fIorientation\fR] +[\fB\-w\fR \fIwidth\fR] +[\fB\-h\fR \fIheight\fR] +[\fB\-r\fR \fIdegreesofleniency\fR] +[\fB\-v] + + +.SH DESCRIPTION +.B lisgd +(or libinput synthetic gesture daemon) lets you bind gestures based on +libinput touch events to run specific commands to execute. For example, +dragging left to right with one finger could execute a particular command +like launching a terminal. Directional L-R, R-L, U-D, and D-U gestures and +diagnol LD-RU, RD-LU, UR-DL, UL-DR gestures are supported with 1 through +n fingers and can be bound to the screen's edges and/or made sensitive to +the distance of the gesture. + +Unlike other libinput gesture daemons, lisgd uses touch events to +recognize synthetic swipe gestures rather than using the libinput's +gesture events. The advantage of this is that the synthetic gestures +you define via lisgd can be used on touchscreens, which normal libinput +gestures don't support. + +This program was built for use on the Pinephone however it could be used in +general for any device that supports touch events, like laptop touchscreens +or similar. You may want to adjust the threshold depending on the device +you're using. + + +.SH OPTIONS +.TP +.BR \-d ", " \-d\ devicepath\fR +Path of the dev filesystem device to monitor (like /dev/input/event1). + +.TP +.BR \-g ", " \-g\ nfingers,gesture,edge,distance,actmode,command\fR +Allows you to bind a gesture wherein nfingers is an integer, gesture is +one of {LR,RL,DU,UD,DLUR,DRUL,URDL,ULDR}, edge is one of * (any), N (none), L +(left), R (right), T (top), B (bottom), TL (top left), TR (top right), BL +(bottom left), BR (bottom right) and distance is one of * (any), S (short), M +(medium), L (large), actmode is R (release) for normal mode and P (pressed) for +pressed mode (but this field may be omitted entirely for backward +compatibility), command is the shell command to be executed. + +The -g option can be used multiple times to bind multiple gestures. + +.TP +.BR \-m ", " \-m\ timeoutms\fR +Number of milliseconds gestures must be performed within to be registered. After +the timeoutms value; the gesture won't be registered. + +.TP +.BR \-o ", " \-o\ orientation\fR +Number of 90-degree rotations to translate gestures by. Can be set to 0-3. For +example using 1; a L-R gesture would become a U-D gesture. Meant to be used +for screen-rotation. + +.TP +.BR \-r ", " \-r\ degreesofleniency\fR +Number of degrees offset each 45-degree interval may still be recognized within. +Maximum value is 45. Default value is 15. E.g. U-D is a 180 degree gesture +but with 15 degrees of leniency will be recognized between 165-195 degrees. + +.TP +.BR \-t ", " \-t\ distancethreshold\fR +Threshold in libinput units (pixels) after which a gesture registers. Defaults +to 125. + +.TP +.BR \-T ", " \-T\ distancethreshold_pressed\fR +Threshold in libinput units (pixels) after which a gesture registers when fingers +are not lifted. Defaults to 60. + +.TP +.BR \-w ", " \-w\ screnwidth\fR +Allows you to specify the width of the screen area to be used for +edge-based gestures. Should be used in conjunction with -h. If unset, +and either the DISPLAY or WAYLAND_DISPLAY env var is set, X/Wayland +dynamic screen geometry detection will be used instead. + +.TP +.BR \-h ", " \-h\ screenheight\fR +Allows you to specify the height of the screen area to be used for +edge-based gestures. Should be used in conjunction with -w. If unset, +and either the DISPLAY or WAYLAND_DISPLAY env var is set, X/Wayland +dynamic screen geometry detection will be used instead. + +.TP +.BR \-s ", " \-s\ edgessizecaling\fR +Scale the edge sizes with this value. It is very usefull with very hidpi screens, +to help detecting edge gestures. + +.TP +.BR \-v \fR +Enables verbose mode which prints debugging messages. + + +.SH SEE ALSO +lisgd was built as part of Sxmo; an project to create a Pinephone UI out of +simple and suckless programs. See: http://sr.ht/mil/Sxmo + +.SH AUTHOR +.BR lisgd +is written by Miles Alan + +.SH CONTRIBUTING +Bugs and feature dicussions can be sent to ~mil/sxmo-devel@lists.sr.ht diff --git a/packages/lisgd/lisgd.c b/packages/lisgd/lisgd.c new file mode 100644 index 0000000..921f5bc --- /dev/null +++ b/packages/lisgd/lisgd.c @@ -0,0 +1,674 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef WITH_X11 +# include +#endif +#ifdef WITH_WAYLAND +# include +#endif + +/* Defines */ +#define MAXSLOTS 20 +#define NOMOTION -999999 + +/* Types */ +enum { + SwipeDU, + SwipeUD, + SwipeLR, + SwipeRL, + SwipeDLUR, + SwipeDRUL, + SwipeURDL, + SwipeULDR +}; +typedef int Swipe; + +enum { + EdgeAny, + EdgeNone, + EdgeLeft, + EdgeRight, + EdgeTop, + EdgeBottom, + CornerTopLeft, + CornerTopRight, + CornerBottomLeft, + CornerBottomRight, +}; +typedef int Edge; + +enum { + DistanceAny, + DistanceShort, + DistanceMedium, + DistanceLong, +}; +typedef int Distance; + +enum { + ActModeReleased, //action triggers when fingers are released + ActModePressed, //action triggers while finger is not lifted yet (as soon as a swipe is completed) +}; +typedef int ActMode; + +typedef struct { + int nfswipe; + Swipe swipe; + Edge edge; + Distance distance; + ActMode actmode; + char *command; +} Gesture; + +/* Config */ +#include "config.h" + +/* Globals */ +Gesture *gestsarr; +int gestsarrlen; +int have_actmode_pressed = 0; //do we have gestures using actmode pressed? +Swipe pendingswipe; +Edge pendingedge; +Distance pendingdistance; +double xstart[MAXSLOTS], xend[MAXSLOTS], ystart[MAXSLOTS], yend[MAXSLOTS]; +unsigned nfdown = 0, nfpendingswipe = 0; +struct timespec timedown; +static int screen; +#ifdef WITH_WAYLAND +struct wl_display *wl_display; +struct wl_registry *wl_registry; +struct wl_output *wl_output; +#endif +static int screenwidth = 0, screenheight = 0; + +void +die(char * msg) +{ + fprintf(stderr, "%s\n", msg); + exit(1); +} + +int +gesturecalculateswipewithindegrees(double gestdegrees, double wantdegrees) { + return ( + gestdegrees >= wantdegrees - degreesleniency && + gestdegrees <= wantdegrees + degreesleniency + ); +} + +Swipe +gesturecalculateswipe(double x0, double y0, double x1, double y1, int mindistance) { + double t, degrees, dist; + + t = atan2(x1 - x0, y0 - y1); + degrees = 57.2957795130823209 * (t < 0 ? t + 6.2831853071795865 : t); + dist = sqrt(pow(x1 - x0, 2) + pow(y1 - y0, 2)); + + if (verbose) + fprintf(stderr, "Swipe distance=[%.2f]; degrees=[%.2f]\n", dist, degrees); + + if (dist < mindistance) return -1; + else if (gesturecalculateswipewithindegrees(degrees, 0)) return SwipeDU; + else if (gesturecalculateswipewithindegrees(degrees, 45)) return SwipeDLUR; + else if (gesturecalculateswipewithindegrees(degrees, 90)) return SwipeLR; + else if (gesturecalculateswipewithindegrees(degrees, 135)) return SwipeULDR; + else if (gesturecalculateswipewithindegrees(degrees, 180)) return SwipeUD; + else if (gesturecalculateswipewithindegrees(degrees, 225)) return SwipeURDL; + else if (gesturecalculateswipewithindegrees(degrees, 270)) return SwipeRL; + else if (gesturecalculateswipewithindegrees(degrees, 315)) return SwipeDRUL; + else if (gesturecalculateswipewithindegrees(degrees, 360)) return SwipeDU; + + return -1; +} + +Distance +gesturecalculatedistance(double x0, double y0, double x1, double y1, Swipe swipe) { + double dist = sqrt(pow(x1 - x0, 2) + pow(y1 - y0, 2)); + double diag = sqrt(pow(screenwidth,2) + pow(screenheight,2)); + switch (swipe) { + case SwipeDU: + case SwipeUD: + if (dist >= screenheight * 0.66) { + return DistanceLong; + } else if (dist >= screenheight * 0.33) { + return DistanceMedium; + } else { + return DistanceShort; + } + break; + case SwipeLR: + case SwipeRL: + if (dist >= screenwidth * 0.66) { + return DistanceLong; + } else if (dist >= screenwidth * 0.33) { + return DistanceMedium; + } else { + return DistanceShort; + } + break; + case SwipeULDR: + case SwipeDRUL: + case SwipeDLUR: + case SwipeURDL: + if (dist >= diag * 0.66) { + return DistanceLong; + } else if (dist >= diag * 0.33) { + return DistanceMedium; + } else { + return DistanceShort; + } + break; + } + + return 0; //shouldn't happen +} + +Edge +gesturecalculateedge(double x0, double y0, double x1, double y1) { + Edge horizontal = EdgeNone; + Edge vertical = EdgeNone; + if (x0 <= edgesizeleft * edgessizecaling) { + horizontal = EdgeLeft; + } else if (x0 >= screenwidth - edgesizeright * edgessizecaling) { + horizontal = EdgeRight; + } else if (x1 <= edgesizeleft * edgessizecaling) { + horizontal = EdgeLeft; + } else if (x1 >= screenwidth - edgesizeright * edgessizecaling) { + horizontal = EdgeRight; + } + if (y0 <= edgesizetop * edgessizecaling) { + vertical = EdgeTop; + } else if (y0 >= screenheight - edgesizebottom * edgessizecaling) { + vertical = EdgeBottom; + } else if (y1 <= edgesizetop * edgessizecaling) { + vertical = EdgeTop; + } else if (y1 >= screenheight - edgesizebottom * edgessizecaling) { + vertical = EdgeBottom; + } + if (horizontal == EdgeLeft && vertical == EdgeTop) { + return CornerTopLeft; + } else if (horizontal == EdgeRight && vertical == EdgeTop) { + return CornerTopRight; + } else if (horizontal == EdgeLeft && vertical == EdgeBottom) { + return CornerBottomLeft; + } else if (horizontal == EdgeRight && vertical == EdgeBottom) { + return CornerBottomRight; + } else if (horizontal != EdgeNone) { + return horizontal; + } else { + return vertical; + } +} + +int +gestureexecute(Swipe swipe, int nfingers, Edge edge, Distance distance, ActMode actmode) { + int i; + + for (i = 0; i < gestsarrlen; i++) { + if (verbose) { + fprintf(stderr, + "[swipe]: Cfg(f=%d/s=%d/e=%d/d=%d) <=> Evt(f=%d/s=%d/e=%d/d=%d)\n", + gestsarr[i].nfswipe, gestsarr[i].swipe, gestsarr[i].edge, gestsarr[i].distance, nfingers, swipe, edge, distance + ); + } + if (gestsarr[i].nfswipe == nfingers && gestsarr[i].swipe == swipe + && gestsarr[i].distance <= distance + && (gestsarr[i].edge == EdgeAny || gestsarr[i].edge == edge || + ((edge == CornerTopLeft || edge == CornerTopRight) && gestsarr[i].edge == EdgeTop) || + ((edge == CornerBottomLeft || edge == CornerBottomRight) && gestsarr[i].edge == EdgeBottom) || + ((edge == CornerTopLeft || edge == CornerBottomLeft) && gestsarr[i].edge == EdgeLeft) || + ((edge == CornerTopRight || edge == CornerBottomRight) && gestsarr[i].edge == EdgeRight) + ) + && (actmode == ActModeReleased || gestsarr[i].actmode == actmode) + ) { + if (verbose) fprintf(stderr, "Execute %s\n", gestsarr[i].command); + system(gestsarr[i].command); + return 1; //execute first match only + } + } + return 0; +} + +static int +libinputopenrestricted(const char *path, int flags, void *user_data) +{ + int fd = open(path, flags); + return fd < 0 ? -errno : fd; +} + +static void +libinputcloserestricted(int fd, void *user_data) +{ + close(fd); +} + +Swipe +swipereorient(Swipe swipe, int orientation) { + while (orientation > 0) { + switch(swipe) { + // 90deg per turn so: L->U, R->D, U->R, D->L + case SwipeDU: swipe = SwipeLR; break; + case SwipeDLUR: swipe = SwipeULDR; break; + case SwipeLR: swipe = SwipeUD; break; + case SwipeULDR: swipe = SwipeURDL; break; + case SwipeUD: swipe = SwipeRL; break; + case SwipeURDL: swipe = SwipeDRUL; break; + case SwipeRL: swipe = SwipeDU; break; + case SwipeDRUL: swipe = SwipeDLUR; break; + } + orientation--; + } + return swipe; +} + +Edge +edgereorient(Edge edge, int orientation) { + while (orientation > 0) { + switch(edge) { + // 90deg per turn + case EdgeLeft: edge = EdgeTop; break; + case EdgeRight: edge = EdgeBottom; break; + case EdgeTop: edge = EdgeRight; break; + case EdgeBottom: edge = EdgeLeft; break; + case CornerTopLeft: edge = CornerTopRight; break; + case CornerTopRight: edge = CornerBottomRight; break; + case CornerBottomLeft: edge = CornerTopLeft; break; + case CornerBottomRight: edge = CornerBottomLeft; break; + } + orientation--; + } + return edge; +} + +void +touchdown(struct libinput_event *e) +{ + struct libinput_event_touch *tevent; + int slot; + + tevent = libinput_event_get_touch_event(e); + slot = libinput_event_touch_get_slot(tevent); + xstart[slot] = libinput_event_touch_get_x_transformed(tevent, screenwidth); + ystart[slot] = libinput_event_touch_get_y_transformed(tevent, screenheight); + if (nfdown == 0) clock_gettime(CLOCK_MONOTONIC_RAW, &timedown); + nfdown++; +} + +void +resetslot(int slot) { + xend[slot] = NOMOTION; + yend[slot] = NOMOTION; + xstart[slot] = NOMOTION; + ystart[slot] = NOMOTION; +} + + +void +touchmotion(struct libinput_event *e) +{ + struct libinput_event_touch *tevent; + struct timespec now; + int slot; + + tevent = libinput_event_get_touch_event(e); + slot = libinput_event_touch_get_slot(tevent); + xend[slot] = libinput_event_touch_get_x_transformed(tevent, screenwidth); + yend[slot] = libinput_event_touch_get_y_transformed(tevent, screenheight); + + if (have_actmode_pressed) { + Swipe swipe = gesturecalculateswipe( + xstart[slot], ystart[slot], xend[slot], yend[slot], distancethreshold_pressed + ); + if (swipe != -1) { + Edge edge = gesturecalculateedge( + xstart[slot], ystart[slot], xend[slot], yend[slot] + ); + clock_gettime(CLOCK_MONOTONIC_RAW, &now); + if ( + timeoutms > + ((now.tv_sec - timedown.tv_sec) * 1000000 + (now.tv_nsec - timedown.tv_nsec) / 1000) / 1000 + ) { + if (verbose) fprintf(stderr, "(Attempting to find matching pressed gesture)\n"); + if (gestureexecute(swipe, nfdown, edge, DistanceAny, ActModePressed)) { + //we found and executed a matching gesture, reset the slot + if (verbose) fprintf(stderr, "(Pressed gestured Executed)\n"); + xstart[slot] = xend[slot]; + ystart[slot] = yend[slot]; + timedown = now; + } + } + } + } +} + +void +touchup(struct libinput_event *e) +{ + int slot; + struct libinput_event_touch *tevent; + struct timespec now; + + tevent = libinput_event_get_touch_event(e); + slot = libinput_event_touch_get_slot(tevent); + nfdown--; + clock_gettime(CLOCK_MONOTONIC_RAW, &now); + + // E.g. invalid motion, it didn't begin/end from anywhere + if ( + xstart[slot] == NOMOTION || ystart[slot] == NOMOTION || + xend[slot] == NOMOTION || yend[slot] == NOMOTION + ) return; + + Swipe swipe = gesturecalculateswipe( + xstart[slot], ystart[slot], xend[slot], yend[slot], distancethreshold + ); + Edge edge = gesturecalculateedge( + xstart[slot], ystart[slot], xend[slot], yend[slot] + ); + Distance distance = gesturecalculatedistance( + xstart[slot], ystart[slot], xend[slot], yend[slot], swipe + ); + if (nfpendingswipe == 0) { + pendingswipe = swipe; + pendingedge = edge; + pendingdistance = distance; + } + if (pendingswipe == swipe) nfpendingswipe++; + resetslot(slot); + + // All fingers up - check if within millisecond limit, exec, & reset + if (nfdown == 0) { + if ( + timeoutms > + ((now.tv_sec - timedown.tv_sec) * 1000000 + (now.tv_nsec - timedown.tv_nsec) / 1000) / 1000 + ) gestureexecute(swipe, nfpendingswipe, edge, distance, ActModeReleased); + + nfpendingswipe = 0; + } +} + +void +run(void) +{ + int i; + struct libinput *li; + struct libinput_event *event; + struct libinput_device *d; + int selectresult; + fd_set fdset; + + const static struct libinput_interface interface = { + .open_restricted = libinputopenrestricted, + .close_restricted = libinputcloserestricted, + }; + + if ((li = libinput_path_create_context(&interface, NULL)) == NULL) + die("Failed to initialize context"); + + if ((d = libinput_path_add_device(li, device)) == NULL) { + die("Couldn't bind event from dev filesystem"); + } else if (LIBINPUT_CONFIG_STATUS_SUCCESS != libinput_device_config_send_events_set_mode( + d, LIBINPUT_CONFIG_SEND_EVENTS_ENABLED + )) { + die("Couldn't set mode to capture events"); + } + + // E.g. initially invalidate every slot + for (i = 0; i < MAXSLOTS; i++) { + xend[i] = NOMOTION; + yend[i] = NOMOTION; + xstart[i] = NOMOTION; + ystart[i] = NOMOTION; + } + + FD_ZERO(&fdset); + FD_SET(libinput_get_fd(li), &fdset); + for (;;) { + selectresult = select(FD_SETSIZE, &fdset, NULL, NULL, NULL); + if (selectresult == -1) { + die("Can't select on device node?"); + } else { + libinput_dispatch(li); + while ((event = libinput_get_event(li)) != NULL) { + switch(libinput_event_get_type(event)) { + case LIBINPUT_EVENT_TOUCH_DOWN: touchdown(event); break; + case LIBINPUT_EVENT_TOUCH_UP: touchup(event); break; + case LIBINPUT_EVENT_TOUCH_MOTION: touchmotion(event); break; + } + libinput_event_destroy(event); + } + } + } + libinput_unref(li); +} + +#ifdef WITH_WAYLAND +static void +display_handle_geometry(void *data, struct wl_output *wl_output, int x, int y, int physical_width, int physical_height, int subpixel, const char *make, const char *model, int transform) +{ + orientation = transform; + if (orientation == 1) { + orientation = 3; + } else if (orientation == 3) { + orientation = 1; + } +} + +static void +display_handle_done(void *data, struct wl_output *wl_output) +{ +} + +static void +display_handle_scale(void *data, struct wl_output *wl_output, int32_t scale) +{ +} + +static void +display_handle_mode(void *data, struct wl_output *wl_output, uint32_t flags, int width, int height, int refresh) +{ + screenwidth = width; + screenheight = height; +} + +static const struct wl_output_listener output_listener = { + .geometry = display_handle_geometry, + .mode = display_handle_mode, + .done = display_handle_done, + .scale = display_handle_scale +}; + +static void +registry_global(void *data, struct wl_registry *wl_registry, + uint32_t name, const char *interface, uint32_t version) +{ + if (strcmp(interface, "wl_output") == 0) { + if (!wl_output) { + wl_output = wl_registry_bind(wl_registry, name, &wl_output_interface, 3); + wl_output_add_listener(wl_output, &output_listener, NULL); + } + }; +} + +static void +registry_global_remove(void *data, + struct wl_registry *wl_registry, uint32_t name) +{ +} + +static const struct +wl_registry_listener wl_registry_listener = { + .global = registry_global, + .global_remove = registry_global_remove, +}; +#endif + +int +main(int argc, char *argv[]) +{ + int i, j; + char *gestpt; + + gestsarr = NULL; + gestsarrlen = 0; + + prctl(PR_SET_PDEATHSIG, SIGTERM); + prctl(PR_SET_PDEATHSIG, SIGKILL); + + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i], "-v")) { + verbose = 1; + } else if (!strcmp(argv[i], "-d")) { + if (i == argc - 1) die("option -d expects a value"); + device = argv[++i]; + } else if (!strcmp(argv[i], "-t")) { + if (i == argc - 1) die("option -t expects a value"); + distancethreshold = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-T")) { + if (i == argc - 1) die("option -T expects a value"); + distancethreshold_pressed = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-r")) { + if (i == argc - 1) die("option -r expects a value"); + degreesleniency = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-m")) { + if (i == argc - 1) die("option -m expects a value"); + timeoutms = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-o")) { + if (i == argc - 1) die("option -o expects a value"); + orientation = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-h")) { + if (i == argc - 1) die("option -h expects a value"); + screenheight = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-w")) { + if (i == argc - 1) die("option -w expects a value"); + screenwidth = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-s")) { + if (i == argc - 1) die("option -s expects a value"); + edgessizecaling = atof(argv[++i]); + } else if (!strcmp(argv[i], "-g")) { + if (i == argc - 1) die("option -g expects a value"); + gestsarrlen++; + gestsarr = realloc(gestsarr, (gestsarrlen * sizeof(Gesture))); + if (gestsarr == NULL) { + perror("Could not allocate memory"); + exit(EXIT_FAILURE); + } + gestpt = strtok(argv[++i], ","); + for (j = 0; gestpt != NULL && j < 6; gestpt = strtok(NULL, ","), j++) { + switch(j) { + case 0: gestsarr[gestsarrlen - 1].nfswipe = atoi(gestpt); break; + case 1: + if (!strcmp(gestpt, "LR")) gestsarr[gestsarrlen-1].swipe = SwipeLR; + if (!strcmp(gestpt, "RL")) gestsarr[gestsarrlen-1].swipe = SwipeRL; + if (!strcmp(gestpt, "DU")) gestsarr[gestsarrlen-1].swipe = SwipeDU; + if (!strcmp(gestpt, "UD")) gestsarr[gestsarrlen-1].swipe = SwipeUD; + if (!strcmp(gestpt, "DLUR")) gestsarr[gestsarrlen-1].swipe = SwipeDLUR; + if (!strcmp(gestpt, "URDL")) gestsarr[gestsarrlen-1].swipe = SwipeURDL; + if (!strcmp(gestpt, "ULDR")) gestsarr[gestsarrlen-1].swipe = SwipeULDR; + if (!strcmp(gestpt, "DRUL")) gestsarr[gestsarrlen-1].swipe = SwipeDRUL; + break; + case 2: + if (!strcmp(gestpt, "L")) gestsarr[gestsarrlen-1].edge = EdgeLeft; + if (!strcmp(gestpt, "R")) gestsarr[gestsarrlen-1].edge = EdgeRight; + if (!strcmp(gestpt, "T")) gestsarr[gestsarrlen-1].edge = EdgeTop; + if (!strcmp(gestpt, "B")) gestsarr[gestsarrlen-1].edge = EdgeBottom; + if (!strcmp(gestpt, "TL")) gestsarr[gestsarrlen-1].edge = CornerTopLeft; + if (!strcmp(gestpt, "TR")) gestsarr[gestsarrlen-1].edge = CornerTopRight; + if (!strcmp(gestpt, "BL")) gestsarr[gestsarrlen-1].edge = CornerBottomLeft; + if (!strcmp(gestpt, "BR")) gestsarr[gestsarrlen-1].edge = CornerBottomRight; + if (!strcmp(gestpt, "N")) gestsarr[gestsarrlen-1].edge = EdgeNone; + if (!strcmp(gestpt, "*")) gestsarr[gestsarrlen-1].edge = EdgeAny; + break; + case 3: + if (!strcmp(gestpt, "L")) gestsarr[gestsarrlen-1].distance = DistanceLong; + if (!strcmp(gestpt, "M")) gestsarr[gestsarrlen-1].distance = DistanceMedium; + if (!strcmp(gestpt, "S")) gestsarr[gestsarrlen-1].distance = DistanceShort; + if (!strcmp(gestpt, "*")) gestsarr[gestsarrlen-1].distance = DistanceAny; + break; + case 4: + if (!strcmp(gestpt, "P")) { + gestsarr[gestsarrlen-1].actmode = ActModePressed; + } else { + gestsarr[gestsarrlen-1].actmode = ActModeReleased; + if (strcmp(gestpt, "R") != 0) { + //for backward compatibility, allow fourth field to hold command + gestsarr[gestsarrlen - 1].command = gestpt; + } + } + break; + case 5: gestsarr[gestsarrlen - 1].command = gestpt; break; + } + } + } else { + fprintf(stderr, "lisgd [-v] [-d /dev/input/0] [-o 0] [-t 200] [-r 20] [-m 400] [-g '1,LR,L,*,R,notify-send swiped left to right from left edge']\n"); + exit(1); + } + } + + // Get display size (if not set with -w/-h) + if (screenwidth == 0 && screenheight == 0) { + if (getenv("WAYLAND_DISPLAY")) { +#ifdef WITH_WAYLAND + wl_display = wl_display_connect(NULL); + wl_registry = wl_display_get_registry(wl_display); + wl_registry_add_listener(wl_registry, &wl_registry_listener, NULL); + wl_display_roundtrip(wl_display); + wl_display_dispatch(wl_display); +#else + die("Wayland environment detected but support for it is not enabled"); +#endif + } else if (getenv("DISPLAY")) { +#ifdef WITH_X11 + Display *dpy; + if (!(dpy = XOpenDisplay(0))) { + die("Cannot open X display"); + } + screen = DefaultScreen(dpy); + if (0 == orientation % 2) { + screenwidth = DisplayWidth(dpy, screen); + screenheight = DisplayHeight(dpy, screen); + } else { + screenwidth = DisplayHeight(dpy, screen); + screenheight = DisplayWidth(dpy, screen); + } +#else + die("X11 environment detected but support for it is not enabled"); +#endif + } else { + die("Cannot detect display environment ($DISPLAY and $WAYLAND_DISPLAY unset); and no -w / -h screen geometry parameter options set"); + } + } + + // E.g. no gestures passed on CLI - used gestures defined in config.def.h + if (gestsarrlen == 0) { + gestsarr = malloc(sizeof(gestures)); + if (gestsarr == NULL) { + perror("Could not allocate memory"); + exit(EXIT_FAILURE); + } + gestsarrlen = sizeof(gestures) / sizeof(Gesture); + memcpy(gestsarr, gestures, sizeof(gestures)); + } + + // Modify gestures swipes based on orientation provided + for (i = 0; i < gestsarrlen; i++) { + gestsarr[i].swipe = swipereorient(gestsarr[i].swipe, orientation); + gestsarr[i].edge = edgereorient(gestsarr[i].edge, orientation); + //Detect whether ActMode pressed is used + if (gestsarr[i].actmode == ActModePressed) have_actmode_pressed++; + } + + run(); + return 0; +} diff --git a/packages/wvkbd/.clang-format b/packages/wvkbd/.clang-format new file mode 100644 index 0000000..eecebd7 --- /dev/null +++ b/packages/wvkbd/.clang-format @@ -0,0 +1,5 @@ +BasedOnStyle: LLVM +IndentWidth: 4 +AlwaysBreakAfterDefinitionReturnType: All +BreakBeforeBraces: Linux +SortIncludes: false diff --git a/packages/wvkbd/.editorconfig b/packages/wvkbd/.editorconfig new file mode 100644 index 0000000..95ba388 --- /dev/null +++ b/packages/wvkbd/.editorconfig @@ -0,0 +1,9 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*.c] +indent_style = space +indent_size = 4 +charset = utf-8 diff --git a/packages/wvkbd/.gitignore b/packages/wvkbd/.gitignore new file mode 100644 index 0000000..b68a9ad --- /dev/null +++ b/packages/wvkbd/.gitignore @@ -0,0 +1,14 @@ +*~ +*\#* +*.o +*-client-protocol.h +include/config.h +result +.gdb_history +.envrc +.direnv +*.log +wvkbd +*.1 +config.h +wvkbd-mobintl diff --git a/packages/wvkbd/Makefile b/packages/wvkbd/Makefile new file mode 100644 index 0000000..b7d4500 --- /dev/null +++ b/packages/wvkbd/Makefile @@ -0,0 +1,60 @@ +include config.mk + +NAME=wvkbd +BIN=${NAME}-${LAYOUT} +SRC=. +MAN1 = ${NAME}.1 + +PKGS = wayland-client xkbcommon pangocairo + +WVKBD_SOURCES += $(wildcard $(SRC)/*.c) +WVKBD_HEADERS += $(wildcard $(SRC)/*.h) + +PKG_CONFIG ?= pkg-config +CFLAGS += -std=gnu99 -Wall -g -DWITH_WAYLAND_SHM -DLAYOUT=\"layout.${LAYOUT}.h\" -DKEYMAP=\"keymap.${LAYOUT}.h\" +CFLAGS += $(shell $(PKG_CONFIG) --cflags $(PKGS)) +LDFLAGS += $(shell $(PKG_CONFIG) --libs $(PKGS)) -lm -lutil -lrt + +WAYLAND_HEADERS = $(wildcard proto/*.xml) + +HDRS = $(WAYLAND_HEADERS:.xml=-client-protocol.h) +WAYLAND_SRC = $(HDRS:.h=.c) +SOURCES = $(WVKBD_SOURCES) $(WAYLAND_SRC) + +SCDOC=scdoc +DOCS = wvkbd.1 + +OBJECTS = $(SOURCES:.c=.o) + +all: ${BIN} ${DOCS} + +config.h: + cp config.def.h config.h + +proto/%-client-protocol.c: proto/%.xml + wayland-scanner code < $? > $@ + +proto/%-client-protocol.h: proto/%.xml + wayland-scanner client-header < $? > $@ + +$(OBJECTS): $(HDRS) $(WVKBD_HEADERS) + +wvkbd-${LAYOUT}: config.h $(OBJECTS) layout.${LAYOUT}.h + $(CC) -o wvkbd $(OBJECTS) $(LDFLAGS) + +clean: + rm -f $(OBJECTS) $(HDRS) $(WAYLAND_SRC) ${BIN} ${DOCS} + +format: + clang-format -i $(WVKBD_SOURCES) $(WVKBD_HEADERS) + +%: %.scd + $(SCDOC) < $< > $@ + +install: all + mkdir -p ${DESTDIR}${PREFIX}/bin + cp -f ${NAME} ${DESTDIR}${PREFIX}/bin + chmod 755 ${DESTDIR}${PREFIX}/bin/${NAME} + mkdir -p "${DESTDIR}${MANPREFIX}/man1" + sed "s/VERSION/${VERSION}/g" < ${MAN1} > ${DESTDIR}${MANPREFIX}/man1/${MAN1} + chmod 644 ${DESTDIR}${MANPREFIX}/man1/${MAN1} diff --git a/packages/wvkbd/config.def.h b/packages/wvkbd/config.def.h new file mode 100644 index 0000000..b734e84 --- /dev/null +++ b/packages/wvkbd/config.def.h @@ -0,0 +1,44 @@ +#ifndef config_def_h_INCLUDED +#define config_def_h_INCLUDED + +#define DEFAULT_FONT "Jost* 12" +#define DEFAULT_ROUNDING 5 +static const int transparency = 255; + +struct clr_scheme schemes[] = { + { + /* colors */ + .bg = {.bgra = {32, 32, 32, transparency}}, + .fg = {.bgra = {59, 40, 36, transparency}}, + .high = {.bgra = {214, 177, 169, transparency}}, + .swipe = {.bgra = {100, 255, 100, 64}}, + .text = {.color = UINT32_MAX}, + .font = DEFAULT_FONT, + .rounding = DEFAULT_ROUNDING, + }, + { + /* colors */ + .bg = {.bgra = {32, 32, 32, transparency}}, + .fg = {.bgra = {38, 27, 26, transparency}}, + .high = {.bgra = {214, 177, 169, transparency}}, + .swipe = {.bgra = {100, 255, 100, 64}}, + .text = {.color = UINT32_MAX}, + .font = DEFAULT_FONT, + .rounding = DEFAULT_ROUNDING, + }}; + +/* layers is an ordered list of layouts, used to cycle through */ +static enum layout_id layers[] = { + Simple, // First layout is the default layout on startup + Cyrillic, + NumLayouts // signals the last item, may not be omitted +}; + +/* layers is an ordered list of layouts, used to cycle through */ +static enum layout_id landscape_layers[] = { + Simple, // First layout is the default layout on startup + Cyrillic, + NumLayouts // signals the last item, may not be omitted +}; + +#endif // config_def_h_INCLUDED diff --git a/packages/wvkbd/config.mk b/packages/wvkbd/config.mk new file mode 100644 index 0000000..09d5553 --- /dev/null +++ b/packages/wvkbd/config.mk @@ -0,0 +1,5 @@ +VERSION = 0.17 +CFLAGS = -DVERSION=\"$(VERSION)\" -D_XOPEN_SOURCE=700 +PREFIX = /usr +MANPREFIX = ${PREFIX}/share/man +LAYOUT = vistath diff --git a/packages/wvkbd/drw.c b/packages/wvkbd/drw.c new file mode 100644 index 0000000..89ec8d8 --- /dev/null +++ b/packages/wvkbd/drw.c @@ -0,0 +1,285 @@ +#include +#include +#include + +#include "drw.h" +#include "shm_open.h" +#include "math.h" + +void drwbuf_handle_release(void *data, struct wl_buffer *wl_buffer) { + struct drwsurf *ds = data; + ds->released = true; +}; + +const struct wl_buffer_listener buffer_listener = { + .release = drwbuf_handle_release +}; + +void drwsurf_handle_frame_cb(void* data, struct wl_callback* callback, + uint32_t time) +{ + struct drwsurf *ds = data; + wl_callback_destroy(ds->frame_cb); + ds->frame_cb = NULL; + + cairo_rectangle_int_t r = {0}; + for (int i = 0; i < cairo_region_num_rectangles(ds->damage); i++) { + cairo_region_get_rectangle(ds->damage, i, &r); + wl_surface_damage(ds->surf, r.x, r.y, r.width, r.height); + }; + cairo_region_subtract(ds->damage, ds->damage); + + drwsurf_attach(ds); +} + +const struct wl_callback_listener frame_listener = { + .done = drwsurf_handle_frame_cb +}; + +void drwsurf_register_frame_cb(struct drwsurf *ds) +{ + if (ds->frame_cb) + return; + if (!ds->attached) + return; + ds->frame_cb = wl_surface_frame(ds->surf); + wl_callback_add_listener(ds->frame_cb, &frame_listener, ds); + wl_surface_commit(ds->surf); +} + +void drwsurf_damage(struct drwsurf *ds, uint32_t x, uint32_t y, uint32_t w, uint32_t h) +{ + cairo_rectangle_int_t rect = { x, y, w, h }; + cairo_region_union_rectangle(ds->damage, &rect); + cairo_region_union_rectangle(ds->backport_damage, &rect); + drwsurf_register_frame_cb(ds); +} + +void +drwsurf_resize(struct drwsurf *ds, uint32_t w, uint32_t h, double s) +{ + ds->scale = s; + ds->width = ceil(w * s); + ds->height = ceil(h * s); + + if (ds->damage) + cairo_region_destroy(ds->damage); + ds->damage = cairo_region_create(); + if (ds->backport_damage) + cairo_region_destroy(ds->backport_damage); + ds->backport_damage = cairo_region_create(); + + ds->released = true; + + setup_buffer(ds, ds->back_buffer); + setup_buffer(ds, ds->display_buffer); +} + +void +drwsurf_backport(struct drwsurf *ds) +{ + cairo_save(ds->back_buffer->cairo); + + cairo_scale(ds->back_buffer->cairo, 1/ds->scale, 1/ds->scale); + cairo_set_operator(ds->back_buffer->cairo, CAIRO_OPERATOR_SOURCE); + + cairo_rectangle_int_t r = {0}; + for (int i = 0; i < cairo_region_num_rectangles(ds->backport_damage); i++) { + cairo_region_get_rectangle(ds->backport_damage, i, &r); + + cairo_set_source_surface(ds->back_buffer->cairo, ds->display_buffer->cairo_surf, 0, 0); + cairo_rectangle( + ds->back_buffer->cairo, + r.x * ds->scale, + r.y * ds->scale, + r.width * ds->scale, + r.height * ds->scale + ); + cairo_fill(ds->back_buffer->cairo); + }; + + cairo_restore(ds->back_buffer->cairo); + cairo_region_subtract(ds->backport_damage, ds->backport_damage); +} + +void +drwsurf_attach(struct drwsurf *ds) +{ + wl_surface_attach(ds->surf, ds->back_buffer->buf, 0, 0); + wl_surface_commit(ds->surf); + ds->released = false; + ds->attached = true; +} + +void +drwsurf_flip(struct drwsurf *ds) +{ + if (ds->released) + return; + ds->released = true; + struct drwbuf *tmp = ds->back_buffer; + ds->back_buffer = ds->display_buffer; + ds->display_buffer = tmp; + + drwsurf_backport(ds); +} + +void +drw_draw_text(struct drwsurf *ds, Color color, uint32_t x, uint32_t y, + uint32_t w, uint32_t h, uint32_t b, const char *label, + PangoFontDescription *font_description) +{ + drwsurf_flip(ds); + struct drwbuf *d = ds->back_buffer; + drwsurf_damage(ds, x, y, w, h); + + cairo_save(d->cairo); + + pango_layout_set_font_description(d->layout, font_description); + + cairo_set_source_rgba( + d->cairo, color.bgra[2] / (double)255, color.bgra[1] / (double)255, + color.bgra[0] / (double)255, color.bgra[3] / (double)255); + cairo_move_to(d->cairo, x + w / 2, y + h / 2); + + pango_layout_set_text(d->layout, label, -1); + pango_layout_set_width(d->layout, (w - (b * 2)) * PANGO_SCALE); + pango_layout_set_height(d->layout, (h - (b * 2)) * PANGO_SCALE); + + int width, height; + pango_layout_get_pixel_size(d->layout, &width, &height); + + cairo_rel_move_to(d->cairo, -width / 2, -height / 2); + + pango_cairo_show_layout(d->cairo, d->layout); + cairo_restore(d->cairo); +} + +void +drw_do_clear(struct drwsurf *ds, uint32_t x, uint32_t y, uint32_t w, uint32_t h) +{ + drwsurf_flip(ds); + struct drwbuf *d = ds->back_buffer; + drwsurf_damage(ds, x, y, w, h); + + cairo_save(d->cairo); + + cairo_set_operator(d->cairo, CAIRO_OPERATOR_CLEAR); + cairo_rectangle(d->cairo, x, y, w, h); + cairo_fill(d->cairo); + + cairo_restore(d->cairo); +} + +void +drw_do_rectangle(struct drwsurf *ds, Color color, uint32_t x, uint32_t y, + uint32_t w, uint32_t h, bool over, int rounding) +{ + drwsurf_flip(ds); + struct drwbuf *d = ds->back_buffer; + drwsurf_damage(ds, x, y, w, h); + + cairo_save(d->cairo); + + if (over) { + cairo_set_operator(d->cairo, CAIRO_OPERATOR_OVER); + } else { + cairo_set_operator(d->cairo, CAIRO_OPERATOR_SOURCE); + } + + if (rounding > 0) { + double radius = rounding / 1.0; + double degrees = M_PI / 180.0; + + cairo_new_sub_path (d->cairo); + cairo_arc (d->cairo, x + w - radius, y + radius, radius, -90 * degrees, 0 * degrees); + cairo_arc (d->cairo, x + w - radius, y + h - radius, radius, 0 * degrees, 90 * degrees); + cairo_arc (d->cairo, x + radius, y + h - radius, radius, 90 * degrees, 180 * degrees); + cairo_arc (d->cairo, x + radius, y + radius, radius, 180 * degrees, 270 * degrees); + cairo_close_path (d->cairo); + + cairo_set_source_rgba( + d->cairo, color.bgra[2] / (double)255, color.bgra[1] / (double)255, + color.bgra[0] / (double)255, color.bgra[3] / (double)255); + cairo_fill (d->cairo); + cairo_set_source_rgba(d->cairo, 0, 0, 0, 0.9); + cairo_set_line_width(d->cairo, 1.0); + cairo_stroke(d->cairo); + + cairo_restore(d->cairo); + } + else { + cairo_rectangle(d->cairo, x, y, w, h); + cairo_set_source_rgba( + d->cairo, color.bgra[2] / (double)255, color.bgra[1] / (double)255, + color.bgra[0] / (double)255, color.bgra[3] / (double)255); + cairo_fill(d->cairo); + + cairo_restore(d->cairo); + } +} + +void +drw_fill_rectangle(struct drwsurf *d, Color color, uint32_t x, uint32_t y, + uint32_t w, uint32_t h, int rounding) +{ + drw_do_rectangle(d, color, x, y, w, h, false, rounding); +} + +void +drw_over_rectangle(struct drwsurf *d, Color color, uint32_t x, uint32_t y, + uint32_t w, uint32_t h, int rounding) +{ + drw_do_rectangle(d, color, x, y, w, h, true, rounding); +} + +uint32_t +setup_buffer(struct drwsurf *drwsurf, struct drwbuf *drwbuf) +{ + int prev_size = drwbuf->size; + int stride = drwsurf->width * 4; + drwbuf->size = stride * drwsurf->height; + + int fd = allocate_shm_file(drwbuf->size); + if (fd == -1) { + return 1; + } + + if (drwbuf->pool_data) + munmap(drwbuf->pool_data, prev_size); + drwbuf->pool_data = + mmap(NULL, drwbuf->size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (drwbuf->pool_data == MAP_FAILED) { + close(fd); + return 1; + } + + if (drwbuf->buf) + wl_buffer_destroy(drwbuf->buf); + struct wl_shm_pool *pool = + wl_shm_create_pool(drwsurf->ctx->shm, fd, drwbuf->size); + drwbuf->buf = + wl_shm_pool_create_buffer(pool, 0, drwsurf->width, drwsurf->height, + stride, WL_SHM_FORMAT_ARGB8888); + wl_shm_pool_destroy(pool); + close(fd); + wl_buffer_add_listener(drwbuf->buf, &buffer_listener, drwsurf); + + + if (drwbuf->cairo_surf) + cairo_surface_destroy(drwbuf->cairo_surf); + drwbuf->cairo_surf = cairo_image_surface_create_for_data( + drwbuf->pool_data, CAIRO_FORMAT_ARGB32, drwsurf->width, + drwsurf->height, stride); + + if (drwbuf->cairo) + cairo_destroy(drwbuf->cairo); + drwbuf->cairo = cairo_create(drwbuf->cairo_surf); + cairo_scale(drwbuf->cairo, drwsurf->scale, drwsurf->scale); + cairo_set_antialias(drwbuf->cairo, CAIRO_ANTIALIAS_NONE); + drwbuf->layout = pango_cairo_create_layout(drwbuf->cairo); + pango_layout_set_auto_dir(drwbuf->layout, false); + cairo_save(drwbuf->cairo); + + return 0; +} diff --git a/packages/wvkbd/drw.h b/packages/wvkbd/drw.h new file mode 100644 index 0000000..060cb00 --- /dev/null +++ b/packages/wvkbd/drw.h @@ -0,0 +1,59 @@ +#ifndef __DRW_H +#define __DRW_H + +#include +#include + +struct drw { + struct wl_shm *shm; +}; +struct drwbuf { + uint32_t size; + struct wl_buffer *buf; + cairo_surface_t *cairo_surf; + cairo_t *cairo; + PangoLayout *layout; + unsigned char *pool_data; +}; +struct drwsurf { + uint32_t width, height; + double scale; + + struct drw *ctx; + struct wl_surface *surf; + struct wl_shm *shm; + struct wl_callback *frame_cb; + + cairo_region_t *damage, *backport_damage; + bool attached; + bool released; + + struct drwbuf *back_buffer; + struct drwbuf *display_buffer; +}; +struct kbd; + +void drwsurf_resize(struct drwsurf *ds, uint32_t w, uint32_t h, double s); +void drwsurf_attach(struct drwsurf *ds); + +typedef union { + uint8_t bgra[4]; + uint32_t color; +} Color; + +void drw_do_clear(struct drwsurf *ds, uint32_t x, uint32_t y, + uint32_t w, uint32_t h); +void drw_do_rectangle(struct drwsurf *ds, Color color, uint32_t x, uint32_t y, + uint32_t w, uint32_t h, bool fill, int rounding); +void drw_fill_rectangle(struct drwsurf *ds, Color color, uint32_t x, uint32_t y, + uint32_t w, uint32_t h, int rounding); +void drw_over_rectangle(struct drwsurf *ds, Color color, uint32_t x, uint32_t y, + uint32_t w, uint32_t h, int rounding); + +void drw_draw_text(struct drwsurf *ds, Color color, uint32_t x, uint32_t y, + uint32_t w, uint32_t h, uint32_t b, const char *label, + PangoFontDescription *font_description); + +uint32_t setup_buffer(struct drwsurf *ds, struct drwbuf *db); + +#endif diff --git a/packages/wvkbd/keyboard.c b/packages/wvkbd/keyboard.c new file mode 100644 index 0000000..d158403 --- /dev/null +++ b/packages/wvkbd/keyboard.c @@ -0,0 +1,695 @@ +#include "proto/virtual-keyboard-unstable-v1-client-protocol.h" +#include +#include +#include +#include +#include +#include "keyboard.h" +#include "drw.h" +#include "os-compatibility.h" + +#define MAX_LAYERS 25 + +/* lazy die macro */ +#define die(...) \ + fprintf(stderr, __VA_ARGS__); \ + exit(1) + +#ifndef KEYMAP +#error "make sure to define KEYMAP" +#endif +#include KEYMAP + +void +kbd_switch_layout(struct kbd *kb, struct layout *l, size_t layer_index) +{ + kb->prevlayout = kb->layout; + if ((kb->layer_index != kb->last_abc_index) && (kb->layout->abc)) { + kb->last_abc_layout = kb->layout; + kb->last_abc_index = kb->layer_index; + } + kb->layer_index = layer_index; + kb->layout = l; + if (kb->debug) + fprintf(stderr, "Switching to layout %s, layer_index %ld\n", + kb->layout->name, layer_index); + if (!l->keymap_name) + fprintf(stderr, "Layout has no keymap!"); // sanity check + if ((!kb->prevlayout) || + (strcmp(kb->prevlayout->keymap_name, kb->layout->keymap_name) != 0)) { + fprintf(stderr, "Switching to keymap %s\n", kb->layout->keymap_name); + create_and_upload_keymap(kb, kb->layout->keymap_name, 0, 0); + } + kbd_draw_layout(kb); +} + +void +kbd_next_layer(struct kbd *kb, struct key *k, bool invert) +{ + size_t layer_index = kb->layer_index; + if ((kb->mods & Ctrl) || (kb->mods & Alt) || (kb->mods & AltGr) || + ((bool)kb->compose)) { + // with modifiers ctrl/alt/altgr: switch to the first layer + layer_index = 0; + kb->mods = 0; + } else if ((kb->mods & Shift) || (kb->mods & CapsLock) || (invert)) { + // with modifiers shift/capslock or invert set: switch to the previous + // layout in the layer sequence + if (layer_index > 0) { + layer_index--; + } else { + size_t layercount = 0; + for (size_t i = 0; layercount == 0; i++) { + if (kb->landscape) { + if (kb->landscape_layers[i] == NumLayouts) + layercount = i; + } else { + if (kb->layers[i] == NumLayouts) + layercount = i; + } + } + layer_index = layercount - 1; + } + if (!invert) + kb->mods ^= Shift; + } else { + // normal behaviour: switch to the next layout in the layer sequence + layer_index++; + } + size_t layercount = 0; + for (size_t i = 0; layercount == 0; i++) { + if (kb->landscape) { + if (kb->landscape_layers[i] == NumLayouts) + layercount = i; + } else { + if (kb->layers[i] == NumLayouts) + layercount = i; + } + } + if (layer_index >= layercount) { + if (kb->debug) + fprintf(stderr, "wrapping layer_index back to start\n"); + layer_index = 0; + } + enum layout_id layer; + if (kb->landscape) { + layer = kb->landscape_layers[layer_index]; + } else { + layer = kb->layers[layer_index]; + } + if (((bool)kb->compose) && (k)) { + kb->compose = 0; + kbd_draw_key(kb, k, Unpress); + } + kbd_switch_layout(kb, &kb->layouts[layer], layer_index); +} + +uint8_t +kbd_get_rows(struct layout *l) +{ + uint8_t rows = 0; + struct key *k = l->keys; + while (k->type != Last) { + if (k->type == EndRow) { + rows++; + } + k++; + } + return rows + 1; +} + +enum layout_id * +kbd_init_layers(char *layer_names_list) +{ + enum layout_id *layers; + uint8_t numlayers = 0; + bool found; + char *s; + int i; + + layers = malloc(MAX_LAYERS * sizeof(enum layout_id)); + s = strtok(layer_names_list, ","); + while (s != NULL) { + if (numlayers + 1 == MAX_LAYERS) { + fprintf(stderr, "too many layers specified"); + exit(3); + } + found = false; + for (i = 0; i < NumLayouts - 1; i++) { + if (layouts[i].name && strcmp(layouts[i].name, s) == 0) { + fprintf(stderr, "layer #%d = %s\n", numlayers + 1, s); + layers[numlayers++] = i; + found = true; + break; + } + } + if (!found) { + fprintf(stderr, "No such layer: %s\n", s); + exit(3); + } + s = strtok(NULL, ","); + } + layers[numlayers] = NumLayouts; // mark the end of the sequence + if (numlayers == 0) { + fprintf(stderr, "No layers defined\n"); + exit(3); + } + + return layers; +} + +void +kbd_init(struct kbd *kb, struct layout *layouts, char *layer_names_list, + char *landscape_layer_names_list) +{ + int i; + + fprintf(stderr, "Initializing keyboard\n"); + + kb->layouts = layouts; + + for (i = 0; i < NumLayouts - 1; i++) + ; + fprintf(stderr, "Found %d layouts\n", i); + + kb->layer_index = 0; + kb->last_abc_index = 0; + + if (layer_names_list) + kb->layers = kbd_init_layers(layer_names_list); + if (landscape_layer_names_list) + kb->landscape_layers = kbd_init_layers(landscape_layer_names_list); + + i = 0; + enum layout_id lid = kb->layers[0]; + while (lid != NumLayouts) { + lid = kb->layers[++i]; + } + fprintf(stderr, "Found %d layers\n", i); + + enum layout_id layer; + if (kb->landscape) { + layer = kb->landscape_layers[kb->layer_index]; + } else { + layer = kb->layers[kb->layer_index]; + } + + kb->layout = &kb->layouts[layer]; + kb->last_abc_layout = &kb->layouts[layer]; + + /* upload keymap */ + create_and_upload_keymap(kb, kb->layout->keymap_name, 0, 0); +} + +void +kbd_init_layout(struct layout *l, uint32_t width, uint32_t height) +{ + uint32_t x = 0, y = 0; + uint8_t rows = kbd_get_rows(l); + + l->keyheight = height / rows; + + struct key *k = l->keys; + double rowlength = kbd_get_row_length(k); + double rowwidth = 0.0; + while (k->type != Last) { + if (k->type == EndRow) { + y += l->keyheight; + x = 0; + rowwidth = 0.0; + rowlength = kbd_get_row_length(k + 1); + } else if (k->width > 0) { + k->x = x; + k->y = y; + k->w = ((double)width / rowlength) * k->width; + x += k->w; + rowwidth += k->width; + if (x < (rowwidth / rowlength) * (double)width) { + k->w++; + x++; + } + } + k->h = l->keyheight; + k++; + } +} + +double +kbd_get_row_length(struct key *k) +{ + double l = 0.0; + while ((k->type != Last) && (k->type != EndRow)) { + l += k->width; + k++; + } + return l; +} + +struct key * +kbd_get_key(struct kbd *kb, uint32_t x, uint32_t y) +{ + struct layout *l = kb->layout; + struct key *k = l->keys; + if (kb->debug) + fprintf(stderr, "get key: +%d+%d\n", x, y); + while (k->type != Last) { + if ((k->type != EndRow) && (k->type != Pad) && (k->type != Pad) && + (x >= k->x) && (y >= k->y) && (x < k->x + k->w) && + (y < k->y + k->h)) { + return k; + } + k++; + } + return NULL; +} + +size_t +kbd_get_layer_index(struct kbd *kb, struct layout *l) +{ + for (size_t i = 0; i < NumLayouts - 1; i++) { + if (l == &kb->layouts[i]) { + return i; + } + } + return 0; +} + +void +kbd_unpress_key(struct kbd *kb, uint32_t time) +{ + bool unlatch_shift, unlatch_ctrl, unlatch_alt, unlatch_super, unlatch_altgr; + unlatch_shift = unlatch_ctrl = unlatch_alt = unlatch_super = unlatch_altgr = false; + + if (kb->last_press) { + unlatch_shift = (kb->mods & Shift) == Shift; + unlatch_ctrl = (kb->mods & Ctrl) == Ctrl; + unlatch_alt = (kb->mods & Alt) == Alt; + unlatch_super = (kb->mods & Super) == Super; + unlatch_altgr = (kb->mods & AltGr) == AltGr; + + if (unlatch_shift) kb->mods ^= Shift; + if (unlatch_ctrl) kb->mods ^= Ctrl; + if (unlatch_alt) kb->mods ^= Alt; + if (unlatch_super) kb->mods ^= Super; + if (unlatch_altgr) kb->mods ^= AltGr; + + if (unlatch_shift||unlatch_ctrl||unlatch_alt||unlatch_super||unlatch_altgr) { + zwp_virtual_keyboard_v1_modifiers(kb->vkbd, kb->mods, 0, 0, 0); + } + + if (kb->last_press->type == Copy) { + zwp_virtual_keyboard_v1_key(kb->vkbd, time, 127, // COMP key + WL_KEYBOARD_KEY_STATE_RELEASED); + } else { + if ((kb->last_press->code == KEY_SPACE) && (unlatch_shift)) { + // shift + space is tab + zwp_virtual_keyboard_v1_key(kb->vkbd, time, KEY_TAB, + WL_KEYBOARD_KEY_STATE_RELEASED); + } else { + zwp_virtual_keyboard_v1_key(kb->vkbd, time, + kb->last_press->code, + WL_KEYBOARD_KEY_STATE_RELEASED); + } + } + + if (kb->compose >= 2) { + kb->compose = 0; + kbd_switch_layout(kb, kb->last_abc_layout, kb->last_abc_index); + } else if (unlatch_shift||unlatch_ctrl||unlatch_alt||unlatch_super||unlatch_altgr) { + kbd_draw_layout(kb); + } else { + kbd_draw_key(kb, kb->last_press, Unpress); + } + + kb->last_press = NULL; + } +} + +void +kbd_release_key(struct kbd *kb, uint32_t time) +{ + kbd_unpress_key(kb, time); + if (kb->print_intersect && kb->last_swipe) { + printf("\n"); + // Important so autocompleted words get typed in time + fflush(stdout); + kbd_draw_layout(kb); + kb->last_swipe = NULL; + } + + kbd_clear_last_popup(kb); +} + +void +kbd_motion_key(struct kbd *kb, uint32_t time, uint32_t x, uint32_t y) +{ + // Output intersecting keys + // (for external 'swiping'-based accelerators). + if (kb->print_intersect) { + if (kb->last_press) { + kbd_unpress_key(kb, time); + // Redraw last press as a swipe. + kbd_draw_key(kb, kb->last_swipe, Swipe); + } + struct key *intersect_key; + intersect_key = kbd_get_key(kb, x, y); + if (intersect_key && (!kb->last_swipe || + intersect_key->label != kb->last_swipe->label)) { + kbd_print_key_stdout(kb, intersect_key); + kb->last_swipe = intersect_key; + kbd_draw_key(kb, kb->last_swipe, Swipe); + } + } else { + kbd_unpress_key(kb, time); + } + + kbd_clear_last_popup(kb); +} + +void +kbd_press_key(struct kbd *kb, struct key *k, uint32_t time) +{ + if ((kb->compose == 1) && (k->type != Compose) && (k->type != Mod)) { + if ((k->type == NextLayer) || (k->type == BackLayer) || + ((k->type == Code) && (k->code == KEY_SPACE))) { + kb->compose = 0; + if (kb->debug) + fprintf(stderr, "showing layout index\n"); + kbd_switch_layout(kb, &kb->layouts[Index], 0); + return; + } else if (k->layout) { + kb->compose++; + if (kb->debug) + fprintf(stderr, "showing compose %d\n", kb->compose); + kbd_switch_layout(kb, k->layout, + kbd_get_layer_index(kb, k->layout)); + return; + } else { + return; + } + } + + switch (k->type) { + case Code: + if (k->code_mod) { + if (k->reset_mod) { + zwp_virtual_keyboard_v1_modifiers(kb->vkbd, k->code_mod, 0, 0, + 0); + } else { + zwp_virtual_keyboard_v1_modifiers( + kb->vkbd, kb->mods ^ k->code_mod, 0, 0, 0); + } + } else { + zwp_virtual_keyboard_v1_modifiers(kb->vkbd, kb->mods, 0, 0, 0); + } + kb->last_swipe = kb->last_press = k; + kbd_draw_key(kb, k, Press); + if ((k->code == KEY_SPACE) && (kb->mods & Shift)) { + // shift space is tab + zwp_virtual_keyboard_v1_modifiers(kb->vkbd, 0, 0, 0, 0); + zwp_virtual_keyboard_v1_key(kb->vkbd, time, KEY_TAB, + WL_KEYBOARD_KEY_STATE_PRESSED); + } else { + zwp_virtual_keyboard_v1_key(kb->vkbd, time, kb->last_press->code, + WL_KEYBOARD_KEY_STATE_PRESSED); + } + if (kb->print || kb->print_intersect) + kbd_print_key_stdout(kb, k); + if (kb->compose) { + if (kb->debug) + fprintf(stderr, "pressing composed key\n"); + kb->compose++; + } + break; + case Mod: + kb->mods ^= k->code; + if ((k->code == Shift) || (k->code == CapsLock)) { + kbd_draw_layout(kb); + } else { + if (kb->mods & k->code) { + kbd_draw_key(kb, k, Press); + } else { + kbd_draw_key(kb, k, Unpress); + } + } + zwp_virtual_keyboard_v1_modifiers(kb->vkbd, kb->mods, 0, 0, 0); + break; + case Layout: + // switch to the layout determined by the key + kbd_switch_layout(kb, k->layout, kbd_get_layer_index(kb, k->layout)); + // reset previous layout to default/first so we don't get any weird + // cycles + kb->last_abc_index = 0; + if (kb->landscape) { + kb->last_abc_layout = &kb->layouts[kb->landscape_layers[0]]; + } else { + kb->last_abc_layout = &kb->layouts[kb->layers[0]]; + } + break; + case Compose: + // switch to the associated layout determined by the *next* keypress + if (kb->compose == 0) { + kb->compose = 1; + } else { + kb->compose = 0; + } + if ((bool)kb->compose) { + kbd_draw_key(kb, k, Press); + } else { + kbd_draw_key(kb, k, Unpress); + } + break; + case NextLayer: //(also handles previous layer when shift modifier is on, or + //"first layer" with other modifiers) + kbd_next_layer(kb, k, false); + break; + case BackLayer: // triggered when "Abc" keys are pressed + // switch to the last active alphabetical layout + if (kb->last_abc_layout) { + kb->compose = 0; + kbd_switch_layout(kb, kb->last_abc_layout, kb->last_abc_index); + // reset previous layout to default/first so we don't get any weird + // cycles + kb->last_abc_index = 0; + if (kb->landscape) { + kb->last_abc_layout = &kb->layouts[kb->landscape_layers[0]]; + } else { + kb->last_abc_layout = &kb->layouts[kb->layers[0]]; + } + } + break; + case Copy: + // copy code as unicode chr by setting a temporary keymap + kb->last_swipe = kb->last_press = k; + kbd_draw_key(kb, k, Press); + if (kb->debug) + fprintf(stderr, "pressing copy key\n"); + create_and_upload_keymap(kb, kb->layout->keymap_name, k->code, + k->code_mod); + zwp_virtual_keyboard_v1_modifiers(kb->vkbd, kb->mods, 0, 0, 0); + zwp_virtual_keyboard_v1_key(kb->vkbd, time, 127, // COMP key + WL_KEYBOARD_KEY_STATE_PRESSED); + if (kb->print || kb->print_intersect) + kbd_print_key_stdout(kb, k); + break; + default: + break; + } +} + +void +kbd_print_key_stdout(struct kbd *kb, struct key *k) +{ + /* printed keys may slightly differ from the actual output + * we generally print what is on the key LABEL and only support the normal + * and shift layers. Other modifiers produce no output (Ctrl,Alt) + * */ + + bool handled = true; + if (k->type == Code) { + switch (k->code) { + case KEY_SPACE: + printf(" "); + break; + case KEY_ENTER: + printf("\n"); + break; + case KEY_BACKSPACE: + printf("\b"); + break; + case KEY_TAB: + printf("\t"); + break; + default: + handled = false; + break; + } + } else if (k->type != Copy) { + return; + } + + if (!handled) { + if ((kb->mods & Shift) || + ((kb->mods & CapsLock) & (strlen(k->label) == 1 && isalpha(k->label[0])))) + printf("%s", k->shift_label); + else if (!(kb->mods & Ctrl) && !(kb->mods & Alt) && !(kb->mods & Super)) + printf("%s", k->label); + } + fflush(stdout); +} + +void +kbd_clear_last_popup(struct kbd *kb) +{ + if (kb->last_popup_w && kb->last_popup_h) { + drw_do_clear(kb->popup_surf, kb->last_popup_x, kb->last_popup_y, + kb->last_popup_w, kb->last_popup_h); + kb->last_popup_w = kb->last_popup_h = 0; + } +} + +void +kbd_draw_key(struct kbd *kb, struct key *k, enum key_draw_type type) +{ + const char *label = ((kb->mods & Shift)||((kb->mods & CapsLock) && + strlen(k->label) == 1 && isalpha(k->label[0]))) ? k->shift_label : k->label; + if (kb->debug) + fprintf(stderr, "Draw key +%d+%d %dx%d -> %s\n", k->x, k->y, k->w, k->h, + label); + struct clr_scheme *scheme = &kb->schemes[k->scheme]; + + switch (type) { + case None: + case Unpress: + draw_inset(kb->surf, k->x, k->y, k->w, k->h, KBD_KEY_BORDER, + scheme->fg, scheme->rounding); + break; + case Press: + draw_inset(kb->surf, k->x, k->y, k->w, k->h, KBD_KEY_BORDER, + scheme->high, scheme->rounding); + break; + case Swipe: + draw_over_inset(kb->surf, k->x, k->y, k->w, k->h, KBD_KEY_BORDER, + scheme->swipe, scheme->rounding); + break; + } + + drw_draw_text(kb->surf, scheme->text, k->x, k->y, k->w, k->h, + KBD_KEY_BORDER, label, scheme->font_description); + + if (type == Press || type == Unpress) { + kbd_clear_last_popup(kb); + + kb->last_popup_x = k->x; + kb->last_popup_y = kb->h + k->y - k->h; + kb->last_popup_w = k->w; + kb->last_popup_h = k->h; + + drw_fill_rectangle(kb->popup_surf, scheme->bg, k->x, + kb->last_popup_y, k->w, k->h, scheme->rounding); + draw_inset(kb->popup_surf, k->x, kb->last_popup_y, k->w, k->h, + KBD_KEY_BORDER, scheme->high, scheme->rounding); + drw_draw_text(kb->popup_surf, scheme->text, k->x, kb->last_popup_y, + k->w, k->h, KBD_KEY_BORDER, label, + scheme->font_description); + } +} + +void +kbd_draw_layout(struct kbd *kb) +{ + struct drwsurf *d = kb->surf; + struct key *next_key = kb->layout->keys; + if (kb->debug) + fprintf(stderr, "Draw layout\n"); + + drw_fill_rectangle(d, kb->schemes[0].bg, 0, 0, kb->w, kb->h, 0); + + while (next_key->type != Last) { + if ((next_key->type == Pad) || (next_key->type == EndRow)) { + next_key++; + continue; + } + if ((next_key->type == Mod && kb->mods & next_key->code) || + (next_key->type == Compose && kb->compose)) { + kbd_draw_key(kb, next_key, Press); + } else { + kbd_draw_key(kb, next_key, None); + } + next_key++; + } +} + +void +kbd_resize(struct kbd *kb, struct layout *layouts, uint8_t layoutcount) +{ + fprintf(stderr, "Resize %dx%d %f, %d layouts\n", kb->w, kb->h, kb->scale, + layoutcount); + + drwsurf_resize(kb->surf, kb->w, kb->h, kb->scale); + drwsurf_resize(kb->popup_surf, kb->w, kb->h * 2, kb->scale); + for (int i = 0; i < layoutcount; i++) { + if (kb->debug) { + if (layouts[i].name) + fprintf(stderr, "Initialising layout %s, keymap %s\n", + layouts[i].name, layouts[i].keymap_name); + else + fprintf(stderr, "Initialising unnamed layout %d, keymap %s\n", + i, layouts[i].keymap_name); + } + kbd_init_layout(&layouts[i], kb->w, kb->h); + } + kbd_draw_layout(kb); +} + +void +draw_inset(struct drwsurf *ds, uint32_t x, uint32_t y, uint32_t width, + uint32_t height, uint32_t border, Color color, int rounding) +{ + drw_fill_rectangle(ds, color, x + border, y + border, width - (border * 2), + height - (border * 2), rounding); +} +void +draw_over_inset(struct drwsurf *ds, uint32_t x, uint32_t y, uint32_t width, + uint32_t height, uint32_t border, Color color, int rounding) +{ + drw_over_rectangle(ds, color, x + border, y + border, width - (border * 2), + height - (border * 2), rounding); +} + +void +create_and_upload_keymap(struct kbd *kb, const char *name, uint32_t comp_unichr, + uint32_t comp_shift_unichr) +{ + int keymap_index = -1; + for (int i = 0; i < NUMKEYMAPS; i++) { + if (!strcmp(keymap_names[i], name)) { + keymap_index = i; + } + } + if (keymap_index == -1) { + fprintf(stderr, "No such keymap defined: %s\n", name); + exit(9); + } + const char *keymap_template = keymaps[keymap_index]; + size_t keymap_size = strlen(keymap_template) + 64; + char *keymap_str = malloc(keymap_size); + sprintf(keymap_str, keymap_template, comp_unichr, comp_shift_unichr); + keymap_size = strlen(keymap_str); + int keymap_fd = os_create_anonymous_file(keymap_size); + if (keymap_fd < 0) { + die("could not create keymap fd\n"); + } + void *ptr = mmap(NULL, keymap_size, PROT_READ | PROT_WRITE, MAP_SHARED, + keymap_fd, 0); + if (ptr == (void *)-1) { + die("could not map keymap data\n"); + } + if (kb->vkbd == NULL) { + die("kb.vkbd = NULL\n"); + } + strcpy(ptr, keymap_str); + zwp_virtual_keyboard_v1_keymap(kb->vkbd, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, + keymap_fd, keymap_size); + free((void *)keymap_str); +} diff --git a/packages/wvkbd/keyboard.h b/packages/wvkbd/keyboard.h new file mode 100644 index 0000000..ebc0438 --- /dev/null +++ b/packages/wvkbd/keyboard.h @@ -0,0 +1,155 @@ +#ifndef __KEYBOARD_H +#define __KEYBOARD_H + +#include "drw.h" + +#define MAX_LAYERS 25 + +enum key_type; +enum key_modifier_type; +struct clr_scheme; +struct key; +struct layout; +struct kbd; + +enum key_type { + Pad = 0, // Padding, not a pressable key + Code, // A normal key emitting a keycode + Mod, // A modifier key + Copy, // Copy key, copies the unicode value specified in code (creates and + // activates temporary keymap) + // used for keys that are not part of the keymap + Layout, // Layout switch to a specific layout + BackLayer, // Layout switch to the layout that was previously active + NextLayer, // Layout switch to the next layout in the layers sequence + Compose, // Compose modifier key, switches to a specific associated layout + // upon next keypress + EndRow, // Incidates the end of a key row + Last, // Indicated the end of a layout +}; + +/* Modifiers passed to the virtual_keyboard protocol. They are based on + * wayland's wl_keyboard, which doesn't document them. + */ +enum key_modifier_type { + NoMod = 0, + Shift = 1, + CapsLock = 2, + Ctrl = 4, + Alt = 8, + Super = 64, + AltGr = 128, +}; + +enum key_draw_type { + None = 0, + Unpress, + Press, + Swipe, +}; + +struct clr_scheme { + Color fg; + Color bg; + Color high; + Color swipe; + Color text; + char *font; + int rounding; + PangoFontDescription *font_description; +}; + +struct key { + const char *label; // primary label + const char *shift_label; // secondary label + const double width; // relative width (1.0) + const enum key_type type; + + const uint32_t + code; /* code: key scancode or modifier name (see + * `/usr/include/linux/input-event-codes.h` for scancode names, and + * `keyboard.h` for modifiers) + * XKB keycodes are +8 */ + struct layout *layout; // pointer back to the parent layout that holds this + // key + const uint32_t code_mod; /* modifier to force when this key is pressed */ + uint8_t scheme; // index of the scheme to use + bool reset_mod; /* reset modifiers when clicked */ + + // actual coordinates on the surface (pixels), will be computed automatically + // for all keys + uint32_t x, y, w, h; +}; + +struct layout { + struct key *keys; + const char *keymap_name; + const char *name; + bool abc; //is this an alphabetical/abjad layout or not? (i.e. something that is a primary input layout) + uint32_t keyheight; // absolute height (pixels) +}; + +struct kbd { + bool debug; + + struct layout *layout; + struct clr_scheme *schemes; + + bool print; + bool print_intersect; + uint32_t w, h; + double scale; + double preferred_scale, preferred_fractional_scale; + bool landscape; + uint8_t mods; + uint8_t compose; + struct key *last_press; + struct key *last_swipe; + struct layout *prevlayout; //the previous layout, needed to keep track of keymap changes + size_t layer_index; + struct layout *last_abc_layout; //the last alphabetical layout to fall back to (may be further away than prevlayout) + size_t last_abc_index; //the layer index of the last alphabetical layout + + struct layout *layouts; + enum layout_id *layers; + enum layout_id *landscape_layers; + + struct drwsurf *surf; + struct drwsurf *popup_surf; + struct zwp_virtual_keyboard_v1 *vkbd; + + uint32_t last_popup_x, last_popup_y, last_popup_w, last_popup_h; +}; + +void draw_inset(struct drwsurf *ds, uint32_t x, uint32_t y, uint32_t width, + uint32_t height, uint32_t border, Color color, int rounding); +void draw_over_inset(struct drwsurf *ds, uint32_t x, uint32_t y, uint32_t width, + uint32_t height, uint32_t border, Color color, int rounding); + +void kbd_init(struct kbd *kb, struct layout *layouts, + char *layer_names_list, char *landscape_layer_names_list); +void kbd_init_layout(struct layout *l, uint32_t width, uint32_t height); +struct key *kbd_get_key(struct kbd *kb, uint32_t x, uint32_t y); +size_t kbd_get_layer_index(struct kbd *kb, struct layout *l); +void kbd_unpress_key(struct kbd *kb, uint32_t time); +void kbd_release_key(struct kbd *kb, uint32_t time); +void kbd_motion_key(struct kbd *kb, uint32_t time, uint32_t x, uint32_t y); +void kbd_press_key(struct kbd *kb, struct key *k, uint32_t time); +void kbd_print_key_stdout(struct kbd *kb, struct key *k); +void kbd_clear_last_popup(struct kbd *kb); +void kbd_draw_key(struct kbd *kb, struct key *k, enum key_draw_type); +void kbd_draw_layout(struct kbd *kb); +void kbd_resize(struct kbd *kb, struct layout *layouts, uint8_t layoutcount); +uint8_t kbd_get_rows(struct layout *l); +double kbd_get_row_length(struct key *k); +void kbd_next_layer(struct kbd *kb, struct key *k, bool invert); +void kbd_switch_layout(struct kbd *kb, struct layout *l, size_t layer_index); + +void create_and_upload_keymap(struct kbd *kb, const char *name, + uint32_t comp_unichr, uint32_t comp_shift_unichr); + +#ifndef LAYOUT +#error "make sure to define LAYOUT" +#endif +#include LAYOUT +#endif diff --git a/packages/wvkbd/keymap.mobintl.h b/packages/wvkbd/keymap.mobintl.h new file mode 100644 index 0000000..aae951d --- /dev/null +++ b/packages/wvkbd/keymap.mobintl.h @@ -0,0 +1,10245 @@ +#define NUMKEYMAPS 7 + +static const char *keymap_names[] = {"latin", "cyrillic", "arabic", + "georgian", "greek", "persian", "hebrew" }; + +static const char *keymaps[NUMKEYMAPS] = { + + // LATIN + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam, F1 ] };\ + key { [ 2, at, F2 ] };\ + key { [ 3, numbersign, F3 ] };\ + key { [ 4, dollar, F4 ] };\ + key { [ 5, percent, F5 ] };\ + key { [ 6, asciicircum, F6 ] };\ + key { [ 7, ampersand, F7 ] };\ + key { [ 8, asterisk, F8 ] };\ + key { [ 9, parenleft, F9 ] };\ + key { [ 0, parenright, F10 ] };\ + key { [ minus, underscore, EuroSign ] };\ + key { [ equal, plus, sterling ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ q, Q, 1 ] };\ + key { [ w, W, 2 ] };\ + key { [ e, E, 3 ] };\ + key { [ r, R, 4 ] };\ + key { [ t, T, 5 ] };\ + key { [ y, Y, 6 ] };\ + key { [ u, U, 7 ] };\ + key { [ i, I, 8 ] };\ + key { [ o, O, 9 ] };\ + key { [ p, P, 0 ] };\ + key { [ bracketleft, braceleft ] };\ + key { [ bracketright, braceright ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ a, A, minus ] };\ + key { [ s, S, at ] };\ + key { [ d, D, asterisk ] };\ + key { [ f, F, asciicircum ] };\ + key { [ g, G, colon ] };\ + key { [ h, H, semicolon ] };\ + key { [ j, J, parenleft ] };\ + key { [ k, K, parenright ] };\ + key { [ l, L, asciitilde ] };\ + key { [ semicolon, colon ] };\ + key { [ apostrophe, quotedbl ] };\ + key { [ grave, asciitilde ] };\ + key { [ Shift_L ] };\ + key { [ backslash, bar ] };\ + key { [ z, Z, slash ] };\ + key { [ x, X, apostrophe ] };\ + key { [ c, C, quotedbl ] };\ + key { [ v, V, plus ] };\ + key { [ b, B, equal ] };\ + key { [ n, N, question ] };\ + key { [ m, M, exclam ] };\ + key { [ comma, apostrophe, less, U00AB] };\ + key { [ period, question, greater, U00BB] };\ + key { [ slash, greater ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + // CYRILLIC + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd cyrillic\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam ] };\ + key { [ 2, at ] };\ + key { [ 3, numbersign ] };\ + key { [ 4, semicolon ] };\ + key { [ 5, percent ] };\ + key { [ 6, colon ] };\ + key { [ 7, ampersand ] };\ + key { [ 8, asterisk ] };\ + key { [ 9, parenleft ] };\ + key { [ 0, parenright ] };\ + key { [ minus, underscore ] };\ + key { [ comma, apostrophe ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ Cyrillic_io, Cyrillic_IO ] };\ + key { [ Cyrillic_shorti, Cyrillic_SHORTI ] };\ + key { [ Cyrillic_tse, Cyrillic_TSE ] };\ + key { [ Cyrillic_u, Cyrillic_U ] };\ + key { [ Cyrillic_ka, Cyrillic_KA ] };\ + key { [ Cyrillic_ie, Cyrillic_IE ] };\ + key { [ Cyrillic_en, Cyrillic_EN ] };\ + key { [ Cyrillic_ghe, Cyrillic_GHE ] };\ + key { [ Cyrillic_sha, Cyrillic_SHA ] };\ + key { [ Cyrillic_shcha, Cyrillic_SHCHA ] };\ + key { [ Cyrillic_ze, Cyrillic_ZE ] };\ + key { [ Cyrillic_ha, Cyrillic_HA ] };\ + key { [ Cyrillic_hardsign, Cyrillic_HARDSIGN ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ Cyrillic_ef, Cyrillic_EF ] };\ + key { [ Cyrillic_yeru, Cyrillic_YERU ] };\ + key { [ Cyrillic_ve, Cyrillic_VE ] };\ + key { [ Cyrillic_a, Cyrillic_A ] };\ + key { [ Cyrillic_pe, Cyrillic_PE ] };\ + key { [ Cyrillic_er, Cyrillic_ER ] };\ + key { [ Cyrillic_o, Cyrillic_O ] };\ + key { [ Cyrillic_el, Cyrillic_EL ] };\ + key { [ Cyrillic_de, Cyrillic_DE ] };\ + key { [ Cyrillic_zhe, Cyrillic_ZHE ] };\ + key { [ Cyrillic_e, Cyrillic_E ] };\ + key { [ Shift_L ] };\ + key { [ Cyrillic_ya, Cyrillic_YA ] };\ + key { [ Cyrillic_che, Cyrillic_CHE ] };\ + key { [ Cyrillic_es, Cyrillic_ES ] };\ + key { [ Cyrillic_em, Cyrillic_EM ] };\ + key { [ Cyrillic_i, Cyrillic_I ] };\ + key { [ Cyrillic_te, Cyrillic_TE ] };\ + key { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };\ + key { [ Cyrillic_be, Cyrillic_BE ] };\ + key { [ Cyrillic_yu, Cyrillic_YU ] };\ + key { [ period, question ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + // ARABIC + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd arabic\";\ + key { [ Escape ] };\ + key { [ Arabic_thal, Arabic_shadda, Arabic_percent, U0609 ]};\ + key { [ Arabic_1, exclam, 1, NoSymbol ]};\ + key { [ Arabic_2, at, 2, NoSymbol ]};\ + key { [ Arabic_3, numbersign, 3, NoSymbol ]};\ + key { [ Arabic_4, dollar, 4, NoSymbol ]};\ + key { [ Arabic_5, percent, 5, U2030 ]};\ + key { [ Arabic_6, asciicircum, 6, NoSymbol ]};\ + key { [ Arabic_7, ampersand, 7, NoSymbol ]};\ + key { [ Arabic_8, asterisk, 8, NoSymbol ]};\ + key { [ Arabic_9, parenright, 9, NoSymbol ]};\ + key { [ Arabic_0, parenleft, 0, NoSymbol ]};\ + key { [ minus, underscore, endash, U2011 ]};\ + key { [ equal, plus, notequal, U2248 ]};\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ Arabic_dad, Arabic_fatha, NoSymbol, U2066 ]};\ + key { [ Arabic_sad, Arabic_fathatan, NoSymbol, U2067 ]};\ + key { [ Arabic_theh, Arabic_damma, NoSymbol, U2068 ]};\ + key { [ Arabic_qaf, Arabic_dammatan, NoSymbol, U2069 ]};\ + key { [ Arabic_feh, UFEF9, Arabic_veh, NoSymbol ]};\ + key { [ Arabic_ghain, Arabic_hamzaunderalef, NoSymbol, U202A ]};\ + key { [ Arabic_ain, grave, NoSymbol, U202B ]};\ + key { [ Arabic_ha, division, NoSymbol, U202C ]};\ + key { [ Arabic_khah, multiply, NoSymbol, NoSymbol ]};\ + key { [ Arabic_hah, Arabic_semicolon, NoSymbol, U200E ]};\ + key { [ Arabic_jeem, less, Arabic_tcheh, U200F ]};\ + key { [ Arabic_dal, greater, NoSymbol, U061C ]};\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ Arabic_sheen, Arabic_kasra, NoSymbol, NoSymbol ]};\ + key { [ Arabic_seen, Arabic_kasratan, NoSymbol, NoSymbol ]};\ + key { [ Arabic_yeh, bracketright, NoSymbol, NoSymbol ]};\ + key { [ Arabic_beh, bracketleft, Arabic_peh, NoSymbol ]};\ + key { [ Arabic_lam, U0FEF7, NoSymbol, NoSymbol ]};\ + key { [ Arabic_alef, Arabic_hamzaonalef, U0671, NoSymbol ]};\ + key { [ Arabic_teh, Arabic_tatweel, NoSymbol, NoSymbol ]};\ + key { [ Arabic_noon, Arabic_comma, U066B, NoSymbol ]};\ + key { [ Arabic_meem, slash, NoSymbol, NoSymbol ]};\ + key { [ Arabic_kaf, colon, Arabic_gaf, NoSymbol ]};\ + key { [ Arabic_tah, quotedbl, U27E9, U200D ]};\ + key { [ Shift_L ] };\ + key { [ Arabic_thal, asciitilde, guillemotright, U203A ]};\ + key { [ Arabic_hamza, Arabic_sukun, guillemotleft, U2039 ]};\ + key { [Arabic_hamzaonwaw, braceright, NoSymbol, NoSymbol ]};\ + key { [ Arabic_ra, braceleft, NoSymbol, NoSymbol ]};\ + key { [ UFEFB, UFEF5, NoSymbol, NoSymbol ]};\ + key { [Arabic_tehmarbuta, apostrophe, NoSymbol, NoSymbol ]};\ + key { [ Arabic_waw, comma, U066C, NoSymbol ]};\ + key { [ Arabic_zah, Arabic_question_mark, U066D, U200C ]};\ + key { [ Arabic_zain, period, Arabic_jeh, NoSymbol ]};\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + // GEORGIAN + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd georgian\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam, F1 ] };\ + key { [ 2, at, F2 ] };\ + key { [ 3, numbersign, F3 ] };\ + key { [ 4, dollar, F4 ] };\ + key { [ 5, percent, F5 ] };\ + key { [ 6, asciicircum, F6 ] };\ + key { [ 7, ampersand, F7 ] };\ + key { [ 8, asterisk, F8 ] };\ + key { [ 9, parenleft, F9 ] };\ + key { [ 0, parenright, F10 ] };\ + key { [ minus, underscore, EuroSign ] };\ + key { [ equal, plus, sterling ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ Georgian_khar, Q, 1 ] };\ + key { [ Georgian_cil, Georgian_char, 2 ] };\ + key { [ Georgian_en, E, 3 ] };\ + key { [ Georgian_rae, Georgian_ghan, 4 ] };\ + key { [ Georgian_tar, Georgian_tan, 5 ] };\ + key { [ Georgian_qar, Y, 6 ] };\ + key { [ Georgian_un, U, 7 ] };\ + key { [ Georgian_in, I, 8 ] };\ + key { [ Georgian_on, O, 9 ] };\ + key { [ Georgian_par, P, 0 ] };\ + key { [ bracketleft, braceleft ] };\ + key { [ bracketright, braceright ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ Georgian_an, A, minus ] };\ + key { [ Georgian_san, Georgian_shin, at ] };\ + key { [ Georgian_don, D, asterisk ] };\ + key { [ Georgian_phar, F, asciicircum ] };\ + key { [ Georgian_gan, G, colon ] };\ + key { [ Georgian_hae, H, semicolon ] };\ + key { [ Georgian_jhan, Georgian_zhar, parenleft ] };\ + key { [ Georgian_kan, K, parenright ] };\ + key { [ Georgian_las, L, asciitilde ] };\ + key { [ semicolon, colon ] };\ + key { [ apostrophe, quotedbl ] };\ + key { [ grave, asciitilde ] };\ + key { [ Shift_L ] };\ + key { [ backslash, bar ] };\ + key { [ Georgian_zen, Georgian_jil, slash ] };\ + key { [ Georgian_xan, X, apostrophe ] };\ + key { [ Georgian_can, Georgian_chin, quotedbl ] };\ + key { [ Georgian_vin, V, plus ] };\ + key { [ Georgian_ban, B, equal ] };\ + key { [ Georgian_nar, N, question ] };\ + key { [ Georgian_man, M, exclam ] };\ + key { [ comma, apostrophe, less, U00AB] };\ + key { [ period, question, greater, U00BB] };\ + key { [ slash, greater ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + // GREEK + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd greek\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam, F1 ] };\ + key { [ 2, at, F2 ] };\ + key { [ 3, numbersign, F3 ] };\ + key { [ 4, dollar, F4 ] };\ + key { [ 5, percent, F5 ] };\ + key { [ 6, asciicircum, F6 ] };\ + key { [ 7, ampersand, F7 ] };\ + key { [ 8, asterisk, F8 ] };\ + key { [ 9, parenleft, F9 ] };\ + key { [ 0, parenright, F10 ] };\ + key { [ minus, underscore, EuroSign ] };\ + key { [ equal, plus, sterling ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ semicolon, colon, 1 ] };\ + key { [ Greek_finalsmallsigma, Greek_SIGMA, 2 ] };\ + key { [ Greek_epsilon, Greek_EPSILON, 3 ] };\ + key { [ Greek_rho, Greek_RHO, 4 ] };\ + key { [ Greek_tau, Greek_TAU, 5 ] };\ + key { [ Greek_upsilon, Greek_UPSILON, 6 ] };\ + key { [ Greek_theta, Greek_THETA, 7 ] };\ + key { [ Greek_iota, Greek_IOTA, 8 ] };\ + key { [ Greek_omicron, Greek_OMICRON, 9 ] };\ + key { [ Greek_pi, Greek_PI, 0 ] };\ + key { [ bracketleft, braceleft ] };\ + key { [ bracketright, braceright ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ Greek_alpha, Greek_ALPHA, minus ] };\ + key { [ Greek_sigma, Greek_SIGMA, at ] };\ + key { [ Greek_delta, Greek_DELTA, asterisk ] };\ + key { [ Greek_phi, Greek_PHI, asciicircum ] };\ + key { [ Greek_gamma, Greek_GAMMA, colon ] };\ + key { [ Greek_eta, Greek_ETA, semicolon ] };\ + key { [ Greek_xi, Greek_XI, parenleft ] };\ + key { [ Greek_kappa, Greek_KAPPA, parenright ] };\ + key { [ Greek_lamda, Greek_LAMDA, asciitilde ] };\ + key { [ dead_acute, dead_diaeresis, colon ] };\ + key { [ apostrophe, quotedbl ] };\ + key { [ grave, asciitilde ] };\ + key { [ Shift_L ] };\ + key { [ backslash, bar ] };\ + key { [ Greek_zeta, Greek_ZETA, slash ] };\ + key { [ Greek_chi, Greek_CHI, apostrophe ] };\ + key { [ Greek_psi, Greek_PSI, quotedbl ] };\ + key { [ Greek_omega, Greek_OMEGA, plus ] };\ + key { [ Greek_beta, Greek_BETA, equal ] };\ + key { [ Greek_nu, Greek_NU, question ] };\ + key { [ Greek_mu, Greek_MU, exclam ] };\ + key { [ comma, apostrophe, U00AB] };\ + key { [ period, quotedbl, U00BB] };\ + key { [ slash, backslash ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + // PERSIAN + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd persian\";\ +\ + key { [ Escape ] };\ + key { [ Farsi_1, bar, grave ] };\ + key { [ Farsi_2, 0x100066c, at ] };\ + key { [ Farsi_3, 0x100066b, numbersign ] };\ + key { [ Farsi_4, 0x100fdfc, dollar ] };\ + key { [ Farsi_5, 0x100066a, percent ] };\ + key { [ Farsi_6, multiply, asciicircum ] };\ + key { [ Farsi_7, slash, ampersand ] };\ + key { [ Farsi_8, asterisk, enfilledcircbullet ] };\ + key { [ Farsi_9, parenright, 0x100200e ] };\ + key { [ Farsi_0, parenleft, 0x100200f ] };\ + key { [ minus, Arabic_tatweel, underscore ] };\ + key { [ equal, plus, 0x1002212 ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ Arabic_dad, Arabic_sukun, degree ] };\ + key { [ Arabic_sad, Arabic_dammatan, NoSymbol ] };\ + key { [ Arabic_theh, Arabic_kasratan, 0x13a4 ] };\ + key { [ Arabic_qaf, Arabic_fathatan, NoSymbol ] };\ + key { [ Arabic_feh, Arabic_damma, NoSymbol ] };\ + key { [ Arabic_ghain, Arabic_kasra, NoSymbol ] };\ + key { [ Arabic_ain, Arabic_fatha, NoSymbol ] };\ + key { [ Arabic_heh, Arabic_shadda, 0x100202d ] };\ + key { [ Arabic_khah, bracketright, 0x100202e ] };\ + key { [ Arabic_hah, bracketleft, 0x100202c ] };\ + key { [ Arabic_jeem, braceright, 0x100202a ] };\ + key { [ Arabic_tcheh, braceleft, 0x100202b ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ Arabic_sheen, Arabic_hamzaonwaw, NoSymbol ] };\ + key { [ Arabic_seen, Arabic_hamzaonyeh, NoSymbol ] };\ + key { [ Farsi_yeh, Arabic_yeh, Arabic_alefmaksura ] };\ + key { [ Arabic_beh, Arabic_hamzaunderalef, NoSymbol ] };\ + key { [ Arabic_lam, Arabic_hamzaonalef, NoSymbol ] };\ + key { [ Arabic_alef, Arabic_maddaonalef, 0x1000671 ] };\ + key { [ Arabic_teh, Arabic_tehmarbuta, NoSymbol ] };\ + key { [ Arabic_noon, guillemotright, 0x100fd3e ] };\ + key { [ Arabic_meem, guillemotleft, 0x100fd3f ] };\ + key { [ Arabic_keheh, colon, semicolon ] };\ + key { [ Arabic_gaf, Arabic_semicolon, quotedbl ] };\ + key { [ 0x100200C, 0x100200d, asciitilde ] };\ + key { [ Shift_L ] };\ + key { [ Arabic_jeh, greater ] };\ + key { [ Arabic_zah, Arabic_kaf, NoSymbol ] };\ + key { [ Arabic_tah, 0x1000653, NoSymbol ] };\ + key { [ Arabic_zain, less, NoSymbol ] };\ + key { [ Arabic_ra, Arabic_superscript_alef, 0x1000656 ] };\ + key { [ Arabic_thal, 0x10000a0, division ] };\ + key { [ Arabic_dal, Arabic_hamza_above, Arabic_hamza_below ] };\ + key { [ Arabic_peh, Arabic_hamza, ellipsis ] };\ + key { [ Arabic_waw, backslash, comma ] };\ + key { [ period, Arabic_comma, NoSymbol] };\ + key { [ Arabic_question_mark, exclam ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};};", +//HEBREW +"xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd hebrew\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam ] };\ + key { [ 2, at ] };\ + key { [ 3, numbersign ] };\ + key { [ 4, NewSheqelSign ] };\ + key { [ 5, percent ] };\ + key { [ 6, asciicircum ] };\ + key { [ 7, ampersand ] };\ + key { [ 8, asterisk ] };\ + key { [ 9, parenleft ] };\ + key { [ 0, parenright ] };\ + key { [ minus, underscore ] };\ + key { [ equal, plus ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ semicolon, asciitilde ] };\ + key { [ slash, slash ] };\ + key { [ apostrophe, apostrophe ] };\ + key { [ hebrew_qoph, hebrew_qoph ] };\ + key { [ hebrew_resh, hebrew_resh ] };\ + key { [ hebrew_aleph, hebrew_aleph ] };\ + key { [ hebrew_tet, hebrew_tet ] };\ + key { [ hebrew_waw, hebrew_waw ] };\ + key { [ hebrew_finalnun, hebrew_finalnun ] };\ + key { [ hebrew_finalmem, hebrew_finalmem ] };\ + key { [ hebrew_pe, hebrew_pe ] };\ + key { [ bracketright, bracketright ] };\ + key { [ bracketleft, bracketleft ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ hebrew_shin, hebrew_shin ] };\ + key { [ hebrew_dalet, hebrew_dalet ] };\ + key { [ hebrew_gimel, hebrew_gimel ] };\ + key { [ hebrew_kaph, hebrew_kaph ] };\ + key { [ hebrew_ayin, hebrew_ayin ] };\ + key { [ hebrew_yod, hebrew_yod ] };\ + key { [ hebrew_chet, hebrew_chet ] };\ + key { [ hebrew_lamed, hebrew_lamed ] };\ + key { [hebrew_finalkaph, hebrew_finalkaph ] };\ + key { [ hebrew_finalpe, hebrew_finalpe ] };\ + key { [ comma, quotedbl ] };\ + key { [ Shift_L ] };\ + key { [ hebrew_zain, hebrew_zain ] };\ + key { [ hebrew_samech, hebrew_samech ] };\ + key { [ hebrew_bet, hebrew_bet ] };\ + key { [ hebrew_he, hebrew_he ] };\ + key { [ hebrew_nun, hebrew_nun ] };\ + key { [ hebrew_mem, hebrew_mem ] };\ + key { [ hebrew_zade, hebrew_zade ] };\ + key { [ hebrew_taw, hebrew_taw ] };\ + key { [hebrew_finalzade, hebrew_finalzade ] };\ + key { [ period, question ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};};" +}; diff --git a/packages/wvkbd/keymap.vistath.h b/packages/wvkbd/keymap.vistath.h new file mode 100644 index 0000000..169d7df --- /dev/null +++ b/packages/wvkbd/keymap.vistath.h @@ -0,0 +1,11711 @@ +#define NUMKEYMAPS 8 + +static const char *keymap_names[] = {"chinese", "latin", "cyrillic","arabic", + "georgian", "greek", "persian", "hebrew" }; + +static const char *keymaps[NUMKEYMAPS] = { + + // CHINESE + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam, F1 ] };\ + key { [ 2, at, F2 ] };\ + key { [ 3, numbersign, F3 ] };\ + key { [ 4, dollar, F4 ] };\ + key { [ 5, percent, F5 ] };\ + key { [ 6, asciicircum, F6 ] };\ + key { [ 7, ampersand, F7 ] };\ + key { [ 8, asterisk, F8 ] };\ + key { [ 9, parenleft, F9 ] };\ + key { [ 0, parenright, F10 ] };\ + key { [ minus, underscore, EuroSign ] };\ + key { [ equal, plus, sterling ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ q, Q, 1 ] };\ + key { [ w, W, 2 ] };\ + key { [ e, E, 3 ] };\ + key { [ r, R, 4 ] };\ + key { [ t, T, 5 ] };\ + key { [ y, Y, 6 ] };\ + key { [ u, U, 7 ] };\ + key { [ i, I, 8 ] };\ + key { [ o, O, 9 ] };\ + key { [ p, P, 0 ] };\ + key { [ bracketleft, braceleft ] };\ + key { [ bracketright, braceright ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ a, A, minus ] };\ + key { [ s, S, at ] };\ + key { [ d, D, asterisk ] };\ + key { [ f, F, asciicircum ] };\ + key { [ g, G, colon ] };\ + key { [ h, H, semicolon ] };\ + key { [ j, J, parenleft ] };\ + key { [ k, K, parenright ] };\ + key { [ l, L, asciitilde ] };\ + key { [ semicolon, colon ] };\ + key { [ apostrophe, quotedbl ] };\ + key { [ grave, asciitilde ] };\ + key { [ Shift_L ] };\ + key { [ backslash, bar ] };\ + key { [ z, Z, slash ] };\ + key { [ x, X, apostrophe ] };\ + key { [ c, C, quotedbl ] };\ + key { [ v, V, plus ] };\ + key { [ b, B, equal ] };\ + key { [ n, N, question ] };\ + key { [ m, M, exclam ] };\ + key { [ comma, less, apostrophe, U00AB] };\ + key { [ period, greater, question, U00BB] };\ + key { [ slash, question ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + + // LATIN + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam, F1 ] };\ + key { [ 2, at, F2 ] };\ + key { [ 3, numbersign, F3 ] };\ + key { [ 4, dollar, F4 ] };\ + key { [ 5, percent, F5 ] };\ + key { [ 6, asciicircum, F6 ] };\ + key { [ 7, ampersand, F7 ] };\ + key { [ 8, asterisk, F8 ] };\ + key { [ 9, parenleft, F9 ] };\ + key { [ 0, parenright, F10 ] };\ + key { [ minus, underscore, EuroSign ] };\ + key { [ equal, plus, sterling ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ q, Q, 1 ] };\ + key { [ w, W, 2 ] };\ + key { [ e, E, 3 ] };\ + key { [ r, R, 4 ] };\ + key { [ t, T, 5 ] };\ + key { [ y, Y, 6 ] };\ + key { [ u, U, 7 ] };\ + key { [ i, I, 8 ] };\ + key { [ o, O, 9 ] };\ + key { [ p, P, 0 ] };\ + key { [ bracketleft, braceleft ] };\ + key { [ bracketright, braceright ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ a, A, minus ] };\ + key { [ s, S, at ] };\ + key { [ d, D, asterisk ] };\ + key { [ f, F, asciicircum ] };\ + key { [ g, G, colon ] };\ + key { [ h, H, semicolon ] };\ + key { [ j, J, parenleft ] };\ + key { [ k, K, parenright ] };\ + key { [ l, L, asciitilde ] };\ + key { [ semicolon, colon ] };\ + key { [ apostrophe, quotedbl ] };\ + key { [ grave, asciitilde ] };\ + key { [ Shift_L ] };\ + key { [ backslash, bar ] };\ + key { [ z, Z, slash ] };\ + key { [ x, X, apostrophe ] };\ + key { [ c, C, quotedbl ] };\ + key { [ v, V, plus ] };\ + key { [ b, B, equal ] };\ + key { [ n, N, question ] };\ + key { [ m, M, exclam ] };\ + key { [ comma, apostrophe, less, U00AB] };\ + key { [ period, question, greater, U00BB] };\ + key { [ slash, greater ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + // CYRILLIC + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd cyrillic\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam ] };\ + key { [ 2, at ] };\ + key { [ 3, numbersign ] };\ + key { [ 4, semicolon ] };\ + key { [ 5, percent ] };\ + key { [ 6, colon ] };\ + key { [ 7, ampersand ] };\ + key { [ 8, asterisk ] };\ + key { [ 9, parenleft ] };\ + key { [ 0, parenright ] };\ + key { [ minus, underscore ] };\ + key { [ comma, apostrophe ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ Cyrillic_io, Cyrillic_IO ] };\ + key { [ Cyrillic_shorti, Cyrillic_SHORTI ] };\ + key { [ Cyrillic_tse, Cyrillic_TSE ] };\ + key { [ Cyrillic_u, Cyrillic_U ] };\ + key { [ Cyrillic_ka, Cyrillic_KA ] };\ + key { [ Cyrillic_ie, Cyrillic_IE ] };\ + key { [ Cyrillic_en, Cyrillic_EN ] };\ + key { [ Cyrillic_ghe, Cyrillic_GHE ] };\ + key { [ Cyrillic_sha, Cyrillic_SHA ] };\ + key { [ Cyrillic_shcha, Cyrillic_SHCHA ] };\ + key { [ Cyrillic_ze, Cyrillic_ZE ] };\ + key { [ Cyrillic_ha, Cyrillic_HA ] };\ + key { [ Cyrillic_hardsign, Cyrillic_HARDSIGN ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ Cyrillic_ef, Cyrillic_EF ] };\ + key { [ Cyrillic_yeru, Cyrillic_YERU ] };\ + key { [ Cyrillic_ve, Cyrillic_VE ] };\ + key { [ Cyrillic_a, Cyrillic_A ] };\ + key { [ Cyrillic_pe, Cyrillic_PE ] };\ + key { [ Cyrillic_er, Cyrillic_ER ] };\ + key { [ Cyrillic_o, Cyrillic_O ] };\ + key { [ Cyrillic_el, Cyrillic_EL ] };\ + key { [ Cyrillic_de, Cyrillic_DE ] };\ + key { [ Cyrillic_zhe, Cyrillic_ZHE ] };\ + key { [ Cyrillic_e, Cyrillic_E ] };\ + key { [ Shift_L ] };\ + key { [ Cyrillic_ya, Cyrillic_YA ] };\ + key { [ Cyrillic_che, Cyrillic_CHE ] };\ + key { [ Cyrillic_es, Cyrillic_ES ] };\ + key { [ Cyrillic_em, Cyrillic_EM ] };\ + key { [ Cyrillic_i, Cyrillic_I ] };\ + key { [ Cyrillic_te, Cyrillic_TE ] };\ + key { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };\ + key { [ Cyrillic_be, Cyrillic_BE ] };\ + key { [ Cyrillic_yu, Cyrillic_YU ] };\ + key { [ period, question ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + // ARABIC + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd arabic\";\ + key { [ Escape ] };\ + key { [ Arabic_thal, Arabic_shadda, Arabic_percent, U0609 ]};\ + key { [ Arabic_1, exclam, 1, NoSymbol ]};\ + key { [ Arabic_2, at, 2, NoSymbol ]};\ + key { [ Arabic_3, numbersign, 3, NoSymbol ]};\ + key { [ Arabic_4, dollar, 4, NoSymbol ]};\ + key { [ Arabic_5, percent, 5, U2030 ]};\ + key { [ Arabic_6, asciicircum, 6, NoSymbol ]};\ + key { [ Arabic_7, ampersand, 7, NoSymbol ]};\ + key { [ Arabic_8, asterisk, 8, NoSymbol ]};\ + key { [ Arabic_9, parenright, 9, NoSymbol ]};\ + key { [ Arabic_0, parenleft, 0, NoSymbol ]};\ + key { [ minus, underscore, endash, U2011 ]};\ + key { [ equal, plus, notequal, U2248 ]};\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ Arabic_dad, Arabic_fatha, NoSymbol, U2066 ]};\ + key { [ Arabic_sad, Arabic_fathatan, NoSymbol, U2067 ]};\ + key { [ Arabic_theh, Arabic_damma, NoSymbol, U2068 ]};\ + key { [ Arabic_qaf, Arabic_dammatan, NoSymbol, U2069 ]};\ + key { [ Arabic_feh, UFEF9, Arabic_veh, NoSymbol ]};\ + key { [ Arabic_ghain, Arabic_hamzaunderalef, NoSymbol, U202A ]};\ + key { [ Arabic_ain, grave, NoSymbol, U202B ]};\ + key { [ Arabic_ha, division, NoSymbol, U202C ]};\ + key { [ Arabic_khah, multiply, NoSymbol, NoSymbol ]};\ + key { [ Arabic_hah, Arabic_semicolon, NoSymbol, U200E ]};\ + key { [ Arabic_jeem, less, Arabic_tcheh, U200F ]};\ + key { [ Arabic_dal, greater, NoSymbol, U061C ]};\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ Arabic_sheen, Arabic_kasra, NoSymbol, NoSymbol ]};\ + key { [ Arabic_seen, Arabic_kasratan, NoSymbol, NoSymbol ]};\ + key { [ Arabic_yeh, bracketright, NoSymbol, NoSymbol ]};\ + key { [ Arabic_beh, bracketleft, Arabic_peh, NoSymbol ]};\ + key { [ Arabic_lam, U0FEF7, NoSymbol, NoSymbol ]};\ + key { [ Arabic_alef, Arabic_hamzaonalef, U0671, NoSymbol ]};\ + key { [ Arabic_teh, Arabic_tatweel, NoSymbol, NoSymbol ]};\ + key { [ Arabic_noon, Arabic_comma, U066B, NoSymbol ]};\ + key { [ Arabic_meem, slash, NoSymbol, NoSymbol ]};\ + key { [ Arabic_kaf, colon, Arabic_gaf, NoSymbol ]};\ + key { [ Arabic_tah, quotedbl, U27E9, U200D ]};\ + key { [ Shift_L ] };\ + key { [ Arabic_thal, asciitilde, guillemotright, U203A ]};\ + key { [ Arabic_hamza, Arabic_sukun, guillemotleft, U2039 ]};\ + key { [Arabic_hamzaonwaw, braceright, NoSymbol, NoSymbol ]};\ + key { [ Arabic_ra, braceleft, NoSymbol, NoSymbol ]};\ + key { [ UFEFB, UFEF5, NoSymbol, NoSymbol ]};\ + key { [Arabic_tehmarbuta, apostrophe, NoSymbol, NoSymbol ]};\ + key { [ Arabic_waw, comma, U066C, NoSymbol ]};\ + key { [ Arabic_zah, Arabic_question_mark, U066D, U200C ]};\ + key { [ Arabic_zain, period, Arabic_jeh, NoSymbol ]};\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + // GEORGIAN + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd georgian\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam, F1 ] };\ + key { [ 2, at, F2 ] };\ + key { [ 3, numbersign, F3 ] };\ + key { [ 4, dollar, F4 ] };\ + key { [ 5, percent, F5 ] };\ + key { [ 6, asciicircum, F6 ] };\ + key { [ 7, ampersand, F7 ] };\ + key { [ 8, asterisk, F8 ] };\ + key { [ 9, parenleft, F9 ] };\ + key { [ 0, parenright, F10 ] };\ + key { [ minus, underscore, EuroSign ] };\ + key { [ equal, plus, sterling ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ Georgian_khar, Q, 1 ] };\ + key { [ Georgian_cil, Georgian_char, 2 ] };\ + key { [ Georgian_en, E, 3 ] };\ + key { [ Georgian_rae, Georgian_ghan, 4 ] };\ + key { [ Georgian_tar, Georgian_tan, 5 ] };\ + key { [ Georgian_qar, Y, 6 ] };\ + key { [ Georgian_un, U, 7 ] };\ + key { [ Georgian_in, I, 8 ] };\ + key { [ Georgian_on, O, 9 ] };\ + key { [ Georgian_par, P, 0 ] };\ + key { [ bracketleft, braceleft ] };\ + key { [ bracketright, braceright ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ Georgian_an, A, minus ] };\ + key { [ Georgian_san, Georgian_shin, at ] };\ + key { [ Georgian_don, D, asterisk ] };\ + key { [ Georgian_phar, F, asciicircum ] };\ + key { [ Georgian_gan, G, colon ] };\ + key { [ Georgian_hae, H, semicolon ] };\ + key { [ Georgian_jhan, Georgian_zhar, parenleft ] };\ + key { [ Georgian_kan, K, parenright ] };\ + key { [ Georgian_las, L, asciitilde ] };\ + key { [ semicolon, colon ] };\ + key { [ apostrophe, quotedbl ] };\ + key { [ grave, asciitilde ] };\ + key { [ Shift_L ] };\ + key { [ backslash, bar ] };\ + key { [ Georgian_zen, Georgian_jil, slash ] };\ + key { [ Georgian_xan, X, apostrophe ] };\ + key { [ Georgian_can, Georgian_chin, quotedbl ] };\ + key { [ Georgian_vin, V, plus ] };\ + key { [ Georgian_ban, B, equal ] };\ + key { [ Georgian_nar, N, question ] };\ + key { [ Georgian_man, M, exclam ] };\ + key { [ comma, apostrophe, less, U00AB] };\ + key { [ period, question, greater, U00BB] };\ + key { [ slash, greater ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + // GREEK + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd greek\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam, F1 ] };\ + key { [ 2, at, F2 ] };\ + key { [ 3, numbersign, F3 ] };\ + key { [ 4, dollar, F4 ] };\ + key { [ 5, percent, F5 ] };\ + key { [ 6, asciicircum, F6 ] };\ + key { [ 7, ampersand, F7 ] };\ + key { [ 8, asterisk, F8 ] };\ + key { [ 9, parenleft, F9 ] };\ + key { [ 0, parenright, F10 ] };\ + key { [ minus, underscore, EuroSign ] };\ + key { [ equal, plus, sterling ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ semicolon, colon, 1 ] };\ + key { [ Greek_finalsmallsigma, Greek_SIGMA, 2 ] };\ + key { [ Greek_epsilon, Greek_EPSILON, 3 ] };\ + key { [ Greek_rho, Greek_RHO, 4 ] };\ + key { [ Greek_tau, Greek_TAU, 5 ] };\ + key { [ Greek_upsilon, Greek_UPSILON, 6 ] };\ + key { [ Greek_theta, Greek_THETA, 7 ] };\ + key { [ Greek_iota, Greek_IOTA, 8 ] };\ + key { [ Greek_omicron, Greek_OMICRON, 9 ] };\ + key { [ Greek_pi, Greek_PI, 0 ] };\ + key { [ bracketleft, braceleft ] };\ + key { [ bracketright, braceright ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ Greek_alpha, Greek_ALPHA, minus ] };\ + key { [ Greek_sigma, Greek_SIGMA, at ] };\ + key { [ Greek_delta, Greek_DELTA, asterisk ] };\ + key { [ Greek_phi, Greek_PHI, asciicircum ] };\ + key { [ Greek_gamma, Greek_GAMMA, colon ] };\ + key { [ Greek_eta, Greek_ETA, semicolon ] };\ + key { [ Greek_xi, Greek_XI, parenleft ] };\ + key { [ Greek_kappa, Greek_KAPPA, parenright ] };\ + key { [ Greek_lamda, Greek_LAMDA, asciitilde ] };\ + key { [ dead_acute, dead_diaeresis, colon ] };\ + key { [ apostrophe, quotedbl ] };\ + key { [ grave, asciitilde ] };\ + key { [ Shift_L ] };\ + key { [ backslash, bar ] };\ + key { [ Greek_zeta, Greek_ZETA, slash ] };\ + key { [ Greek_chi, Greek_CHI, apostrophe ] };\ + key { [ Greek_psi, Greek_PSI, quotedbl ] };\ + key { [ Greek_omega, Greek_OMEGA, plus ] };\ + key { [ Greek_beta, Greek_BETA, equal ] };\ + key { [ Greek_nu, Greek_NU, question ] };\ + key { [ Greek_mu, Greek_MU, exclam ] };\ + key { [ comma, apostrophe, U00AB] };\ + key { [ period, quotedbl, U00BB] };\ + key { [ slash, backslash ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +", + // PERSIAN + "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd persian\";\ +\ + key { [ Escape ] };\ + key { [ Farsi_1, bar, grave ] };\ + key { [ Farsi_2, 0x100066c, at ] };\ + key { [ Farsi_3, 0x100066b, numbersign ] };\ + key { [ Farsi_4, 0x100fdfc, dollar ] };\ + key { [ Farsi_5, 0x100066a, percent ] };\ + key { [ Farsi_6, multiply, asciicircum ] };\ + key { [ Farsi_7, slash, ampersand ] };\ + key { [ Farsi_8, asterisk, enfilledcircbullet ] };\ + key { [ Farsi_9, parenright, 0x100200e ] };\ + key { [ Farsi_0, parenleft, 0x100200f ] };\ + key { [ minus, Arabic_tatweel, underscore ] };\ + key { [ equal, plus, 0x1002212 ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ Arabic_dad, Arabic_sukun, degree ] };\ + key { [ Arabic_sad, Arabic_dammatan, NoSymbol ] };\ + key { [ Arabic_theh, Arabic_kasratan, 0x13a4 ] };\ + key { [ Arabic_qaf, Arabic_fathatan, NoSymbol ] };\ + key { [ Arabic_feh, Arabic_damma, NoSymbol ] };\ + key { [ Arabic_ghain, Arabic_kasra, NoSymbol ] };\ + key { [ Arabic_ain, Arabic_fatha, NoSymbol ] };\ + key { [ Arabic_heh, Arabic_shadda, 0x100202d ] };\ + key { [ Arabic_khah, bracketright, 0x100202e ] };\ + key { [ Arabic_hah, bracketleft, 0x100202c ] };\ + key { [ Arabic_jeem, braceright, 0x100202a ] };\ + key { [ Arabic_tcheh, braceleft, 0x100202b ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ Arabic_sheen, Arabic_hamzaonwaw, NoSymbol ] };\ + key { [ Arabic_seen, Arabic_hamzaonyeh, NoSymbol ] };\ + key { [ Farsi_yeh, Arabic_yeh, Arabic_alefmaksura ] };\ + key { [ Arabic_beh, Arabic_hamzaunderalef, NoSymbol ] };\ + key { [ Arabic_lam, Arabic_hamzaonalef, NoSymbol ] };\ + key { [ Arabic_alef, Arabic_maddaonalef, 0x1000671 ] };\ + key { [ Arabic_teh, Arabic_tehmarbuta, NoSymbol ] };\ + key { [ Arabic_noon, guillemotright, 0x100fd3e ] };\ + key { [ Arabic_meem, guillemotleft, 0x100fd3f ] };\ + key { [ Arabic_keheh, colon, semicolon ] };\ + key { [ Arabic_gaf, Arabic_semicolon, quotedbl ] };\ + key { [ 0x100200C, 0x100200d, asciitilde ] };\ + key { [ Shift_L ] };\ + key { [ Arabic_jeh, greater ] };\ + key { [ Arabic_zah, Arabic_kaf, NoSymbol ] };\ + key { [ Arabic_tah, 0x1000653, NoSymbol ] };\ + key { [ Arabic_zain, less, NoSymbol ] };\ + key { [ Arabic_ra, Arabic_superscript_alef, 0x1000656 ] };\ + key { [ Arabic_thal, 0x10000a0, division ] };\ + key { [ Arabic_dal, Arabic_hamza_above, Arabic_hamza_below ] };\ + key { [ Arabic_peh, Arabic_hamza, ellipsis ] };\ + key { [ Arabic_waw, backslash, comma ] };\ + key { [ period, Arabic_comma, NoSymbol] };\ + key { [ Arabic_question_mark, exclam ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};};", + +//HEBREW +"xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + 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;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + 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\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"wvkbd hebrew\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam ] };\ + key { [ 2, at ] };\ + key { [ 3, numbersign ] };\ + key { [ 4, NewSheqelSign ] };\ + key { [ 5, percent ] };\ + key { [ 6, asciicircum ] };\ + key { [ 7, ampersand ] };\ + key { [ 8, asterisk ] };\ + key { [ 9, parenleft ] };\ + key { [ 0, parenright ] };\ + key { [ minus, underscore ] };\ + key { [ equal, plus ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ semicolon, asciitilde ] };\ + key { [ slash, slash ] };\ + key { [ apostrophe, apostrophe ] };\ + key { [ hebrew_qoph, hebrew_qoph ] };\ + key { [ hebrew_resh, hebrew_resh ] };\ + key { [ hebrew_aleph, hebrew_aleph ] };\ + key { [ hebrew_tet, hebrew_tet ] };\ + key { [ hebrew_waw, hebrew_waw ] };\ + key { [ hebrew_finalnun, hebrew_finalnun ] };\ + key { [ hebrew_finalmem, hebrew_finalmem ] };\ + key { [ hebrew_pe, hebrew_pe ] };\ + key { [ bracketright, bracketright ] };\ + key { [ bracketleft, bracketleft ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ hebrew_shin, hebrew_shin ] };\ + key { [ hebrew_dalet, hebrew_dalet ] };\ + key { [ hebrew_gimel, hebrew_gimel ] };\ + key { [ hebrew_kaph, hebrew_kaph ] };\ + key { [ hebrew_ayin, hebrew_ayin ] };\ + key { [ hebrew_yod, hebrew_yod ] };\ + key { [ hebrew_chet, hebrew_chet ] };\ + key { [ hebrew_lamed, hebrew_lamed ] };\ + key { [hebrew_finalkaph, hebrew_finalkaph ] };\ + key { [ hebrew_finalpe, hebrew_finalpe ] };\ + key { [ comma, quotedbl ] };\ + key { [ Shift_L ] };\ + key { [ hebrew_zain, hebrew_zain ] };\ + key { [ hebrew_samech, hebrew_samech ] };\ + key { [ hebrew_bet, hebrew_bet ] };\ + key { [ hebrew_he, hebrew_he ] };\ + key { [ hebrew_nun, hebrew_nun ] };\ + key { [ hebrew_mem, hebrew_mem ] };\ + key { [ hebrew_zade, hebrew_zade ] };\ + key { [ hebrew_taw, hebrew_taw ] };\ + key { [hebrew_finalzade, hebrew_finalzade ] };\ + key { [ period, question ] };\ + key { [ exclamdown, questiondown, exclamdown ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ U%08X, U%08X ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};};" +}; diff --git a/packages/wvkbd/layout.mobintl.h b/packages/wvkbd/layout.mobintl.h new file mode 100644 index 0000000..913f392 --- /dev/null +++ b/packages/wvkbd/layout.mobintl.h @@ -0,0 +1,1716 @@ +/* constants */ +/* how tall the keyboard should be by default (can be overriden) */ +#define KBD_PIXEL_HEIGHT 250 + +/* how tall the keyboard should be by default (can be overriden) */ +#define KBD_PIXEL_LANDSCAPE_HEIGHT 120 + +/* spacing around each key */ +#define KBD_KEY_BORDER 2 + +/* layout declarations */ +enum layout_id { + Full = 0, + FullWide, + Special, + SpecialPad, + Simple, + Dialer, + Cyrillic, + Arabic, + Persian, + Greek, + Georgian, + Hebrew, + Emoji, + Nav, + Landscape, + LandscapeSpecial, + ComposeA, + ComposeE, + ComposeY, + ComposeU, + ComposeI, + ComposeO, + ComposeW, + ComposeR, + ComposeT, + ComposeP, + ComposeS, + ComposeD, + ComposeF, + ComposeG, + ComposeH, + ComposeJ, + ComposeK, + ComposeL, + ComposeZ, + ComposeX, + ComposeC, + ComposeV, + ComposeB, + ComposeN, + ComposeM, + ComposeMath, + ComposePunctuation, + ComposeBracket, + ComposeCyrI, + ComposeCyrJ, + ComposeCyrE, + ComposeCyrL, + ComposeCyrU, + ComposeCyrN, + ComposeCyrTse, + ComposeCyrChe, + ComposeCyrG, + ComposeCyrK, + Index, + NumLayouts, +}; + +static struct key keys_full[], keys_full_wide[], keys_special[], keys_specialpad[], keys_simple[], + keys_cyrillic[], keys_arabic[], keys_persian[], keys_georgian[], keys_greek[], keys_hebrew[], + keys_emoji[], keys_nav[], keys_landscape[], keys_landscape_special[], keys_compose_a[], + keys_compose_e[], keys_compose_y[], keys_compose_u[], keys_compose_i[], + keys_compose_o[], keys_compose_w[], keys_compose_r[], keys_compose_t[], + keys_compose_p[], keys_compose_s[], keys_compose_d[], keys_compose_f[], + keys_compose_g[], keys_compose_h[], keys_compose_j[], keys_compose_k[], + keys_compose_l[], keys_compose_z[], keys_compose_x[], keys_compose_c[], + keys_compose_v[], keys_compose_b[], keys_compose_n[], keys_compose_m[], + keys_compose_math[], keys_compose_punctuation[], keys_compose_bracket[], + keys_compose_cyr_i[], keys_compose_cyr_j[], keys_compose_cyr_e[], + keys_compose_cyr_u[], keys_compose_cyr_l[], keys_compose_cyr_n[], + keys_compose_cyr_tse[], keys_compose_cyr_che[], keys_compose_cyr_g[], + keys_compose_cyr_k[], keys_dialer[], keys_index[]; + +static struct layout layouts[NumLayouts] = { + [Full] = {keys_full, "latin", "full", true}, // second parameter is the keymap name + // third parameter is the layout name + // last parameter indicates if it's an alphabetical/primary layout + [FullWide] = {keys_full_wide, "latin", "fullwide", true}, + [Special] = {keys_special, "latin", "special", false}, + [SpecialPad] = {keys_specialpad, "latin", "specialpad", false}, + [Simple] = {keys_simple, "latin", "simple", true}, + [Cyrillic] = {keys_cyrillic, "cyrillic", "cyrillic", true}, + [Dialer] = {keys_dialer, "latin", "dialer", false}, + [Arabic] = {keys_arabic, "arabic", "arabic", true}, + [Persian] = {keys_persian, "persian", "persian", true}, + [Greek] = {keys_greek, "greek", "greek", true}, + [Georgian] = {keys_georgian, "georgian", "georgian", true}, + [Hebrew] = {keys_hebrew, "hebrew", "hebrew", true}, + [Emoji] = {keys_emoji, "latin", "emoji", false}, + [Nav] = {keys_nav, "latin", "nav", false}, + [Landscape] = {keys_landscape, "latin", "landscape", true}, + [LandscapeSpecial] = {keys_landscape_special, "latin", "landscapespecial", true}, + [ComposeA] = {keys_compose_a, "latin"}, + [ComposeE] = {keys_compose_e, "latin"}, + [ComposeY] = {keys_compose_y, "latin"}, + [ComposeU] = {keys_compose_u, "latin"}, + [ComposeI] = {keys_compose_i, "latin"}, + [ComposeO] = {keys_compose_o, "latin"}, + [ComposeW] = {keys_compose_w, "latin"}, + [ComposeR] = {keys_compose_r, "latin"}, + [ComposeT] = {keys_compose_t, "latin"}, + [ComposeP] = {keys_compose_p, "latin"}, + [ComposeS] = {keys_compose_s, "latin"}, + [ComposeD] = {keys_compose_d, "latin"}, + [ComposeF] = {keys_compose_f, "latin"}, + [ComposeG] = {keys_compose_g, "latin"}, + [ComposeH] = {keys_compose_h, "latin"}, + [ComposeJ] = {keys_compose_j, "latin"}, + [ComposeK] = {keys_compose_k, "latin"}, + [ComposeL] = {keys_compose_l, "latin"}, + [ComposeZ] = {keys_compose_z, "latin"}, + [ComposeX] = {keys_compose_x, "latin"}, + [ComposeC] = {keys_compose_c, "latin"}, + [ComposeV] = {keys_compose_v, "latin"}, + [ComposeB] = {keys_compose_b, "latin"}, + [ComposeN] = {keys_compose_n, "latin"}, + [ComposeM] = {keys_compose_m, "latin"}, + [ComposeMath] = {keys_compose_math, "latin"}, + [ComposePunctuation] = {keys_compose_punctuation, "latin"}, + [ComposeBracket] = {keys_compose_bracket, "latin"}, + [ComposeCyrI] = {keys_compose_cyr_i, "cyrillic"}, + [ComposeCyrJ] = {keys_compose_cyr_j, "cyrillic"}, + [ComposeCyrE] = {keys_compose_cyr_e, "cyrillic"}, + [ComposeCyrU] = {keys_compose_cyr_u, "cyrillic"}, + [ComposeCyrL] = {keys_compose_cyr_l, "cyrillic"}, + [ComposeCyrN] = {keys_compose_cyr_n, "cyrillic"}, + [ComposeCyrTse] = {keys_compose_cyr_tse, "cyrillic"}, + [ComposeCyrChe] = {keys_compose_cyr_che, "cyrillic"}, + [ComposeCyrG] = {keys_compose_cyr_g, "cyrillic"}, + [ComposeCyrK] = {keys_compose_cyr_k, "cyrillic"}, + + [Index] = {keys_index,"latin","index", false}, +}; + +/* key layouts + * + * define keys like: + * + * `{ + * "label", + * "SHIFT_LABEL", + * 1, + * [Code, Mod, Layout, EndRow, Last], + * [KEY_CODE, Modifier], + * [&layout] + * },` + * + * - label: normal label for key + * + * - shift_label: label for key in shifted (uppercase) layout + * + * - width: column width of key + * + * - type: what kind of action this key peforms (emit keycode, toggle modifier, + * switch layout, or end the layout) + * + * - code: key scancode or modifier name (see + * `/usr/include/linux/input-event-codes.h` for scancode names, and + * `keyboard.h` for modifiers) + * + * - layout: layout to switch to when key is pressed + */ +static struct key keys_full[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1}, + {"↑", "↑", 1.0, Code, KEY_UP, .scheme = 1}, + {"↓", "↓", 1.0, Code, KEY_DOWN, .scheme = 1}, + {"←", "←", 1.0, Code, KEY_LEFT, .scheme = 1}, + {"→", "→", 1.0, Code, KEY_RIGHT, .scheme = 1}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE, &layouts[ComposeBracket] }, + {"-", "_", 1.0, Code, KEY_MINUS, &layouts[ComposeMath] }, + {"/", ">", 1.0, Code, KEY_SLASH, &layouts[ComposePunctuation] }, + {"Tab", "Tab", 1.0, Code, KEY_TAB, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"", "", 0.0, EndRow}, + + {"q", "Q", 1.0, Code, KEY_Q, &layouts[Emoji]}, + {"w", "W", 1.0, Code, KEY_W, &layouts[ComposeW]}, + {"e", "E", 1.0, Code, KEY_E, &layouts[ComposeE]}, + {"r", "R", 1.0, Code, KEY_R, &layouts[ComposeR]}, + {"t", "T", 1.0, Code, KEY_T, &layouts[ComposeT]}, + {"y", "Y", 1.0, Code, KEY_Y, &layouts[ComposeY]}, + {"u", "U", 1.0, Code, KEY_U, &layouts[ComposeU]}, + {"i", "I", 1.0, Code, KEY_I, &layouts[ComposeI]}, + {"o", "O", 1.0, Code, KEY_O, &layouts[ComposeO]}, + {"p", "P", 1.0, Code, KEY_P, &layouts[ComposeP]}, + {"", "", 0.0, EndRow}, + + {"", "", 0.5, Pad}, + {"a", "A", 1.0, Code, KEY_A, &layouts[ComposeA]}, + {"s", "S", 1.0, Code, KEY_S, &layouts[ComposeS]}, + {"d", "D", 1.0, Code, KEY_D, &layouts[ComposeD]}, + {"f", "F", 1.0, Code, KEY_F, &layouts[ComposeF]}, + {"g", "G", 1.0, Code, KEY_G, &layouts[ComposeG]}, + {"h", "H", 1.0, Code, KEY_H, &layouts[ComposeH]}, + {"j", "J", 1.0, Code, KEY_J, &layouts[ComposeJ]}, + {"k", "K", 1.0, Code, KEY_K, &layouts[ComposeK]}, + {"l", "L", 1.0, Code, KEY_L, &layouts[ComposeL]}, + {"", "", 0.5, Pad}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"z", "Z", 1.0, Code, KEY_Z, &layouts[ComposeZ]}, + {"x", "X", 1.0, Code, KEY_X, &layouts[ComposeX]}, + {"c", "C", 1.0, Code, KEY_C, &layouts[ComposeC]}, + {"v", "V", 1.0, Code, KEY_V, &layouts[ComposeV]}, + {"b", "B", 1.0, Code, KEY_B, &layouts[ComposeB]}, + {"n", "N", 1.0, Code, KEY_N, &layouts[ComposeN]}, + {"m", "M", 1.0, Code, KEY_M, &layouts[ComposeM]}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.5, NextLayer, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {"", "Tab", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 1.5, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_full_wide[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1}, + {"↑", "↑", 1.0, Code, KEY_UP, .scheme = 1}, + {"↓", "↓", 1.0, Code, KEY_DOWN, .scheme = 1}, + {"←", "←", 1.0, Code, KEY_LEFT, .scheme = 1}, + {"→", "→", 1.0, Code, KEY_RIGHT, .scheme = 1}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE, &layouts[ComposeBracket] }, + {";", ":", 1.0, Code, KEY_SEMICOLON, &layouts[ComposePunctuation] }, + {"/", ">", 1.0, Code, KEY_SLASH, &layouts[ComposePunctuation] }, + {"Tab", "Tab", 1.0, Code, KEY_TAB, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"-", "_", 1.0, Code, KEY_MINUS, &layouts[ComposeMath] }, + {"=", "+", 1.0, Code, KEY_EQUAL, &layouts[ComposeMath] }, + {"", "", 0.0, EndRow}, + + {"q", "Q", 1.0, Code, KEY_Q, &layouts[Emoji]}, + {"w", "W", 1.0, Code, KEY_W, &layouts[ComposeW]}, + {"e", "E", 1.0, Code, KEY_E, &layouts[ComposeE]}, + {"r", "R", 1.0, Code, KEY_R, &layouts[ComposeR]}, + {"t", "T", 1.0, Code, KEY_T, &layouts[ComposeT]}, + {"y", "Y", 1.0, Code, KEY_Y, &layouts[ComposeY]}, + {"u", "U", 1.0, Code, KEY_U, &layouts[ComposeU]}, + {"i", "I", 1.0, Code, KEY_I, &layouts[ComposeI]}, + {"o", "O", 1.0, Code, KEY_O, &layouts[ComposeO]}, + {"p", "P", 1.0, Code, KEY_P, &layouts[ComposeP]}, + {"", "", 0.0, EndRow}, + + {"", "", 0.5, Pad}, + {"a", "A", 1.0, Code, KEY_A, &layouts[ComposeA]}, + {"s", "S", 1.0, Code, KEY_S, &layouts[ComposeS]}, + {"d", "D", 1.0, Code, KEY_D, &layouts[ComposeD]}, + {"f", "F", 1.0, Code, KEY_F, &layouts[ComposeF]}, + {"g", "G", 1.0, Code, KEY_G, &layouts[ComposeG]}, + {"h", "H", 1.0, Code, KEY_H, &layouts[ComposeH]}, + {"j", "J", 1.0, Code, KEY_J, &layouts[ComposeJ]}, + {"k", "K", 1.0, Code, KEY_K, &layouts[ComposeK]}, + {"l", "L", 1.0, Code, KEY_L, &layouts[ComposeL]}, + {"", "", 0.5, Pad}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"z", "Z", 1.0, Code, KEY_Z, &layouts[ComposeZ]}, + {"x", "X", 1.0, Code, KEY_X, &layouts[ComposeX]}, + {"c", "C", 1.0, Code, KEY_C, &layouts[ComposeC]}, + {"v", "V", 1.0, Code, KEY_V, &layouts[ComposeV]}, + {"b", "B", 1.0, Code, KEY_B, &layouts[ComposeB]}, + {"n", "N", 1.0, Code, KEY_N, &layouts[ComposeN]}, + {"m", "M", 1.0, Code, KEY_M, &layouts[ComposeM]}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.5, NextLayer, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {"", "Tab", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 1.5, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_special[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"↑", "↑", 1.0, Code, KEY_UP, .scheme = 1}, + {"↓", "↓", 1.0, Code, KEY_DOWN, .scheme = 1}, + {"←", "←", 1.0, Code, KEY_LEFT, .scheme = 1}, + {"→", "→", 1.0, Code, KEY_RIGHT, .scheme = 1}, + {"⇈", "⇈", 1.0, Code, KEY_PAGEUP, .scheme = 1}, + {"⇊", "⇊", 1.0, Code, KEY_PAGEDOWN, .scheme = 1}, + {"⇤", "⇤", 1.0, Code, KEY_HOME, .scheme = 1}, + {"⇥", "⇥", 1.0, Code, KEY_END, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"", "", 0.0, EndRow}, + + {"CpL", "CpL", 1.0, Mod, CapsLock, .scheme = 1}, + {"Sup", "Sup", 1.0, Mod, Super, .scheme = 1}, + {"`", "~", 1.0, Code, KEY_GRAVE}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"-", "_", 1.0, Code, KEY_MINUS}, + {"=", "+", 1.0, Code, KEY_EQUAL}, + {"[", "{", 1.0, Code, KEY_LEFTBRACE}, + {"]", "}", 1.0, Code, KEY_RIGHTBRACE}, + {"\\", "|", 1.0, Code, KEY_BACKSLASH}, + {"Del", "Del", 1.0, Code, KEY_DELETE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 2.0, Mod, Shift, .scheme = 1}, + {";", ":", 1.0, Code, KEY_SEMICOLON}, + {"/", ">", 1.0, Code, KEY_SLASH}, + {"<", "«", 1.0, Code, KEY_COMMA, 0, AltGr}, + {">", "»", 1.0, Code, KEY_DOT, 0, AltGr}, + {"¡", "¿", 1.0, Code, KEY_MENU}, + {"🙂", "🙂", 1.0, Layout, 0, &layouts[Emoji]}, + {"AGr", "AGr", 1.0, Mod, AltGr, .scheme = 1}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {"", "Tab", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_specialpad[] = { + {"⎋", "⎋", 1.0, Code, KEY_ESC, .scheme = 1}, + {"↑", "↑", 1.0, Code, KEY_UP, .scheme = 1}, + {"⇈", "⇈", 1.0, Code, KEY_PAGEUP, .scheme = 1}, + {"`", "~", 1.0, Code, KEY_GRAVE}, + {"\\", "|", 1.0, Code, KEY_BACKSLASH}, + {"/", ">", 1.0, Code, KEY_SLASH}, + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"⌦", "⌦", 1.0, Code, KEY_DELETE, .scheme = 1}, + {"", "", 0.0, EndRow}, + //{"Tab", "Tab", 1.0, Code, KEY_TAB, .scheme = 1}, + {"←", "←", 1.0, Code, KEY_LEFT, .scheme = 1}, + {"", "↹", 1.0, Code, KEY_SPACE}, + {"→", "→", 1.0, Code, KEY_RIGHT, .scheme = 1}, + {".", "?", 1.0, Code, KEY_DOT}, + {"[", "{", 1.0, Code, KEY_LEFTBRACE}, + {"]", "}", 1.0, Code, KEY_RIGHTBRACE}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.0, Mod, Shift, .scheme = 1}, + {"↓", "↓", 1.0, Code, KEY_DOWN, .scheme = 1}, + {"⇊", "⇊", 1.0, Code, KEY_PAGEDOWN, .scheme = 1}, + {";", ":", 1.0, Code, KEY_SEMICOLON}, + {"<", "«", 1.0, Code, KEY_COMMA, 0, AltGr}, + {">", "»", 1.0, Code, KEY_DOT, 0, AltGr}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"Sup", "Sup", 1.0, Mod, Super, .scheme = 1}, + + {"⇤", "⇤", 1.0, Code, KEY_HOME, .scheme = 1}, + {"⇥", "⇥", 1.0, Code, KEY_END, .scheme = 1}, + {"-", "_", 1.0, Code, KEY_MINUS}, + {"0", ")", 1.0, Code, KEY_0}, + {"=", "+", 1.0, Code, KEY_EQUAL}, + {"↵", "↵", 1.0, Code, KEY_ENTER, .scheme = 1}, + //{",", "'", 1.0, Code, KEY_COMMA}, + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_simple[] = { + {"q", "Q", 1.0, Code, KEY_Q, &layouts[Emoji]}, + {"w", "W", 1.0, Code, KEY_W, &layouts[ComposeW]}, + {"e", "E", 1.0, Code, KEY_E, &layouts[ComposeE]}, + {"r", "R", 1.0, Code, KEY_R, &layouts[ComposeR]}, + {"t", "T", 1.0, Code, KEY_T, &layouts[ComposeT]}, + {"y", "Y", 1.0, Code, KEY_Y, &layouts[ComposeY]}, + {"u", "U", 1.0, Code, KEY_U, &layouts[ComposeU]}, + {"i", "I", 1.0, Code, KEY_I, &layouts[ComposeI]}, + {"o", "O", 1.0, Code, KEY_O, &layouts[ComposeO]}, + {"p", "P", 1.0, Code, KEY_P, &layouts[ComposeP]}, + {"", "", 0.0, EndRow}, + + {"", "", 0.5, Pad}, + {"a", "A", 1.0, Code, KEY_A, &layouts[ComposeA]}, + {"s", "S", 1.0, Code, KEY_S, &layouts[ComposeS]}, + {"d", "D", 1.0, Code, KEY_D, &layouts[ComposeD]}, + {"f", "F", 1.0, Code, KEY_F, &layouts[ComposeF]}, + {"g", "G", 1.0, Code, KEY_G, &layouts[ComposeG]}, + {"h", "H", 1.0, Code, KEY_H, &layouts[ComposeH]}, + {"j", "J", 1.0, Code, KEY_J, &layouts[ComposeJ]}, + {"k", "K", 1.0, Code, KEY_K, &layouts[ComposeK]}, + {"l", "L", 1.0, Code, KEY_L, &layouts[ComposeL]}, + {"", "", 0.5, Pad}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"z", "Z", 1.0, Code, KEY_Z, &layouts[ComposeZ]}, + {"x", "X", 1.0, Code, KEY_X, &layouts[ComposeX]}, + {"c", "C", 1.0, Code, KEY_C, &layouts[ComposeC]}, + {"v", "V", 1.0, Code, KEY_V, &layouts[ComposeV]}, + {"b", "B", 1.0, Code, KEY_B, &layouts[ComposeB]}, + {"n", "N", 1.0, Code, KEY_N, &layouts[ComposeN]}, + {"m", "M", 1.0, Code, KEY_M, &layouts[ComposeM]}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1}, + {"-", "_", 0.75, Code, KEY_MINUS, &layouts[ComposeMath]}, + {",", "'", 0.75, Code, KEY_COMMA, &layouts[ComposeBracket]}, + {"", "Tab", 3.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 1.5, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_dialer[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC}, + {"+","+", 1.0, Code, KEY_KPPLUS}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE}, + {"", "", 0.0, EndRow}, + {"1", "1", 1.0, Code, KEY_1}, + {"2", "2", 1.0, Code, KEY_2}, + {"3", "3", 1.0, Code, KEY_3}, + {"", "", 0.0, EndRow}, + {"4", "4", 1.0, Code, KEY_4}, + {"5", "5", 1.0, Code, KEY_5}, + {"6", "6", 1.0, Code, KEY_6}, + {"", "", 0.0, EndRow}, + {"7", "7", 1.0, Code, KEY_7}, + {"8", "8", 1.0, Code, KEY_8}, + {"9", "9", 1.0, Code, KEY_9}, + {"", "", 0.0, EndRow}, + {"*", "*", 1.0, Code, KEY_KPASTERISK}, + {"0", "0", 1.0, Code, KEY_0}, + {"#", "#", 1.0, Code, KEY_3, 0, Shift}, + {"", "", 0.0, EndRow}, + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_cyrillic[] = { + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", ";", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", ":", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"ю", "Ю", 1.0, Code, KEY_DOT}, + {"э", "Э", 1.0, Code, KEY_APOSTROPHE, &layouts[ComposeCyrE]}, + {"ё", "Ё", 1.0, Code, KEY_GRAVE, &layouts[ComposeCyrE]}, + {"", "", 0.0, EndRow}, + + {"й", "Й", 1.0, Code, KEY_Q, &layouts[ComposeCyrJ]}, + {"ц", "Ц", 1.0, Code, KEY_W, &layouts[ComposeCyrTse]}, + {"у", "У", 1.0, Code, KEY_E}, + {"к", "К", 1.0, Code, KEY_R, &layouts[ComposeCyrK]}, + {"е", "Е", 1.0, Code, KEY_T, &layouts[ComposeCyrE]}, + {"н", "Н", 1.0, Code, KEY_Y}, + {"г", "Г", 1.0, Code, KEY_U, &layouts[ComposeCyrG]}, + {"ш", "ш", 1.0, Code, KEY_I}, + {"щ", "щ", 1.0, Code, KEY_O}, + {"з", "з", 1.0, Code, KEY_P}, + {"х", "Х", 1.0, Code, KEY_LEFTBRACE}, + {"ъ", "Ъ", 0.5, Code, KEY_RIGHTBRACE}, + {"", "", 0.0, EndRow}, + + {"ф", "Ф", 1.0, Code, KEY_A}, + {"ы", "Ы", 1.0, Code, KEY_S, &layouts[ComposeCyrI]}, + {"в", "В", 1.0, Code, KEY_D}, + {"а", "А", 1.0, Code, KEY_F}, + {"п", "П", 1.0, Code, KEY_G}, + {"р", "Р", 1.0, Code, KEY_H}, + {"о", "О", 1.0, Code, KEY_J}, + {"л", "Л", 1.0, Code, KEY_K, &layouts[ComposeCyrL]}, + {"д", "Д", 1.0, Code, KEY_L}, + {"ж", "Ж", 1.0, Code, KEY_SEMICOLON}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"я", "Я", 1.0, Code, KEY_Z}, + {"ч", "Ч", 1.0, Code, KEY_X, &layouts[ComposeCyrChe]}, + {"c", "С", 1.0, Code, KEY_C}, + {"м", "М", 1.0, Code, KEY_V}, + {"и", "И", 1.0, Code, KEY_B, &layouts[ComposeCyrI]}, + {"т", "Т", 1.0, Code, KEY_N}, + {"ь", "Ь", 1.0, Code, KEY_M}, + {"б", "Б", 1.0, Code, KEY_COMMA}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {",", "'", 1.0, Code, KEY_EQUAL, &layouts[ComposeMath]}, + {"", "Tab", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_arabic[] = { + {"١", "!", 1.0, Code, KEY_1}, + {"٢", "@", 1.0, Code, KEY_2}, + {"٣", "#", 1.0, Code, KEY_3}, + {"٤", ";", 1.0, Code, KEY_4}, + {"٥", "%", 1.0, Code, KEY_5}, + {"٦", ":", 1.0, Code, KEY_6}, + {"٧", "&", 1.0, Code, KEY_7}, + {"٨", "*", 1.0, Code, KEY_8}, + {"٩", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"٠", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"", "", 0.0, EndRow}, + + {"ض", "ـَ", 1.0, Code, KEY_Q, &layouts[Emoji]}, + {"ص", "ـً", 1.0, Code, KEY_W}, + {"ث", "ـُ", 1.0, Code, KEY_E}, + {"ق", "ـٌ", 1.0, Code, KEY_R}, + {"ف", "ﻹ", 1.0, Code, KEY_T}, + {"غ", "إ", 1.0, Code, KEY_Y}, + {"ع", "`", 1.0, Code, KEY_U}, + {"ه", "", 1.0, Code, KEY_I}, + {"خ", ";", 1.0, Code, KEY_O}, + {"ح", "", 1.0, Code, KEY_P}, + {"ج", "<", 1.0, Code, KEY_LEFTBRACE}, + {"", "", 0.0, EndRow}, + + {"ش", "ـِ", 1.0, Code, KEY_A}, + {"س", "ـٍ", 1.0, Code, KEY_S}, + {"ي", "]", 1.0, Code, KEY_D}, + {"ب", "[", 1.0, Code, KEY_F}, + {"ل", "ﻷ", 1.0, Code, KEY_G}, + {"ا", "أ", 1.0, Code, KEY_H}, + {"ت", "ـ", 1.0, Code, KEY_J}, + {"ن", "،", 1.0, Code, KEY_K}, + {"م", "/", 1.0, Code, KEY_L}, + {"ك", ":", 1.0, Code, KEY_SEMICOLON}, + {"ط", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"", "", 0.0, EndRow}, + + {"ذ", "~", 1.0, Code, KEY_Z}, + {"ء", "ـْ", 1.0, Code, KEY_X}, + {"ؤ", "}", 1.0, Code, KEY_C}, + {"ر", "{", 1.0, Code, KEY_V}, + {"ى", "ﻵ", 1.0, Code, KEY_B}, + {"ة", "'", 1.0, Code, KEY_N}, + {"و", ",", 1.0, Code, KEY_M}, + {"ز", "؟", 1.0, Code, KEY_COMMA}, + {"ظ", ".", 1.0, Code, KEY_DOT}, + {"د", ">", 1.0, Code, KEY_RIGHTBRACE}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"⇧", "⇫", 1.0, Mod, Shift, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {"", "Tab", 5.0, Code, KEY_SPACE}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_georgian[] = { + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", ";", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", ":", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"", "", 0.0, EndRow}, + + {"ქ", "Q", 1.0, Code, KEY_Q}, + {"წ", "ჭ", 1.0, Code, KEY_W}, + {"ე", "E", 1.0, Code, KEY_E}, + {"რ", "ღ", 1.0, Code, KEY_R}, + {"ტ", "თ", 1.0, Code, KEY_T}, + {"ყ", "Y", 1.0, Code, KEY_Y}, + {"უ", "U", 1.0, Code, KEY_U}, + {"ი", "I", 1.0, Code, KEY_I}, + {"ო", "O", 1.0, Code, KEY_O}, + {"პ", "P", 1.0, Code, KEY_P}, + {"", "", 0.0, EndRow}, + + {"ა", "A", 1.0, Code, KEY_A}, + {"ს", "შ", 1.0, Code, KEY_S}, + {"დ", "D", 1.0, Code, KEY_D}, + {"ფ", "F", 1.0, Code, KEY_F}, + {"გ", "G", 1.0, Code, KEY_G}, + {"ჰ", "H", 1.0, Code, KEY_H}, + {"ჯ", "ჟ", 1.0, Code, KEY_J}, + {"კ", "K", 1.0, Code, KEY_K}, + {"ლ", "L", 1.0, Code, KEY_L}, + {";", ":", 1.0, Code, KEY_SEMICOLON, &layouts[ComposePunctuation]}, + {"", "", 0.0, EndRow}, + + {"ზ", "ძ", 1.0, Code, KEY_Z}, + {"ხ", "X", 1.0, Code, KEY_X}, + {"ც", "ჩ", 1.0, Code, KEY_C}, + {"ვ", "V", 1.0, Code, KEY_V}, + {"ბ", "B", 1.0, Code, KEY_B}, + {"ნ", "N", 1.0, Code, KEY_N}, + {"მ", "M", 1.0, Code, KEY_M}, + {",", "<", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {".", ">", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"⇧", "⇫", 1.0, Mod, Shift, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {"", "Tab", 5.0, Code, KEY_SPACE}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_persian[] = { + {"۱", "|", 1.0, Code, KEY_1}, + {"۲", "٬", 1.0, Code, KEY_2}, + {"۳", "#", 1.0, Code, KEY_3}, + {"۴", "﷼", 1.0, Code, KEY_4}, + {"۵", "٪", 1.0, Code, KEY_5}, + {"۶", "×", 1.0, Code, KEY_6}, + {"۷", "/", 1.0, Code, KEY_7}, + {"۸", "*", 1.0, Code, KEY_8}, + {"۹", ")", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"۰", "(", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"-", "_", 1.0, Code, KEY_MINUS, &layouts[ComposeMath]}, + {"=", "+", 1.0, Code, KEY_EQUAL, &layouts[ComposeMath]}, + {"", "", 0.0, EndRow}, + + {"ض", "ﹿ", 1.0, Code, KEY_Q}, + {"ص", "ـٌ", 1.0, Code, KEY_W}, + {"ث", "ـٍ", 1.0, Code, KEY_E}, + {"ق", "ـً", 1.0, Code, KEY_R}, + {"ف", "ـُ", 1.0, Code, KEY_T}, + {"غ", "ـِ", 1.0, Code, KEY_Y}, + {"ع", "ـَ", 1.0, Code, KEY_U}, + {"ه", "ﹽ", 1.0, Code, KEY_I}, + {"خ", "]", 1.0, Code, KEY_O}, + {"ح", "[", 1.0, Code, KEY_P}, + {"ج", "}", 1.0, Code, KEY_LEFTBRACE}, + {"چ", "{", 1.0, Code, KEY_RIGHTBRACE}, + {"", "", 0.0, EndRow}, + + {"ش", "ؤ", 1.0, Code, KEY_A}, + {"س", "ئ", 1.0, Code, KEY_S}, + {"ی", "ي", 1.0, Code, KEY_D}, + {"ب", "إ", 1.0, Code, KEY_F}, + {"ل", "أ", 1.0, Code, KEY_G}, + {"ا", "آ", 1.0, Code, KEY_H}, + {"ت", "ة", 1.0, Code, KEY_J}, + {"ن", "»", 1.0, Code, KEY_K}, + {"م", "«", 1.0, Code, KEY_L}, + {"ک", ":", 1.0, Code, KEY_SEMICOLON}, + {"گ", "؛", 1.0, Code, KEY_APOSTROPHE}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"ظ", "ك", 1.0, Code, KEY_Z}, + {"ط", "ـٓ", 1.0, Code, KEY_X}, + {"ژ", ">", 1.0, Code, KEY_BACKSLASH}, + {"ز", "<", 1.0, Code, KEY_C}, + {"ر", "ـٰ", 1.0, Code, KEY_V}, + {"ذ", "⇑", 1.0, Code, KEY_B}, + {"د", "ـٔ", 1.0, Code, KEY_N}, + {"پ", "ء", 1.0, Code, KEY_M}, + {"و", "\\", 1.0, Code, KEY_COMMA}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {".", "،", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"", "Tab", 4.0, Code, KEY_SPACE}, + {"⥣", "↥", 1.0, Code, KEY_GRAVE}, + {"؟", "!", 1.0, Code, KEY_SLASH, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_greek[] = { + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"-", "_", 1.0, Code, KEY_MINUS, &layouts[ComposeMath]}, + {"=", "+", 1.0, Code, KEY_EQUAL, &layouts[ComposeMath]}, + {"", "", 0.0, EndRow}, + + {";", ":", 1.0, Code, KEY_Q, &layouts[ComposePunctuation]}, + {"ς", "Σ", 1.0, Code, KEY_W}, + {"ε", "Ε", 1.0, Code, KEY_E}, + {"ρ", "Ρ", 1.0, Code, KEY_R}, + {"τ", "Τ", 1.0, Code, KEY_T}, + {"υ", "Υ", 1.0, Code, KEY_Y}, + {"θ", "Θ", 1.0, Code, KEY_U}, + {"ι", "Ι", 1.0, Code, KEY_I}, + {"ο", "Ο", 1.0, Code, KEY_O}, + {"π", "Π", 1.0, Code, KEY_P}, + {"", "", 0.0, EndRow}, + + {"α", "A", 1.0, Code, KEY_A}, + {"σ", "Σ", 1.0, Code, KEY_S}, + {"δ", "Δ", 1.0, Code, KEY_D}, + {"φ", "Φ", 1.0, Code, KEY_F}, + {"γ", "Γ", 1.0, Code, KEY_G}, + {"η", "Η", 1.0, Code, KEY_H}, + {"ξ", "Ξ", 1.0, Code, KEY_J}, + {"κ", "Κ", 1.0, Code, KEY_K}, + {"λ", "Λ", 1.0, Code, KEY_L}, + {"΄", "¨", 1.0, Code, KEY_SEMICOLON, &layouts[ComposeBracket]}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"ζ", "Ζ", 1.0, Code, KEY_Z}, + {"χ", "Χ", 1.0, Code, KEY_X}, + {"ψ", "Ψ", 1.0, Code, KEY_C}, + {"ω", "Ω", 1.0, Code, KEY_V}, + {"β", "Β", 1.0, Code, KEY_B}, + {"ν", "Ν", 1.0, Code, KEY_N}, + {"μ", "Μ", 1.0, Code, KEY_M}, + {"/", "\\", 1.0, Code, KEY_SLASH}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.5, NextLayer, .scheme = 1}, + {",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {"", "Tab", 5, Code, KEY_SPACE}, + {".", "\"", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 2, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_hebrew[] = { + {"/", "/", 1.0, Code, KEY_Q}, + {"'", "'", 1.0, Code, KEY_W, &layouts[ComposeBracket]}, + {"ק", "ק", 1.0, Code, KEY_E}, + {"ר", "ר", 1.0, Code, KEY_R}, + {"א", "א", 1.0, Code, KEY_T}, + {"ט", "ט", 1.0, Code, KEY_Y}, + {"ו", "ו", 1.0, Code, KEY_U}, + {"ן", "ן", 1.0, Code, KEY_I}, + {"ם", "ם", 1.0, Code, KEY_O}, + {"פ", "פ", 1.0, Code, KEY_P}, + {"", "", 0.0, EndRow}, + + {"ש", "ש", 1.0, Code, KEY_A}, + {"ד", "ד", 1.0, Code, KEY_S}, + {"ג", "ג", 1.0, Code, KEY_D}, + {"כ", "כ", 1.0, Code, KEY_F}, + {"ע", "ע", 1.0, Code, KEY_G}, + {"י", "י", 1.0, Code, KEY_H}, + {"ח", "ח", 1.0, Code, KEY_J}, + {"ל", "ל", 1.0, Code, KEY_K}, + {"ך", "ך", 1.0, Code, KEY_L}, + {"ף", "ף", 1.0, Code, KEY_SEMICOLON}, + {"", "", 0.0, EndRow}, + + {"ז", "ז", 1.0, Code, KEY_Z}, + {"ס", "ס", 1.0, Code, KEY_X}, + {"ב", "ב", 1.0, Code, KEY_C}, + {"ה", "ה", 1.0, Code, KEY_V}, + {"נ", "נ", 1.0, Code, KEY_B}, + {"מ", "מ", 1.0, Code, KEY_N}, + {"צ", "צ", 1.0, Code, KEY_M}, + {"ת", "ת", 1.0, Code, KEY_COMMA}, + {"ץ", "ץ", 1.0, Code, KEY_DOT}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {",", "\"", 1.0, Code, KEY_APOSTROPHE, &layouts[ComposeMath]}, + {"", "Tab", 3.5, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH, &layouts[ComposePunctuation]}, + {"?", "?", 1.0, Code, KEY_SLASH, &layouts[ComposePunctuation], Shift}, + {"Enter", "Enter", 1.5, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_a[] = { + {"à", "À", 1.0, Copy, 0x00E0, 0, 0x00C0}, + {"á", "Á", 1.0, Copy, 0x00E1, 0, 0x00C1}, + {"â", "Â", 1.0, Copy, 0x00E2, 0, 0x00C2}, + {"ã", "Ã", 1.0, Copy, 0x00E3, 0, 0x00C3}, + {"ä", "Ä", 1.0, Copy, 0x00E4, 0, 0x00C4}, + {"å", "Å", 1.0, Copy, 0x00E5, 0, 0x00C5}, + {"æ", "Æ", 1.0, Copy, 0x00E7, 0, 0x00C6}, + {"ā", "Ā", 1.0, Copy, 0x0101, 0, 0x0100}, + {"ă", "Ă", 1.0, Copy, 0x0103, 0, 0x0102}, + {"ą", "Ą", 1.0, Copy, 0x0105, 0, 0x0104}, + {"", "", 0.0, EndRow}, + {"α", "Α", 1.0, Copy, 0x03B1, 0, 0x0391}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_e[] = { + {"è", "È", 1.0, Copy, 0x00E8, 0, 0x00C8}, + {"é", "É", 1.0, Copy, 0x00E9, 0, 0x00C9}, + {"ê", "Ê", 1.0, Copy, 0x00EA, 0, 0x00CA}, + {"ë", "Ë", 1.0, Copy, 0x00EB, 0, 0x00CB}, + {"ē", "Ē", 1.0, Copy, 0x0113, 0, 0x0112}, + {"ĕ", "Ĕ", 1.0, Copy, 0x0115, 0, 0x0114}, + {"ė", "Ė", 1.0, Copy, 0x0117, 0, 0x0116}, + {"ę", "Ę", 1.0, Copy, 0x0119, 0, 0x0118}, + {"ě", "Ě", 1.0, Copy, 0x011B, 0, 0x011A}, + {"", "", 1.0, Pad}, + {"", "", 0.0, EndRow}, + {"ε", "Ε", 1.0, Copy, 0x03B5, 0, 0x0395}, + {"ǝ", "Ə", 1.0, Copy, 0x0259, 0, 0x018F}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_y[] = { + {"ý", "Ý", 1.0, Copy, 0x00FD, 0, 0x00DD}, + {"ÿ", "Ÿ", 1.0, Copy, 0x00FF, 0, 0x0178}, + {"ŷ", "Ŷ", 1.0, Copy, 0x0177, 0, 0x0176}, + {"", "", 7.0, Pad}, + {"", "", 0.0, EndRow}, + {"υ", "Υ", 1.0, Copy, 0x03C5, 0, 0x03A5}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_u[] = { + {"ù", "Ù", 1.0, Copy, 0x00F9, 0, 0x00D9}, + {"ú", "Ú", 1.0, Copy, 0x00FA, 0, 0x00DA}, + {"û", "Û", 1.0, Copy, 0x00FB, 0, 0x00DB}, + {"ü", "Ü", 1.0, Copy, 0x00FC, 0, 0x00DC}, + {"ũ", "Ũ", 1.0, Copy, 0x0169, 0, 0x0168}, + {"ū", "Ū", 1.0, Copy, 0x016B, 0, 0x016A}, + {"ŭ", "Ŭ", 1.0, Copy, 0x016D, 0, 0x016C}, + {"ů", "Ů", 1.0, Copy, 0x016F, 0, 0x016E}, + {"ű", "Ű", 1.0, Copy, 0x0171, 0, 0x0170}, + {"ų", "Ų", 1.0, Copy, 0x0173, 0, 0x0172}, + {"", "", 0.0, EndRow}, + {"υ", "Υ", 1.0, Copy, 0x03C5, 0, 0x03A5}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_o[] = { + {"ò", "Ò", 1.0, Copy, 0x00F2, 0, 0x00D2}, + {"ó", "Ó", 1.0, Copy, 0x00F3, 0, 0x00D3}, + {"ô", "Ô", 1.0, Copy, 0x00F4, 0, 0x00D4}, + {"õ", "Õ", 1.0, Copy, 0x00F5, 0, 0x00D5}, + {"ö", "Ö", 1.0, Copy, 0x00F6, 0, 0x00D6}, + {"ø", "Ø", 1.0, Copy, 0x00F8, 0, 0x00D8}, + {"ō", "Ō", 1.0, Copy, 0x014D, 0, 0x014C}, + {"ŏ", "Ŏ", 1.0, Copy, 0x014F, 0, 0x014E}, + {"ő", "Ő", 1.0, Copy, 0x0151, 0, 0x0150}, + {"œ", "Œ", 1.0, Copy, 0x0153, 0, 0x0152}, + {"", "", 0.0, EndRow}, + {"ο", "Ο", 1.0, Copy, 0x03BF, 0, 0x039F}, + {"ω", "Ο", 1.0, Copy, 0x03C9, 0, 0x03A9}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_i[] = { + {"ì", "Ì", 1.0, Copy, 0x00EC, 0, 0x00CC}, + {"í", "Í", 1.0, Copy, 0x00ED, 0, 0x00CD}, + {"î", "Î", 1.0, Copy, 0x00EE, 0, 0x00CE}, + {"ï", "Ï", 1.0, Copy, 0x00EF, 0, 0x00CF}, + {"ĩ", "Ĩ", 1.0, Copy, 0x0129, 0, 0x0128}, + {"ī", "Ī", 1.0, Copy, 0x012B, 0, 0x012A}, + {"ĭ", "Ĭ", 1.0, Copy, 0x012D, 0, 0x012C}, + {"į", "Į", 1.0, Copy, 0x012F, 0, 0x012E}, + {"ı", "I", 1.0, Copy, 0x0131, 0, 0x0049}, + {"i", "İ", 1.0, Copy, 0x0069, 0, 0x0130}, + {"", "", 0.0, EndRow}, + {"ι", "Ι", 1.0, Copy, 0x03B9, 0, 0x0399}, + {"η", "Η", 1.0, Copy, 0x03B7, 0, 0x0397}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_emoji[] = { + {"🙂", "🙏", 1.0, Copy, 0x1f642, 0, 0x1f64f}, // Emojis + {"😀", "🙋", 1.0, Copy, 0x1f600, 0, 0x1f64b}, + {"😁", "✋", 1.0, Copy, 0x1f601, 0, 0x270B}, + {"😂", "🙇", 1.0, Copy, 0x1f602, 0, 0x1f647}, + {"😃", "👨", 1.0, Copy, 0x1f603, 0, 0x1f468}, + {"😄", "👩", 1.0, Copy, 0x1f604, 0, 0x1f469}, + {"😅", "👶", 1.0, Copy, 0x1f605, 0, 0x1f476}, + {"😆", "👻", 1.0, Copy, 0x1f606, 0, 0x1f47b}, + {"😇", "✨", 1.0, Copy, 0x1f607, 0, 0x2728}, + {"🤣", "💰", 1.0, Copy, 0x1f923, 0, 0x1f4b0}, + {"", "", 0.0, EndRow}, + {"😉", "🐕", 1.0, Copy, 0x1f609, 0, 0x1f415}, + {"😊", "🐈", 1.0, Copy, 0x1f60a, 0, 0x1f408}, + {"😋", "🐧", 1.0, Copy, 0x1f60b, 0, 0x1f427}, + {"😌", "🐇", 1.0, Copy, 0x1f60c, 0, 0x1f407}, + {"😍", "💔", 1.0, Copy, 0x1f60d, 0, 0x1f494}, + {"😘", "💕", 1.0, Copy, 0x1f618, 0, 0x1f495}, + {"😎", "❤", 1.0, Copy, 0x1f60e, 0, 0x2764}, + {"😐", "😏", 1.0, Copy, 0x1f610, 0, 0x1f60f}, + {"😒", "👀", 1.0, Copy, 0x1f612, 0, 0x1f440}, + {"😓", "💀", 1.0, Copy, 0x1f613, 0, 0x1f480}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.0, Mod, Shift, .scheme = 1}, + {"😛", "😜", 1.0, Copy, 0x1f61b, 0, 0x1f61c}, + {"😮", "😝", 1.0, Copy, 0x1f62e, 0, 0x1f61d}, + {"😟", "😞", 1.0, Copy, 0x1f61f, 0, 0x1f61e}, + {"😠", "🥺", 1.0, Copy, 0x1f620, 0, 0x1f97a}, + {"😢", "👿", 1.0, Copy, 0x1f622, 0, 0x1f47f}, + {"😭", "😯", 1.0, Copy, 0x1f62d, 0, 0x1f62f}, + {"😳", "😕", 1.0, Copy, 0x1f633, 0, 0x1f615}, + {"😴", "😵", 1.0, Copy, 0x1f634, 0, 0x1f635}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"👆", "👊", 1.0, Copy, 0x1f446, 0, 0x1f44a}, + {"👇", "👌", 1.0, Copy, 0x1f447, 0, 0x1f44c}, + {"👈", "👏", 1.0, Copy, 0x1f448, 0, 0x1f44f}, + {"👉", "👐", 1.0, Copy, 0x1f449, 0, 0x1f450}, + {"👋", "🙌", 1.0, Copy, 0x1f44b, 0, 0x1f64c}, + {"👍", "✅", 1.0, Copy, 0x1f44d, 0, 0x2705}, + {"👎", "💪", 1.0, Copy, 0x1f44e, 0, 0x1f4aa}, + {"Enter", "Enter", 1.0, Code, KEY_ENTER, .scheme = 1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_nav[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + {"↑", "↑", 1.0, Code, KEY_UP, .scheme = 1}, + {"⇈", "⇈", 1.0, Code, KEY_PAGEUP, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"q", "q", 1.0, Code, KEY_Q, .scheme = 1}, + {"←", "←", 1.0, Code, KEY_LEFT, .scheme = 1}, + {"Enter", "Enter", 1.0, Code, KEY_ENTER, .scheme = 1}, + {"→", "→", 1.0, Code, KEY_RIGHT, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"", "↹", 1.0, Code, KEY_SPACE, .scheme = 1}, + {"↓", "↓", 1.0, Code, KEY_DOWN, .scheme = 1}, + {"⇊", "⇊", 1.0, Code, KEY_PAGEDOWN, .scheme = 1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_index[] = { + {"Full", "Full", 1.0, Layout, 0, &layouts[Full], .scheme = 1}, + {"Wide", "Wide", 0.75, Layout, 0, &layouts[Full]}, + {"Landscape", "Landscape", 1.5, Layout, 0, &layouts[Landscape], .scheme = 1}, + {"Simple", "Simple", 1.0, Layout, 0, &layouts[Simple], .scheme = 1}, + {"Dial", "Dial", 0.75, Layout, 0, &layouts[Dialer]}, + {"", "", 0.0, EndRow}, + + {"Special", "Special", 1.5, Layout, 0, &layouts[Special], .scheme = 1}, + {"LandSc", "LandSc", 1.0, Layout, 0, &layouts[LandscapeSpecial]}, + {"Pad", "Pad", 1.0, Layout, 0, &layouts[SpecialPad]}, + {"Nav", "Nav", 1.0, Layout, 0, &layouts[Nav], .scheme = 1}, + {"123", "123", 1.0, Layout, 0, &layouts[Dialer], .scheme = 1}, + {"🙂", "🙂", 1.0, Layout, 0, &layouts[Emoji], .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"Абв", "Абв", 1.0, Layout, 0, &layouts[Cyrillic], .scheme = 1}, + {"αβγ", "αβγ", 1.0, Layout, 0, &layouts[Greek], .scheme = 1}, + {"ابج", "ابج", 1.0, Layout, 0, &layouts[Arabic], .scheme = 1}, + {"فر", "فر", 1.0, Layout, 0, &layouts[Persian], .scheme = 1}, + {"აბგ", "აბგ", 1.0, Layout, 0, &layouts[Georgian], .scheme = 1}, + {"א", "א", 1.0, Layout, 0, &layouts[Hebrew], .scheme = 1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_landscape[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"", "", 0.5, Pad, .scheme = 1}, + {"q", "Q", 1.0, Code, KEY_Q, &layouts[Emoji]}, + {"w", "W", 1.0, Code, KEY_W, &layouts[ComposeW]}, + {"e", "E", 1.0, Code, KEY_E, &layouts[ComposeE]}, + {"r", "R", 1.0, Code, KEY_R, &layouts[ComposeR]}, + {"t", "T", 1.0, Code, KEY_T, &layouts[ComposeT]}, + {"y", "Y", 1.0, Code, KEY_Y, &layouts[ComposeY]}, + {"u", "U", 1.0, Code, KEY_U, &layouts[ComposeU]}, + {"i", "I", 1.0, Code, KEY_I, &layouts[ComposeI]}, + {"o", "O", 1.0, Code, KEY_O, &layouts[ComposeO]}, + {"p", "P", 1.0, Code, KEY_P, &layouts[ComposeP]}, + {"", "", 0.5, Pad, .scheme = 1}, + {"Tab", "Tab", 1.0, Code, KEY_TAB, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"↑", "↑", 0.75, Code, KEY_UP, .scheme = 1}, + {"↓", "↓", 0.75, Code, KEY_DOWN, .scheme = 1}, + {"", "", 0.5, Pad, .scheme = 1}, + {"a", "A", 1.0, Code, KEY_A, &layouts[ComposeA]}, + {"s", "S", 1.0, Code, KEY_S, &layouts[ComposeS]}, + {"d", "D", 1.0, Code, KEY_D, &layouts[ComposeD]}, + {"f", "F", 1.0, Code, KEY_F, &layouts[ComposeF]}, + {"g", "G", 1.0, Code, KEY_G, &layouts[ComposeG]}, + {"h", "H", 1.0, Code, KEY_H, &layouts[ComposeH]}, + {"j", "J", 1.0, Code, KEY_J, &layouts[ComposeJ]}, + {"k", "K", 1.0, Code, KEY_K, &layouts[ComposeK]}, + {"l", "L", 1.0, Code, KEY_L, &layouts[ComposeL]}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE, &layouts[ComposeBracket]}, + {"/", ">", 1.0, Code, KEY_SLASH}, + {"", "", 0.0, EndRow}, + + {"←", "←", 0.75, Code, KEY_LEFT, .scheme = 1}, + {"→", "→", 0.75, Code, KEY_RIGHT, .scheme = 1}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"z", "Z", 1.0, Code, KEY_Z, &layouts[ComposeZ]}, + {"x", "X", 1.0, Code, KEY_X, &layouts[ComposeX]}, + {"c", "C", 1.0, Code, KEY_C, &layouts[ComposeC]}, + {"v", "V", 1.0, Code, KEY_V, &layouts[ComposeV]}, + {"b", "B", 1.0, Code, KEY_B, &layouts[ComposeB]}, + {"n", "N", 1.0, Code, KEY_N, &layouts[ComposeN]}, + {"m", "M", 1.0, Code, KEY_M, &layouts[ComposeM]}, + {"", "", 0.5, Pad, .scheme = 1}, + {"-", "_", 1.0, Code, KEY_MINUS, &layouts[ComposeBracket]}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1}, + {",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {"", "Tab", 5.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_landscape_special[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"", "", 0.5, Pad, .scheme = 1}, + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"", "", 0.5, Pad, .scheme = 1}, + {"Tab", "Tab", 1.0, Code, KEY_TAB, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⇈", "⇈", 1.0, Code, KEY_PAGEUP, .scheme = 1}, + {"⇊", "⇊", 1.0, Code, KEY_PAGEDOWN, .scheme = 1}, + {"CpL", "CpL", 1.0, Mod, CapsLock, .scheme = 1}, + {"🙂", "🙂", 1.0, Layout, 0, &layouts[Emoji]}, + {"`", "~", 1.0, Code, KEY_GRAVE}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"-", "_", 1.0, Code, KEY_MINUS}, + {"=", "+", 1.0, Code, KEY_EQUAL}, + {"[", "{", 1.0, Code, KEY_LEFTBRACE}, + {"]", "}", 1.0, Code, KEY_RIGHTBRACE}, + {"\\", "|", 1.0, Code, KEY_BACKSLASH}, + {"/", ">", 1.0, Code, KEY_SLASH}, + {"Del", "Del", 1.0, Code, KEY_DELETE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⇤", "⇤", 1.0, Code, KEY_HOME, .scheme = 1}, + {"⇥", "⇥", 1.0, Code, KEY_END, .scheme = 1}, + {"⇧", "⇫", 2.0, Mod, Shift, .scheme = 1}, + {";", ":", 1.0, Code, KEY_SEMICOLON}, + {"<", "«", 1.0, Code, KEY_COMMA, 0, AltGr}, + {">", "»", 1.0, Code, KEY_DOT, 0, AltGr}, + {"¡", "¿", 1.0, Code, KEY_MENU}, + {",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"/", ">", 1.0, Code, KEY_SLASH}, + {"", "", 0.5, Pad, .scheme = 1}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1}, + {"Sup", "Sup", 1.0, Mod, Super, .scheme = 1}, + {"", "Tab", 5.0, Code, KEY_SPACE}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"AGr", "AGr", 1.0, Mod, AltGr, .scheme = 1}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_w[] = { + {"ŵ", "Ŵ", 1.0, Copy, 0x0175, 0, 0x0174}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_r[] = { + {"ŕ", "Ŕ", 1.0, Copy, 0x0155, 0, 0x0154}, + {"ŗ", "Ŗ", 1.0, Copy, 0x0157, 0, 0x0156}, + {"ř", "Ř", 1.0, Copy, 0x0159, 0, 0x0158}, + {"", "", 7.0, Pad}, + {"", "", 0.0, EndRow}, + {"ρ", "Ρ", 1.0, Copy, 0x03C1, 0, 0x03A1}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_t[] = { + {"ț", "Ț", 1.0, Copy, 0x021B, 0, 0x021A}, + {"ť", "Ť", 1.0, Copy, 0x0165, 0, 0x0164}, + {"ŧ", "Ŧ", 1.0, Copy, 0x0167, 0, 0x0166}, + {"þ", "Þ", 1.0, Copy, 0x00FE, 0, 0x00DE}, + {"", "", 6.0, Pad}, + {"", "", 0.0, EndRow}, + {"τ", "Τ", 1.0, Copy, 0x03C4, 0, 0x03A4}, + {"θ", "Θ", 1.0, Copy, 0x03B8, 0, 0x0398}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_p[] = { + {"π", "Π", 1.0, Copy, 0x03C0, 0, 0x03A0}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_s[] = { + {"ś", "Ś", 1.0, Copy, 0x015B, 0, 0x015A}, + {"ŝ", "Ŝ", 1.0, Copy, 0x015D, 0, 0x015C}, + {"ş", "Ş", 1.0, Copy, 0x015F, 0, 0x015E}, + {"š", "Š", 1.0, Copy, 0x0161, 0, 0x0160}, + {"ß", "ẞ", 1.0, Copy, 0x00DF, 0, 0x1E9E}, + {"", "", 5.0, Pad}, + {"", "", 0.0, EndRow}, + {"σ", "Σ", 1.0, Copy, 0x03C3, 0, 0x03A3}, + {"ς", "Σ", 1.0, Copy, 0x03C2, 0, 0x03A3}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_d[] = { + {"ð", "Ð", 1.0, Copy, 0x00F0, 0, 0x00D0}, + {"ď", "Ď", 1.0, Copy, 0x010F, 0, 0x010E}, + {"đ", "Đ", 1.0, Copy, 0x0111, 0, 0x0110}, + {"", "", 7.0, Pad}, + {"", "", 0.0, EndRow}, + {"δ", "Δ", 1.0, Copy, 0x03B4, 0, 0x0394}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_f[] = { + {"φ", "Φ", 1.0, Copy, 0x03C6, 0, 0x03A6}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_g[] = { + {"ĝ", "Ĝ", 1.0, Copy, 0x011D, 0, 0x011C}, + {"ğ", "Ğ", 1.0, Copy, 0x011F, 0, 0x011E}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"γ", "Γ", 1.0, Copy, 0x03B3, 0, 0x0393}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_h[] = { + {"ĥ", "Ĥ", 1.0, Copy, 0x0125, 0, 0x0124}, + {"ħ", "Ħ", 1.0, Copy, 0x0127, 0, 0x0126}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"η", "Η", 1.0, Copy, 0x03B7, 0, 0x0397}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_j[] = { + {"ĵ", "Ĵ", 1.0, Copy, 0x0135, 0, 0x0134}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 10.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_k[] = { + {"ķ", "Ķ", 1.0, Copy, 0x0137, 0, 0x0136}, + {"ǩ", "Ǩ", 1.0, Copy, 0x01E9, 0, 0x01E8}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"κ", "Κ", 1.0, Copy, 0x03BA, 0, 0x039A}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_l[] = { + {"ľ", "Ľ", 1.0, Copy, 0x013E, 0, 0x013D}, + {"ŀ", "Ŀ", 1.0, Copy, 0x0140, 0, 0x013F}, + {"ł", "Ł", 1.0, Copy, 0x0142, 0, 0x0141}, + {"", "", 7.0, Pad}, + {"", "", 0.0, EndRow}, + {"λ", "Λ", 1.0, Copy, 0x03BB, 0, 0x039B}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_z[] = { + {"ź", "Ź", 1.0, Copy, 0x017A, 0, 0x0179}, + {"ż", "Ż", 1.0, Copy, 0x017C, 0, 0x017B}, + {"ž", "Ž", 1.0, Copy, 0x017E, 0, 0x017D}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"ζ", "Ζ", 1.0, Copy, 0x03B6, 0, 0x0396}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_x[] = { + {"χ", "Χ", 1.0, Copy, 0x03C7, 0, 0x03A7}, + {"ξ", "Ξ", 1.0, Copy, 0x03BE, 0, 0x039E}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_c[] = { + {"ç", "Ç", 1.0, Copy, 0x00E7, 0, 0x00C7}, + {"ć", "Ć", 1.0, Copy, 0x0107, 0, 0x0106}, + {"ĉ", "Ĉ", 1.0, Copy, 0x0109, 0, 0x0108}, + {"ċ", "Ċ", 1.0, Copy, 0x010B, 0, 0x010A}, + {"č", "Č", 1.0, Copy, 0x010D, 0, 0x010C}, + {"", "", 5.0, Pad}, + {"", "", 0.0, EndRow}, + {"χ", "Χ", 1.0, Copy, 0x03C7, 0, 0x03A7}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_v[] = { + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_b[] = { + {"β", "Β", 1.0, Copy, 0x03B2, 0, 0x0392}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_n[] = { + {"ñ", "Ñ", 1.0, Copy, 0x00F1, 0, 0x00D1}, + {"ń", "Ń", 1.0, Copy, 0x0144, 0, 0x0143}, + {"ņ", "Ņ", 1.0, Copy, 0x0146, 0, 0x0145}, + {"ň", "Ň", 1.0, Copy, 0x0148, 0, 0x0147}, + {"ŋ", "Ŋ", 1.0, Copy, 0x014B, 0, 0x014A}, + {"", "", 5.0, Pad}, + {"", "", 0.0, EndRow}, + {"ν", "Ν", 1.0, Copy, 0x03BD, 0, 0x039D}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_m[] = { + {"μ", "Μ", 1.0, Copy, 0x03BC, 0, 0x039C}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_i[] = { + {"і", "І", 1.0, Copy, 0x0456, 0, 0x0406}, + {"ї", "Ї", 1.0, Copy, 0x0457, 0, 0x0407}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_j[] = { + {"ј", "Ј", 1.0, Copy, 0x0458, 0, 0x0408}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_e[] = { + {"є", "Є", 1.0, Copy, 0x0454, 0, 0x0404}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_u[] = { + {"ў", "Ў", 1.0, Copy, 0x045E, 0, 0x040E}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_l[] = { + {"љ", "Љ", 1.0, Copy, 0x0459, 0, 0x0409}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_n[] = { + {"њ", "Њ", 1.0, Copy, 0x045A, 0, 0x040A}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_che[] = { + {"ћ", "Ћ", 1.0, Copy, 0x045B, 0, 0x040B}, + {"ђ", "Ђ", 1.0, Copy, 0x0452, 0, 0x0402}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_tse[] = { + {"џ", "Џ", 1.0, Copy, 0x045F, 0, 0x040F}, + {"ѕ", "Ѕ", 1.0, Copy, 0x0455, 0, 0x0405}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_g[] = { + {"ѓ", "Ѓ", 1.0, Copy, 0x0453, 0, 0x0403}, + {"ґ", "Ґ", 1.0, Copy, 0x0491, 0, 0x0490}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_k[] = { + {"ќ", "Ќ", 1.0, Copy, 0x0453, 0, 0x040C}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_math[] = { + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"+", "+", 1, Code, KEY_EQUAL, 0, Shift}, + {"/", "/", 1, Code, KEY_SLASH}, + {"*", "*", 1, Code, KEY_8, 0, Shift}, + {"-", "-", 1, Code, KEY_MINUS}, + {"=", "=", 1, Code, KEY_EQUAL}, + {"_", "_", 1, Code, KEY_MINUS, 0, Shift}, + {"—", "—", 1, Copy, 0x2014, 0, 0x2014}, + {"", "", 1.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_punctuation[] = { + {"", "", 0.0, EndRow}, + {"", "", 4.5, Pad}, + {".", ".", 1, Code, KEY_DOT}, + {"…", "…", 1, Copy, 0x2026, 0, 0x2026}, + {":", ":", 1, Code, KEY_SEMICOLON, 0, Shift}, + {";", ";", 1, Code, KEY_SEMICOLON, 0}, + {"⍽", "⍽", 1, Copy, 0x202F, 0, 0x00A0}, + {"", "", 0.5, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 3, Pad}, + {"!", "!", 1, Code, KEY_1, 0, Shift}, + {"?", "?", 1, Code, KEY_DOT, 0, Shift}, + {"·", "·", 1, Copy, 0x2027, 0, 0x2027}, + {",", ",", 1, Code, KEY_COMMA}, + {"", "", 1.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_bracket[] = { + {"", "", 0, EndRow}, + {"", "", 1.5, Pad}, + {"{", "{", 1, Code, KEY_LEFTBRACE, 0, Shift}, + {"}", "}", 1, Code, KEY_RIGHTBRACE, 0, Shift}, + {"[", "[", 1, Code, KEY_LEFTBRACE}, + {"]", "]", 1, Code, KEY_RIGHTBRACE}, + {"", "", 4.5, Pad}, + {"", "", 0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"<", "<", 1, Code, KEY_COMMA, 0, AltGr}, + {">", ">", 1, Code, KEY_SLASH, 0, Shift}, + {"`", "`", 1, Code, KEY_GRAVE}, + {"\"", "\"", 1, Code, KEY_APOSTROPHE, 0, Shift}, + {"'", "'", 1, Code, KEY_APOSTROPHE}, + {"", "", 3.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1}, + {"", "", 8, Pad}, + {"", "", 0.0, Last}, +}; diff --git a/packages/wvkbd/layout.vistath.h b/packages/wvkbd/layout.vistath.h new file mode 100644 index 0000000..50ab4f4 --- /dev/null +++ b/packages/wvkbd/layout.vistath.h @@ -0,0 +1,1798 @@ +/* constants */ +/* how tall the keyboard should be by default (can be overriden) */ +#define KBD_PIXEL_HEIGHT 375 + +/* how tall the keyboard should be by default (can be overriden) */ +#define KBD_PIXEL_LANDSCAPE_HEIGHT 375 + +/* spacing around each key */ +#define KBD_KEY_BORDER 5 + +/* layout declarations */ +enum layout_id { + Full = 0, + FullWide, + Special, + SpecialPad, + Simple, + Dialer, + Cyrillic, + Arabic, + Persian, + Greek, + Georgian, + Hebrew, + Emoji, + Nav, + Landscape, + LandscapeSpecial, + ComposeA, + ComposeE, + ComposeY, + ComposeU, + ComposeI, + ComposeO, + ComposeW, + ComposeR, + ComposeT, + ComposeP, + ComposeS, + ComposeD, + ComposeF, + ComposeG, + ComposeH, + ComposeJ, + ComposeK, + ComposeL, + ComposeZ, + ComposeX, + ComposeC, + ComposeV, + ComposeB, + ComposeN, + ComposeM, + ComposeMath, + ComposePunctuation, + ComposeBracket, + ComposeCyrI, + ComposeCyrJ, + ComposeCyrE, + ComposeCyrL, + ComposeCyrU, + ComposeCyrN, + ComposeCyrTse, + ComposeCyrChe, + ComposeCyrG, + ComposeCyrK, + Index, + NumLayouts, +}; + +static struct key keys_full[], keys_full_wide[], keys_special[], + keys_specialpad[], keys_simple[], keys_cyrillic[], keys_arabic[], + keys_persian[], keys_georgian[], keys_greek[], keys_hebrew[], keys_emoji[], + keys_nav[], keys_landscape[], keys_landscape_special[], keys_compose_a[], + keys_compose_e[], keys_compose_y[], keys_compose_u[], keys_compose_i[], + keys_compose_o[], keys_compose_w[], keys_compose_r[], keys_compose_t[], + keys_compose_p[], keys_compose_s[], keys_compose_d[], keys_compose_f[], + keys_compose_g[], keys_compose_h[], keys_compose_j[], keys_compose_k[], + keys_compose_l[], keys_compose_z[], keys_compose_x[], keys_compose_c[], + keys_compose_v[], keys_compose_b[], keys_compose_n[], keys_compose_m[], + keys_compose_math[], keys_compose_punctuation[], keys_compose_bracket[], + keys_compose_cyr_i[], keys_compose_cyr_j[], keys_compose_cyr_e[], + keys_compose_cyr_u[], keys_compose_cyr_l[], keys_compose_cyr_n[], + keys_compose_cyr_tse[], keys_compose_cyr_che[], keys_compose_cyr_g[], + keys_compose_cyr_k[], keys_dialer[], keys_index[]; + +static struct layout layouts[NumLayouts] = { + [Full] = {keys_full, "chinese", "full", + true}, // second parameter is the keymap name + // third parameter is the layout name + // last parameter indicates if it's an alphabetical/primary + // layout + [FullWide] = {keys_full_wide, "chinese", "fullwide", true}, + [Special] = {keys_special, "chinese", "special", false}, + [SpecialPad] = {keys_specialpad, "chinese", "specialpad", false}, + [Simple] = {keys_simple, "latin", "simple", true}, + [Cyrillic] = {keys_cyrillic, "cyrillic", "cyrillic", true}, + [Dialer] = {keys_dialer, "latin", "dialer", false}, + [Arabic] = {keys_arabic, "arabic", "arabic", true}, + [Persian] = {keys_persian, "persian", "persian", true}, + [Greek] = {keys_greek, "greek", "greek", true}, + [Georgian] = {keys_georgian, "georgian", "georgian", true}, + [Hebrew] = {keys_hebrew, "hebrew", "hebrew", true}, + [Emoji] = {keys_emoji, "latin", "emoji", false}, + [Nav] = {keys_nav, "latin", "nav", false}, + [Landscape] = {keys_landscape, "chinese", "landscape", true}, + [LandscapeSpecial] = {keys_landscape_special, "chinese", "landscapespecial", + true}, + [ComposeA] = {keys_compose_a, "latin"}, + [ComposeE] = {keys_compose_e, "latin"}, + [ComposeY] = {keys_compose_y, "latin"}, + [ComposeU] = {keys_compose_u, "latin"}, + [ComposeI] = {keys_compose_i, "latin"}, + [ComposeO] = {keys_compose_o, "latin"}, + [ComposeW] = {keys_compose_w, "latin"}, + [ComposeR] = {keys_compose_r, "latin"}, + [ComposeT] = {keys_compose_t, "latin"}, + [ComposeP] = {keys_compose_p, "latin"}, + [ComposeS] = {keys_compose_s, "latin"}, + [ComposeD] = {keys_compose_d, "latin"}, + [ComposeF] = {keys_compose_f, "latin"}, + [ComposeG] = {keys_compose_g, "latin"}, + [ComposeH] = {keys_compose_h, "latin"}, + [ComposeJ] = {keys_compose_j, "latin"}, + [ComposeK] = {keys_compose_k, "latin"}, + [ComposeL] = {keys_compose_l, "latin"}, + [ComposeZ] = {keys_compose_z, "latin"}, + [ComposeX] = {keys_compose_x, "latin"}, + [ComposeC] = {keys_compose_c, "latin"}, + [ComposeV] = {keys_compose_v, "latin"}, + [ComposeB] = {keys_compose_b, "latin"}, + [ComposeN] = {keys_compose_n, "latin"}, + [ComposeM] = {keys_compose_m, "latin"}, + [ComposeMath] = {keys_compose_math, "latin"}, + [ComposePunctuation] = {keys_compose_punctuation, "latin"}, + [ComposeBracket] = {keys_compose_bracket, "latin"}, + [ComposeCyrI] = {keys_compose_cyr_i, "cyrillic"}, + [ComposeCyrJ] = {keys_compose_cyr_j, "cyrillic"}, + [ComposeCyrE] = {keys_compose_cyr_e, "cyrillic"}, + [ComposeCyrU] = {keys_compose_cyr_u, "cyrillic"}, + [ComposeCyrL] = {keys_compose_cyr_l, "cyrillic"}, + [ComposeCyrN] = {keys_compose_cyr_n, "cyrillic"}, + [ComposeCyrTse] = {keys_compose_cyr_tse, "cyrillic"}, + [ComposeCyrChe] = {keys_compose_cyr_che, "cyrillic"}, + [ComposeCyrG] = {keys_compose_cyr_g, "cyrillic"}, + [ComposeCyrK] = {keys_compose_cyr_k, "cyrillic"}, + + [Index] = {keys_index, "latin", "index", false}, +}; + +/* key layouts + * + * define keys like: + * + * `{ + * "label", + * "SHIFT_LABEL", + * 1, + * [Code, Mod, Layout, EndRow, Last], + * [KEY_CODE, Modifier], + * [&layout] + * },` + * + * - label: normal label for key + * + * - shift_label: label for key in shifted (uppercase) layout + * + * - width: column width of key + * + * - type: what kind of action this key peforms (emit keycode, toggle modifier, + * switch layout, or end the layout) + * + * - code: key scancode or modifier name (see + * `/usr/include/linux/input-event-codes.h` for scancode names, and + * `keyboard.h` for modifiers) + * + * - layout: layout to switch to when key is pressed + */ +static struct key keys_full[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"F1", "F1", 1.0, Code, KEY_F1, .scheme = 1}, + {"F2", "F2", 1.0, Code, KEY_F2, .scheme = 1}, + {"F3", "F3", 1.0, Code, KEY_F3, .scheme = 1}, + {"F4", "F4", 1.0, Code, KEY_F4, .scheme = 1}, + {"F5", "F5", 1.0, Code, KEY_F5, .scheme = 1}, + {"F6", "F6", 1.0, Code, KEY_F6, .scheme = 1}, + {"F7", "F7", 1.0, Code, KEY_F7, .scheme = 1}, + {"F8", "F8", 1.0, Code, KEY_F8, .scheme = 1}, + {"F9", "F9", 1.0, Code, KEY_F9, .scheme = 1}, + {"F10", "F10", 1.0, Code, KEY_F10, .scheme = 1}, + {"F11", "F11", 1.0, Code, KEY_F11, .scheme = 1}, + {"F12", "F12", 1.0, Code, KEY_F12, .scheme = 1}, + {"Prt Sc", "Prt Sc", 1.0, Code, KEY_PRINT, .scheme = 1}, + {"Del", "Del", 1.0, Code, KEY_DELETE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"`", "~", 0.8, Code, KEY_GRAVE}, + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"-", "_", 1.0, Code, KEY_MINUS}, + {"=", "+", 1.0, Code, KEY_EQUAL}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE}, + {"", "", 0.0, EndRow}, + + {"Tab", "Tab", 1.5, Code, KEY_TAB, .scheme = 1}, + {"q", "Q", 1.0, Code, KEY_Q, &layouts[Emoji]}, + {"w", "W", 1.0, Code, KEY_W, &layouts[ComposeW]}, + {"e", "E", 1.0, Code, KEY_E, &layouts[ComposeE]}, + {"r", "R", 1.0, Code, KEY_R, &layouts[ComposeR]}, + {"t", "T", 1.0, Code, KEY_T, &layouts[ComposeT]}, + {"y", "Y", 1.0, Code, KEY_Y, &layouts[ComposeY]}, + {"u", "U", 1.0, Code, KEY_U, &layouts[ComposeU]}, + {"i", "I", 1.0, Code, KEY_I, &layouts[ComposeI]}, + {"o", "O", 1.0, Code, KEY_O, &layouts[ComposeO]}, + {"p", "P", 1.0, Code, KEY_P, &layouts[ComposeP]}, + {"[", "{", 1.0, Code, KEY_LEFTBRACE}, + {"]", "}", 1.0, Code, KEY_RIGHTBRACE}, + {"\\", "|", 0.8, Code, KEY_BACKSLASH}, + {"", "", 0.0, EndRow}, + + {"Caps", "Caps", 1.0, Mod, CapsLock, .scheme = 1}, + {"a", "A", 1.0, Code, KEY_A, &layouts[ComposeA]}, + {"s", "S", 1.0, Code, KEY_S, &layouts[ComposeS]}, + {"d", "D", 1.0, Code, KEY_D, &layouts[ComposeD]}, + {"f", "F", 1.0, Code, KEY_F, &layouts[ComposeF]}, + {"g", "G", 1.0, Code, KEY_G, &layouts[ComposeG]}, + {"h", "H", 1.0, Code, KEY_H, &layouts[ComposeH]}, + {"j", "J", 1.0, Code, KEY_J, &layouts[ComposeJ]}, + {"k", "K", 1.0, Code, KEY_K, &layouts[ComposeK]}, + {"l", "L", 1.0, Code, KEY_L, &layouts[ComposeL]}, + {";", ":", 1.0, Code, KEY_SEMICOLON}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"Enter", "Enter", 1.7, Code, KEY_ENTER}, + {"", "", 0.0, EndRow}, + + {"Shift", "Shift", 2.0, Mod, Shift, .scheme = 1}, + {"z", "Z", 1.0, Code, KEY_Z, &layouts[ComposeZ]}, + {"x", "X", 1.0, Code, KEY_X, &layouts[ComposeX]}, + {"c", "C", 1.0, Code, KEY_C, &layouts[ComposeC]}, + {"v", "V", 1.0, Code, KEY_V, &layouts[ComposeV]}, + {"b", "B", 1.0, Code, KEY_B, &layouts[ComposeB]}, + {"n", "N", 1.0, Code, KEY_N, &layouts[ComposeN]}, + {"m", "M", 1.0, Code, KEY_M, &layouts[ComposeM]}, + {",", "<", 1.0, Code, KEY_COMMA}, + {".", ">", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"/", "?", 1.0, Code, KEY_SLASH}, + {"", "", 1.0, Pad}, + {"", "", 1.0, Code, KEY_UP}, + {"", "", 1.0, Pad}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.5, NextLayer, .scheme = 1}, + {"Ctrl", "Ctrl", 1.0, Mod, Ctrl, .scheme = 1}, + {"", "", 1.0, Mod, Super, .scheme = 1}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"", "", 5.0, Code, KEY_SPACE}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"Ctrl", "Ctrl", 1.0, Mod, Ctrl, .scheme = 1}, + {"", "", 1.0, Code, KEY_LEFT}, + {"", "", 1.0, Code, KEY_DOWN}, + {"", "", 1.0, Code, KEY_RIGHT}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_full_wide[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1}, + {"↑", "↑", 1.0, Code, KEY_UP, .scheme = 1}, + {"↓", "↓", 1.0, Code, KEY_DOWN, .scheme = 1}, + {"←", "←", 1.0, Code, KEY_LEFT, .scheme = 1}, + {"→", "→", 1.0, Code, KEY_RIGHT, .scheme = 1}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE, &layouts[ComposeBracket]}, + {";", ":", 1.0, Code, KEY_SEMICOLON, &layouts[ComposePunctuation]}, + {"/", ">", 1.0, Code, KEY_SLASH, &layouts[ComposePunctuation]}, + {"Tab", "Tab", 1.0, Code, KEY_TAB, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"-", "_", 1.0, Code, KEY_MINUS, &layouts[ComposeMath]}, + {"=", "+", 1.0, Code, KEY_EQUAL, &layouts[ComposeMath]}, + {"", "", 0.0, EndRow}, + + {"q", "Q", 1.0, Code, KEY_Q, &layouts[Emoji]}, + {"w", "W", 1.0, Code, KEY_W, &layouts[ComposeW]}, + {"e", "E", 1.0, Code, KEY_E, &layouts[ComposeE]}, + {"r", "R", 1.0, Code, KEY_R, &layouts[ComposeR]}, + {"t", "T", 1.0, Code, KEY_T, &layouts[ComposeT]}, + {"y", "Y", 1.0, Code, KEY_Y, &layouts[ComposeY]}, + {"u", "U", 1.0, Code, KEY_U, &layouts[ComposeU]}, + {"i", "I", 1.0, Code, KEY_I, &layouts[ComposeI]}, + {"o", "O", 1.0, Code, KEY_O, &layouts[ComposeO]}, + {"p", "P", 1.0, Code, KEY_P, &layouts[ComposeP]}, + {"", "", 0.0, EndRow}, + + {"", "", 0.5, Pad}, + {"a", "A", 1.0, Code, KEY_A, &layouts[ComposeA]}, + {"s", "S", 1.0, Code, KEY_S, &layouts[ComposeS]}, + {"d", "D", 1.0, Code, KEY_D, &layouts[ComposeD]}, + {"f", "F", 1.0, Code, KEY_F, &layouts[ComposeF]}, + {"g", "G", 1.0, Code, KEY_G, &layouts[ComposeG]}, + {"h", "H", 1.0, Code, KEY_H, &layouts[ComposeH]}, + {"j", "J", 1.0, Code, KEY_J, &layouts[ComposeJ]}, + {"k", "K", 1.0, Code, KEY_K, &layouts[ComposeK]}, + {"l", "L", 1.0, Code, KEY_L, &layouts[ComposeL]}, + {"", "", 0.5, Pad}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"z", "Z", 1.0, Code, KEY_Z, &layouts[ComposeZ]}, + {"x", "X", 1.0, Code, KEY_X, &layouts[ComposeX]}, + {"c", "C", 1.0, Code, KEY_C, &layouts[ComposeC]}, + {"v", "V", 1.0, Code, KEY_V, &layouts[ComposeV]}, + {"b", "B", 1.0, Code, KEY_B, &layouts[ComposeB]}, + {"n", "N", 1.0, Code, KEY_N, &layouts[ComposeN]}, + {"m", "M", 1.0, Code, KEY_M, &layouts[ComposeM]}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.5, NextLayer, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {"", "Tab", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 1.5, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_landscape[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"F1", "F1", 1.0, Code, KEY_F1, .scheme = 1}, + {"F2", "F2", 1.0, Code, KEY_F2, .scheme = 1}, + {"F3", "F3", 1.0, Code, KEY_F3, .scheme = 1}, + {"F4", "F4", 1.0, Code, KEY_F4, .scheme = 1}, + {"F5", "F5", 1.0, Code, KEY_F5, .scheme = 1}, + {"F6", "F6", 1.0, Code, KEY_F6, .scheme = 1}, + {"F7", "F7", 1.0, Code, KEY_F7, .scheme = 1}, + {"F8", "F8", 1.0, Code, KEY_F8, .scheme = 1}, + {"F9", "F9", 1.0, Code, KEY_F9, .scheme = 1}, + {"F10", "F10", 1.0, Code, KEY_F10, .scheme = 1}, + {"F11", "F11", 1.0, Code, KEY_F11, .scheme = 1}, + {"F12", "F12", 1.0, Code, KEY_F12, .scheme = 1}, + {"Prt Sc", "Prt Sc", 1.0, Code, KEY_PRINT, .scheme = 1}, + {"Del", "Del", 1.0, Code, KEY_DELETE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"`", "~", 0.8, Code, KEY_GRAVE}, + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"-", "_", 1.0, Code, KEY_MINUS}, + {"=", "+", 1.0, Code, KEY_EQUAL}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE}, + {"", "", 0.0, EndRow}, + + {"Tab", "Tab", 1.5, Code, KEY_TAB, .scheme = 1}, + {"q", "Q", 1.0, Code, KEY_Q, &layouts[Emoji]}, + {"w", "W", 1.0, Code, KEY_W, &layouts[ComposeW]}, + {"e", "E", 1.0, Code, KEY_E, &layouts[ComposeE]}, + {"r", "R", 1.0, Code, KEY_R, &layouts[ComposeR]}, + {"t", "T", 1.0, Code, KEY_T, &layouts[ComposeT]}, + {"y", "Y", 1.0, Code, KEY_Y, &layouts[ComposeY]}, + {"u", "U", 1.0, Code, KEY_U, &layouts[ComposeU]}, + {"i", "I", 1.0, Code, KEY_I, &layouts[ComposeI]}, + {"o", "O", 1.0, Code, KEY_O, &layouts[ComposeO]}, + {"p", "P", 1.0, Code, KEY_P, &layouts[ComposeP]}, + {"[", "{", 1.0, Code, KEY_LEFTBRACE}, + {"]", "}", 1.0, Code, KEY_RIGHTBRACE}, + {"\\", "|", 0.8, Code, KEY_BACKSLASH}, + {"", "", 0.0, EndRow}, + + {"", "", 1.7, Pad}, + {"a", "A", 1.0, Code, KEY_A, &layouts[ComposeA]}, + {"s", "S", 1.0, Code, KEY_S, &layouts[ComposeS]}, + {"d", "D", 1.0, Code, KEY_D, &layouts[ComposeD]}, + {"f", "F", 1.0, Code, KEY_F, &layouts[ComposeF]}, + {"g", "G", 1.0, Code, KEY_G, &layouts[ComposeG]}, + {"h", "H", 1.0, Code, KEY_H, &layouts[ComposeH]}, + {"j", "J", 1.0, Code, KEY_J, &layouts[ComposeJ]}, + {"k", "K", 1.0, Code, KEY_K, &layouts[ComposeK]}, + {"l", "L", 1.0, Code, KEY_L, &layouts[ComposeL]}, + {";", ":", 1.0, Code, KEY_SEMICOLON}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"Enter", "Enter", 1.7, Code, KEY_ENTER}, + {"", "", 0.0, EndRow}, + + {"Shift", "Shift", 2.0, Mod, Shift, .scheme = 1}, + {"z", "Z", 1.0, Code, KEY_Z, &layouts[ComposeZ]}, + {"x", "X", 1.0, Code, KEY_X, &layouts[ComposeX]}, + {"c", "C", 1.0, Code, KEY_C, &layouts[ComposeC]}, + {"v", "V", 1.0, Code, KEY_V, &layouts[ComposeV]}, + {"b", "B", 1.0, Code, KEY_B, &layouts[ComposeB]}, + {"n", "N", 1.0, Code, KEY_N, &layouts[ComposeN]}, + {"m", "M", 1.0, Code, KEY_M, &layouts[ComposeM]}, + {",", "<", 1.0, Code, KEY_COMMA}, + {".", ">", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"/", "?", 1.0, Code, KEY_SLASH}, + {"", "", 0.8, Pad}, + {"", "", 1.0, Code, KEY_UP}, + {"", "", 1.0, Pad}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.5, NextLayer, .scheme = 1}, + {"Ctrl", "Ctrl", 1.0, Mod, Ctrl, .scheme = 1}, + {"", "", 1.0, Mod, Super, .scheme = 1}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"", "", 5.0, Code, KEY_SPACE}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"Ctrl", "Ctrl", 1.0, Mod, Ctrl, .scheme = 1}, + {"", "", 1.0, Code, KEY_LEFT}, + {"", "", 1.0, Code, KEY_DOWN}, + {"", "", 1.0, Code, KEY_RIGHT}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_landscape_special[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"", "", 0.5, Pad, .scheme = 1}, + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"", "", 0.5, Pad, .scheme = 1}, + {"Tab", "Tab", 1.0, Code, KEY_TAB, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⇈", "⇈", 1.0, Code, KEY_PAGEUP, .scheme = 1}, + {"⇊", "⇊", 1.0, Code, KEY_PAGEDOWN, .scheme = 1}, + {"cpl", "cpl", 1.0, Mod, CapsLock, .scheme = 1}, + {"🙂", "🙂", 1.0, Layout, 0, &layouts[Emoji]}, + {"`", "~", 1.0, Code, KEY_GRAVE}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"-", "_", 1.0, Code, KEY_MINUS}, + {"=", "+", 1.0, Code, KEY_EQUAL}, + {"[", "{", 1.0, Code, KEY_LEFTBRACE}, + {"]", "}", 1.0, Code, KEY_RIGHTBRACE}, + {"\\", "|", 1.0, Code, KEY_BACKSLASH}, + {"/", ">", 1.0, Code, KEY_SLASH}, + {"Del", "Del", 1.0, Code, KEY_DELETE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⇤", "⇤", 1.0, Code, KEY_HOME, .scheme = 1}, + {"⇥", "⇥", 1.0, Code, KEY_END, .scheme = 1}, + {"⇧", "⇫", 2.0, Mod, Shift, .scheme = 1}, + {";", ":", 1.0, Code, KEY_SEMICOLON}, + {"<", "«", 1.0, Code, KEY_COMMA, 0, AltGr}, + {">", "»", 1.0, Code, KEY_DOT, 0, AltGr}, + {"¡", "¿", 1.0, Code, KEY_MENU}, + {",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"/", ">", 1.0, Code, KEY_SLASH}, + {"", "", 0.5, Pad, .scheme = 1}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"abc", "abc", 1.0, BackLayer, .scheme = 1}, + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"ctr", "ctr", 1.0, Mod, Ctrl, .scheme = 1}, + {"cmp", "cmp", 1.0, Compose, .scheme = 1}, + {"", "Tab", 5.0, Code, KEY_SPACE}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"agr", "agr", 1.0, Mod, AltGr, .scheme = 1}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; +static struct key keys_special[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"↑", "↑", 1.0, Code, KEY_UP, .scheme = 1}, + {"↓", "↓", 1.0, Code, KEY_DOWN, .scheme = 1}, + {"←", "←", 1.0, Code, KEY_LEFT, .scheme = 1}, + {"→", "→", 1.0, Code, KEY_RIGHT, .scheme = 1}, + {"⇈", "⇈", 1.0, Code, KEY_PAGEUP, .scheme = 1}, + {"⇊", "⇊", 1.0, Code, KEY_PAGEDOWN, .scheme = 1}, + {"⇤", "⇤", 1.0, Code, KEY_HOME, .scheme = 1}, + {"⇥", "⇥", 1.0, Code, KEY_END, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"", "", 0.0, EndRow}, + + {"cpl", "cpl", 1.0, Mod, CapsLock, .scheme = 1}, + {"cmp", "cmp", 1.0, Compose, .scheme = 1}, + {"`", "~", 1.0, Code, KEY_GRAVE}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"-", "_", 1.0, Code, KEY_MINUS}, + {"=", "+", 1.0, Code, KEY_EQUAL}, + {"[", "{", 1.0, Code, KEY_LEFTBRACE}, + {"]", "}", 1.0, Code, KEY_RIGHTBRACE}, + {"\\", "|", 1.0, Code, KEY_BACKSLASH}, + {"Del", "Del", 1.0, Code, KEY_DELETE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 2.0, Mod, Shift, .scheme = 1}, + {";", ":", 1.0, Code, KEY_SEMICOLON}, + {"/", ">", 1.0, Code, KEY_SLASH}, + {"<", "«", 1.0, Code, KEY_COMMA, 0, AltGr}, + {">", "»", 1.0, Code, KEY_DOT, 0, AltGr}, + {"¡", "¿", 1.0, Code, KEY_MENU}, + {"🙂", "🙂", 1.0, Layout, 0, &layouts[Emoji]}, + {"agr", "agr", 1.0, Mod, AltGr, .scheme = 1}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"abc", "abc", 1.0, BackLayer, .scheme = 1}, + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {"", "Tab", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_specialpad[] = { + {"⎋", "⎋", 1.0, Code, KEY_ESC, .scheme = 1}, + {"↑", "↑", 1.0, Code, KEY_UP, .scheme = 1}, + {"⇈", "⇈", 1.0, Code, KEY_PAGEUP, .scheme = 1}, + {"`", "~", 1.0, Code, KEY_GRAVE}, + {"\\", "|", 1.0, Code, KEY_BACKSLASH}, + {"/", ">", 1.0, Code, KEY_SLASH}, + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"⌦", "⌦", 1.0, Code, KEY_DELETE, .scheme = 1}, + {"", "", 0.0, EndRow}, + //{"Tab", "Tab", 1.0, Code, KEY_TAB, .scheme = 1}, + {"←", "←", 1.0, Code, KEY_LEFT, .scheme = 1}, + {"", "↹", 1.0, Code, KEY_SPACE}, + {"→", "→", 1.0, Code, KEY_RIGHT, .scheme = 1}, + {".", "?", 1.0, Code, KEY_DOT}, + {"[", "{", 1.0, Code, KEY_LEFTBRACE}, + {"]", "}", 1.0, Code, KEY_RIGHTBRACE}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.0, Mod, Shift, .scheme = 1}, + {"↓", "↓", 1.0, Code, KEY_DOWN, .scheme = 1}, + {"⇊", "⇊", 1.0, Code, KEY_PAGEDOWN, .scheme = 1}, + {";", ":", 1.0, Code, KEY_SEMICOLON}, + {"<", "«", 1.0, Code, KEY_COMMA, 0, AltGr}, + {">", "»", 1.0, Code, KEY_DOT, 0, AltGr}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Ctrl", "Ctrl", 1.0, Mod, Ctrl, .scheme = 1}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"", "", 1.0, Mod, Super, .scheme = 1}, + + {"⇤", "⇤", 1.0, Code, KEY_HOME, .scheme = 1}, + {"⇥", "⇥", 1.0, Code, KEY_END, .scheme = 1}, + {"-", "_", 1.0, Code, KEY_MINUS}, + {"0", ")", 1.0, Code, KEY_0}, + {"=", "+", 1.0, Code, KEY_EQUAL}, + {"↵", "↵", 1.0, Code, KEY_ENTER, .scheme = 1}, + //{",", "'", 1.0, Code, KEY_COMMA}, + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_simple[] = { + {"`", "~", 1.0, Code, KEY_GRAVE}, + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"-", "_", 1.0, Code, KEY_MINUS}, + {"=", "+", 1.0, Code, KEY_EQUAL}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"q", "Q", 1.0, Code, KEY_Q, &layouts[Emoji]}, + {"w", "W", 1.0, Code, KEY_W, &layouts[ComposeW]}, + {"e", "E", 1.0, Code, KEY_E, &layouts[ComposeE]}, + {"r", "R", 1.0, Code, KEY_R, &layouts[ComposeR]}, + {"t", "T", 1.0, Code, KEY_T, &layouts[ComposeT]}, + {"y", "Y", 1.0, Code, KEY_Y, &layouts[ComposeY]}, + {"u", "U", 1.0, Code, KEY_U, &layouts[ComposeU]}, + {"i", "I", 1.0, Code, KEY_I, &layouts[ComposeI]}, + {"o", "O", 1.0, Code, KEY_O, &layouts[ComposeO]}, + {"p", "P", 1.0, Code, KEY_P, &layouts[ComposeP]}, + {"[", "{", 1.0, Code, KEY_LEFTBRACE}, + {"]", "}", 1.0, Code, KEY_RIGHTBRACE}, + {"\\", "|", 0.8, Code, KEY_BACKSLASH}, + {"", "", 0.0, EndRow}, + + {"", "", 0.5, Pad}, + {"a", "A", 1.0, Code, KEY_A, &layouts[ComposeA]}, + {"s", "S", 1.0, Code, KEY_S, &layouts[ComposeS]}, + {"d", "D", 1.0, Code, KEY_D, &layouts[ComposeD]}, + {"f", "F", 1.0, Code, KEY_F, &layouts[ComposeF]}, + {"g", "G", 1.0, Code, KEY_G, &layouts[ComposeG]}, + {"h", "H", 1.0, Code, KEY_H, &layouts[ComposeH]}, + {"j", "J", 1.0, Code, KEY_J, &layouts[ComposeJ]}, + {"k", "K", 1.0, Code, KEY_K, &layouts[ComposeK]}, + {"l", "L", 1.0, Code, KEY_L, &layouts[ComposeL]}, + {";", ":", 1.0, Code, KEY_SEMICOLON}, + {"'", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"Enter", "Enter", 1.0, Code, KEY_ENTER, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"Shift", "Shift", 1.0, Mod, Shift, .scheme = 1}, + {"z", "Z", 1.0, Code, KEY_Z, &layouts[ComposeZ]}, + {"x", "X", 1.0, Code, KEY_X, &layouts[ComposeX]}, + {"c", "C", 1.0, Code, KEY_C, &layouts[ComposeC]}, + {"v", "V", 1.0, Code, KEY_V, &layouts[ComposeV]}, + {"b", "B", 1.0, Code, KEY_B, &layouts[ComposeB]}, + {"n", "N", 1.0, Code, KEY_N, &layouts[ComposeN]}, + {"m", "M", 1.0, Code, KEY_M, &layouts[ComposeM]}, + {",", "<", 1.0, Code, KEY_COMMA}, + {".", ">", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"/", "?", 1.0, Code, KEY_SLASH}, + {"", "", 0.0, EndRow}, + + {"Ctrl", "Ctrl", 1.0, Mod, Ctrl, .scheme = 1}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {"", "", 5.0, Code, KEY_SPACE}, + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_dialer[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC}, + {"+", "+", 1.0, Code, KEY_KPPLUS}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE}, + {"", "", 0.0, EndRow}, + {"1", "1", 1.0, Code, KEY_1}, + {"2", "2", 1.0, Code, KEY_2}, + {"3", "3", 1.0, Code, KEY_3}, + {"", "", 0.0, EndRow}, + {"4", "4", 1.0, Code, KEY_4}, + {"5", "5", 1.0, Code, KEY_5}, + {"6", "6", 1.0, Code, KEY_6}, + {"", "", 0.0, EndRow}, + {"7", "7", 1.0, Code, KEY_7}, + {"8", "8", 1.0, Code, KEY_8}, + {"9", "9", 1.0, Code, KEY_9}, + {"", "", 0.0, EndRow}, + {"*", "*", 1.0, Code, KEY_KPASTERISK}, + {"0", "0", 1.0, Code, KEY_0}, + {"#", "#", 1.0, Code, KEY_3, 0, Shift}, + {"", "", 0.0, EndRow}, + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_cyrillic[] = { + {"1", "!", 1.0, Code, KEY_1}, + {"2", "\"", 1.0, Code, KEY_2}, + {"3", "№", 1.0, Code, KEY_3}, + {"4", ";", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", ":", 1.0, Code, KEY_6}, + {"7", "?", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9}, + {"0", ")", 1.0, Code, KEY_0}, + {"-", "_", 1.0, Code, KEY_MINUS}, + {"=", "+", 1.0, Code, KEY_EQUAL}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"й", "Й", 1.0, Code, KEY_Q}, + {"ц", "Ц", 1.0, Code, KEY_W}, + {"у", "У", 1.0, Code, KEY_E}, + {"к", "К", 1.0, Code, KEY_R}, + {"е", "Е", 1.0, Code, KEY_T}, + {"н", "Н", 1.0, Code, KEY_Y}, + {"г", "Г", 1.0, Code, KEY_U}, + {"ш", "Ш", 1.0, Code, KEY_I}, + {"щ", "Щ", 1.0, Code, KEY_O}, + {"з", "З", 1.0, Code, KEY_P}, + {"х", "Х", 1.0, Code, KEY_LEFTBRACE}, + {"ъ", "Ъ", 1.0, Code, KEY_RIGHTBRACE}, + {"", "", 0.0, EndRow}, + + {"ф", "Ф", 1.0, Code, KEY_A}, + {"ы", "Ы", 1.0, Code, KEY_S}, + {"в", "В", 1.0, Code, KEY_D}, + {"а", "А", 1.0, Code, KEY_F}, + {"п", "П", 1.0, Code, KEY_G}, + {"р", "Р", 1.0, Code, KEY_H}, + {"о", "О", 1.0, Code, KEY_J}, + {"л", "Л", 1.0, Code, KEY_K}, + {"д", "Д", 1.0, Code, KEY_L}, + {"ж", "Ж", 1.0, Code, KEY_SEMICOLON}, + {"э", "Э", 1.0, Code, KEY_APOSTROPHE}, + {"Enter", "Enter", 1.0, Code, KEY_ENTER, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"Shift", "Shift", 1.0, Mod, Shift, .scheme = 1}, + {"я", "Я", 1.0, Code, KEY_Z}, + {"ч", "Ч", 1.0, Code, KEY_X}, + {"с", "С", 1.0, Code, KEY_C}, + {"м", "М", 1.0, Code, KEY_V}, + {"и", "И", 1.0, Code, KEY_B}, + {"т", "Т", 1.0, Code, KEY_N}, + {"ь", "Ь", 1.0, Code, KEY_M}, + {"б", "Б", 1.0, Code, KEY_COMMA}, + {"ю", "Ю", 1.0, Code, KEY_DOT}, + {".", ",", 1.0, Code, KEY_SLASH}, + {"", "", 0.0, EndRow}, + + {"Ctrl", "Ctrl", 1.0, Mod, Ctrl, .scheme = 1}, + {"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1}, + {"", "", 5.0, Code, KEY_SPACE}, + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"", "", 0.0, Last}, +}; + + +static struct key keys_arabic[] = { + {"١", "!", 1.0, Code, KEY_1}, + {"٢", "@", 1.0, Code, KEY_2}, + {"٣", "#", 1.0, Code, KEY_3}, + {"٤", ";", 1.0, Code, KEY_4}, + {"٥", "%", 1.0, Code, KEY_5}, + {"٦", ":", 1.0, Code, KEY_6}, + {"٧", "&", 1.0, Code, KEY_7}, + {"٨", "*", 1.0, Code, KEY_8}, + {"٩", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"٠", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"", "", 0.0, EndRow}, + + {"ض", "ـَ", 1.0, Code, KEY_Q, &layouts[Emoji]}, + {"ص", "ـً", 1.0, Code, KEY_W}, + {"ث", "ـُ", 1.0, Code, KEY_E}, + {"ق", "ـٌ", 1.0, Code, KEY_R}, + {"ف", "ﻹ", 1.0, Code, KEY_T}, + {"غ", "إ", 1.0, Code, KEY_Y}, + {"ع", "`", 1.0, Code, KEY_U}, + {"ه", "", 1.0, Code, KEY_I}, + {"خ", ";", 1.0, Code, KEY_O}, + {"ح", "", 1.0, Code, KEY_P}, + {"ج", "<", 1.0, Code, KEY_LEFTBRACE}, + {"", "", 0.0, EndRow}, + + {"ش", "ـِ", 1.0, Code, KEY_A}, + {"س", "ـٍ", 1.0, Code, KEY_S}, + {"ي", "]", 1.0, Code, KEY_D}, + {"ب", "[", 1.0, Code, KEY_F}, + {"ل", "ﻷ", 1.0, Code, KEY_G}, + {"ا", "أ", 1.0, Code, KEY_H}, + {"ت", "ـ", 1.0, Code, KEY_J}, + {"ن", "،", 1.0, Code, KEY_K}, + {"م", "/", 1.0, Code, KEY_L}, + {"ك", ":", 1.0, Code, KEY_SEMICOLON}, + {"ط", "\"", 1.0, Code, KEY_APOSTROPHE}, + {"", "", 0.0, EndRow}, + + {"ذ", "~", 1.0, Code, KEY_Z}, + {"ء", "ـْ", 1.0, Code, KEY_X}, + {"ؤ", "}", 1.0, Code, KEY_C}, + {"ر", "{", 1.0, Code, KEY_V}, + {"ى", "ﻵ", 1.0, Code, KEY_B}, + {"ة", "'", 1.0, Code, KEY_N}, + {"و", ",", 1.0, Code, KEY_M}, + {"ز", "؟", 1.0, Code, KEY_COMMA}, + {"ظ", ".", 1.0, Code, KEY_DOT}, + {"د", ">", 1.0, Code, KEY_RIGHTBRACE}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"⇧", "⇫", 1.0, Mod, Shift, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {"", "Tab", 5.0, Code, KEY_SPACE}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_georgian[] = { + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", ";", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", ":", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"", "", 0.0, EndRow}, + + {"ქ", "Q", 1.0, Code, KEY_Q}, + {"წ", "ჭ", 1.0, Code, KEY_W}, + {"ე", "E", 1.0, Code, KEY_E}, + {"რ", "ღ", 1.0, Code, KEY_R}, + {"ტ", "თ", 1.0, Code, KEY_T}, + {"ყ", "Y", 1.0, Code, KEY_Y}, + {"უ", "U", 1.0, Code, KEY_U}, + {"ი", "I", 1.0, Code, KEY_I}, + {"ო", "O", 1.0, Code, KEY_O}, + {"პ", "P", 1.0, Code, KEY_P}, + {"", "", 0.0, EndRow}, + + {"ა", "A", 1.0, Code, KEY_A}, + {"ს", "შ", 1.0, Code, KEY_S}, + {"დ", "D", 1.0, Code, KEY_D}, + {"ფ", "F", 1.0, Code, KEY_F}, + {"გ", "G", 1.0, Code, KEY_G}, + {"ჰ", "H", 1.0, Code, KEY_H}, + {"ჯ", "ჟ", 1.0, Code, KEY_J}, + {"კ", "K", 1.0, Code, KEY_K}, + {"ლ", "L", 1.0, Code, KEY_L}, + {";", ":", 1.0, Code, KEY_SEMICOLON, &layouts[ComposePunctuation]}, + {"", "", 0.0, EndRow}, + + {"ზ", "ძ", 1.0, Code, KEY_Z}, + {"ხ", "X", 1.0, Code, KEY_X}, + {"ც", "ჩ", 1.0, Code, KEY_C}, + {"ვ", "V", 1.0, Code, KEY_V}, + {"ბ", "B", 1.0, Code, KEY_B}, + {"ნ", "N", 1.0, Code, KEY_N}, + {"მ", "M", 1.0, Code, KEY_M}, + {",", "<", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {".", ">", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"⇧", "⇫", 1.0, Mod, Shift, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {"", "Tab", 5.0, Code, KEY_SPACE}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_persian[] = { + {"۱", "|", 1.0, Code, KEY_1}, + {"۲", "٬", 1.0, Code, KEY_2}, + {"۳", "#", 1.0, Code, KEY_3}, + {"۴", "﷼", 1.0, Code, KEY_4}, + {"۵", "٪", 1.0, Code, KEY_5}, + {"۶", "×", 1.0, Code, KEY_6}, + {"۷", "/", 1.0, Code, KEY_7}, + {"۸", "*", 1.0, Code, KEY_8}, + {"۹", ")", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"۰", "(", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"-", "_", 1.0, Code, KEY_MINUS, &layouts[ComposeMath]}, + {"=", "+", 1.0, Code, KEY_EQUAL, &layouts[ComposeMath]}, + {"", "", 0.0, EndRow}, + + {"ض", "ﹿ", 1.0, Code, KEY_Q}, + {"ص", "ـٌ", 1.0, Code, KEY_W}, + {"ث", "ـٍ", 1.0, Code, KEY_E}, + {"ق", "ـً", 1.0, Code, KEY_R}, + {"ف", "ـُ", 1.0, Code, KEY_T}, + {"غ", "ـِ", 1.0, Code, KEY_Y}, + {"ع", "ـَ", 1.0, Code, KEY_U}, + {"ه", "ﹽ", 1.0, Code, KEY_I}, + {"خ", "]", 1.0, Code, KEY_O}, + {"ح", "[", 1.0, Code, KEY_P}, + {"ج", "}", 1.0, Code, KEY_LEFTBRACE}, + {"چ", "{", 1.0, Code, KEY_RIGHTBRACE}, + {"", "", 0.0, EndRow}, + + {"ش", "ؤ", 1.0, Code, KEY_A}, + {"س", "ئ", 1.0, Code, KEY_S}, + {"ی", "ي", 1.0, Code, KEY_D}, + {"ب", "إ", 1.0, Code, KEY_F}, + {"ل", "أ", 1.0, Code, KEY_G}, + {"ا", "آ", 1.0, Code, KEY_H}, + {"ت", "ة", 1.0, Code, KEY_J}, + {"ن", "»", 1.0, Code, KEY_K}, + {"م", "«", 1.0, Code, KEY_L}, + {"ک", ":", 1.0, Code, KEY_SEMICOLON}, + {"گ", "؛", 1.0, Code, KEY_APOSTROPHE}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"ظ", "ك", 1.0, Code, KEY_Z}, + {"ط", "ـٓ", 1.0, Code, KEY_X}, + {"ژ", ">", 1.0, Code, KEY_BACKSLASH}, + {"ز", "<", 1.0, Code, KEY_C}, + {"ر", "ـٰ", 1.0, Code, KEY_V}, + {"ذ", "⇑", 1.0, Code, KEY_B}, + {"د", "ـٔ", 1.0, Code, KEY_N}, + {"پ", "ء", 1.0, Code, KEY_M}, + {"و", "\\", 1.0, Code, KEY_COMMA}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {".", "،", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"", "Tab", 4.0, Code, KEY_SPACE}, + {"⥣", "↥", 1.0, Code, KEY_GRAVE}, + {"؟", "!", 1.0, Code, KEY_SLASH, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_greek[] = { + {"1", "!", 1.0, Code, KEY_1}, + {"2", "@", 1.0, Code, KEY_2}, + {"3", "#", 1.0, Code, KEY_3}, + {"4", "$", 1.0, Code, KEY_4}, + {"5", "%", 1.0, Code, KEY_5}, + {"6", "^", 1.0, Code, KEY_6}, + {"7", "&", 1.0, Code, KEY_7}, + {"8", "*", 1.0, Code, KEY_8}, + {"9", "(", 1.0, Code, KEY_9, &layouts[ComposeBracket]}, + {"0", ")", 1.0, Code, KEY_0, &layouts[ComposeBracket]}, + {"-", "_", 1.0, Code, KEY_MINUS, &layouts[ComposeMath]}, + {"=", "+", 1.0, Code, KEY_EQUAL, &layouts[ComposeMath]}, + {"", "", 0.0, EndRow}, + + {";", ":", 1.0, Code, KEY_Q, &layouts[ComposePunctuation]}, + {"ς", "Σ", 1.0, Code, KEY_W}, + {"ε", "Ε", 1.0, Code, KEY_E}, + {"ρ", "Ρ", 1.0, Code, KEY_R}, + {"τ", "Τ", 1.0, Code, KEY_T}, + {"υ", "Υ", 1.0, Code, KEY_Y}, + {"θ", "Θ", 1.0, Code, KEY_U}, + {"ι", "Ι", 1.0, Code, KEY_I}, + {"ο", "Ο", 1.0, Code, KEY_O}, + {"π", "Π", 1.0, Code, KEY_P}, + {"", "", 0.0, EndRow}, + + {"α", "A", 1.0, Code, KEY_A}, + {"σ", "Σ", 1.0, Code, KEY_S}, + {"δ", "Δ", 1.0, Code, KEY_D}, + {"φ", "Φ", 1.0, Code, KEY_F}, + {"γ", "Γ", 1.0, Code, KEY_G}, + {"η", "Η", 1.0, Code, KEY_H}, + {"ξ", "Ξ", 1.0, Code, KEY_J}, + {"κ", "Κ", 1.0, Code, KEY_K}, + {"λ", "Λ", 1.0, Code, KEY_L}, + {"΄", "¨", 1.0, Code, KEY_SEMICOLON, &layouts[ComposeBracket]}, + {"", "", 0.0, EndRow}, + + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"ζ", "Ζ", 1.0, Code, KEY_Z}, + {"χ", "Χ", 1.0, Code, KEY_X}, + {"ψ", "Ψ", 1.0, Code, KEY_C}, + {"ω", "Ω", 1.0, Code, KEY_V}, + {"β", "Β", 1.0, Code, KEY_B}, + {"ν", "Ν", 1.0, Code, KEY_N}, + {"μ", "Μ", 1.0, Code, KEY_M}, + {"/", "\\", 1.0, Code, KEY_SLASH}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.5, NextLayer, .scheme = 1}, + {",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]}, + {"", "Tab", 5, Code, KEY_SPACE}, + {".", "\"", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]}, + {"Enter", "Enter", 2, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_hebrew[] = { + {"/", "/", 1.0, Code, KEY_Q}, + {"'", "'", 1.0, Code, KEY_W, &layouts[ComposeBracket]}, + {"ק", "ק", 1.0, Code, KEY_E}, + {"ר", "ר", 1.0, Code, KEY_R}, + {"א", "א", 1.0, Code, KEY_T}, + {"ט", "ט", 1.0, Code, KEY_Y}, + {"ו", "ו", 1.0, Code, KEY_U}, + {"ן", "ן", 1.0, Code, KEY_I}, + {"ם", "ם", 1.0, Code, KEY_O}, + {"פ", "פ", 1.0, Code, KEY_P}, + {"", "", 0.0, EndRow}, + + {"ש", "ש", 1.0, Code, KEY_A}, + {"ד", "ד", 1.0, Code, KEY_S}, + {"ג", "ג", 1.0, Code, KEY_D}, + {"כ", "כ", 1.0, Code, KEY_F}, + {"ע", "ע", 1.0, Code, KEY_G}, + {"י", "י", 1.0, Code, KEY_H}, + {"ח", "ח", 1.0, Code, KEY_J}, + {"ל", "ל", 1.0, Code, KEY_K}, + {"ך", "ך", 1.0, Code, KEY_L}, + {"ף", "ף", 1.0, Code, KEY_SEMICOLON}, + {"", "", 0.0, EndRow}, + + {"ז", "ז", 1.0, Code, KEY_Z}, + {"ס", "ס", 1.0, Code, KEY_X}, + {"ב", "ב", 1.0, Code, KEY_C}, + {"ה", "ה", 1.0, Code, KEY_V}, + {"נ", "נ", 1.0, Code, KEY_B}, + {"מ", "מ", 1.0, Code, KEY_N}, + {"צ", "צ", 1.0, Code, KEY_M}, + {"ת", "ת", 1.0, Code, KEY_COMMA}, + {"ץ", "ץ", 1.0, Code, KEY_DOT}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme = 1}, + {",", "\"", 1.0, Code, KEY_APOSTROPHE, &layouts[ComposeMath]}, + {"", "Tab", 3.5, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH, &layouts[ComposePunctuation]}, + {"?", "?", 1.0, Code, KEY_SLASH, &layouts[ComposePunctuation], Shift}, + {"Enter", "Enter", 1.5, Code, KEY_ENTER, .scheme = 1}, + + /* end of layout */ + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_a[] = { + {"à", "À", 1.0, Copy, 0x00E0, 0, 0x00C0}, + {"á", "Á", 1.0, Copy, 0x00E1, 0, 0x00C1}, + {"â", "Â", 1.0, Copy, 0x00E2, 0, 0x00C2}, + {"ã", "Ã", 1.0, Copy, 0x00E3, 0, 0x00C3}, + {"ä", "Ä", 1.0, Copy, 0x00E4, 0, 0x00C4}, + {"å", "Å", 1.0, Copy, 0x00E5, 0, 0x00C5}, + {"æ", "Æ", 1.0, Copy, 0x00E7, 0, 0x00C6}, + {"ā", "Ā", 1.0, Copy, 0x0101, 0, 0x0100}, + {"ă", "Ă", 1.0, Copy, 0x0103, 0, 0x0102}, + {"ą", "Ą", 1.0, Copy, 0x0105, 0, 0x0104}, + {"", "", 0.0, EndRow}, + {"α", "Α", 1.0, Copy, 0x03B1, 0, 0x0391}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_e[] = { + {"è", "È", 1.0, Copy, 0x00E8, 0, 0x00C8}, + {"é", "É", 1.0, Copy, 0x00E9, 0, 0x00C9}, + {"ê", "Ê", 1.0, Copy, 0x00EA, 0, 0x00CA}, + {"ë", "Ë", 1.0, Copy, 0x00EB, 0, 0x00CB}, + {"ē", "Ē", 1.0, Copy, 0x0113, 0, 0x0112}, + {"ĕ", "Ĕ", 1.0, Copy, 0x0115, 0, 0x0114}, + {"ė", "Ė", 1.0, Copy, 0x0117, 0, 0x0116}, + {"ę", "Ę", 1.0, Copy, 0x0119, 0, 0x0118}, + {"ě", "Ě", 1.0, Copy, 0x011B, 0, 0x011A}, + {"", "", 1.0, Pad}, + {"", "", 0.0, EndRow}, + {"ε", "Ε", 1.0, Copy, 0x03B5, 0, 0x0395}, + {"ǝ", "Ə", 1.0, Copy, 0x0259, 0, 0x018F}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_y[] = { + {"ý", "Ý", 1.0, Copy, 0x00FD, 0, 0x00DD}, + {"ÿ", "Ÿ", 1.0, Copy, 0x00FF, 0, 0x0178}, + {"ŷ", "Ŷ", 1.0, Copy, 0x0177, 0, 0x0176}, + {"", "", 7.0, Pad}, + {"", "", 0.0, EndRow}, + {"υ", "Υ", 1.0, Copy, 0x03C5, 0, 0x03A5}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_u[] = { + {"ù", "Ù", 1.0, Copy, 0x00F9, 0, 0x00D9}, + {"ú", "Ú", 1.0, Copy, 0x00FA, 0, 0x00DA}, + {"û", "Û", 1.0, Copy, 0x00FB, 0, 0x00DB}, + {"ü", "Ü", 1.0, Copy, 0x00FC, 0, 0x00DC}, + {"ũ", "Ũ", 1.0, Copy, 0x0169, 0, 0x0168}, + {"ū", "Ū", 1.0, Copy, 0x016B, 0, 0x016A}, + {"ŭ", "Ŭ", 1.0, Copy, 0x016D, 0, 0x016C}, + {"ů", "Ů", 1.0, Copy, 0x016F, 0, 0x016E}, + {"ű", "Ű", 1.0, Copy, 0x0171, 0, 0x0170}, + {"ų", "Ų", 1.0, Copy, 0x0173, 0, 0x0172}, + {"", "", 0.0, EndRow}, + {"υ", "Υ", 1.0, Copy, 0x03C5, 0, 0x03A5}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_o[] = { + {"ò", "Ò", 1.0, Copy, 0x00F2, 0, 0x00D2}, + {"ó", "Ó", 1.0, Copy, 0x00F3, 0, 0x00D3}, + {"ô", "Ô", 1.0, Copy, 0x00F4, 0, 0x00D4}, + {"õ", "Õ", 1.0, Copy, 0x00F5, 0, 0x00D5}, + {"ö", "Ö", 1.0, Copy, 0x00F6, 0, 0x00D6}, + {"ø", "Ø", 1.0, Copy, 0x00F8, 0, 0x00D8}, + {"ō", "Ō", 1.0, Copy, 0x014D, 0, 0x014C}, + {"ŏ", "Ŏ", 1.0, Copy, 0x014F, 0, 0x014E}, + {"ő", "Ő", 1.0, Copy, 0x0151, 0, 0x0150}, + {"œ", "Œ", 1.0, Copy, 0x0153, 0, 0x0152}, + {"", "", 0.0, EndRow}, + {"ο", "Ο", 1.0, Copy, 0x03BF, 0, 0x039F}, + {"ω", "Ο", 1.0, Copy, 0x03C9, 0, 0x03A9}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_i[] = { + {"ì", "Ì", 1.0, Copy, 0x00EC, 0, 0x00CC}, + {"í", "Í", 1.0, Copy, 0x00ED, 0, 0x00CD}, + {"î", "Î", 1.0, Copy, 0x00EE, 0, 0x00CE}, + {"ï", "Ï", 1.0, Copy, 0x00EF, 0, 0x00CF}, + {"ĩ", "Ĩ", 1.0, Copy, 0x0129, 0, 0x0128}, + {"ī", "Ī", 1.0, Copy, 0x012B, 0, 0x012A}, + {"ĭ", "Ĭ", 1.0, Copy, 0x012D, 0, 0x012C}, + {"į", "Į", 1.0, Copy, 0x012F, 0, 0x012E}, + {"ı", "I", 1.0, Copy, 0x0131, 0, 0x0049}, + {"i", "İ", 1.0, Copy, 0x0069, 0, 0x0130}, + {"", "", 0.0, EndRow}, + {"ι", "Ι", 1.0, Copy, 0x03B9, 0, 0x0399}, + {"η", "Η", 1.0, Copy, 0x03B7, 0, 0x0397}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_emoji[] = { + {"🙂", "🙏", 1.0, Copy, 0x1f642, 0, 0x1f64f}, // Emojis + {"😀", "🙋", 1.0, Copy, 0x1f600, 0, 0x1f64b}, + {"😁", "✋", 1.0, Copy, 0x1f601, 0, 0x270B}, + {"😂", "🙇", 1.0, Copy, 0x1f602, 0, 0x1f647}, + {"😃", "👨", 1.0, Copy, 0x1f603, 0, 0x1f468}, + {"😄", "👩", 1.0, Copy, 0x1f604, 0, 0x1f469}, + {"😅", "👶", 1.0, Copy, 0x1f605, 0, 0x1f476}, + {"😆", "👻", 1.0, Copy, 0x1f606, 0, 0x1f47b}, + {"😇", "✨", 1.0, Copy, 0x1f607, 0, 0x2728}, + {"🤣", "💰", 1.0, Copy, 0x1f923, 0, 0x1f4b0}, + {"", "", 0.0, EndRow}, + {"😉", "🐕", 1.0, Copy, 0x1f609, 0, 0x1f415}, + {"😊", "🐈", 1.0, Copy, 0x1f60a, 0, 0x1f408}, + {"😋", "🐧", 1.0, Copy, 0x1f60b, 0, 0x1f427}, + {"😌", "🐇", 1.0, Copy, 0x1f60c, 0, 0x1f407}, + {"😍", "💔", 1.0, Copy, 0x1f60d, 0, 0x1f494}, + {"😘", "💕", 1.0, Copy, 0x1f618, 0, 0x1f495}, + {"😎", "❤", 1.0, Copy, 0x1f60e, 0, 0x2764}, + {"😐", "😏", 1.0, Copy, 0x1f610, 0, 0x1f60f}, + {"😒", "👀", 1.0, Copy, 0x1f612, 0, 0x1f440}, + {"😓", "💀", 1.0, Copy, 0x1f613, 0, 0x1f480}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.0, Mod, Shift, .scheme = 1}, + {"😛", "😜", 1.0, Copy, 0x1f61b, 0, 0x1f61c}, + {"😮", "😝", 1.0, Copy, 0x1f62e, 0, 0x1f61d}, + {"😟", "😞", 1.0, Copy, 0x1f61f, 0, 0x1f61e}, + {"😠", "🥺", 1.0, Copy, 0x1f620, 0, 0x1f97a}, + {"😢", "👿", 1.0, Copy, 0x1f622, 0, 0x1f47f}, + {"😭", "😯", 1.0, Copy, 0x1f62d, 0, 0x1f62f}, + {"😳", "😕", 1.0, Copy, 0x1f633, 0, 0x1f615}, + {"😴", "😵", 1.0, Copy, 0x1f634, 0, 0x1f635}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"👆", "👊", 1.0, Copy, 0x1f446, 0, 0x1f44a}, + {"👇", "👌", 1.0, Copy, 0x1f447, 0, 0x1f44c}, + {"👈", "👏", 1.0, Copy, 0x1f448, 0, 0x1f44f}, + {"👉", "👐", 1.0, Copy, 0x1f449, 0, 0x1f450}, + {"👋", "🙌", 1.0, Copy, 0x1f44b, 0, 0x1f64c}, + {"👍", "✅", 1.0, Copy, 0x1f44d, 0, 0x2705}, + {"👎", "💪", 1.0, Copy, 0x1f44e, 0, 0x1f4aa}, + {"Enter", "Enter", 1.0, Code, KEY_ENTER, .scheme = 1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_nav[] = { + {"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1}, + {"⌫", "⌫", 1.0, Code, KEY_BACKSPACE, .scheme = 1}, + {"↑", "↑", 1.0, Code, KEY_UP, .scheme = 1}, + {"⇈", "⇈", 1.0, Code, KEY_PAGEUP, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"q", "q", 1.0, Code, KEY_Q, .scheme = 1}, + {"←", "←", 1.0, Code, KEY_LEFT, .scheme = 1}, + {"Enter", "Enter", 1.0, Code, KEY_ENTER, .scheme = 1}, + {"→", "→", 1.0, Code, KEY_RIGHT, .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"⌨͕", "⌨͔", 1.0, NextLayer, .scheme = 1}, + {"", "↹", 1.0, Code, KEY_SPACE, .scheme = 1}, + {"↓", "↓", 1.0, Code, KEY_DOWN, .scheme = 1}, + {"⇊", "⇊", 1.0, Code, KEY_PAGEDOWN, .scheme = 1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_index[] = { + {"Full", "Full", 1.0, Layout, 0, &layouts[Full], .scheme = 1}, + {"Wide", "Wide", 0.75, Layout, 0, &layouts[Full]}, + {"Landscape", "Landscape", 1.5, Layout, 0, &layouts[Landscape], + .scheme = 1}, + {"Simple", "Simple", 1.0, Layout, 0, &layouts[Simple], .scheme = 1}, + {"Dial", "Dial", 0.75, Layout, 0, &layouts[Dialer]}, + {"", "", 0.0, EndRow}, + + {"Special", "Special", 1.5, Layout, 0, &layouts[Special], .scheme = 1}, + {"LandSc", "LandSc", 1.0, Layout, 0, &layouts[LandscapeSpecial]}, + {"Pad", "Pad", 1.0, Layout, 0, &layouts[SpecialPad]}, + {"Nav", "Nav", 1.0, Layout, 0, &layouts[Nav], .scheme = 1}, + {"123", "123", 1.0, Layout, 0, &layouts[Dialer], .scheme = 1}, + {"🙂", "🙂", 1.0, Layout, 0, &layouts[Emoji], .scheme = 1}, + {"", "", 0.0, EndRow}, + + {"Абв", "Абв", 1.0, Layout, 0, &layouts[Cyrillic], .scheme = 1}, + {"αβγ", "αβγ", 1.0, Layout, 0, &layouts[Greek], .scheme = 1}, + {"ابج", "ابج", 1.0, Layout, 0, &layouts[Arabic], .scheme = 1}, + {"فر", "فر", 1.0, Layout, 0, &layouts[Persian], .scheme = 1}, + {"აბგ", "აბგ", 1.0, Layout, 0, &layouts[Georgian], .scheme = 1}, + {"א", "א", 1.0, Layout, 0, &layouts[Hebrew], .scheme = 1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_w[] = { + {"ŵ", "Ŵ", 1.0, Copy, 0x0175, 0, 0x0174}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_r[] = { + {"ŕ", "Ŕ", 1.0, Copy, 0x0155, 0, 0x0154}, + {"ŗ", "Ŗ", 1.0, Copy, 0x0157, 0, 0x0156}, + {"ř", "Ř", 1.0, Copy, 0x0159, 0, 0x0158}, + {"", "", 7.0, Pad}, + {"", "", 0.0, EndRow}, + {"ρ", "Ρ", 1.0, Copy, 0x03C1, 0, 0x03A1}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_t[] = { + {"ț", "Ț", 1.0, Copy, 0x021B, 0, 0x021A}, + {"ť", "Ť", 1.0, Copy, 0x0165, 0, 0x0164}, + {"ŧ", "Ŧ", 1.0, Copy, 0x0167, 0, 0x0166}, + {"þ", "Þ", 1.0, Copy, 0x00FE, 0, 0x00DE}, + {"", "", 6.0, Pad}, + {"", "", 0.0, EndRow}, + {"τ", "Τ", 1.0, Copy, 0x03C4, 0, 0x03A4}, + {"θ", "Θ", 1.0, Copy, 0x03B8, 0, 0x0398}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_p[] = { + {"π", "Π", 1.0, Copy, 0x03C0, 0, 0x03A0}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_s[] = { + {"ś", "Ś", 1.0, Copy, 0x015B, 0, 0x015A}, + {"ŝ", "Ŝ", 1.0, Copy, 0x015D, 0, 0x015C}, + {"ş", "Ş", 1.0, Copy, 0x015F, 0, 0x015E}, + {"š", "Š", 1.0, Copy, 0x0161, 0, 0x0160}, + {"ß", "ẞ", 1.0, Copy, 0x00DF, 0, 0x1E9E}, + {"", "", 5.0, Pad}, + {"", "", 0.0, EndRow}, + {"σ", "Σ", 1.0, Copy, 0x03C3, 0, 0x03A3}, + {"ς", "Σ", 1.0, Copy, 0x03C2, 0, 0x03A3}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_d[] = { + {"ð", "Ð", 1.0, Copy, 0x00F0, 0, 0x00D0}, + {"ď", "Ď", 1.0, Copy, 0x010F, 0, 0x010E}, + {"đ", "Đ", 1.0, Copy, 0x0111, 0, 0x0110}, + {"", "", 7.0, Pad}, + {"", "", 0.0, EndRow}, + {"δ", "Δ", 1.0, Copy, 0x03B4, 0, 0x0394}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_f[] = { + {"φ", "Φ", 1.0, Copy, 0x03C6, 0, 0x03A6}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_g[] = { + {"ĝ", "Ĝ", 1.0, Copy, 0x011D, 0, 0x011C}, + {"ğ", "Ğ", 1.0, Copy, 0x011F, 0, 0x011E}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"γ", "Γ", 1.0, Copy, 0x03B3, 0, 0x0393}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_h[] = { + {"ĥ", "Ĥ", 1.0, Copy, 0x0125, 0, 0x0124}, + {"ħ", "Ħ", 1.0, Copy, 0x0127, 0, 0x0126}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"η", "Η", 1.0, Copy, 0x03B7, 0, 0x0397}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_j[] = { + {"ĵ", "Ĵ", 1.0, Copy, 0x0135, 0, 0x0134}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 10.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_k[] = { + {"ķ", "Ķ", 1.0, Copy, 0x0137, 0, 0x0136}, + {"ǩ", "Ǩ", 1.0, Copy, 0x01E9, 0, 0x01E8}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"κ", "Κ", 1.0, Copy, 0x03BA, 0, 0x039A}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_l[] = { + {"ľ", "Ľ", 1.0, Copy, 0x013E, 0, 0x013D}, + {"ŀ", "Ŀ", 1.0, Copy, 0x0140, 0, 0x013F}, + {"ł", "Ł", 1.0, Copy, 0x0142, 0, 0x0141}, + {"", "", 7.0, Pad}, + {"", "", 0.0, EndRow}, + {"λ", "Λ", 1.0, Copy, 0x03BB, 0, 0x039B}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_z[] = { + {"ź", "Ź", 1.0, Copy, 0x017A, 0, 0x0179}, + {"ż", "Ż", 1.0, Copy, 0x017C, 0, 0x017B}, + {"ž", "Ž", 1.0, Copy, 0x017E, 0, 0x017D}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"ζ", "Ζ", 1.0, Copy, 0x03B6, 0, 0x0396}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_x[] = { + {"χ", "Χ", 1.0, Copy, 0x03C7, 0, 0x03A7}, + {"ξ", "Ξ", 1.0, Copy, 0x03BE, 0, 0x039E}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_c[] = { + {"ç", "Ç", 1.0, Copy, 0x00E7, 0, 0x00C7}, + {"ć", "Ć", 1.0, Copy, 0x0107, 0, 0x0106}, + {"ĉ", "Ĉ", 1.0, Copy, 0x0109, 0, 0x0108}, + {"ċ", "Ċ", 1.0, Copy, 0x010B, 0, 0x010A}, + {"č", "Č", 1.0, Copy, 0x010D, 0, 0x010C}, + {"", "", 5.0, Pad}, + {"", "", 0.0, EndRow}, + {"χ", "Χ", 1.0, Copy, 0x03C7, 0, 0x03A7}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_v[] = { + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_b[] = { + {"β", "Β", 1.0, Copy, 0x03B2, 0, 0x0392}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_n[] = { + {"ñ", "Ñ", 1.0, Copy, 0x00F1, 0, 0x00D1}, + {"ń", "Ń", 1.0, Copy, 0x0144, 0, 0x0143}, + {"ņ", "Ņ", 1.0, Copy, 0x0146, 0, 0x0145}, + {"ň", "Ň", 1.0, Copy, 0x0148, 0, 0x0147}, + {"ŋ", "Ŋ", 1.0, Copy, 0x014B, 0, 0x014A}, + {"", "", 5.0, Pad}, + {"", "", 0.0, EndRow}, + {"ν", "Ν", 1.0, Copy, 0x03BD, 0, 0x039D}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_m[] = { + {"μ", "Μ", 1.0, Copy, 0x03BC, 0, 0x039C}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_i[] = { + {"і", "І", 1.0, Copy, 0x0456, 0, 0x0406}, + {"ї", "Ї", 1.0, Copy, 0x0457, 0, 0x0407}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_j[] = { + {"ј", "Ј", 1.0, Copy, 0x0458, 0, 0x0408}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_e[] = { + {"є", "Є", 1.0, Copy, 0x0454, 0, 0x0404}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_u[] = { + {"ў", "Ў", 1.0, Copy, 0x045E, 0, 0x040E}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_l[] = { + {"љ", "Љ", 1.0, Copy, 0x0459, 0, 0x0409}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_n[] = { + {"њ", "Њ", 1.0, Copy, 0x045A, 0, 0x040A}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_che[] = { + {"ћ", "Ћ", 1.0, Copy, 0x045B, 0, 0x040B}, + {"ђ", "Ђ", 1.0, Copy, 0x0452, 0, 0x0402}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_tse[] = { + {"џ", "Џ", 1.0, Copy, 0x045F, 0, 0x040F}, + {"ѕ", "Ѕ", 1.0, Copy, 0x0455, 0, 0x0405}, + {"", "", 8.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_g[] = { + {"ѓ", "Ѓ", 1.0, Copy, 0x0453, 0, 0x0403}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_k[] = { + {"ќ", "Ќ", 1.0, Copy, 0x0453, 0, 0x040C}, + {"", "", 9.0, Pad}, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 8.5, Pad}, + {"", "", 0.0, EndRow}, + {"Абв", "Абв", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_math[] = { + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"+", "+", 1, Code, KEY_EQUAL, 0, Shift}, + {"/", "/", 1, Code, KEY_SLASH}, + {"*", "*", 1, Code, KEY_8, 0, Shift}, + {"-", "-", 1, Code, KEY_MINUS}, + {"=", "=", 1, Code, KEY_EQUAL}, + {"_", "_", 1, Code, KEY_MINUS, 0, Shift}, + {"—", "—", 1, Copy, 0x2014, 0, 0x2014}, + {"", "", 1.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_punctuation[] = { + {"", "", 0.0, EndRow}, + {"", "", 4.5, Pad}, + {".", ".", 1, Code, KEY_DOT}, + {"…", "…", 1, Copy, 0x2026, 0, 0x2026}, + {":", ":", 1, Code, KEY_SEMICOLON, 0, Shift}, + {";", ";", 1, Code, KEY_SEMICOLON, 0}, + {"⍽", "⍽", 1, Copy, 0x202F, 0, 0x00A0}, + {"", "", 0.5, Pad}, + {"", "", 0.0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"", "", 3, Pad}, + {"!", "!", 1, Code, KEY_1, 0, Shift}, + {"?", "?", 1, Code, KEY_DOT, 0, Shift}, + {"·", "·", 1, Copy, 0x2027, 0, 0x2027}, + {",", ",", 1, Code, KEY_COMMA}, + {"", "", 1.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"", "", 9, Pad}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_bracket[] = { + {"", "", 0, EndRow}, + {"", "", 1.5, Pad}, + {"{", "{", 1, Code, KEY_LEFTBRACE, 0, Shift}, + {"}", "}", 1, Code, KEY_RIGHTBRACE, 0, Shift}, + {"[", "[", 1, Code, KEY_LEFTBRACE}, + {"]", "]", 1, Code, KEY_RIGHTBRACE}, + {"", "", 4.5, Pad}, + {"", "", 0, EndRow}, + {"⇧", "⇫", 1.5, Mod, Shift, .scheme = 1}, + {"<", "<", 1, Code, KEY_COMMA, 0, AltGr}, + {">", ">", 1, Code, KEY_SLASH, 0, Shift}, + {"`", "`", 1, Code, KEY_GRAVE}, + {"\"", "\"", 1, Code, KEY_APOSTROPHE, 0, Shift}, + {"'", "'", 1, Code, KEY_APOSTROPHE}, + {"", "", 3.5, Pad}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, BackLayer, .scheme = 1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1}, + {"", "", 8, Pad}, + {"", "", 0.0, Last}, +}; diff --git a/packages/wvkbd/main.c b/packages/wvkbd/main.c new file mode 100644 index 0000000..502d2f5 --- /dev/null +++ b/packages/wvkbd/main.c @@ -0,0 +1,1134 @@ +#include "proto/virtual-keyboard-unstable-v1-client-protocol.h" +#include "proto/wlr-layer-shell-unstable-v1-client-protocol.h" +#include "proto/xdg-shell-client-protocol.h" +#include "proto/fractional-scale-v1-client-protocol.h" +#include "proto/viewporter-client-protocol.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "keyboard.h" +#include "config.h" + +/* lazy die macro */ +#define die(...) \ + fprintf(stderr, __VA_ARGS__); \ + exit(1) + +/* array size */ +#define countof(x) (sizeof(x) / sizeof(*x)) + +/* client state */ +static const char *namespace = "wvkbd"; +static struct wl_display *display; +static struct wl_compositor *compositor; +static struct wl_seat *seat; +static struct wl_pointer *pointer; +static struct wl_touch *touch; +static struct wl_region *empty_region; +static struct zwlr_layer_shell_v1 *layer_shell; +static struct zwlr_layer_surface_v1 *layer_surface; +static struct xdg_wm_base *wm_base; +static struct xdg_surface *popup_xdg_surface; +static struct xdg_popup *popup_xdg_popup; +static struct xdg_positioner *popup_xdg_positioner; +static struct zwp_virtual_keyboard_manager_v1 *vkbd_mgr; +static struct wp_fractional_scale_v1 *wfs_draw_surf; +static struct wp_fractional_scale_manager_v1 *wfs_mgr; +static struct wp_viewport *draw_surf_viewport, *popup_draw_surf_viewport; +static struct wp_viewporter *viewporter; +static bool popup_xdg_surface_configured; + +struct Output { + uint32_t name; + uint32_t w, h; + double scale; + struct wl_output *data; +}; +static struct Output *current_output; + +#define WL_OUTPUTS_LIMIT 8 +static struct Output wl_outputs[WL_OUTPUTS_LIMIT]; +static int wl_outputs_size; + +/* drawing */ +static struct drw draw_ctx; +static struct drwbuf draw_surf_back_buffer, draw_surf_display_buffer, popup_draw_surf_back_buffer, popup_draw_surf_display_buffer; +static struct drwsurf draw_surf, popup_draw_surf; + +/* layer surface parameters */ +static uint32_t layer = ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY; +static uint32_t anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM | + ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | + ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; + +/* application state */ +static bool run_display = true; +static int cur_x = -1, cur_y = -1; +static bool cur_press = false; +static struct kbd keyboard; +static uint32_t height, normal_height, landscape_height; +static int rounding = DEFAULT_ROUNDING; +static bool hidden = false; + +/* event handler prototypes */ +static void wl_pointer_enter(void *data, struct wl_pointer *wl_pointer, + uint32_t serial, struct wl_surface *surface, + wl_fixed_t surface_x, wl_fixed_t surface_y); +static void wl_pointer_leave(void *data, struct wl_pointer *wl_pointer, + uint32_t serial, struct wl_surface *surface); +static void wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, + uint32_t time, wl_fixed_t surface_x, + wl_fixed_t surface_y); +static void wl_pointer_button(void *data, struct wl_pointer *wl_pointer, + uint32_t serial, uint32_t time, uint32_t button, + uint32_t state); +static void wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, + uint32_t time, uint32_t axis, wl_fixed_t value); + +static void wl_touch_down(void *data, struct wl_touch *wl_touch, + uint32_t serial, uint32_t time, + struct wl_surface *surface, int32_t id, wl_fixed_t x, + wl_fixed_t y); +static void wl_touch_up(void *data, struct wl_touch *wl_touch, uint32_t serial, + uint32_t time, int32_t id); +static void wl_touch_motion(void *data, struct wl_touch *wl_touch, + uint32_t time, int32_t id, wl_fixed_t x, + wl_fixed_t y); +static void wl_touch_frame(void *data, struct wl_touch *wl_touch); +static void wl_touch_cancel(void *data, struct wl_touch *wl_touch); +static void wl_touch_shape(void *data, struct wl_touch *wl_touch, int32_t id, + wl_fixed_t major, wl_fixed_t minor); +static void wl_touch_orientation(void *data, struct wl_touch *wl_touch, + int32_t id, wl_fixed_t orientation); + +static void seat_handle_capabilities(void *data, struct wl_seat *wl_seat, + enum wl_seat_capability caps); +static void seat_handle_name(void *data, struct wl_seat *wl_seat, + const char *name); + +static void wl_surface_enter(void *data, struct wl_surface *wl_surface, + struct wl_output *wl_output); +static void wl_surface_leave(void *data, struct wl_surface *wl_surface, + struct wl_output *wl_output); + +static void handle_global(void *data, struct wl_registry *registry, + uint32_t name, const char *interface, + uint32_t version); +static void handle_global_remove(void *data, struct wl_registry *registry, + uint32_t name); + +static void layer_surface_configure(void *data, + struct zwlr_layer_surface_v1 *surface, + uint32_t serial, uint32_t w, uint32_t h); +static void layer_surface_closed(void *data, + struct zwlr_layer_surface_v1 *surface); +static void flip_landscape(); +static void show(); + +/* event handlers */ +static const struct wl_pointer_listener pointer_listener = { + .enter = wl_pointer_enter, + .leave = wl_pointer_leave, + .motion = wl_pointer_motion, + .button = wl_pointer_button, + .axis = wl_pointer_axis, +}; + +static const struct wl_touch_listener touch_listener = { + .down = wl_touch_down, + .up = wl_touch_up, + .motion = wl_touch_motion, + .frame = wl_touch_frame, + .cancel = wl_touch_cancel, + .shape = wl_touch_shape, + .orientation = wl_touch_orientation, +}; + +static const struct wl_seat_listener seat_listener = { + .capabilities = seat_handle_capabilities, + .name = seat_handle_name, +}; + +static const struct wl_surface_listener surface_listener = { + .enter = wl_surface_enter, + .leave = wl_surface_leave, +}; + +static const struct wl_registry_listener registry_listener = { + .global = handle_global, + .global_remove = handle_global_remove, +}; + +static const struct zwlr_layer_surface_v1_listener layer_surface_listener = { + .configure = layer_surface_configure, + .closed = layer_surface_closed, +}; + +/* configuration, allows nested code to access above variables */ + +char * +estrdup(const char *s) +{ + char *p; + + if (!(p = strdup(s))) { + fprintf(stderr, "strdup:"); + exit(6); + } + + return p; +} + +void +wl_touch_down(void *data, struct wl_touch *wl_touch, uint32_t serial, + uint32_t time, struct wl_surface *surface, int32_t id, + wl_fixed_t x, wl_fixed_t y) +{ + if(!popup_xdg_surface_configured) { + return; + } + + struct key *next_key; + uint32_t touch_x, touch_y; + + touch_x = wl_fixed_to_int(x); + touch_y = wl_fixed_to_int(y); + + kbd_unpress_key(&keyboard, time); + + next_key = kbd_get_key(&keyboard, touch_x, touch_y); + if (next_key) { + kbd_press_key(&keyboard, next_key, time); + } else if (keyboard.compose) { + keyboard.compose = 0; + kbd_switch_layout(&keyboard, keyboard.prevlayout, + keyboard.last_abc_index); + } +} + +void +wl_touch_up(void *data, struct wl_touch *wl_touch, uint32_t serial, + uint32_t time, int32_t id) +{ + if(!popup_xdg_surface_configured) { + return; + } + + kbd_release_key(&keyboard, time); +} + +void +wl_touch_motion(void *data, struct wl_touch *wl_touch, uint32_t time, + int32_t id, wl_fixed_t x, wl_fixed_t y) +{ + if(!popup_xdg_surface_configured) { + return; + } + + uint32_t touch_x, touch_y; + + touch_x = wl_fixed_to_int(x); + touch_y = wl_fixed_to_int(y); + + kbd_motion_key(&keyboard, time, touch_x, touch_y); +} + +void +wl_touch_frame(void *data, struct wl_touch *wl_touch) +{ +} + +void +wl_touch_cancel(void *data, struct wl_touch *wl_touch) +{ +} + +void +wl_touch_shape(void *data, struct wl_touch *wl_touch, int32_t id, + wl_fixed_t major, wl_fixed_t minor) +{ +} + +void +wl_touch_orientation(void *data, struct wl_touch *wl_touch, int32_t id, + wl_fixed_t orientation) +{ +} + +void +wl_pointer_enter(void *data, struct wl_pointer *wl_pointer, uint32_t serial, + struct wl_surface *surface, wl_fixed_t surface_x, + wl_fixed_t surface_y) +{ +} + +void +wl_pointer_leave(void *data, struct wl_pointer *wl_pointer, uint32_t serial, + struct wl_surface *surface) +{ + cur_x = cur_y = -1; +} + +void +wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, uint32_t time, + wl_fixed_t surface_x, wl_fixed_t surface_y) +{ + if(!popup_xdg_surface_configured) { + return; + } + + cur_x = wl_fixed_to_int(surface_x); + cur_y = wl_fixed_to_int(surface_y); + + if (cur_press) { + kbd_motion_key(&keyboard, time, cur_x, cur_y); + } +} + +void +wl_pointer_button(void *data, struct wl_pointer *wl_pointer, uint32_t serial, + uint32_t time, uint32_t button, uint32_t state) +{ + if(!popup_xdg_surface_configured) { + return; + } + + struct key *next_key; + cur_press = state == WL_POINTER_BUTTON_STATE_PRESSED; + + if (cur_press) { + kbd_unpress_key(&keyboard, time); + } else { + kbd_release_key(&keyboard, time); + } + + if (cur_press && cur_x >= 0 && cur_y >= 0) { + next_key = kbd_get_key(&keyboard, cur_x, cur_y); + if (next_key) { + kbd_press_key(&keyboard, next_key, time); + } else if (keyboard.compose) { + keyboard.compose = 0; + kbd_switch_layout(&keyboard, keyboard.prevlayout, + keyboard.last_abc_index); + } + } +} + +void +wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, uint32_t time, + uint32_t axis, wl_fixed_t value) +{ + if(!popup_xdg_surface_configured) { + return; + } + + kbd_next_layer(&keyboard, NULL, (value >= 0)); +} + +void +seat_handle_capabilities(void *data, struct wl_seat *wl_seat, + enum wl_seat_capability caps) +{ + if ((caps & WL_SEAT_CAPABILITY_POINTER)) { + if (pointer == NULL) { + pointer = wl_seat_get_pointer(wl_seat); + wl_pointer_add_listener(pointer, &pointer_listener, NULL); + } + } else { + if (pointer != NULL) { + wl_pointer_destroy(pointer); + pointer = NULL; + } + } + if ((caps & WL_SEAT_CAPABILITY_TOUCH)) { + if (touch == NULL) { + touch = wl_seat_get_touch(wl_seat); + wl_touch_add_listener(touch, &touch_listener, NULL); + } + } else { + if (touch != NULL) { + wl_touch_destroy(touch); + touch = NULL; + } + } +} + +void +seat_handle_name(void *data, struct wl_seat *wl_seat, const char *name) +{ +} + +void +wl_surface_enter(void *data, struct wl_surface *wl_surface, + struct wl_output *wl_output) +{ + struct Output *old_output = current_output; + for (int i = 0; i < wl_outputs_size; i += 1) { + if (wl_outputs[i].data == wl_output) { + current_output = &wl_outputs[i]; + break; + } + } + if (current_output == old_output) { + return; + } + + keyboard.preferred_scale = current_output->scale; + flip_landscape(); +} + +void +wl_surface_leave(void *data, struct wl_surface *wl_surface, + struct wl_output *wl_output) { +} + + +static void +display_handle_geometry(void *data, struct wl_output *wl_output, int x, int y, + int physical_width, int physical_height, int subpixel, + const char *make, const char *model, int transform) +{ + struct Output *output = data; + + // Swap width and height on rotated displays + if (transform % 2 != 0) { + int tmp = physical_width; + physical_width = physical_height; + physical_height = tmp; + } + + output->w = physical_width; + output->h = physical_height; + + if (current_output == output) { + flip_landscape(); + }; +} + +static void +display_handle_done(void *data, struct wl_output *wl_output) +{ +} + +static void +display_handle_scale(void *data, struct wl_output *wl_output, int32_t scale) +{ + struct Output *output = data; + output->scale = scale; + + if (current_output == output) { + keyboard.preferred_scale = scale; + flip_landscape(); + }; +} + +static void +display_handle_mode(void *data, struct wl_output *wl_output, uint32_t flags, + int width, int height, int refresh) +{ +} + +static const struct wl_output_listener output_listener = { + .geometry = display_handle_geometry, + .mode = display_handle_mode, + .done = display_handle_done, + .scale = display_handle_scale}; + +static void +xdg_wm_base_ping(void *data, struct xdg_wm_base *xdg_wm_base, uint32_t serial) +{ + xdg_wm_base_pong(xdg_wm_base, serial); +} + +static const struct xdg_wm_base_listener xdg_wm_base_listener = { + .ping = xdg_wm_base_ping, +}; + +void +handle_global(void *data, struct wl_registry *registry, uint32_t name, + const char *interface, uint32_t version) +{ + if (strcmp(interface, wl_compositor_interface.name) == 0) { + compositor = + wl_registry_bind(registry, name, &wl_compositor_interface, 3); + } else if (strcmp(interface, wl_shm_interface.name) == 0) { + draw_ctx.shm = wl_registry_bind(registry, name, &wl_shm_interface, 1); + } else if (strcmp(interface, wl_output_interface.name) == 0) { + if (wl_outputs_size < WL_OUTPUTS_LIMIT) { + struct Output *output = &wl_outputs[wl_outputs_size]; + output->data = + wl_registry_bind(registry, name, &wl_output_interface, 2); + output->name = name; + output->scale = 1; + wl_output_add_listener(output->data, &output_listener, output); + wl_outputs_size += 1; + } + } else if (strcmp(interface, wl_seat_interface.name) == 0) { + seat = wl_registry_bind(registry, name, &wl_seat_interface, 1); + wl_seat_add_listener(seat, &seat_listener, NULL); + } else if (strcmp(interface, zwlr_layer_shell_v1_interface.name) == 0) { + layer_shell = + wl_registry_bind(registry, name, &zwlr_layer_shell_v1_interface, 1); + } else if (strcmp(interface, xdg_wm_base_interface.name) == 0) { + wm_base = wl_registry_bind(registry, name, &xdg_wm_base_interface, 1); + xdg_wm_base_add_listener(wm_base, &xdg_wm_base_listener, NULL); + } else if (strcmp(interface, + wp_fractional_scale_manager_v1_interface.name) == 0) { + wfs_mgr = wl_registry_bind( + registry, name, &wp_fractional_scale_manager_v1_interface, 1); + } else if (strcmp(interface, wp_viewporter_interface.name) == 0) { + viewporter = + wl_registry_bind(registry, name, &wp_viewporter_interface, 1); + } else if (strcmp(interface, + zwp_virtual_keyboard_manager_v1_interface.name) == 0) { + vkbd_mgr = wl_registry_bind( + registry, name, &zwp_virtual_keyboard_manager_v1_interface, 1); + } +} + +void +handle_global_remove(void *data, struct wl_registry *registry, uint32_t name) +{ + for (int i = 0; i < wl_outputs_size; i += 1) { + if (wl_outputs[i].name == name) { + wl_output_destroy(wl_outputs[i].data); + for (; i < wl_outputs_size - 1; i += 1) { + wl_outputs[i] = wl_outputs[i + 1]; + } + wl_outputs_size -= 1; + break; + } + } +} + +static void +xdg_popup_surface_configure(void *data, struct xdg_surface *xdg_surface, + uint32_t serial) +{ + xdg_surface_ack_configure(xdg_surface, serial); + popup_xdg_surface_configured = true; + drwsurf_attach(&popup_draw_surf); +} + +static const struct xdg_surface_listener xdg_popup_surface_listener = { + .configure = xdg_popup_surface_configure, +}; + +static void +xdg_popup_configure(void *data, struct xdg_popup *xdg_popup, int32_t x, + int32_t y, int32_t width, int32_t height) +{ +} + +static void +xdg_popup_done(void *data, struct xdg_popup *xdg_popup) +{ +} + +static const struct xdg_popup_listener xdg_popup_listener = { + .configure = xdg_popup_configure, + .popup_done = xdg_popup_done, +}; + +static void +wp_fractional_scale_preferred_scale( + void *data, struct wp_fractional_scale_v1 *wp_fractional_scale_v1, + uint32_t scale) +{ + keyboard.preferred_fractional_scale = (double)scale / 120; +} + +static const struct wp_fractional_scale_v1_listener + wp_fractional_scale_listener = { + .preferred_scale = wp_fractional_scale_preferred_scale, +}; + +void +flip_landscape() +{ + bool previous_landscape = keyboard.landscape; + + if (current_output) { + keyboard.landscape = current_output->w > current_output->h; + } else if (wl_outputs_size) { + keyboard.landscape = wl_outputs[0].w > wl_outputs[0].h; + } + + enum layout_id layer; + if (keyboard.landscape) { + layer = keyboard.landscape_layers[0]; + height = landscape_height; + } else { + layer = keyboard.layers[0]; + height = normal_height; + } + + keyboard.layout = &keyboard.layouts[layer]; + keyboard.layer_index = 0; + keyboard.prevlayout = keyboard.layout; + keyboard.last_abc_layout = keyboard.layout; + keyboard.last_abc_index = 0; + + if (layer_surface && previous_landscape != keyboard.landscape) { + if (popup_xdg_popup) { + xdg_popup_destroy(popup_xdg_popup); + popup_xdg_popup = NULL; + } + if (popup_xdg_surface) { + xdg_surface_destroy(popup_xdg_surface); + popup_xdg_surface = NULL; + } + if (popup_draw_surf.surf) { + wl_surface_destroy(popup_draw_surf.surf); + popup_draw_surf.surf = NULL; + } + + zwlr_layer_surface_v1_destroy(layer_surface); + layer_surface = NULL; + wl_surface_destroy(draw_surf.surf); + + show(); + } +} + +void +layer_surface_configure(void *data, struct zwlr_layer_surface_v1 *surface, + uint32_t serial, uint32_t w, uint32_t h) +{ + double scale = keyboard.preferred_scale; + if (keyboard.preferred_fractional_scale) { + scale = keyboard.preferred_fractional_scale; + } + + if (keyboard.w != w || keyboard.h != h || keyboard.scale != scale || + hidden) { + + keyboard.w = w; + keyboard.h = h; + keyboard.scale = scale; + hidden = false; + + if (wfs_mgr && viewporter) { + wp_viewport_set_destination(draw_surf_viewport, keyboard.w, + keyboard.h); + } else { + wl_surface_set_buffer_scale(draw_surf.surf, keyboard.scale); + } + + if (popup_xdg_popup) { + xdg_popup_destroy(popup_xdg_popup); + } + if (popup_xdg_surface) { + xdg_surface_destroy(popup_xdg_surface); + } + if (popup_draw_surf.surf) { + wl_surface_destroy(popup_draw_surf.surf); + } + + popup_draw_surf.surf = wl_compositor_create_surface(compositor); + + xdg_positioner_set_size(popup_xdg_positioner, w, h * 2); + xdg_positioner_set_anchor_rect(popup_xdg_positioner, 0, -h, w, h * 2); + + wl_surface_set_input_region(popup_draw_surf.surf, empty_region); + popup_xdg_surface = + xdg_wm_base_get_xdg_surface(wm_base, popup_draw_surf.surf); + popup_xdg_surface_configured = false; + xdg_surface_add_listener(popup_xdg_surface, &xdg_popup_surface_listener, + NULL); + popup_xdg_popup = xdg_surface_get_popup(popup_xdg_surface, NULL, + popup_xdg_positioner); + xdg_popup_add_listener(popup_xdg_popup, &xdg_popup_listener, NULL); + zwlr_layer_surface_v1_get_popup(layer_surface, popup_xdg_popup); + + if (wfs_mgr && viewporter) { + popup_draw_surf_viewport = + wp_viewporter_get_viewport(viewporter, popup_draw_surf.surf); + wp_viewport_set_destination(popup_draw_surf_viewport, keyboard.w, + keyboard.h * 2); + } else { + wl_surface_set_buffer_scale(popup_draw_surf.surf, keyboard.scale); + } + + wl_surface_commit(popup_draw_surf.surf); + + zwlr_layer_surface_v1_ack_configure(surface, serial); + kbd_resize(&keyboard, layouts, NumLayouts); + drwsurf_attach(&draw_surf); + } else { + zwlr_layer_surface_v1_ack_configure(surface, serial); + } +} + +void +layer_surface_closed(void *data, struct zwlr_layer_surface_v1 *surface) +{ + zwlr_layer_surface_v1_destroy(surface); + wl_surface_destroy(draw_surf.surf); + run_display = false; +} + +void +usage(char *argv0) +{ + fprintf(stderr, + "usage: %s [-hov] [-H height] [-L landscape height] [-fn font] [-l " + "layers]\n", + argv0); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -D - Enable debug\n"); + fprintf(stderr, " -o - Print pressed keys to standard output\n"); + fprintf(stderr, + " -O - Print intersected keys to standard output\n"); + fprintf(stderr, " -H [int] - Height in pixels\n"); + fprintf(stderr, " -L [int] - Landscape height in pixels\n"); + fprintf(stderr, " -R [int] - Rounding radius in pixels\n"); + fprintf(stderr, " --fn [font] - Set font (e.g: DejaVu Sans 20)\n"); + fprintf(stderr, " --hidden - Start hidden (send SIGUSR2 to show)\n"); + fprintf( + stderr, + " --alpha [int] - Set alpha value for all colors [0-255]\n"); + fprintf(stderr, " --bg [rrggbb|aa] - Set color of background\n"); + fprintf(stderr, " --fg [rrggbb|aa] - Set color of keys\n"); + fprintf(stderr, " --fg-sp [rrggbb|aa] - Set color of special keys\n"); + fprintf(stderr, " --press [rrggbb|aa] - Set color of pressed keys\n"); + fprintf(stderr, + " --press-sp [rrggbb|aa] - Set color of pressed special keys\n"); + fprintf(stderr, " --swipe [rrggbb|aa] - Set color of swiped keys\n"); + fprintf(stderr, + " --swipe-sp [rrggbb|aa] - Set color of swiped special keys\n"); + fprintf(stderr, " --text [rrggbb|aa] - Set color of text on keys\n"); + fprintf(stderr, + " --text-sp [rrggbb|aa] - Set color of text on special keys\n"); + fprintf(stderr, + " --list-layers - Print the list of available layers\n"); + fprintf(stderr, + " -l - Comma separated list of layers\n"); + fprintf(stderr, " --landscape-layers - Comma separated list of " + "landscape layers\n"); +} + +void +list_layers() +{ + int i; + for (i = 0; i < NumLayouts - 1; i++) { + if (layouts[i].name) { + puts(layouts[i].name); + } + } +} + +void +hide() +{ + if (!layer_surface) { + return; + } + + if(wfs_draw_surf) { + wp_fractional_scale_v1_destroy(wfs_draw_surf); + wfs_draw_surf = NULL; + } + if(draw_surf_viewport) { + wp_viewport_destroy(draw_surf_viewport); + draw_surf_viewport = NULL; + } + + zwlr_layer_surface_v1_destroy(layer_surface); + wl_surface_destroy(draw_surf.surf); + layer_surface = NULL; + hidden = true; +} + +void +show() +{ + if (layer_surface) { + return; + } + + wl_display_sync(display); + + flip_landscape(); + + draw_surf.surf = wl_compositor_create_surface(compositor); + wl_surface_add_listener(draw_surf.surf, &surface_listener, NULL); + if (wfs_mgr && viewporter) { + wfs_draw_surf = wp_fractional_scale_manager_v1_get_fractional_scale( + wfs_mgr, draw_surf.surf); + wp_fractional_scale_v1_add_listener( + wfs_draw_surf, &wp_fractional_scale_listener, NULL); + draw_surf_viewport = + wp_viewporter_get_viewport(viewporter, draw_surf.surf); + } + + struct wl_output *current_output_data = NULL; + if (current_output) + current_output_data = current_output->data; + + layer_surface = zwlr_layer_shell_v1_get_layer_surface( + layer_shell, draw_surf.surf, current_output_data, layer, namespace); + + zwlr_layer_surface_v1_set_size(layer_surface, 0, height); + zwlr_layer_surface_v1_set_anchor(layer_surface, anchor); + zwlr_layer_surface_v1_set_exclusive_zone(layer_surface, height); + zwlr_layer_surface_v1_set_keyboard_interactivity(layer_surface, false); + zwlr_layer_surface_v1_add_listener(layer_surface, &layer_surface_listener, + NULL); + wl_surface_commit(draw_surf.surf); +} + +void +toggle_visibility() +{ + if (hidden) + show(); + else + hide(); +} + +void +pipewarn() +{ + fprintf(stderr, "wvkbd: cannot pipe data out.\n"); +} + +void +set_kbd_colors(uint8_t *bgra, char *hex) +{ + // bg, fg, text, high, swipe + int length = strlen(hex); + if (length == 6 || length == 8) { + char subhex[3] = { 0 }; + memcpy(subhex, hex, 2); + bgra[2] = (int)strtol(subhex, NULL, 16); + memcpy(subhex, hex + 2, 2); + bgra[1] = (int)strtol(subhex, NULL, 16); + memcpy(subhex, hex + 4, 2); + bgra[0] = (int)strtol(subhex, NULL, 16); + if (length == 8) { + memcpy(subhex, hex + 6, 2); + bgra[3] = (int)strtol(subhex, NULL, 16); + } + } +} + +int +main(int argc, char **argv) +{ + /* parse command line arguments */ + char *layer_names_list = NULL, *landscape_layer_names_list = NULL; + char *fc_font_pattern = NULL; + height = landscape_height = KBD_PIXEL_LANDSCAPE_HEIGHT; + normal_height = KBD_PIXEL_HEIGHT; + + char *tmp; + if ((tmp = getenv("WVKBD_LAYERS"))) + layer_names_list = estrdup(tmp); + if ((tmp = getenv("WVKBD_LANDSCAPE_LAYERS"))) + landscape_layer_names_list = estrdup(tmp); + if ((tmp = getenv("WVKBD_HEIGHT"))) + normal_height = atoi(tmp); + if ((tmp = getenv("WVKBD_LANDSCAPE_HEIGHT"))) + landscape_height = atoi(tmp); + + /* keyboard settings */ + keyboard.layers = (enum layout_id *)&layers; + keyboard.landscape_layers = (enum layout_id *)&landscape_layers; + keyboard.schemes = schemes; + keyboard.landscape = true; + keyboard.layer_index = 0; + keyboard.preferred_scale = 1; + keyboard.preferred_fractional_scale = 0; + + uint8_t alpha = 0; + bool alpha_defined = false; + + int i; + for (i = 1; argv[i]; i++) { + if ((!strcmp(argv[i], "-v")) || (!strcmp(argv[i], "--version"))) { + printf("wvkbd-%s\n", VERSION); + exit(0); + } else if ((!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "--help"))) { + usage(argv[0]); + exit(0); + } else if (!strcmp(argv[i], "-l")) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + if (layer_names_list) + free(layer_names_list); + layer_names_list = estrdup(argv[++i]); + } else if ((!strcmp(argv[i], "-landscape-layers")) || + (!strcmp(argv[i], "--landscape-layers"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + if (landscape_layer_names_list) + free(landscape_layer_names_list); + landscape_layer_names_list = estrdup(argv[++i]); + } else if ((!strcmp(argv[i], "-bg")) || (!strcmp(argv[i], "--bg"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + set_kbd_colors(keyboard.schemes[0].bg.bgra, argv[++i]); + } else if ((!strcmp(argv[i], "-alpha")) || + (!strcmp(argv[i], "--alpha"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + alpha = atoi(argv[++i]); + alpha_defined = true; + } else if ((!strcmp(argv[i], "-fg")) || (!strcmp(argv[i], "--fg"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + set_kbd_colors(keyboard.schemes[0].fg.bgra, argv[++i]); + } else if ((!strcmp(argv[i], "-fg-sp")) || + (!strcmp(argv[i], "--fg-sp"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + set_kbd_colors(keyboard.schemes[1].fg.bgra, argv[++i]); + } else if ((!strcmp(argv[i], "-press")) || + (!strcmp(argv[i], "--press"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + set_kbd_colors(keyboard.schemes[0].high.bgra, argv[++i]); + } else if ((!strcmp(argv[i], "-press-sp")) || + (!strcmp(argv[i], "--press-sp"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + set_kbd_colors(keyboard.schemes[1].high.bgra, argv[++i]); + } else if ((!strcmp(argv[i], "-swipe")) || + (!strcmp(argv[i], "--swipe"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + set_kbd_colors(keyboard.schemes[0].swipe.bgra, argv[++i]); + } else if ((!strcmp(argv[i], "-swipe-sp")) || + (!strcmp(argv[i], "--swipe-sp"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + set_kbd_colors(keyboard.schemes[1].swipe.bgra, argv[++i]); + } else if ((!strcmp(argv[i], "-text")) || + (!strcmp(argv[i], "--text"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + set_kbd_colors(keyboard.schemes[0].text.bgra, argv[++i]); + } else if ((!strcmp(argv[i], "-text-sp")) || + (!strcmp(argv[i], "--text-sp"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + set_kbd_colors(keyboard.schemes[1].text.bgra, argv[++i]); + } else if (!strcmp(argv[i], "-H")) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + normal_height = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-L")) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + height = landscape_height = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-R")) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + rounding = atoi(argv[++i]); + } else if (!strcmp(argv[i], "-D")) { + keyboard.debug = true; + } else if ((!strcmp(argv[i], "-fn")) || (!strcmp(argv[i], "--fn"))) { + if (i >= argc - 1) { + usage(argv[0]); + exit(1); + } + fc_font_pattern = estrdup(argv[++i]); + } else if (!strcmp(argv[i], "-o")) { + keyboard.print = true; + } else if (!strcmp(argv[i], "-O")) { + keyboard.print_intersect = true; + } else if ((!strcmp(argv[i], "-hidden")) || + (!strcmp(argv[i], "--hidden"))) { + hidden = true; + } else if ((!strcmp(argv[i], "-list-layers")) || + (!strcmp(argv[i], "--list-layers"))) { + list_layers(); + exit(0); + } else { + fprintf(stderr, "Invalid argument: %s\n", argv[i]); + usage(argv[0]); + exit(1); + } + } + + if (alpha_defined) { + keyboard.schemes[0].bg.bgra[3] = alpha; + keyboard.schemes[0].fg.bgra[3] = alpha; + keyboard.schemes[0].high.bgra[3] = alpha; + keyboard.schemes[1].bg.bgra[3] = alpha; + keyboard.schemes[1].fg.bgra[3] = alpha; + keyboard.schemes[1].high.bgra[3] = alpha; + } + + if (fc_font_pattern) { + for (i = 0; i < countof(schemes); i++) + schemes[i].font = fc_font_pattern; + } + + if (rounding != DEFAULT_ROUNDING) { + for (i = 0; i < countof(schemes); i++) + schemes[i].rounding = rounding; + } + + display = wl_display_connect(NULL); + if (display == NULL) { + die("Failed to create display\n"); + } + + draw_surf.ctx = &draw_ctx; + draw_surf.back_buffer = &draw_surf_back_buffer; + draw_surf.display_buffer = &draw_surf_display_buffer; + popup_draw_surf.ctx = &draw_ctx; + popup_draw_surf.back_buffer = &popup_draw_surf_back_buffer; + popup_draw_surf.display_buffer = &popup_draw_surf_display_buffer; + keyboard.surf = &draw_surf; + keyboard.popup_surf = &popup_draw_surf; + + struct wl_registry *registry = wl_display_get_registry(display); + wl_registry_add_listener(registry, ®istry_listener, NULL); + wl_display_roundtrip(display); + + if (compositor == NULL) { + die("wl_compositor not available\n"); + } + if (draw_ctx.shm == NULL) { + die("wl_shm not available\n"); + } + if (layer_shell == NULL) { + die("layer_shell not available\n"); + } + if (wm_base == NULL) { + die("wm_base not available\n"); + } + if (vkbd_mgr == NULL) { + die("virtual_keyboard_manager not available\n"); + } + + // A second round-trip to receive wl_outputs events + wl_display_roundtrip(display); + + empty_region = wl_compositor_create_region(compositor); + popup_xdg_positioner = xdg_wm_base_create_positioner(wm_base); + + keyboard.vkbd = + zwp_virtual_keyboard_manager_v1_create_virtual_keyboard(vkbd_mgr, seat); + if (keyboard.vkbd == NULL) { + die("failed to init virtual keyboard_manager\n"); + } + + kbd_init(&keyboard, (struct layout *)&layouts, layer_names_list, + landscape_layer_names_list); + + for (i = 0; i < countof(schemes); i++) { + schemes[i].font_description = + pango_font_description_from_string(schemes[i].font); + } + + if (!hidden) + show(); + + struct pollfd fds[2]; + int WAYLAND_FD = 0; + int SIGNAL_FD = 1; + fds[WAYLAND_FD].events = POLLIN; + fds[SIGNAL_FD].events = POLLIN; + + fds[WAYLAND_FD].fd = wl_display_get_fd(display); + if (fds[WAYLAND_FD].fd == -1) { + die("Failed to get wayland_fd: %d\n", errno); + } + + sigset_t signal_mask; + sigemptyset(&signal_mask); + sigaddset(&signal_mask, SIGUSR1); + sigaddset(&signal_mask, SIGUSR2); + sigaddset(&signal_mask, SIGRTMIN); + sigaddset(&signal_mask, SIGPIPE); + if (sigprocmask(SIG_BLOCK, &signal_mask, NULL) == -1) { + die("Failed to disable handled signals: %d\n", errno); + } + + fds[SIGNAL_FD].fd = signalfd(-1, &signal_mask, 0); + if (fds[SIGNAL_FD].fd == -1) { + die("Failed to get signalfd: %d\n", errno); + } + + while (run_display) { + wl_display_flush(display); + poll(fds, 2, -1); + + if (fds[WAYLAND_FD].revents & POLLIN) + wl_display_dispatch(display); + if (fds[WAYLAND_FD].revents & POLLERR) { + die("Exceptional condition on wayland socket.\n"); + } + if (fds[WAYLAND_FD].revents & POLLHUP) { + die("Wayland socket has been disconnected.\n"); + } + + if (fds[SIGNAL_FD].revents & POLLIN) { + struct signalfd_siginfo si; + + if (read(fds[SIGNAL_FD].fd, &si, sizeof(si)) != sizeof(si)) + fprintf(stderr, "Signal read error: %d", errno); + else if (si.ssi_signo == SIGUSR1) + hide(); + else if (si.ssi_signo == SIGUSR2) + show(); + else if (si.ssi_signo == SIGRTMIN) + toggle_visibility(); + else if (si.ssi_signo == SIGPIPE) + pipewarn(); + } + } + + if (fc_font_pattern) { + free((void *)fc_font_pattern); + for (i = 0; i < countof(schemes); i++) + schemes[i].font = NULL; + } + + return 0; +} diff --git a/packages/wvkbd/make.sh b/packages/wvkbd/make.sh new file mode 100755 index 0000000..4710576 --- /dev/null +++ b/packages/wvkbd/make.sh @@ -0,0 +1,2 @@ +#!/bin/sh +make LAYOUT=vistath && mkdir -p -v ~/bin && mv -v ./wvkbd ~/bin diff --git a/packages/wvkbd/os-compatibility.c b/packages/wvkbd/os-compatibility.c new file mode 100644 index 0000000..595c5d2 --- /dev/null +++ b/packages/wvkbd/os-compatibility.c @@ -0,0 +1,208 @@ +/* + * Copyright © 2012 Collabora, Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "os-compatibility.h" + +int +os_fd_set_cloexec(int fd) +{ + long flags; + + if (fd == -1) + return -1; + + flags = fcntl(fd, F_GETFD); + if (flags == -1) + return -1; + + if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) + return -1; + + return 0; +} + +static int +set_cloexec_or_close(int fd) +{ + if (os_fd_set_cloexec(fd) != 0) { + close(fd); + return -1; + } + return fd; +} + +int +os_socketpair_cloexec(int domain, int type, int protocol, int *sv) +{ + int ret; + +#ifdef SOCK_CLOEXEC + ret = socketpair(domain, type | SOCK_CLOEXEC, protocol, sv); + if (ret == 0 || errno != EINVAL) + return ret; +#endif + + ret = socketpair(domain, type, protocol, sv); + if (ret < 0) + return ret; + + sv[0] = set_cloexec_or_close(sv[0]); + sv[1] = set_cloexec_or_close(sv[1]); + + if (sv[0] != -1 && sv[1] != -1) + return 0; + + close(sv[0]); + close(sv[1]); + return -1; +} + +int +os_epoll_create_cloexec(void) +{ + int fd; + +#ifdef EPOLL_CLOEXEC + fd = epoll_create1(EPOLL_CLOEXEC); + if (fd >= 0) + return fd; + if (errno != EINVAL) + return -1; +#endif + + fd = epoll_create(1); + return set_cloexec_or_close(fd); +} + +static int +create_tmpfile_cloexec(char *tmpname) +{ + int fd; + +#ifdef HAVE_MKOSTEMP + fd = mkostemp(tmpname, O_CLOEXEC); + if (fd >= 0) + unlink(tmpname); +#else + fd = mkstemp(tmpname); + if (fd >= 0) { + fd = set_cloexec_or_close(fd); + unlink(tmpname); + } +#endif + + return fd; +} + +/* + * Create a new, unique, anonymous file of the given size, and + * return the file descriptor for it. The file descriptor is set + * CLOEXEC. The file is immediately suitable for mmap()'ing + * the given size at offset zero. + * + * The file should not have a permanent backing store like a disk, + * but may have if XDG_RUNTIME_DIR is not properly implemented in OS. + * + * The file name is deleted from the file system. + * + * The file is suitable for buffer sharing between processes by + * transmitting the file descriptor over Unix sockets using the + * SCM_RIGHTS methods. + * + * If the C library implements posix_fallocate(), it is used to + * guarantee that disk space is available for the file at the + * given size. If disk space is insufficient, errno is set to ENOSPC. + * If posix_fallocate() is not supported, program may receive + * SIGBUS on accessing mmap()'ed file contents instead. + */ +int +os_create_anonymous_file(off_t size) +{ + static const char template[] = "/weston-shared-XXXXXX"; + const char *path; + char *name; + int fd; + int ret; + + path = getenv("XDG_RUNTIME_DIR"); + if (!path) { + errno = ENOENT; + return -1; + } + + name = malloc(strlen(path) + sizeof(template)); + if (!name) + return -1; + + strcpy(name, path); + strcat(name, template); + + fd = create_tmpfile_cloexec(name); + + free(name); + + if (fd < 0) + return -1; + +#ifdef HAVE_POSIX_FALLOCATE + do { + ret = posix_fallocate(fd, 0, size); + } while (ret == EINTR); + if (ret != 0) { + close(fd); + errno = ret; + return -1; + } +#else + do { + ret = ftruncate(fd, size); + } while (ret < 0 && errno == EINTR); + if (ret < 0) { + close(fd); + return -1; + } +#endif + + return fd; +} + +#ifndef MISSING_STRCHRNUL +char * +strchrnul(const char *s, int c) +{ + while (*s && *s != c) + s++; + return (char *)s; +} +#endif diff --git a/packages/wvkbd/os-compatibility.h b/packages/wvkbd/os-compatibility.h new file mode 100644 index 0000000..80e7627 --- /dev/null +++ b/packages/wvkbd/os-compatibility.h @@ -0,0 +1,52 @@ +/* + * Copyright © 2012 Collabora, Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef OS_COMPATIBILITY_H +#define OS_COMPATIBILITY_H + +#include + +#ifdef HAVE_EXECINFO_H +#include +#else +static inline int +backtrace(void **buffer, int size) { + return 0; +} +#endif + +int os_fd_set_cloexec(int fd); + +int os_socketpair_cloexec(int domain, int type, int protocol, int *sv); + +int os_epoll_create_cloexec(void); + +int os_create_anonymous_file(off_t size); + +#ifdef MISSING_STRCHRNUL +char *strchrnul(const char *s, int c); +#endif + +#endif /* OS_COMPATIBILITY_H */ diff --git a/packages/wvkbd/package.nix b/packages/wvkbd/package.nix new file mode 100644 index 0000000..1c044eb --- /dev/null +++ b/packages/wvkbd/package.nix @@ -0,0 +1,52 @@ +{ + clangStdenv, + lib, + wayland-scanner, + wayland, + pango, + glib, + harfbuzz, + cairo, + pkg-config, + libxkbcommon, + scdoc, + layout ? "vistath", +}: + +clangStdenv.mkDerivation { + pname = "wvkbd"; + version = "0.16"; + + src = ./.; + + postPatch = '' + substituteInPlace Makefile \ + --replace-fail "pkg-config" "$PKG_CONFIG" + ''; + + nativeBuildInputs = [ + pkg-config + scdoc + wayland-scanner + ]; + buildInputs = [ + cairo + glib + harfbuzz + libxkbcommon + pango + wayland + ]; + installFlags = [ "PREFIX=$(out)" ]; + makeFlags = [ "LAYOUT=${layout}" ]; + + strictDeps = true; + + meta = with lib; { + homepage = "https://github.com/ckgxrg-salt/wvkbd"; + description = "On-screen keyboard for wlroots"; + platforms = platforms.linux; + license = licenses.gpl3Plus; + mainProgram = "wvkbd-vistath"; + }; +} diff --git a/packages/wvkbd/proto/fractional-scale-v1.xml b/packages/wvkbd/proto/fractional-scale-v1.xml new file mode 100644 index 0000000..350bfc0 --- /dev/null +++ b/packages/wvkbd/proto/fractional-scale-v1.xml @@ -0,0 +1,102 @@ + + + + Copyright © 2022 Kenny Levinsen + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + This protocol allows a compositor to suggest for surfaces to render at + fractional scales. + + A client can submit scaled content by utilizing wp_viewport. This is done by + creating a wp_viewport object for the surface and setting the destination + rectangle to the surface size before the scale factor is applied. + + The buffer size is calculated by multiplying the surface size by the + intended scale. + + The wl_surface buffer scale should remain set to 1. + + If a surface has a surface-local size of 100 px by 50 px and wishes to + submit buffers with a scale of 1.5, then a buffer of 150px by 75 px should + be used and the wp_viewport destination rectangle should be 100 px by 50 px. + + For toplevel surfaces, the size is rounded halfway away from zero. The + rounding algorithm for subsurface position and size is not defined. + + + + + A global interface for requesting surfaces to use fractional scales. + + + + + Informs the server that the client will not be using this protocol + object anymore. This does not affect any other objects, + wp_fractional_scale_v1 objects included. + + + + + + + + + + Create an add-on object for the the wl_surface to let the compositor + request fractional scales. If the given wl_surface already has a + wp_fractional_scale_v1 object associated, the fractional_scale_exists + protocol error is raised. + + + + + + + + + An additional interface to a wl_surface object which allows the compositor + to inform the client of the preferred scale. + + + + + Destroy the fractional scale object. When this object is destroyed, + preferred_scale events will no longer be sent. + + + + + + Notification of a new preferred scale for this surface that the + compositor suggests that the client should use. + + The sent scale is the numerator of a fraction with a denominator of 120. + + + + + diff --git a/packages/wvkbd/proto/viewporter.xml b/packages/wvkbd/proto/viewporter.xml new file mode 100644 index 0000000..d1048d1 --- /dev/null +++ b/packages/wvkbd/proto/viewporter.xml @@ -0,0 +1,180 @@ + + + + + Copyright © 2013-2016 Collabora, Ltd. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + + The global interface exposing surface cropping and scaling + capabilities is used to instantiate an interface extension for a + wl_surface object. This extended interface will then allow + cropping and scaling the surface contents, effectively + disconnecting the direct relationship between the buffer and the + surface size. + + + + + Informs the server that the client will not be using this + protocol object anymore. This does not affect any other objects, + wp_viewport objects included. + + + + + + + + + + Instantiate an interface extension for the given wl_surface to + crop and scale its content. If the given wl_surface already has + a wp_viewport object associated, the viewport_exists + protocol error is raised. + + + + + + + + + An additional interface to a wl_surface object, which allows the + client to specify the cropping and scaling of the surface + contents. + + This interface works with two concepts: the source rectangle (src_x, + src_y, src_width, src_height), and the destination size (dst_width, + dst_height). The contents of the source rectangle are scaled to the + destination size, and content outside the source rectangle is ignored. + This state is double-buffered, and is applied on the next + wl_surface.commit. + + The two parts of crop and scale state are independent: the source + rectangle, and the destination size. Initially both are unset, that + is, no scaling is applied. The whole of the current wl_buffer is + used as the source, and the surface size is as defined in + wl_surface.attach. + + If the destination size is set, it causes the surface size to become + dst_width, dst_height. The source (rectangle) is scaled to exactly + this size. This overrides whatever the attached wl_buffer size is, + unless the wl_buffer is NULL. If the wl_buffer is NULL, the surface + has no content and therefore no size. Otherwise, the size is always + at least 1x1 in surface local coordinates. + + If the source rectangle is set, it defines what area of the wl_buffer is + taken as the source. If the source rectangle is set and the destination + size is not set, then src_width and src_height must be integers, and the + surface size becomes the source rectangle size. This results in cropping + without scaling. If src_width or src_height are not integers and + destination size is not set, the bad_size protocol error is raised when + the surface state is applied. + + The coordinate transformations from buffer pixel coordinates up to + the surface-local coordinates happen in the following order: + 1. buffer_transform (wl_surface.set_buffer_transform) + 2. buffer_scale (wl_surface.set_buffer_scale) + 3. crop and scale (wp_viewport.set*) + This means, that the source rectangle coordinates of crop and scale + are given in the coordinates after the buffer transform and scale, + i.e. in the coordinates that would be the surface-local coordinates + if the crop and scale was not applied. + + If src_x or src_y are negative, the bad_value protocol error is raised. + Otherwise, if the source rectangle is partially or completely outside of + the non-NULL wl_buffer, then the out_of_buffer protocol error is raised + when the surface state is applied. A NULL wl_buffer does not raise the + out_of_buffer error. + + If the wl_surface associated with the wp_viewport is destroyed, + all wp_viewport requests except 'destroy' raise the protocol error + no_surface. + + If the wp_viewport object is destroyed, the crop and scale + state is removed from the wl_surface. The change will be applied + on the next wl_surface.commit. + + + + + The associated wl_surface's crop and scale state is removed. + The change is applied on the next wl_surface.commit. + + + + + + + + + + + + + Set the source rectangle of the associated wl_surface. See + wp_viewport for the description, and relation to the wl_buffer + size. + + If all of x, y, width and height are -1.0, the source rectangle is + unset instead. Any other set of values where width or height are zero + or negative, or x or y are negative, raise the bad_value protocol + error. + + The crop and scale state is double-buffered state, and will be + applied on the next wl_surface.commit. + + + + + + + + + + Set the destination size of the associated wl_surface. See + wp_viewport for the description, and relation to the wl_buffer + size. + + If width is -1 and height is -1, the destination size is unset + instead. Any other pair of values for width and height that + contains zero or negative values raises the bad_value protocol + error. + + The crop and scale state is double-buffered state, and will be + applied on the next wl_surface.commit. + + + + + + + diff --git a/packages/wvkbd/proto/virtual-keyboard-unstable-v1.xml b/packages/wvkbd/proto/virtual-keyboard-unstable-v1.xml new file mode 100644 index 0000000..5095c91 --- /dev/null +++ b/packages/wvkbd/proto/virtual-keyboard-unstable-v1.xml @@ -0,0 +1,113 @@ + + + + Copyright © 2008-2011 Kristian Høgsberg + Copyright © 2010-2013 Intel Corporation + Copyright © 2012-2013 Collabora, Ltd. + Copyright © 2018 Purism SPC + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + + The virtual keyboard provides an application with requests which emulate + the behaviour of a physical keyboard. + + This interface can be used by clients on its own to provide raw input + events, or it can accompany the input method protocol. + + + + + Provide a file descriptor to the compositor which can be + memory-mapped to provide a keyboard mapping description. + + Format carries a value from the keymap_format enumeration. + + + + + + + + + + + + + A key was pressed or released. + The time argument is a timestamp with millisecond granularity, with an + undefined base. All requests regarding a single object must share the + same clock. + + Keymap must be set before issuing this request. + + State carries a value from the key_state enumeration. + + + + + + + + + Notifies the compositor that the modifier and/or group state has + changed, and it should update state. + + The client should use wl_keyboard.modifiers event to synchronize its + internal state with seat state. + + Keymap must be set before issuing this request. + + + + + + + + + + + + + + + A virtual keyboard manager allows an application to provide keyboard + input events as if they came from a physical keyboard. + + + + + + + + + Creates a new virtual keyboard associated to a seat. + + If the compositor enables a keyboard to perform arbitrary actions, it + should present an error when an untrusted client requests a new + keyboard. + + + + + + diff --git a/packages/wvkbd/proto/wlr-layer-shell-unstable-v1.xml b/packages/wvkbd/proto/wlr-layer-shell-unstable-v1.xml new file mode 100644 index 0000000..d62fd51 --- /dev/null +++ b/packages/wvkbd/proto/wlr-layer-shell-unstable-v1.xml @@ -0,0 +1,390 @@ + + + + Copyright © 2017 Drew DeVault + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + the copyright holders not be used in advertising or publicity + pertaining to distribution of the software without specific, + written prior permission. The copyright holders make no + representations about the suitability of this software for any + purpose. It is provided "as is" without express or implied + warranty. + + THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. + + + + + Clients can use this interface to assign the surface_layer role to + wl_surfaces. Such surfaces are assigned to a "layer" of the output and + rendered with a defined z-depth respective to each other. They may also be + anchored to the edges and corners of a screen and specify input handling + semantics. This interface should be suitable for the implementation of + many desktop shell components, and a broad number of other applications + that interact with the desktop. + + + + + Create a layer surface for an existing surface. This assigns the role of + layer_surface, or raises a protocol error if another role is already + assigned. + + Creating a layer surface from a wl_surface which has a buffer attached + or committed is a client error, and any attempts by a client to attach + or manipulate a buffer prior to the first layer_surface.configure call + must also be treated as errors. + + After creating a layer_surface object and setting it up, the client + must perform an initial commit without any buffer attached. + The compositor will reply with a layer_surface.configure event. + The client must acknowledge it and is then allowed to attach a buffer + to map the surface. + + You may pass NULL for output to allow the compositor to decide which + output to use. Generally this will be the one that the user most + recently interacted with. + + Clients can specify a namespace that defines the purpose of the layer + surface. + + + + + + + + + + + + + + + + + These values indicate which layers a surface can be rendered in. They + are ordered by z depth, bottom-most first. Traditional shell surfaces + will typically be rendered between the bottom and top layers. + Fullscreen shell surfaces are typically rendered at the top layer. + Multiple surfaces can share a single layer, and ordering within a + single layer is undefined. + + + + + + + + + + + + + This request indicates that the client will not use the layer_shell + object any more. Objects that have been created through this instance + are not affected. + + + + + + + An interface that may be implemented by a wl_surface, for surfaces that + are designed to be rendered as a layer of a stacked desktop-like + environment. + + Layer surface state (layer, size, anchor, exclusive zone, + margin, interactivity) is double-buffered, and will be applied at the + time wl_surface.commit of the corresponding wl_surface is called. + + Attaching a null buffer to a layer surface unmaps it. + + Unmapping a layer_surface means that the surface cannot be shown by the + compositor until it is explicitly mapped again. The layer_surface + returns to the state it had right after layer_shell.get_layer_surface. + The client can re-map the surface by performing a commit without any + buffer attached, waiting for a configure event and handling it as usual. + + + + + Sets the size of the surface in surface-local coordinates. The + compositor will display the surface centered with respect to its + anchors. + + If you pass 0 for either value, the compositor will assign it and + inform you of the assignment in the configure event. You must set your + anchor to opposite edges in the dimensions you omit; not doing so is a + protocol error. Both values are 0 by default. + + Size is double-buffered, see wl_surface.commit. + + + + + + + + Requests that the compositor anchor the surface to the specified edges + and corners. If two orthogonal edges are specified (e.g. 'top' and + 'left'), then the anchor point will be the intersection of the edges + (e.g. the top left corner of the output); otherwise the anchor point + will be centered on that edge, or in the center if none is specified. + + Anchor is double-buffered, see wl_surface.commit. + + + + + + + Requests that the compositor avoids occluding an area with other + surfaces. The compositor's use of this information is + implementation-dependent - do not assume that this region will not + actually be occluded. + + A positive value is only meaningful if the surface is anchored to one + edge or an edge and both perpendicular edges. If the surface is not + anchored, anchored to only two perpendicular edges (a corner), anchored + to only two parallel edges or anchored to all edges, a positive value + will be treated the same as zero. + + A positive zone is the distance from the edge in surface-local + coordinates to consider exclusive. + + Surfaces that do not wish to have an exclusive zone may instead specify + how they should interact with surfaces that do. If set to zero, the + surface indicates that it would like to be moved to avoid occluding + surfaces with a positive exclusive zone. If set to -1, the surface + indicates that it would not like to be moved to accommodate for other + surfaces, and the compositor should extend it all the way to the edges + it is anchored to. + + For example, a panel might set its exclusive zone to 10, so that + maximized shell surfaces are not shown on top of it. A notification + might set its exclusive zone to 0, so that it is moved to avoid + occluding the panel, but shell surfaces are shown underneath it. A + wallpaper or lock screen might set their exclusive zone to -1, so that + they stretch below or over the panel. + + The default value is 0. + + Exclusive zone is double-buffered, see wl_surface.commit. + + + + + + + Requests that the surface be placed some distance away from the anchor + point on the output, in surface-local coordinates. Setting this value + for edges you are not anchored to has no effect. + + The exclusive zone includes the margin. + + Margin is double-buffered, see wl_surface.commit. + + + + + + + + + + Types of keyboard interaction possible for layer shell surfaces. The + rationale for this is twofold: (1) some applications are not interested + in keyboard events and not allowing them to be focused can improve the + desktop experience; (2) some applications will want to take exclusive + keyboard focus. + + + + + This value indicates that this surface is not interested in keyboard + events and the compositor should never assign it the keyboard focus. + + This is the default value, set for newly created layer shell surfaces. + + This is useful for e.g. desktop widgets that display information or + only have interaction with non-keyboard input devices. + + + + + Request exclusive keyboard focus if this surface is above the shell surface layer. + + For the top and overlay layers, the seat will always give + exclusive keyboard focus to the top-most layer which has keyboard + interactivity set to exclusive. If this layer contains multiple + surfaces with keyboard interactivity set to exclusive, the compositor + determines the one receiving keyboard events in an implementation- + defined manner. In this case, no guarantee is made when this surface + will receive keyboard focus (if ever). + + For the bottom and background layers, the compositor is allowed to use + normal focus semantics. + + This setting is mainly intended for applications that need to ensure + they receive all keyboard events, such as a lock screen or a password + prompt. + + + + + This requests the compositor to allow this surface to be focused and + unfocused by the user in an implementation-defined manner. The user + should be able to unfocus this surface even regardless of the layer + it is on. + + Typically, the compositor will want to use its normal mechanism to + manage keyboard focus between layer shell surfaces with this setting + and regular toplevels on the desktop layer (e.g. click to focus). + Nevertheless, it is possible for a compositor to require a special + interaction to focus or unfocus layer shell surfaces (e.g. requiring + a click even if focus follows the mouse normally, or providing a + keybinding to switch focus between layers). + + This setting is mainly intended for desktop shell components (e.g. + panels) that allow keyboard interaction. Using this option can allow + implementing a desktop shell that can be fully usable without the + mouse. + + + + + + + Set how keyboard events are delivered to this surface. By default, + layer shell surfaces do not receive keyboard events; this request can + be used to change this. + + This setting is inherited by child surfaces set by the get_popup + request. + + Layer surfaces receive pointer, touch, and tablet events normally. If + you do not want to receive them, set the input region on your surface + to an empty region. + + Keyboard interactivity is double-buffered, see wl_surface.commit. + + + + + + + This assigns an xdg_popup's parent to this layer_surface. This popup + should have been created via xdg_surface::get_popup with the parent set + to NULL, and this request must be invoked before committing the popup's + initial state. + + See the documentation of xdg_popup for more details about what an + xdg_popup is and how it is used. + + + + + + + When a configure event is received, if a client commits the + surface in response to the configure event, then the client + must make an ack_configure request sometime before the commit + request, passing along the serial of the configure event. + + If the client receives multiple configure events before it + can respond to one, it only has to ack the last configure event. + + A client is not required to commit immediately after sending + an ack_configure request - it may even ack_configure several times + before its next surface commit. + + A client may send multiple ack_configure requests before committing, but + only the last request sent before a commit indicates which configure + event the client really is responding to. + + + + + + + This request destroys the layer surface. + + + + + + The configure event asks the client to resize its surface. + + Clients should arrange their surface for the new states, and then send + an ack_configure request with the serial sent in this configure event at + some point before committing the new surface. + + The client is free to dismiss all but the last configure event it + received. + + The width and height arguments specify the size of the window in + surface-local coordinates. + + The size is a hint, in the sense that the client is free to ignore it if + it doesn't resize, pick a smaller size (to satisfy aspect ratio or + resize in steps of NxM pixels). If the client picks a smaller size and + is anchored to two opposite anchors (e.g. 'top' and 'bottom'), the + surface will be centered on this axis. + + If the width or height arguments are zero, it means the client should + decide its own window dimension. + + + + + + + + + The closed event is sent by the compositor when the surface will no + longer be shown. The output may have been destroyed or the user may + have asked for it to be removed. Further changes to the surface will be + ignored. The client should destroy the resource after receiving this + event, and create a new surface if they so choose. + + + + + + + + + + + + + + + + + + + + + + Change the layer that the surface is rendered on. + + Layer is double-buffered, see wl_surface.commit. + + + + + diff --git a/packages/wvkbd/proto/xdg-shell.xml b/packages/wvkbd/proto/xdg-shell.xml new file mode 100644 index 0000000..777eaa7 --- /dev/null +++ b/packages/wvkbd/proto/xdg-shell.xml @@ -0,0 +1,1370 @@ + + + + + Copyright © 2008-2013 Kristian Høgsberg + Copyright © 2013 Rafael Antognolli + Copyright © 2013 Jasper St. Pierre + Copyright © 2010-2013 Intel Corporation + Copyright © 2015-2017 Samsung Electronics Co., Ltd + Copyright © 2015-2017 Red Hat Inc. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + + The xdg_wm_base interface is exposed as a global object enabling clients + to turn their wl_surfaces into windows in a desktop environment. It + defines the basic functionality needed for clients and the compositor to + create windows that can be dragged, resized, maximized, etc, as well as + creating transient windows such as popup menus. + + + + + + + + + + + + + + + Destroy this xdg_wm_base object. + + Destroying a bound xdg_wm_base object while there are surfaces + still alive created by this xdg_wm_base object instance is illegal + and will result in a defunct_surfaces error. + + + + + + Create a positioner object. A positioner object is used to position + surfaces relative to some parent surface. See the interface description + and xdg_surface.get_popup for details. + + + + + + + This creates an xdg_surface for the given surface. While xdg_surface + itself is not a role, the corresponding surface may only be assigned + a role extending xdg_surface, such as xdg_toplevel or xdg_popup. It is + illegal to create an xdg_surface for a wl_surface which already has an + assigned role and this will result in a role error. + + This creates an xdg_surface for the given surface. An xdg_surface is + used as basis to define a role to a given surface, such as xdg_toplevel + or xdg_popup. It also manages functionality shared between xdg_surface + based surface roles. + + See the documentation of xdg_surface for more details about what an + xdg_surface is and how it is used. + + + + + + + + A client must respond to a ping event with a pong request or + the client may be deemed unresponsive. See xdg_wm_base.ping + and xdg_wm_base.error.unresponsive. + + + + + + + The ping event asks the client if it's still alive. Pass the + serial specified in the event back to the compositor by sending + a "pong" request back with the specified serial. See xdg_wm_base.pong. + + Compositors can use this to determine if the client is still + alive. It's unspecified what will happen if the client doesn't + respond to the ping request, or in what timeframe. Clients should + try to respond in a reasonable amount of time. The “unresponsive” + error is provided for compositors that wish to disconnect unresponsive + clients. + + A compositor is free to ping in any way it wants, but a client must + always respond to any xdg_wm_base object it created. + + + + + + + + The xdg_positioner provides a collection of rules for the placement of a + child surface relative to a parent surface. Rules can be defined to ensure + the child surface remains within the visible area's borders, and to + specify how the child surface changes its position, such as sliding along + an axis, or flipping around a rectangle. These positioner-created rules are + constrained by the requirement that a child surface must intersect with or + be at least partially adjacent to its parent surface. + + See the various requests for details about possible rules. + + At the time of the request, the compositor makes a copy of the rules + specified by the xdg_positioner. Thus, after the request is complete the + xdg_positioner object can be destroyed or reused; further changes to the + object will have no effect on previous usages. + + For an xdg_positioner object to be considered complete, it must have a + non-zero size set by set_size, and a non-zero anchor rectangle set by + set_anchor_rect. Passing an incomplete xdg_positioner object when + positioning a surface raises an invalid_positioner error. + + + + + + + + + Notify the compositor that the xdg_positioner will no longer be used. + + + + + + Set the size of the surface that is to be positioned with the positioner + object. The size is in surface-local coordinates and corresponds to the + window geometry. See xdg_surface.set_window_geometry. + + If a zero or negative size is set the invalid_input error is raised. + + + + + + + + Specify the anchor rectangle within the parent surface that the child + surface will be placed relative to. The rectangle is relative to the + window geometry as defined by xdg_surface.set_window_geometry of the + parent surface. + + When the xdg_positioner object is used to position a child surface, the + anchor rectangle may not extend outside the window geometry of the + positioned child's parent surface. + + If a negative size is set the invalid_input error is raised. + + + + + + + + + + + + + + + + + + + + + + Defines the anchor point for the anchor rectangle. The specified anchor + is used derive an anchor point that the child surface will be + positioned relative to. If a corner anchor is set (e.g. 'top_left' or + 'bottom_right'), the anchor point will be at the specified corner; + otherwise, the derived anchor point will be centered on the specified + edge, or in the center of the anchor rectangle if no edge is specified. + + + + + + + + + + + + + + + + + + + Defines in what direction a surface should be positioned, relative to + the anchor point of the parent surface. If a corner gravity is + specified (e.g. 'bottom_right' or 'top_left'), then the child surface + will be placed towards the specified gravity; otherwise, the child + surface will be centered over the anchor point on any axis that had no + gravity specified. If the gravity is not in the ‘gravity’ enum, an + invalid_input error is raised. + + + + + + + The constraint adjustment value define ways the compositor will adjust + the position of the surface, if the unadjusted position would result + in the surface being partly constrained. + + Whether a surface is considered 'constrained' is left to the compositor + to determine. For example, the surface may be partly outside the + compositor's defined 'work area', thus necessitating the child surface's + position be adjusted until it is entirely inside the work area. + + The adjustments can be combined, according to a defined precedence: 1) + Flip, 2) Slide, 3) Resize. + + + + Don't alter the surface position even if it is constrained on some + axis, for example partially outside the edge of an output. + + + + + Slide the surface along the x axis until it is no longer constrained. + + First try to slide towards the direction of the gravity on the x axis + until either the edge in the opposite direction of the gravity is + unconstrained or the edge in the direction of the gravity is + constrained. + + Then try to slide towards the opposite direction of the gravity on the + x axis until either the edge in the direction of the gravity is + unconstrained or the edge in the opposite direction of the gravity is + constrained. + + + + + Slide the surface along the y axis until it is no longer constrained. + + First try to slide towards the direction of the gravity on the y axis + until either the edge in the opposite direction of the gravity is + unconstrained or the edge in the direction of the gravity is + constrained. + + Then try to slide towards the opposite direction of the gravity on the + y axis until either the edge in the direction of the gravity is + unconstrained or the edge in the opposite direction of the gravity is + constrained. + + + + + Invert the anchor and gravity on the x axis if the surface is + constrained on the x axis. For example, if the left edge of the + surface is constrained, the gravity is 'left' and the anchor is + 'left', change the gravity to 'right' and the anchor to 'right'. + + If the adjusted position also ends up being constrained, the resulting + position of the flip_x adjustment will be the one before the + adjustment. + + + + + Invert the anchor and gravity on the y axis if the surface is + constrained on the y axis. For example, if the bottom edge of the + surface is constrained, the gravity is 'bottom' and the anchor is + 'bottom', change the gravity to 'top' and the anchor to 'top'. + + The adjusted position is calculated given the original anchor + rectangle and offset, but with the new flipped anchor and gravity + values. + + If the adjusted position also ends up being constrained, the resulting + position of the flip_y adjustment will be the one before the + adjustment. + + + + + Resize the surface horizontally so that it is completely + unconstrained. + + + + + Resize the surface vertically so that it is completely unconstrained. + + + + + + + Specify how the window should be positioned if the originally intended + position caused the surface to be constrained, meaning at least + partially outside positioning boundaries set by the compositor. The + adjustment is set by constructing a bitmask describing the adjustment to + be made when the surface is constrained on that axis. + + If no bit for one axis is set, the compositor will assume that the child + surface should not change its position on that axis when constrained. + + If more than one bit for one axis is set, the order of how adjustments + are applied is specified in the corresponding adjustment descriptions. + + The default adjustment is none. + + + + + + + Specify the surface position offset relative to the position of the + anchor on the anchor rectangle and the anchor on the surface. For + example if the anchor of the anchor rectangle is at (x, y), the surface + has the gravity bottom|right, and the offset is (ox, oy), the calculated + surface position will be (x + ox, y + oy). The offset position of the + surface is the one used for constraint testing. See + set_constraint_adjustment. + + An example use case is placing a popup menu on top of a user interface + element, while aligning the user interface element of the parent surface + with some user interface element placed somewhere in the popup surface. + + + + + + + + + + When set reactive, the surface is reconstrained if the conditions used + for constraining changed, e.g. the parent window moved. + + If the conditions changed and the popup was reconstrained, an + xdg_popup.configure event is sent with updated geometry, followed by an + xdg_surface.configure event. + + + + + + Set the parent window geometry the compositor should use when + positioning the popup. The compositor may use this information to + determine the future state the popup should be constrained using. If + this doesn't match the dimension of the parent the popup is eventually + positioned against, the behavior is undefined. + + The arguments are given in the surface-local coordinate space. + + + + + + + + Set the serial of an xdg_surface.configure event this positioner will be + used in response to. The compositor may use this information together + with set_parent_size to determine what future state the popup should be + constrained using. + + + + + + + + An interface that may be implemented by a wl_surface, for + implementations that provide a desktop-style user interface. + + It provides a base set of functionality required to construct user + interface elements requiring management by the compositor, such as + toplevel windows, menus, etc. The types of functionality are split into + xdg_surface roles. + + Creating an xdg_surface does not set the role for a wl_surface. In order + to map an xdg_surface, the client must create a role-specific object + using, e.g., get_toplevel, get_popup. The wl_surface for any given + xdg_surface can have at most one role, and may not be assigned any role + not based on xdg_surface. + + A role must be assigned before any other requests are made to the + xdg_surface object. + + The client must call wl_surface.commit on the corresponding wl_surface + for the xdg_surface state to take effect. + + Creating an xdg_surface from a wl_surface which has a buffer attached or + committed is a client error, and any attempts by a client to attach or + manipulate a buffer prior to the first xdg_surface.configure call must + also be treated as errors. + + After creating a role-specific object and setting it up, the client must + perform an initial commit without any buffer attached. The compositor + will reply with initial wl_surface state such as + wl_surface.preferred_buffer_scale followed by an xdg_surface.configure + event. The client must acknowledge it and is then allowed to attach a + buffer to map the surface. + + Mapping an xdg_surface-based role surface is defined as making it + possible for the surface to be shown by the compositor. Note that + a mapped surface is not guaranteed to be visible once it is mapped. + + For an xdg_surface to be mapped by the compositor, the following + conditions must be met: + (1) the client has assigned an xdg_surface-based role to the surface + (2) the client has set and committed the xdg_surface state and the + role-dependent state to the surface + (3) the client has committed a buffer to the surface + + A newly-unmapped surface is considered to have met condition (1) out + of the 3 required conditions for mapping a surface if its role surface + has not been destroyed, i.e. the client must perform the initial commit + again before attaching a buffer. + + + + + + + + + + + + + + Destroy the xdg_surface object. An xdg_surface must only be destroyed + after its role object has been destroyed, otherwise + a defunct_role_object error is raised. + + + + + + This creates an xdg_toplevel object for the given xdg_surface and gives + the associated wl_surface the xdg_toplevel role. + + See the documentation of xdg_toplevel for more details about what an + xdg_toplevel is and how it is used. + + + + + + + This creates an xdg_popup object for the given xdg_surface and gives + the associated wl_surface the xdg_popup role. + + If null is passed as a parent, a parent surface must be specified using + some other protocol, before committing the initial state. + + See the documentation of xdg_popup for more details about what an + xdg_popup is and how it is used. + + + + + + + + + The window geometry of a surface is its "visible bounds" from the + user's perspective. Client-side decorations often have invisible + portions like drop-shadows which should be ignored for the + purposes of aligning, placing and constraining windows. + + The window geometry is double buffered, and will be applied at the + time wl_surface.commit of the corresponding wl_surface is called. + + When maintaining a position, the compositor should treat the (x, y) + coordinate of the window geometry as the top left corner of the window. + A client changing the (x, y) window geometry coordinate should in + general not alter the position of the window. + + Once the window geometry of the surface is set, it is not possible to + unset it, and it will remain the same until set_window_geometry is + called again, even if a new subsurface or buffer is attached. + + If never set, the value is the full bounds of the surface, + including any subsurfaces. This updates dynamically on every + commit. This unset is meant for extremely simple clients. + + The arguments are given in the surface-local coordinate space of + the wl_surface associated with this xdg_surface, and may extend outside + of the wl_surface itself to mark parts of the subsurface tree as part of + the window geometry. + + When applied, the effective window geometry will be the set window + geometry clamped to the bounding rectangle of the combined + geometry of the surface of the xdg_surface and the associated + subsurfaces. + + The effective geometry will not be recalculated unless a new call to + set_window_geometry is done and the new pending surface state is + subsequently applied. + + The width and height of the effective window geometry must be + greater than zero. Setting an invalid size will raise an + invalid_size error. + + + + + + + + + + When a configure event is received, if a client commits the + surface in response to the configure event, then the client + must make an ack_configure request sometime before the commit + request, passing along the serial of the configure event. + + For instance, for toplevel surfaces the compositor might use this + information to move a surface to the top left only when the client has + drawn itself for the maximized or fullscreen state. + + If the client receives multiple configure events before it + can respond to one, it only has to ack the last configure event. + Acking a configure event that was never sent raises an invalid_serial + error. + + A client is not required to commit immediately after sending + an ack_configure request - it may even ack_configure several times + before its next surface commit. + + A client may send multiple ack_configure requests before committing, but + only the last request sent before a commit indicates which configure + event the client really is responding to. + + Sending an ack_configure request consumes the serial number sent with + the request, as well as serial numbers sent by all configure events + sent on this xdg_surface prior to the configure event referenced by + the committed serial. + + It is an error to issue multiple ack_configure requests referencing a + serial from the same configure event, or to issue an ack_configure + request referencing a serial from a configure event issued before the + event identified by the last ack_configure request for the same + xdg_surface. Doing so will raise an invalid_serial error. + + + + + + + The configure event marks the end of a configure sequence. A configure + sequence is a set of one or more events configuring the state of the + xdg_surface, including the final xdg_surface.configure event. + + Where applicable, xdg_surface surface roles will during a configure + sequence extend this event as a latched state sent as events before the + xdg_surface.configure event. Such events should be considered to make up + a set of atomically applied configuration states, where the + xdg_surface.configure commits the accumulated state. + + Clients should arrange their surface for the new states, and then send + an ack_configure request with the serial sent in this configure event at + some point before committing the new surface. + + If the client receives multiple configure events before it can respond + to one, it is free to discard all but the last event it received. + + + + + + + + + This interface defines an xdg_surface role which allows a surface to, + among other things, set window-like properties such as maximize, + fullscreen, and minimize, set application-specific metadata like title and + id, and well as trigger user interactive operations such as interactive + resize and move. + + Unmapping an xdg_toplevel means that the surface cannot be shown + by the compositor until it is explicitly mapped again. + All active operations (e.g., move, resize) are canceled and all + attributes (e.g. title, state, stacking, ...) are discarded for + an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to + the state it had right after xdg_surface.get_toplevel. The client + can re-map the toplevel by perfoming a commit without any buffer + attached, waiting for a configure event and handling it as usual (see + xdg_surface description). + + Attaching a null buffer to a toplevel unmaps the surface. + + + + + This request destroys the role surface and unmaps the surface; + see "Unmapping" behavior in interface section for details. + + + + + + + + + + + + Set the "parent" of this surface. This surface should be stacked + above the parent surface and all other ancestor surfaces. + + Parent surfaces should be set on dialogs, toolboxes, or other + "auxiliary" surfaces, so that the parent is raised when the dialog + is raised. + + Setting a null parent for a child surface unsets its parent. Setting + a null parent for a surface which currently has no parent is a no-op. + + Only mapped surfaces can have child surfaces. Setting a parent which + is not mapped is equivalent to setting a null parent. If a surface + becomes unmapped, its children's parent is set to the parent of + the now-unmapped surface. If the now-unmapped surface has no parent, + its children's parent is unset. If the now-unmapped surface becomes + mapped again, its parent-child relationship is not restored. + + The parent toplevel must not be one of the child toplevel's + descendants, and the parent must be different from the child toplevel, + otherwise the invalid_parent protocol error is raised. + + + + + + + Set a short title for the surface. + + This string may be used to identify the surface in a task bar, + window list, or other user interface elements provided by the + compositor. + + The string must be encoded in UTF-8. + + + + + + + Set an application identifier for the surface. + + The app ID identifies the general class of applications to which + the surface belongs. The compositor can use this to group multiple + surfaces together, or to determine how to launch a new application. + + For D-Bus activatable applications, the app ID is used as the D-Bus + service name. + + The compositor shell will try to group application surfaces together + by their app ID. As a best practice, it is suggested to select app + ID's that match the basename of the application's .desktop file. + For example, "org.freedesktop.FooViewer" where the .desktop file is + "org.freedesktop.FooViewer.desktop". + + Like other properties, a set_app_id request can be sent after the + xdg_toplevel has been mapped to update the property. + + See the desktop-entry specification [0] for more details on + application identifiers and how they relate to well-known D-Bus + names and .desktop files. + + [0] https://standards.freedesktop.org/desktop-entry-spec/ + + + + + + + Clients implementing client-side decorations might want to show + a context menu when right-clicking on the decorations, giving the + user a menu that they can use to maximize or minimize the window. + + This request asks the compositor to pop up such a window menu at + the given position, relative to the local surface coordinates of + the parent surface. There are no guarantees as to what menu items + the window menu contains, or even if a window menu will be drawn + at all. + + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. + + + + + + + + + + Start an interactive, user-driven move of the surface. + + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. The passed + serial is used to determine the type of interactive move (touch, + pointer, etc). + + The server may ignore move requests depending on the state of + the surface (e.g. fullscreen or maximized), or if the passed serial + is no longer valid. + + If triggered, the surface will lose the focus of the device + (wl_pointer, wl_touch, etc) used for the move. It is up to the + compositor to visually indicate that the move is taking place, such as + updating a pointer cursor, during the move. There is no guarantee + that the device focus will return when the move is completed. + + + + + + + + These values are used to indicate which edge of a surface + is being dragged in a resize operation. + + + + + + + + + + + + + + + Start a user-driven, interactive resize of the surface. + + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. The passed + serial is used to determine the type of interactive resize (touch, + pointer, etc). + + The server may ignore resize requests depending on the state of + the surface (e.g. fullscreen or maximized). + + If triggered, the client will receive configure events with the + "resize" state enum value and the expected sizes. See the "resize" + enum value for more details about what is required. The client + must also acknowledge configure events using "ack_configure". After + the resize is completed, the client will receive another "configure" + event without the resize state. + + If triggered, the surface also will lose the focus of the device + (wl_pointer, wl_touch, etc) used for the resize. It is up to the + compositor to visually indicate that the resize is taking place, + such as updating a pointer cursor, during the resize. There is no + guarantee that the device focus will return when the resize is + completed. + + The edges parameter specifies how the surface should be resized, and + is one of the values of the resize_edge enum. Values not matching + a variant of the enum will cause the invalid_resize_edge protocol error. + The compositor may use this information to update the surface position + for example when dragging the top left corner. The compositor may also + use this information to adapt its behavior, e.g. choose an appropriate + cursor image. + + + + + + + + + The different state values used on the surface. This is designed for + state values like maximized, fullscreen. It is paired with the + configure event to ensure that both the client and the compositor + setting the state can be synchronized. + + States set in this way are double-buffered. They will get applied on + the next commit. + + + + The surface is maximized. The window geometry specified in the configure + event must be obeyed by the client, or the xdg_wm_base.invalid_surface_state + error is raised. + + The client should draw without shadow or other + decoration outside of the window geometry. + + + + + The surface is fullscreen. The window geometry specified in the + configure event is a maximum; the client cannot resize beyond it. For + a surface to cover the whole fullscreened area, the geometry + dimensions must be obeyed by the client. For more details, see + xdg_toplevel.set_fullscreen. + + + + + The surface is being resized. The window geometry specified in the + configure event is a maximum; the client cannot resize beyond it. + Clients that have aspect ratio or cell sizing configuration can use + a smaller size, however. + + + + + Client window decorations should be painted as if the window is + active. Do not assume this means that the window actually has + keyboard or pointer focus. + + + + + The window is currently in a tiled layout and the left edge is + considered to be adjacent to another part of the tiling grid. + + + + + The window is currently in a tiled layout and the right edge is + considered to be adjacent to another part of the tiling grid. + + + + + The window is currently in a tiled layout and the top edge is + considered to be adjacent to another part of the tiling grid. + + + + + The window is currently in a tiled layout and the bottom edge is + considered to be adjacent to another part of the tiling grid. + + + + + The surface is currently not ordinarily being repainted; for + example because its content is occluded by another window, or its + outputs are switched off due to screen locking. + + + + + + + Set a maximum size for the window. + + The client can specify a maximum size so that the compositor does + not try to configure the window beyond this size. + + The width and height arguments are in window geometry coordinates. + See xdg_surface.set_window_geometry. + + Values set in this way are double-buffered. They will get applied + on the next commit. + + The compositor can use this information to allow or disallow + different states like maximize or fullscreen and draw accurate + animations. + + Similarly, a tiling window manager may use this information to + place and resize client windows in a more effective way. + + The client should not rely on the compositor to obey the maximum + size. The compositor may decide to ignore the values set by the + client and request a larger size. + + If never set, or a value of zero in the request, means that the + client has no expected maximum size in the given dimension. + As a result, a client wishing to reset the maximum size + to an unspecified state can use zero for width and height in the + request. + + Requesting a maximum size to be smaller than the minimum size of + a surface is illegal and will result in an invalid_size error. + + The width and height must be greater than or equal to zero. Using + strictly negative values for width or height will result in a + invalid_size error. + + + + + + + + Set a minimum size for the window. + + The client can specify a minimum size so that the compositor does + not try to configure the window below this size. + + The width and height arguments are in window geometry coordinates. + See xdg_surface.set_window_geometry. + + Values set in this way are double-buffered. They will get applied + on the next commit. + + The compositor can use this information to allow or disallow + different states like maximize or fullscreen and draw accurate + animations. + + Similarly, a tiling window manager may use this information to + place and resize client windows in a more effective way. + + The client should not rely on the compositor to obey the minimum + size. The compositor may decide to ignore the values set by the + client and request a smaller size. + + If never set, or a value of zero in the request, means that the + client has no expected minimum size in the given dimension. + As a result, a client wishing to reset the minimum size + to an unspecified state can use zero for width and height in the + request. + + Requesting a minimum size to be larger than the maximum size of + a surface is illegal and will result in an invalid_size error. + + The width and height must be greater than or equal to zero. Using + strictly negative values for width and height will result in a + invalid_size error. + + + + + + + + Maximize the surface. + + After requesting that the surface should be maximized, the compositor + will respond by emitting a configure event. Whether this configure + actually sets the window maximized is subject to compositor policies. + The client must then update its content, drawing in the configured + state. The client must also acknowledge the configure when committing + the new content (see ack_configure). + + It is up to the compositor to decide how and where to maximize the + surface, for example which output and what region of the screen should + be used. + + If the surface was already maximized, the compositor will still emit + a configure event with the "maximized" state. + + If the surface is in a fullscreen state, this request has no direct + effect. It may alter the state the surface is returned to when + unmaximized unless overridden by the compositor. + + + + + + Unmaximize the surface. + + After requesting that the surface should be unmaximized, the compositor + will respond by emitting a configure event. Whether this actually + un-maximizes the window is subject to compositor policies. + If available and applicable, the compositor will include the window + geometry dimensions the window had prior to being maximized in the + configure event. The client must then update its content, drawing it in + the configured state. The client must also acknowledge the configure + when committing the new content (see ack_configure). + + It is up to the compositor to position the surface after it was + unmaximized; usually the position the surface had before maximizing, if + applicable. + + If the surface was already not maximized, the compositor will still + emit a configure event without the "maximized" state. + + If the surface is in a fullscreen state, this request has no direct + effect. It may alter the state the surface is returned to when + unmaximized unless overridden by the compositor. + + + + + + Make the surface fullscreen. + + After requesting that the surface should be fullscreened, the + compositor will respond by emitting a configure event. Whether the + client is actually put into a fullscreen state is subject to compositor + policies. The client must also acknowledge the configure when + committing the new content (see ack_configure). + + The output passed by the request indicates the client's preference as + to which display it should be set fullscreen on. If this value is NULL, + it's up to the compositor to choose which display will be used to map + this surface. + + If the surface doesn't cover the whole output, the compositor will + position the surface in the center of the output and compensate with + with border fill covering the rest of the output. The content of the + border fill is undefined, but should be assumed to be in some way that + attempts to blend into the surrounding area (e.g. solid black). + + If the fullscreened surface is not opaque, the compositor must make + sure that other screen content not part of the same surface tree (made + up of subsurfaces, popups or similarly coupled surfaces) are not + visible below the fullscreened surface. + + + + + + + Make the surface no longer fullscreen. + + After requesting that the surface should be unfullscreened, the + compositor will respond by emitting a configure event. + Whether this actually removes the fullscreen state of the client is + subject to compositor policies. + + Making a surface unfullscreen sets states for the surface based on the following: + * the state(s) it may have had before becoming fullscreen + * any state(s) decided by the compositor + * any state(s) requested by the client while the surface was fullscreen + + The compositor may include the previous window geometry dimensions in + the configure event, if applicable. + + The client must also acknowledge the configure when committing the new + content (see ack_configure). + + + + + + Request that the compositor minimize your surface. There is no + way to know if the surface is currently minimized, nor is there + any way to unset minimization on this surface. + + If you are looking to throttle redrawing when minimized, please + instead use the wl_surface.frame event for this, as this will + also work with live previews on windows in Alt-Tab, Expose or + similar compositor features. + + + + + + This configure event asks the client to resize its toplevel surface or + to change its state. The configured state should not be applied + immediately. See xdg_surface.configure for details. + + The width and height arguments specify a hint to the window + about how its surface should be resized in window geometry + coordinates. See set_window_geometry. + + If the width or height arguments are zero, it means the client + should decide its own window dimension. This may happen when the + compositor needs to configure the state of the surface but doesn't + have any information about any previous or expected dimension. + + The states listed in the event specify how the width/height + arguments should be interpreted, and possibly how it should be + drawn. + + Clients must send an ack_configure in response to this event. See + xdg_surface.configure and xdg_surface.ack_configure for details. + + + + + + + + + The close event is sent by the compositor when the user + wants the surface to be closed. This should be equivalent to + the user clicking the close button in client-side decorations, + if your application has any. + + This is only a request that the user intends to close the + window. The client may choose to ignore this request, or show + a dialog to ask the user to save their data, etc. + + + + + + + + The configure_bounds event may be sent prior to a xdg_toplevel.configure + event to communicate the bounds a window geometry size is recommended + to constrain to. + + The passed width and height are in surface coordinate space. If width + and height are 0, it means bounds is unknown and equivalent to as if no + configure_bounds event was ever sent for this surface. + + The bounds can for example correspond to the size of a monitor excluding + any panels or other shell components, so that a surface isn't created in + a way that it cannot fit. + + The bounds may change at any point, and in such a case, a new + xdg_toplevel.configure_bounds will be sent, followed by + xdg_toplevel.configure and xdg_surface.configure. + + + + + + + + + + + + + + + + + This event advertises the capabilities supported by the compositor. If + a capability isn't supported, clients should hide or disable the UI + elements that expose this functionality. For instance, if the + compositor doesn't advertise support for minimized toplevels, a button + triggering the set_minimized request should not be displayed. + + The compositor will ignore requests it doesn't support. For instance, + a compositor which doesn't advertise support for minimized will ignore + set_minimized requests. + + Compositors must send this event once before the first + xdg_surface.configure event. When the capabilities change, compositors + must send this event again and then send an xdg_surface.configure + event. + + The configured state should not be applied immediately. See + xdg_surface.configure for details. + + The capabilities are sent as an array of 32-bit unsigned integers in + native endianness. + + + + + + + + A popup surface is a short-lived, temporary surface. It can be used to + implement for example menus, popovers, tooltips and other similar user + interface concepts. + + A popup can be made to take an explicit grab. See xdg_popup.grab for + details. + + When the popup is dismissed, a popup_done event will be sent out, and at + the same time the surface will be unmapped. See the xdg_popup.popup_done + event for details. + + Explicitly destroying the xdg_popup object will also dismiss the popup and + unmap the surface. Clients that want to dismiss the popup when another + surface of their own is clicked should dismiss the popup using the destroy + request. + + A newly created xdg_popup will be stacked on top of all previously created + xdg_popup surfaces associated with the same xdg_toplevel. + + The parent of an xdg_popup must be mapped (see the xdg_surface + description) before the xdg_popup itself. + + The client must call wl_surface.commit on the corresponding wl_surface + for the xdg_popup state to take effect. + + + + + + + + + This destroys the popup. Explicitly destroying the xdg_popup + object will also dismiss the popup, and unmap the surface. + + If this xdg_popup is not the "topmost" popup, the + xdg_wm_base.not_the_topmost_popup protocol error will be sent. + + + + + + This request makes the created popup take an explicit grab. An explicit + grab will be dismissed when the user dismisses the popup, or when the + client destroys the xdg_popup. This can be done by the user clicking + outside the surface, using the keyboard, or even locking the screen + through closing the lid or a timeout. + + If the compositor denies the grab, the popup will be immediately + dismissed. + + This request must be used in response to some sort of user action like a + button press, key press, or touch down event. The serial number of the + event should be passed as 'serial'. + + The parent of a grabbing popup must either be an xdg_toplevel surface or + another xdg_popup with an explicit grab. If the parent is another + xdg_popup it means that the popups are nested, with this popup now being + the topmost popup. + + Nested popups must be destroyed in the reverse order they were created + in, e.g. the only popup you are allowed to destroy at all times is the + topmost one. + + When compositors choose to dismiss a popup, they may dismiss every + nested grabbing popup as well. When a compositor dismisses popups, it + will follow the same dismissing order as required from the client. + + If the topmost grabbing popup is destroyed, the grab will be returned to + the parent of the popup, if that parent previously had an explicit grab. + + If the parent is a grabbing popup which has already been dismissed, this + popup will be immediately dismissed. If the parent is a popup that did + not take an explicit grab, an error will be raised. + + During a popup grab, the client owning the grab will receive pointer + and touch events for all their surfaces as normal (similar to an + "owner-events" grab in X11 parlance), while the top most grabbing popup + will always have keyboard focus. + + + + + + + + This event asks the popup surface to configure itself given the + configuration. The configured state should not be applied immediately. + See xdg_surface.configure for details. + + The x and y arguments represent the position the popup was placed at + given the xdg_positioner rule, relative to the upper left corner of the + window geometry of the parent surface. + + For version 2 or older, the configure event for an xdg_popup is only + ever sent once for the initial configuration. Starting with version 3, + it may be sent again if the popup is setup with an xdg_positioner with + set_reactive requested, or in response to xdg_popup.reposition requests. + + + + + + + + + + The popup_done event is sent out when a popup is dismissed by the + compositor. The client should destroy the xdg_popup object at this + point. + + + + + + + + Reposition an already-mapped popup. The popup will be placed given the + details in the passed xdg_positioner object, and a + xdg_popup.repositioned followed by xdg_popup.configure and + xdg_surface.configure will be emitted in response. Any parameters set + by the previous positioner will be discarded. + + The passed token will be sent in the corresponding + xdg_popup.repositioned event. The new popup position will not take + effect until the corresponding configure event is acknowledged by the + client. See xdg_popup.repositioned for details. The token itself is + opaque, and has no other special meaning. + + If multiple reposition requests are sent, the compositor may skip all + but the last one. + + If the popup is repositioned in response to a configure event for its + parent, the client should send an xdg_positioner.set_parent_configure + and possibly an xdg_positioner.set_parent_size request to allow the + compositor to properly constrain the popup. + + If the popup is repositioned together with a parent that is being + resized, but not in response to a configure event, the client should + send an xdg_positioner.set_parent_size request. + + + + + + + + The repositioned event is sent as part of a popup configuration + sequence, together with xdg_popup.configure and lastly + xdg_surface.configure to notify the completion of a reposition request. + + The repositioned event is to notify about the completion of a + xdg_popup.reposition request. The token argument is the token passed + in the xdg_popup.reposition request. + + Immediately after this event is emitted, xdg_popup.configure and + xdg_surface.configure will be sent with the updated size and position, + as well as a new configure serial. + + The client should optionally update the content of the popup, but must + acknowledge the new popup configuration for the new position to take + effect. See xdg_surface.ack_configure for details. + + + + + + diff --git a/packages/wvkbd/shm_open.c b/packages/wvkbd/shm_open.c new file mode 100644 index 0000000..5fce946 --- /dev/null +++ b/packages/wvkbd/shm_open.c @@ -0,0 +1,54 @@ +#define _POSIX_C_SOURCE 200112L +#include +#include +#include +#include +#include + +static void +randname(char *buf) +{ + struct timespec ts; + long r; + clock_gettime(CLOCK_REALTIME, &ts); + r = ts.tv_nsec; + for (int i = 0; i < 6; ++i) { + buf[i] = 'A' + (r & 15) + (r & 16) * 2; + r >>= 5; + } +} + +static int +create_shm_file(void) +{ + int retries = 100; + int fd; + do { + char name[] = "/wl_shm-XXXXXX"; + randname(name + sizeof(name) - 7); + --retries; + fd = shm_open(name, O_RDWR | O_CREAT | O_EXCL, 0600); + if (fd >= 0) { + shm_unlink(name); + return fd; + } + } while (retries > 0 && errno == EEXIST); + return -1; +} + +int +allocate_shm_file(size_t size) +{ + int fd = create_shm_file(); + int ret; + if (fd < 0) + return -1; + do { + ret = ftruncate(fd, size); + } while (ret < 0 && errno == EINTR); + if (ret < 0) { + close(fd); + return -1; + } + return fd; +} diff --git a/packages/wvkbd/shm_open.h b/packages/wvkbd/shm_open.h new file mode 100644 index 0000000..d403c41 --- /dev/null +++ b/packages/wvkbd/shm_open.h @@ -0,0 +1,8 @@ +#ifndef shm_open_h_INCLUDED +#define shm_open_h_INCLUDED + +void randname(char *buf); +int create_shm_file(void); +int allocate_shm_file(size_t size); + +#endif // shm_open_h_INCLUDED diff --git a/packages/wvkbd/wvkbd.1.scd b/packages/wvkbd/wvkbd.1.scd new file mode 100644 index 0000000..7564f6e --- /dev/null +++ b/packages/wvkbd/wvkbd.1.scd @@ -0,0 +1,129 @@ +wvkbd(1) + +# NAME + +wvkbd - on-screen virtual keyboard for wayland compositors using wlroots + +# SYNOPSIS + +wvkbd-mobintl [OPTIONS]... + +*NOTE*: Your binary may have a different suffix depending on which layout you compiled. + +# DESCRIPTION + +This project aims to deliver a minimal but practically usable implementation of +a wlroots on-screen keyboard in legible C. This will _only_ be a keyboard, not +a feedback buzzer, led blinker, or anything that requires more than what's +needed to input text quickly. The end product should be a static codebase that +can be patched to add new features. + +## OPTIONS + +*-D* + enable debug mode. + +*-o* + print pressed keys to standard output. + +*-O* + print intersected keys to standard output. + +*-l* _layers_ + comma separated list of layers in vertical/portrait mode. + +*--landscape-layers* _layers_ + comma separated list of layers used in horizontal/landscape mode. + +*--list-layers* + prints a list of all available layers. + +*-H* _pixels_ + Height of the keyboard in pixels, for vertical/portrait mode. + +*-L* _pixels_ + Height of the keyboard in pixels, for horizontal/landscape mode + +*--fn* _font_ + set font and size (e.g. DejaVu Sans 20) + +*--hidden* + Start hidden (send SIGUSR2 to show). + +*--alpha* _int_ + Set alpha value (i.e. transparency) for all colors [0-255] + +*--bg* _rrggbb|aa_ + Set color of background + +*--fg* _rrggbb|aa_ + Set color of keys + +*--fg-sp* _rrggbb|aa_ + Set color of special keys + +*--press* _rrggbb|aa_ + Set color of pressed keys + +*--press-sp* _rrggbb|aa_ + Set color of pressed special keys + +*--swipe* _rrggbb|aa_ + Set color of swiped keys + +*--swipe-sp* _rrggbb|aa_ + Set color of swiped special keys + +*--text* _rrggbb|aa_ + Set color text on keys + +*--text-sp* _rrggbb|aa_ + Set color text on special keys + +*--version* + Print version information + +*-h*, *--help* + Print usage help + + +# SIGNALS + +You can send signals to wvkbd to hide/show it (e.g. using _kill_(1) with _-s_): + +*SIGUSR1* + Hide the keyboard. + +*SIGUSR2* + Show the keyboard + +*SIGRTMIN* + Toggle visibility + +# COMPOSE BUTTON + +The default mobile international layout features a Compose button (*Cmp*) +which, when combined with another key, opens up a layout that offers variants +for that key. This is similar to functionality that other keyboards implemented +using a *long press* (wvkbd has no such notion, holding a key will repeat +it like on a physical keyboard). + +For example, press Cmp + a to access variants with diacritics like á,à,â,ä, etc.. + +Most layouts also feature the following that are less obvious: + +- Press Cmp and . to access more punctuation +- Press Cmp and - or , to access 'mathematical' symbols (+,-,=,etc) +- Press Cmp and ' or 0 or 9 to access more brackets and quotes +- Press Cmp and q to access emojis + +Last, but not least, pressing Cmp + space or Cmp + ⌨ or Cmp + Abc opens up an +index that allows you to immediately jump to any layout by name, even layouts +not explicitly added to your layers on startup. + +# AUTHORS + +Created by John Sullivan , maintained by the Sxmo project + in collaboration with other open source contributors. For +more information about wvkbd development, see +or .