commit 9e4cf691377930e230c11ab4824165d86bf148cd
parent 1fc0fbe5e605daa91f4ea8462fdf267b48e99404
Author: Maarten van Gompel <proycon@anaproy.nl>
Date: Sun, 22 Aug 2021 23:18:47 +0200
Added a compose button, copy type; added compose layouts and further layout updates
Diffstat:
M | keyboard.h | | | 83 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------- |
M | keymap.h | | | 1482 | +------------------------------------------------------------------------------ |
M | layout.mobile.h | | | 862 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- |
M | main.c | | | 34 | ++++++++++++++++++++++------------ |
4 files changed, 870 insertions(+), 1591 deletions(-)
diff --git a/keyboard.h b/keyboard.h
@@ -12,7 +12,9 @@ enum key_type {
Layout,
EndRow,
Last,
+ Compose,
CodeMod,
+ Copy,
};
/* Modifiers passed to the virtual_keyboard protocol. They are based on
@@ -23,6 +25,7 @@ enum key_modifier_type {
Shift = 1,
CapsLock = 2,
Ctrl = 4,
+ Alt = 8,
Super = 64,
AltGr = 128,
};
@@ -35,26 +38,30 @@ struct clr_scheme {
};
struct key {
- const char *label;
- const char *shift_label;
- const double width;
+ 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;
- struct layout *layout;
- const uint32_t code_mod;
+ 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 */
- //actual coordinates on the surface
+ //actual coordinates on the surface (pixels), will be computed automatically for all keys
uint32_t x, y, w, h;
};
struct layout {
struct key *keys;
- uint32_t keyheight;
+ uint32_t keyheight; //absolute height (pixels)
};
struct kbd {
struct layout *layout;
+ struct layout *prevlayout;
struct clr_scheme scheme;
uint32_t w, h;
@@ -148,8 +155,13 @@ kbd_unpress_key(struct kbd *kb, uint32_t time) {
kbd_draw_key(kb, kb->last_press, false);
kb->surf->dirty = true;
- zwp_virtual_keyboard_v1_key(kb->vkbd, time, kb->last_press->code,
- WL_KEYBOARD_KEY_STATE_RELEASED);
+ if (kb->last_press->type == Copy) {
+ zwp_virtual_keyboard_v1_key(kb->vkbd, time, 127, //COMP key
+ WL_KEYBOARD_KEY_STATE_RELEASED);
+ } else {
+ zwp_virtual_keyboard_v1_key(kb->vkbd, time, kb->last_press->code,
+ WL_KEYBOARD_KEY_STATE_RELEASED);
+ }
kb->last_press = NULL;
}
}
@@ -161,7 +173,7 @@ kbd_press_key(struct kbd *kb, struct key *k, uint32_t time) {
case CodeMod:
mods_before = kb->mods;
- kb->mods = k->code_mod;
+ kb->mods ^= k->code_mod;
kb->last_press = k;
kbd_draw_key(kb, k, true);
zwp_virtual_keyboard_v1_modifiers(kb->vkbd, kb->mods, 0, 0, 0);
@@ -172,10 +184,26 @@ kbd_press_key(struct kbd *kb, struct key *k, uint32_t time) {
zwp_virtual_keyboard_v1_modifiers(kb->vkbd, kb->mods, 0, 0, 0);
break;
case Code:
- kb->last_press = k;
- kbd_draw_key(kb, k, true);
- zwp_virtual_keyboard_v1_key(kb->vkbd, time, kb->last_press->code,
- WL_KEYBOARD_KEY_STATE_PRESSED);
+ if (compose == 1) {
+ if (k->layout) {
+ compose++;
+ if (compose) {
+ fprintf(stderr,"showing compose %d\n", compose);
+ }
+ kb->prevlayout = kb->layout;
+ kb->layout = k->layout;
+ kbd_draw_layout(kb);
+ }
+ } else {
+ kb->last_press = k;
+ kbd_draw_key(kb, k, true);
+ zwp_virtual_keyboard_v1_key(kb->vkbd, time, kb->last_press->code,
+ WL_KEYBOARD_KEY_STATE_PRESSED);
+ if (compose) {
+ fprintf(stderr,"pressing composed key\n");
+ compose++;
+ }
+ }
break;
case Mod:
kb->mods ^= k->code;
@@ -185,13 +213,36 @@ kbd_press_key(struct kbd *kb, struct key *k, uint32_t time) {
kbd_draw_key(kb, k, kb->mods & k->code);
zwp_virtual_keyboard_v1_modifiers(kb->vkbd, kb->mods, 0, 0, 0);
break;
+ case Compose:
+ if (compose == 0) {
+ compose = 1;
+ } else {
+ compose = 0;
+ }
+ kbd_draw_key(kb, k, (bool) compose);
+ break;
case Layout:
kb->layout = k->layout;
kbd_draw_layout(kb);
+ case Copy:
+ kb->last_press = k;
+ kbd_draw_key(kb, k, true);
+ fprintf(stderr,"pressing copy key\n");
+ create_and_upload_keymap(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);
+ break;
default:
break;
}
+ if (compose == 3) {
+ compose = 0;
+ kb->layout = kb->prevlayout;
+ kbd_draw_layout(kb);
+ }
+
kb->surf->dirty = true;
}
@@ -252,3 +303,5 @@ draw_inset(struct drwsurf *d, uint32_t x, uint32_t y, uint32_t width,
wld_fill_rectangle(d->render, color, x + border, y + border, width - border,
height - border);
}
+
+
diff --git a/keymap.h b/keymap.h
@@ -1,4 +1,6 @@
-static const char keymap_str[] = "xkb_keymap {\
+static const char * get_keymap(uint32_t comp_unichr, uint32_t comp_shift_unichr) {
+ char * keymap = malloc(65000);
+ sprintf(keymap, "xkb_keymap {\
xkb_keycodes \"(unnamed)\" {\
minimum = 8;\
maximum = 255;\
@@ -1166,7 +1168,7 @@ xkb_compatibility \"(unnamed)\" {\
};\
\
xkb_symbols \"(unnamed)\" {\
- name[group1]=\"English (US)\";\
+ name[group1]=\"wvkbd\";\
\
key <ESC> { [ Escape ] };\
key <AE01> { [ 1, exclam ] };\
@@ -1218,9 +1220,10 @@ xkb_symbols \"(unnamed)\" {\
key <AB05> { [ b, B, equal ] };\
key <AB06> { [ n, N, question ] };\
key <AB07> { [ m, M, exclam ] };\
- key <AB08> { [ comma, less, backslash] };\
- key <AB09> { [ period, greater, bar ] };\
- key <AB10> { [ slash, question ] };\
+ key <AB08> { [ comma, apostrophe, less, U00AB] };\
+ key <AB09> { [ period, question, greater, U00BB] };\
+ key <AB10> { [ slash, greater ] };\
+ key <I147> { [ exclamdown, questiondown, exclamdown ] };\
key <RTSH> { [ Shift_R ] };\
key <KPMU> {\
type= \"CTRL+ALT\",\
@@ -1346,7 +1349,7 @@ xkb_symbols \"(unnamed)\" {\
key <HJCV> { [ Hangul_Hanja ] };\
key <LWIN> { [ Super_L ] };\
key <RWIN> { [ Super_R ] };\
- key <COMP> { [ Menu ] };\
+ key <COMP> { [ U%04X, U%04X ] };\
key <STOP> { [ Cancel ] };\
key <AGAI> { [ Redo ] };\
key <PROP> { [ SunProps ] };\
@@ -1459,1467 +1462,6 @@ xkb_symbols \"(unnamed)\" {\
};\
\
};\
-";
-
-static const char keymap_polish[] = "xkb_keymap {\
- xkb_keycodes \"(unnamed)\" {\
- minimum = 8;\
- maximum = 255;\
- <ESC> = 9;\
- <AE01> = 10;\
- <AE02> = 11;\
- <AE03> = 12;\
- <AE04> = 13;\
- <AE05> = 14;\
- <AE06> = 15;\
- <AE07> = 16;\
- <AE08> = 17;\
- <AE09> = 18;\
- <AE10> = 19;\
- <AE11> = 20;\
- <AE12> = 21;\
- <BKSP> = 22;\
- <TAB> = 23;\
- <AD01> = 24;\
- <AD02> = 25;\
- <AD03> = 26;\
- <AD04> = 27;\
- <AD05> = 28;\
- <AD06> = 29;\
- <AD07> = 30;\
- <AD08> = 31;\
- <AD09> = 32;\
- <AD10> = 33;\
- <AD11> = 34;\
- <AD12> = 35;\
- <RTRN> = 36;\
- <LCTL> = 37;\
- <AC01> = 38;\
- <AC02> = 39;\
- <AC03> = 40;\
- <AC04> = 41;\
- <AC05> = 42;\
- <AC06> = 43;\
- <AC07> = 44;\
- <AC08> = 45;\
- <AC09> = 46;\
- <AC10> = 47;\
- <AC11> = 48;\
- <TLDE> = 49;\
- <LFSH> = 50;\
- <BKSL> = 51;\
- <AB01> = 52;\
- <AB02> = 53;\
- <AB03> = 54;\
- <AB04> = 55;\
- <AB05> = 56;\
- <AB06> = 57;\
- <AB07> = 58;\
- <AB08> = 59;\
- <AB09> = 60;\
- <AB10> = 61;\
- <RTSH> = 62;\
- <KPMU> = 63;\
- <LALT> = 64;\
- <SPCE> = 65;\
- <CAPS> = 66;\
- <FK01> = 67;\
- <FK02> = 68;\
- <FK03> = 69;\
- <FK04> = 70;\
- <FK05> = 71;\
- <FK06> = 72;\
- <FK07> = 73;\
- <FK08> = 74;\
- <FK09> = 75;\
- <FK10> = 76;\
- <NMLK> = 77;\
- <SCLK> = 78;\
- <KP7> = 79;\
- <KP8> = 80;\
- <KP9> = 81;\
- <KPSU> = 82;\
- <KP4> = 83;\
- <KP5> = 84;\
- <KP6> = 85;\
- <KPAD> = 86;\
- <KP1> = 87;\
- <KP2> = 88;\
- <KP3> = 89;\
- <KP0> = 90;\
- <KPDL> = 91;\
- <LVL3> = 92;\
- <LSGT> = 94;\
- <FK11> = 95;\
- <FK12> = 96;\
- <AB11> = 97;\
- <KATA> = 98;\
- <HIRA> = 99;\
- <HENK> = 100;\
- <HKTG> = 101;\
- <MUHE> = 102;\
- <JPCM> = 103;\
- <KPEN> = 104;\
- <RCTL> = 105;\
- <KPDV> = 106;\
- <PRSC> = 107;\
- <RALT> = 108;\
- <LNFD> = 109;\
- <HOME> = 110;\
- <UP> = 111;\
- <PGUP> = 112;\
- <LEFT> = 113;\
- <RGHT> = 114;\
- <END> = 115;\
- <DOWN> = 116;\
- <PGDN> = 117;\
- <INS> = 118;\
- <DELE> = 119;\
- <I120> = 120;\
- <MUTE> = 121;\
- <VOL-> = 122;\
- <VOL+> = 123;\
- <POWR> = 124;\
- <KPEQ> = 125;\
- <I126> = 126;\
- <PAUS> = 127;\
- <I128> = 128;\
- <I129> = 129;\
- <HNGL> = 130;\
- <HJCV> = 131;\
- <AE13> = 132;\
- <LWIN> = 133;\
- <RWIN> = 134;\
- <COMP> = 135;\
- <STOP> = 136;\
- <AGAI> = 137;\
- <PROP> = 138;\
- <UNDO> = 139;\
- <FRNT> = 140;\
- <COPY> = 141;\
- <OPEN> = 142;\
- <PAST> = 143;\
- <FIND> = 144;\
- <CUT> = 145;\
- <HELP> = 146;\
- <I147> = 147;\
- <I148> = 148;\
- <I149> = 149;\
- <I150> = 150;\
- <I151> = 151;\
- <I152> = 152;\
- <I153> = 153;\
- <I154> = 154;\
- <I155> = 155;\
- <I156> = 156;\
- <I157> = 157;\
- <I158> = 158;\
- <I159> = 159;\
- <I160> = 160;\
- <I161> = 161;\
- <I162> = 162;\
- <I163> = 163;\
- <I164> = 164;\
- <I165> = 165;\
- <I166> = 166;\
- <I167> = 167;\
- <I168> = 168;\
- <I169> = 169;\
- <I170> = 170;\
- <I171> = 171;\
- <I172> = 172;\
- <I173> = 173;\
- <I174> = 174;\
- <I175> = 175;\
- <I176> = 176;\
- <I177> = 177;\
- <I178> = 178;\
- <I179> = 179;\
- <I180> = 180;\
- <I181> = 181;\
- <I182> = 182;\
- <I183> = 183;\
- <I184> = 184;\
- <I185> = 185;\
- <I186> = 186;\
- <I187> = 187;\
- <I188> = 188;\
- <I189> = 189;\
- <I190> = 190;\
- <FK13> = 191;\
- <FK14> = 192;\
- <FK15> = 193;\
- <FK16> = 194;\
- <FK17> = 195;\
- <FK18> = 196;\
- <FK19> = 197;\
- <FK20> = 198;\
- <FK21> = 199;\
- <FK22> = 200;\
- <FK23> = 201;\
- <FK24> = 202;\
- <MDSW> = 203;\
- <ALT> = 204;\
- <META> = 205;\
- <SUPR> = 206;\
- <HYPR> = 207;\
- <I208> = 208;\
- <I209> = 209;\
- <I210> = 210;\
- <I211> = 211;\
- <I212> = 212;\
- <I213> = 213;\
- <I214> = 214;\
- <I215> = 215;\
- <I216> = 216;\
- <I217> = 217;\
- <I218> = 218;\
- <I219> = 219;\
- <I220> = 220;\
- <I221> = 221;\
- <I222> = 222;\
- <I223> = 223;\
- <I224> = 224;\
- <I225> = 225;\
- <I226> = 226;\
- <I227> = 227;\
- <I228> = 228;\
- <I229> = 229;\
- <I230> = 230;\
- <I231> = 231;\
- <I232> = 232;\
- <I233> = 233;\
- <I234> = 234;\
- <I235> = 235;\
- <I236> = 236;\
- <I237> = 237;\
- <I238> = 238;\
- <I239> = 239;\
- <I240> = 240;\
- <I241> = 241;\
- <I242> = 242;\
- <I243> = 243;\
- <I244> = 244;\
- <I245> = 245;\
- <I246> = 246;\
- <I247> = 247;\
- <I248> = 248;\
- <I249> = 249;\
- <I250> = 250;\
- <I251> = 251;\
- <I252> = 252;\
- <I253> = 253;\
- <I254> = 254;\
- <I255> = 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 <AC12> = <BKSL>;\
- alias <MENU> = <COMP>;\
- alias <HZTG> = <TLDE>;\
- alias <LMTA> = <LWIN>;\
- alias <RMTA> = <RWIN>;\
- alias <ALGR> = <RALT>;\
- alias <KPPT> = <I129>;\
- alias <LatQ> = <AD01>;\
- alias <LatW> = <AD02>;\
- alias <LatE> = <AD03>;\
- alias <LatR> = <AD04>;\
- alias <LatT> = <AD05>;\
- alias <LatY> = <AD06>;\
- alias <LatU> = <AD07>;\
- alias <LatI> = <AD08>;\
- alias <LatO> = <AD09>;\
- alias <LatP> = <AD10>;\
- alias <LatA> = <AC01>;\
- alias <LatS> = <AC02>;\
- alias <LatD> = <AC03>;\
- alias <LatF> = <AC04>;\
- alias <LatG> = <AC05>;\
- alias <LatH> = <AC06>;\
- alias <LatJ> = <AC07>;\
- alias <LatK> = <AC08>;\
- alias <LatL> = <AC09>;\
- alias <LatZ> = <AB01>;\
- alias <LatX> = <AB02>;\
- alias <LatC> = <AB03>;\
- alias <LatV> = <AB04>;\
- alias <LatB> = <AB05>;\
- alias <LatN> = <AB06>;\
- alias <LatM> = <AB07>;\
- };\
- \
- 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]=\"English (US)\";\
- \
- key <ESC> { [ Escape ] };\
- key <AE01> { [ 1, exclam ] };\
- key <AE02> { [ 2, at ] };\
- key <AE03> { [ 3, numbersign ] };\
- key <AE04> { [ 4, dollar ] };\
- key <AE05> { [ 5, percent ] };\
- key <AE06> { [ 6, asciicircum ] };\
- key <AE07> { [ 7, ampersand ] };\
- key <AE08> { [ 8, asterisk ] };\
- key <AE09> { [ 9, parenleft ] };\
- key <AE10> { [ 0, parenright ] };\
- key <AE11> { [ minus, underscore ] };\
- key <AE12> { [ equal, plus ] };\
- key <BKSP> { [ BackSpace, BackSpace ] };\
- key <TAB> { [ Tab, ISO_Left_Tab ] };\
- key <AD01> { [ q, Q, 1, asciitilde ] };\
- key <AD02> { [ w, W, 2, plus ] };\
- key <AD03> { [ e, E, 3, minus ] };\
- key <AD04> { [ r, R, 4, equal ] };\
- key <AD05> { [ t, T, 5, percent ] };\
- key <AD06> { [ y, Y, 6, asciicircum ] };\
- key <AD07> { [ u, U, 7, ampersand ] };\
- key <AD08> { [ i, I, 8, asterisk ] };\
- key <AD09> { [ o, O, 9, bracketleft ] };\
- key <AD10> { [ p, P, 0, bracketright ] };\
- key <AD11> { [ bracketleft, braceleft ] };\
- key <AD12> { [ bracketright, braceright ] };\
- key <RTRN> { [ Return ] };\
- key <LCTL> { [ Control_L ] };\
- key <AC01> { [ a, A, aogonek, Aogonek ] };\
- key <AC02> { [ s, S, sacute, Sacute ] };\
- key <AC03> { [ d, D, eogonek, Eogonek ] };\
- key <AC04> { [ f, F, colon, underscore ] };\
- key <AC05> { [ g, G, semicolon, apostrophe ] };\
- key <AC06> { [ h, H, parenleft, braceleft ] };\
- key <AC07> { [ j, J, parenright, braceright ] };\
- key <AC08> { [ k, K, oacute, Oacute ] };\
- key <AC09> { [ l, L, lstroke, Lstroke ] };\
- key <AC10> { [ semicolon, colon ] };\
- key <AC11> { [ apostrophe, quotedbl ] };\
- key <TLDE> { [ grave, asciitilde ] };\
- key <LFSH> { [ Shift_L ] };\
- key <BKSL> { [ backslash, bar ] };\
- key <AB01> { [ z, Z, zabovedot, Zabovedot ] };\
- key <AB02> { [ x, X, zacute, Zacute ] };\
- key <AB03> { [ c, C, cacute, Cacute ] };\
- key <AB04> { [ v, V, U2013, dollar ] };\
- key <AB05> { [ b, B, question, EuroSign ] };\
- key <AB06> { [ n, N, exclam, numbersign ] };\
- key <AB07> { [ m, M, U201E, guillemotright ] };\
- key <AB08> { [ comma, less, U201D, guillemotleft] };\
- key <AB09> { [ period, greater, bar, ellipsis ] };\
- key <AB10> { [ slash, question ] };\
- key <RTSH> { [ Shift_R ] };\
- key <KPMU> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\
- };\
- key <LALT> { [ Alt_L, Meta_L ] };\
- key <SPCE> { [ space ] };\
- key <CAPS> { [ Caps_Lock ] };\
- key <FK01> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\
- };\
- key <FK02> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\
- };\
- key <FK03> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\
- };\
- key <FK04> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\
- };\
- key <FK05> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\
- };\
- key <FK06> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\
- };\
- key <FK07> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\
- };\
- key <FK08> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\
- };\
- key <FK09> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\
- };\
- key <FK10> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\
- };\
- key <NMLK> { [ Num_Lock ] };\
- key <SCLK> { [ Scroll_Lock ] };\
- key <KP7> { [ KP_Home, KP_7 ] };\
- key <KP8> { [ KP_Up, KP_8 ] };\
- key <KP9> { [ KP_Prior, KP_9 ] };\
- key <KPSU> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\
- };\
- key <KP4> { [ KP_Left, KP_4 ] };\
- key <KP5> { [ KP_Begin, KP_5 ] };\
- key <KP6> { [ KP_Right, KP_6 ] };\
- key <KPAD> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\
- };\
- key <KP1> { [ KP_End, KP_1 ] };\
- key <KP2> { [ KP_Down, KP_2 ] };\
- key <KP3> { [ KP_Next, KP_3 ] };\
- key <KP0> { [ KP_Insert, KP_0 ] };\
- key <KPDL> { [ KP_Delete, KP_Decimal ] };\
- key <LVL3> { [ ISO_Level3_Shift ] };\
- key <LSGT> { [ less, greater, bar, brokenbar ] };\
- key <FK11> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\
- };\
- key <FK12> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\
- };\
- key <KATA> { [ Katakana ] };\
- key <HIRA> { [ Hiragana ] };\
- key <HENK> { [ Henkan_Mode ] };\
- key <HKTG> { [ Hiragana_Katakana ] };\
- key <MUHE> { [ Muhenkan ] };\
- key <KPEN> { [ KP_Enter ] };\
- key <RCTL> { [ Control_R ] };\
- key <KPDV> {\
- type= \"CTRL+ALT\",\
- symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\
- };\
- key <PRSC> {\
- type= \"PC_ALT_LEVEL2\",\
- symbols[Group1]= [ Print, Sys_Req ]\
- };\
- key <RALT> {\
- type= \"TWO_LEVEL\",\
- symbols[Group1]= [ Alt_R, Meta_R ]\
- };\
- key <LNFD> { [ Linefeed ] };\
- key <HOME> { [ Home ] };\
- key <UP> { [ Up ] };\
- key <PGUP> { [ Prior ] };\
- key <LEFT> { [ Left ] };\
- key <RGHT> { [ Right ] };\
- key <END> { [ End ] };\
- key <DOWN> { [ Down ] };\
- key <PGDN> { [ Next ] };\
- key <INS> { [ Insert ] };\
- key <DELE> { [ Delete ] };\
- key <MUTE> { [ XF86AudioMute ] };\
- key <VOL-> { [ XF86AudioLowerVolume ] };\
- key <VOL+> { [ XF86AudioRaiseVolume ] };\
- key <POWR> { [ XF86PowerOff ] };\
- key <KPEQ> { [ KP_Equal ] };\
- key <I126> { [ plusminus ] };\
- key <PAUS> {\
- type= \"PC_CONTROL_LEVEL2\",\
- symbols[Group1]= [ Pause, Break ]\
- };\
- key <I128> { [ XF86LaunchA ] };\
- key <I129> { [ KP_Decimal, KP_Decimal ] };\
- key <HNGL> { [ Hangul ] };\
- key <HJCV> { [ Hangul_Hanja ] };\
- key <LWIN> { [ Super_L ] };\
- key <RWIN> { [ Super_R ] };\
- key <COMP> { [ Menu ] };\
- key <STOP> { [ Cancel ] };\
- key <AGAI> { [ Redo ] };\
- key <PROP> { [ SunProps ] };\
- key <UNDO> { [ Undo ] };\
- key <FRNT> { [ SunFront ] };\
- key <COPY> { [ XF86Copy ] };\
- key <OPEN> { [ XF86Open ] };\
- key <PAST> { [ XF86Paste ] };\
- key <FIND> { [ Find ] };\
- key <CUT> { [ XF86Cut ] };\
- key <HELP> { [ Help ] };\
- key <I147> { [ XF86MenuKB ] };\
- key <I148> { [ XF86Calculator ] };\
- key <I150> { [ XF86Sleep ] };\
- key <I151> { [ XF86WakeUp ] };\
- key <I152> { [ XF86Explorer ] };\
- key <I153> { [ XF86Send ] };\
- key <I155> { [ XF86Xfer ] };\
- key <I156> { [ XF86Launch1 ] };\
- key <I157> { [ XF86Launch2 ] };\
- key <I158> { [ XF86WWW ] };\
- key <I159> { [ XF86DOS ] };\
- key <I160> { [ XF86ScreenSaver ] };\
- key <I161> { [ XF86RotateWindows ] };\
- key <I162> { [ XF86TaskPane ] };\
- key <I163> { [ XF86Mail ] };\
- key <I164> { [ XF86Favorites ] };\
- key <I165> { [ XF86MyComputer ] };\
- key <I166> { [ XF86Back ] };\
- key <I167> { [ XF86Forward ] };\
- key <I169> { [ XF86Eject ] };\
- key <I170> { [ XF86Eject, XF86Eject ] };\
- key <I171> { [ XF86AudioNext ] };\
- key <I172> { [ XF86AudioPlay, XF86AudioPause ] };\
- key <I173> { [ XF86AudioPrev ] };\
- key <I174> { [ XF86AudioStop, XF86Eject ] };\
- key <I175> { [ XF86AudioRecord ] };\
- key <I176> { [ XF86AudioRewind ] };\
- key <I177> { [ XF86Phone ] };\
- key <I179> { [ XF86Tools ] };\
- key <I180> { [ XF86HomePage ] };\
- key <I181> { [ XF86Reload ] };\
- key <I182> { [ XF86Close ] };\
- key <I185> { [ XF86ScrollUp ] };\
- key <I186> { [ XF86ScrollDown ] };\
- key <I187> { [ parenleft ] };\
- key <I188> { [ parenright ] };\
- key <I189> { [ XF86New ] };\
- key <I190> { [ Redo ] };\
- key <FK13> { [ XF86Tools ] };\
- key <FK14> { [ XF86Launch5 ] };\
- key <FK15> { [ XF86Launch6 ] };\
- key <FK16> { [ XF86Launch7 ] };\
- key <FK17> { [ XF86Launch8 ] };\
- key <FK18> { [ XF86Launch9 ] };\
- key <FK20> { [ XF86AudioMicMute ] };\
- key <FK21> { [ XF86TouchpadToggle ] };\
- key <FK22> { [ XF86TouchpadOn ] };\
- key <FK23> { [ XF86TouchpadOff ] };\
- key <MDSW> { [ Mode_switch ] };\
- key <ALT> { [ NoSymbol, Alt_L ] };\
- key <META> { [ NoSymbol, Meta_L ] };\
- key <SUPR> { [ NoSymbol, Super_L ] };\
- key <HYPR> { [ NoSymbol, Hyper_L ] };\
- key <I208> { [ XF86AudioPlay ] };\
- key <I209> { [ XF86AudioPause ] };\
- key <I210> { [ XF86Launch3 ] };\
- key <I211> { [ XF86Launch4 ] };\
- key <I212> { [ XF86LaunchB ] };\
- key <I213> { [ XF86Suspend ] };\
- key <I214> { [ XF86Close ] };\
- key <I215> { [ XF86AudioPlay ] };\
- key <I216> { [ XF86AudioForward ] };\
- key <I218> { [ Print ] };\
- key <I220> { [ XF86WebCam ] };\
- key <I221> { [ XF86AudioPreset ] };\
- key <I223> { [ XF86Mail ] };\
- key <I224> { [ XF86Messenger ] };\
- key <I225> { [ XF86Search ] };\
- key <I226> { [ XF86Go ] };\
- key <I227> { [ XF86Finance ] };\
- key <I228> { [ XF86Game ] };\
- key <I229> { [ XF86Shop ] };\
- key <I231> { [ Cancel ] };\
- key <I232> { [ XF86MonBrightnessDown ] };\
- key <I233> { [ XF86MonBrightnessUp ] };\
- key <I234> { [ XF86AudioMedia ] };\
- key <I235> { [ XF86Display ] };\
- key <I236> { [ XF86KbdLightOnOff ] };\
- key <I237> { [ XF86KbdBrightnessDown ] };\
- key <I238> { [ XF86KbdBrightnessUp ] };\
- key <I239> { [ XF86Send ] };\
- key <I240> { [ XF86Reply ] };\
- key <I241> { [ XF86MailForward ] };\
- key <I242> { [ XF86Save ] };\
- key <I243> { [ XF86Documents ] };\
- key <I244> { [ XF86Battery ] };\
- key <I245> { [ XF86Bluetooth ] };\
- key <I246> { [ XF86WLAN ] };\
- key <I247> { [ XF86UWB ] };\
- key <I254> { [ XF86WWAN ] };\
- key <I255> { [ XF86RFKill ] };\
- modifier_map Shift { <LFSH>, <RTSH> };\
- modifier_map Lock { <CAPS> };\
- modifier_map Control { <LCTL>, <RCTL> };\
- modifier_map Mod1 { <LALT>, <RALT>, <META> };\
- modifier_map Mod2 { <NMLK> };\
- modifier_map Mod4 { <LWIN>, <RWIN>, <SUPR>, <HYPR> };\
- modifier_map Mod5 { <LVL3>, <MDSW> };\
- };\
-};";
-
-size_t keymap_size = strlen(keymap_str) + 1;
+", comp_unichr, comp_shift_unichr);
+ return keymap;
+ }
diff --git a/layout.mobile.h b/layout.mobile.h
@@ -16,28 +16,109 @@
/* font (see `man fonts-conf` for instructions) */
static const char *fc_font_pattern =
- "FiraMono Nerd Font:size=16:antialias=true:hinting=true";
+ "Monospace:size=16:antialias=true:hinting=true";
/* layout declarations */
enum layout_names {
- Basic = 0,
+ Full = 0,
Special,
Simple,
+ ComposeA,
+ ComposeE,
+ ComposeY,
+ ComposeU,
+ ComposeI,
+ ComposeO,
+ ComposeQ,
+ ComposeW,
+ ComposeR,
+ ComposeT,
+ ComposeP,
+ ComposeS,
+ ComposeD,
+ ComposeF,
+ ComposeG,
+ ComposeH,
+ ComposeJ,
+ ComposeK,
+ ComposeL,
+ ComposeZ,
+ ComposeX,
+ ComposeC,
+ ComposeV,
+ ComposeB,
+ ComposeN,
+ ComposeM,
NumLayouts,
};
-static struct key keys_basic[], keys_special[], keys_simple[];
+static struct key keys_full[], keys_special[], keys_simple[],
+ keys_compose_a[],
+ keys_compose_e[],
+ keys_compose_y[],
+ keys_compose_u[],
+ keys_compose_i[],
+ keys_compose_o[],
+ keys_compose_q[],
+ 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[];
static struct layout layouts[NumLayouts] = {
- [Basic] = {keys_basic},
+ [Full] = {keys_full},
[Special] = {keys_special},
[Simple] = {keys_simple},
+ [ComposeA] = {keys_compose_a},
+ [ComposeE] = {keys_compose_e},
+ [ComposeY] = {keys_compose_y},
+ [ComposeU] = {keys_compose_u},
+ [ComposeI] = {keys_compose_i},
+ [ComposeO] = {keys_compose_o},
+ [ComposeQ] = {keys_compose_q},
+ [ComposeW] = {keys_compose_w},
+ [ComposeR] = {keys_compose_r},
+ [ComposeT] = {keys_compose_t},
+ [ComposeP] = {keys_compose_p},
+ [ComposeS] = {keys_compose_s},
+ [ComposeD] = {keys_compose_d},
+ [ComposeF] = {keys_compose_f},
+ [ComposeG] = {keys_compose_g},
+ [ComposeH] = {keys_compose_h},
+ [ComposeJ] = {keys_compose_j},
+ [ComposeK] = {keys_compose_k},
+ [ComposeL] = {keys_compose_l},
+ [ComposeZ] = {keys_compose_z},
+ [ComposeX] = {keys_compose_x},
+ [ComposeC] = {keys_compose_c},
+ [ComposeV] = {keys_compose_v},
+ [ComposeB] = {keys_compose_b},
+ [ComposeN] = {keys_compose_n},
+ [ComposeM] = {keys_compose_m},
};
+const enum layout_names DefaultLayout = Full;
+
+
/* keyboard settings */
static struct kbd keyboard = {
/* default layout */
- .layout = &layouts[Basic],
+ .layout = &layouts[DefaultLayout],
.scheme =
{
/* colors */
@@ -76,17 +157,17 @@ static struct kbd keyboard = {
*
* - layout: layout to switch to when key is pressed
*/
-static struct key keys_basic[] = {
+static struct key keys_full[] = {
{"Esc", "Esc", 1.0, Code, KEY_ESC},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
{"Tab", "Tab", 1.0, Code, KEY_TAB},
{"↑", "↑", 1.0, Code, KEY_UP},
{"↓", "↓", 1.0, Code, KEY_DOWN},
{"←", "←", 1.0, Code, KEY_LEFT},
{"→", "→", 1.0, Code, KEY_RIGHT},
{"'", "\"", 1.0, Code, KEY_APOSTROPHE},
- {"/", "?", 1.0, Code, KEY_SLASH},
{";", ":", 1.0, Code, KEY_SEMICOLON},
- {"`", "~", 1.0, Code, KEY_GRAVE},
+ {"/", "?", 1.0, Code, KEY_SLASH},
{"", "", 0.0, EndRow},
{"1", "!", 1.0, Code, KEY_1},
@@ -104,47 +185,47 @@ static struct key keys_basic[] = {
{"", "", 0.0, EndRow},
{"", "", 0.5, Pad},
- {"q", "Q", 1.0, Code, KEY_Q},
- {"w", "W", 1.0, Code, KEY_W},
- {"e", "E", 1.0, Code, KEY_E},
- {"r", "R", 1.0, Code, KEY_R},
- {"t", "T", 1.0, Code, KEY_T},
- {"y", "Y", 1.0, Code, KEY_Y},
- {"u", "U", 1.0, Code, KEY_U},
- {"i", "I", 1.0, Code, KEY_I},
- {"o", "O", 1.0, Code, KEY_O},
- {"p", "P", 1.0, Code, KEY_P},
- {"", "", 0.0, EndRow},
-
- {"Ct", "Ct", 1.0, Mod, Ctrl},
- {"a", "A", 1.0, Code, KEY_A},
- {"s", "S", 1.0, Code, KEY_S},
- {"d", "D", 1.0, Code, KEY_D},
- {"f", "F", 1.0, Code, KEY_F},
- {"g", "G", 1.0, Code, KEY_G},
- {"h", "H", 1.0, Code, KEY_H},
- {"j", "J", 1.0, Code, KEY_J},
- {"k", "K", 1.0, Code, KEY_K},
- {"l", "L", 1.0, Code, KEY_L},
+ {"q", "Q", 1.0, Code, KEY_Q, &layouts[ComposeQ]},
+ {"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},
+
+ {"Cmp", "Cmp", 1.0, Compose},
+ {"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},
- {"z", "Z", 1.0, Code, KEY_Z},
- {"x", "X", 1.0, Code, KEY_X},
- {"c", "C", 1.0, Code, KEY_C},
- {"v", "V", 1.0, Code, KEY_V},
- {"b", "B", 1.0, Code, KEY_B},
- {"n", "N", 1.0, Code, KEY_N},
- {"m", "M", 1.0, Code, KEY_M},
+ {"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},
{"", "", 0.0, EndRow},
{"Sym", "Sym", 1.0, Layout, 0, &layouts[Special]},
- {"Alt", "Alt", 1.0, Mod, AltGr},
- {",", "<", 1.0, Code, KEY_COMMA},
+ {"Alt", "Alt", 1.0, Mod, Alt},
+ {",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
- {".", ">", 1.0, Code, KEY_DOT},
+ {".", "?", 1.0, Code, KEY_DOT},
{"Entr", "Entr", 2.0, Code, KEY_ENTER},
@@ -154,6 +235,7 @@ static struct key keys_basic[] = {
static struct key keys_special[] = {
{"Esc", "Esc", 1.0, Code, KEY_ESC},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
{"Tab", "Tab", 1.0, Code, KEY_TAB},
{"↑", "↑", 1.0, Code, KEY_UP},
{"↓", "↓", 1.0, Code, KEY_DOWN},
@@ -177,19 +259,8 @@ static struct key keys_special[] = {
{"0", ")", 1.0, Code, KEY_0},
{"", "", 0.0, EndRow},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 0.0, EndRow},
-
- {"Ct", "Ct", 2.0, Mod, Ctrl},
+ {"Caps", "Caps", 1.0, Mod, CapsLock},
+ {"Sup", "Sup", 1.0, Mod, Super},
{"`", "~", 1.0, Code, KEY_GRAVE},
{"'", "\"", 1.0, Code, KEY_APOSTROPHE},
{"-", "_", 1.0, Code, KEY_MINUS},
@@ -203,19 +274,19 @@ static struct key keys_special[] = {
{"⇧", "⇧", 2.0, Mod, Shift},
{";", ":", 1.0, Code, KEY_SEMICOLON},
{"/", "?", 1.0, Code, KEY_SLASH},
+ {"<", "«", 1.0, CodeMod, KEY_COMMA, 0, AltGr},
+ {">", "»", 1.0, CodeMod, KEY_DOT, 0, AltGr},
+ {"¡", "¿", 1.0, Code, KEY_MENU},
{"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
- {"", "", 1.0, Pad},
+ {"AGr", "AGr", 1.0, Mod, AltGr},
{"⌫", "⌫", 1.0, Code, KEY_BACKSPACE},
{"", "", 0.0, EndRow},
- {"Abc", "Abc", 1.0, Layout, 0, &layouts[Simple]},
- {"Alt", "Alt", 1.0, Mod, AltGr},
- {",", "<", 1.0, Code, KEY_COMMA},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[(DefaultLayout == Simple) ? Full : Simple] },
+ {"Alt", "Alt", 1.0, Mod, Alt},
+ {",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
- {".", ">", 1.0, Code, KEY_DOT},
+ {".", "?", 1.0, Code, KEY_DOT},
{"Entr", "Entr", 2.0, Code, KEY_ENTER},
/* end of layout */
@@ -224,47 +295,47 @@ static struct key keys_special[] = {
static struct key keys_simple[] = {
{"", "", 0.5, Pad},
- {"q", "Q", 1.0, Code, KEY_Q},
- {"w", "W", 1.0, Code, KEY_W},
- {"e", "E", 1.0, Code, KEY_E},
- {"r", "R", 1.0, Code, KEY_R},
- {"t", "T", 1.0, Code, KEY_T},
- {"y", "Y", 1.0, Code, KEY_Y},
- {"u", "U", 1.0, Code, KEY_U},
- {"i", "I", 1.0, Code, KEY_I},
- {"o", "O", 1.0, Code, KEY_O},
- {"p", "P", 1.0, Code, KEY_P},
- {"", "", 0.0, EndRow},
-
- {"Ct", "Ct", 1.0, Mod, Ctrl},
- {"a", "A", 1.0, Code, KEY_A},
- {"s", "S", 1.0, Code, KEY_S},
- {"d", "D", 1.0, Code, KEY_D},
- {"f", "F", 1.0, Code, KEY_F},
- {"g", "G", 1.0, Code, KEY_G},
- {"h", "H", 1.0, Code, KEY_H},
- {"j", "J", 1.0, Code, KEY_J},
- {"k", "K", 1.0, Code, KEY_K},
- {"l", "L", 1.0, Code, KEY_L},
+ {"q", "Q", 1.0, Code, KEY_Q, &layouts[ComposeQ]},
+ {"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},
+
+ {"Cmp", "Cmp", 1.0, Compose},
+ {"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},
- {"z", "Z", 1.0, Code, KEY_Z},
- {"x", "X", 1.0, Code, KEY_X},
- {"c", "C", 1.0, Code, KEY_C},
- {"v", "V", 1.0, Code, KEY_V},
- {"b", "B", 1.0, Code, KEY_B},
- {"n", "N", 1.0, Code, KEY_N},
- {"m", "M", 1.0, Code, KEY_M},
+ {"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},
{"", "", 0.0, EndRow},
- {"Abc", "Abc", 1.0, Layout, 0, &layouts[Basic]},
- {"Alt", "Alt", 1.0, Mod, AltGr},
- {",", "<", 1.0, Code, KEY_COMMA},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[(DefaultLayout == Simple) ? Special : DefaultLayout] },
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
- {".", ">", 1.0, Code, KEY_DOT},
+ {".", "?", 1.0, Code, KEY_DOT},
{"Entr", "Entr", 2.0, Code, KEY_ENTER},
@@ -272,3 +343,606 @@ static struct key keys_simple[] = {
{"", "", 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, 0x00E5, 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 0.0, EndRow},
+ {"⇧", "⇧", 1.5, Mod, Shift},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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, 0x0172, 0, 0x0173},
+ {"", "", 0.0, EndRow},
+ {"υ", "Υ", 1.0, Copy, 0x03C5, 0, 0x03A5},
+ {"", "", 9.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"⇧", "⇧", 1.5, Mod, Shift},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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, 0x00F8, 0, 0x00D8},
+ {"ō", "Ō", 1.0, Copy, 0x014D, 0, 0x014C},
+ {"ŏ", "Ŏ", 1.0, Copy, 0x014F, 0, 0x014E},
+ {"ő", "Ő", 1.0, Copy, 0x0150, 0, 0x0151},
+ {"œ", "Œ", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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, 0x0150, 0, 0x0049},
+ {"i","İ", 1.0, Copy, 0x0069, 0, 0x0152},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 0.0, Last},
+};
+
+static struct key keys_compose_q[] = {
+ { "🙂", "", 1.0, Copy, 0x101f642, 0, 0 }, //Emojis
+ { "😀", "", 1.0, Copy, 0x101f600, 0, 0 },
+ { "😁", "", 1.0, Copy, 0x101f601, 0, 0 },
+ { "😂", "", 1.0, Copy, 0x101f602, 0, 0 },
+ { "😃", "", 1.0, Copy, 0x101f603, 0, 0 },
+ { "😄", "", 1.0, Copy, 0x101f604, 0, 0 },
+ { "😅", "", 1.0, Copy, 0x101f605, 0, 0 },
+ { "😆", "", 1.0, Copy, 0x101f606, 0, 0 },
+ { "😇", "", 1.0, Copy, 0x101f607, 0, 0 },
+ { "😈", "", 1.0, Copy, 0x101f608, 0, 0 },
+ {"", "", 0.0, EndRow},
+ { "😉", "", 1.0, Copy, 0x101f609, 0, 0 },
+ { "😊", "", 1.0, Copy, 0x101f60a, 0, 0 },
+ { "😋", "", 1.0, Copy, 0x101f60b, 0, 0 },
+ { "😌", "", 1.0, Copy, 0x101f60c, 0, 0 },
+ { "😍", "", 1.0, Copy, 0x101f60d, 0, 0 },
+ { "😎", "", 1.0, Copy, 0x101f60e, 0, 0 },
+ { "😏", "", 1.0, Copy, 0x101f60f, 0, 0 },
+ { "😐", "", 1.0, Copy, 0x101f610, 0, 0 },
+ { "😒", "", 1.0, Copy, 0x101f612, 0, 0 },
+ { "😓", "", 1.0, Copy, 0x101f613, 0, 0 },
+ {"", "", 0.0, EndRow},
+ { "😛", "", 1.0, Copy, 0x101f61b, 0, 0 },
+ { "😮", "", 1.0, Copy, 0x101f62e, 0, 0 },
+ { "😟", "", 1.0, Copy, 0x101f61f, 0, 0 },
+ { "😟", "", 1.0, Copy, 0x101f620, 0, 0 },
+ { "😢", "", 1.0, Copy, 0x101f622, 0, 0 },
+ { "😭", "", 1.0, Copy, 0x101f62d, 0, 0 },
+ { "😳", "", 1.0, Copy, 0x101f633, 0, 0 },
+ { "😴", "", 1.0, Copy, 0x101f634, 0, 0 },
+ {"⌫", "⌫", 2.0, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 5.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 0.0, Last},
+};
+
+static struct key keys_compose_p[] = {
+ {"", "", 10.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"π", "Π", 1.0, Copy, 0x03C0, 0, 0x03A0},
+ {"", "", 9.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"⇧", "⇧", 1.5, Mod, Shift},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 0.0, Last},
+};
+
+static struct key keys_compose_f[] = {
+ {"", "", 10.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"φ", "Φ", 1.0, Copy, 0x03C6, 0, 0x03A6},
+ {"", "", 9.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"⇧", "⇧", 1.5, Mod, Shift},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 0.0, Last},
+};
+
+static struct key keys_compose_l[] = {
+ {"ľ", "Ľ", 1.0, Copy, 0x013D, 0, 0x013E},
+ {"ŀ", "Ŀ", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 0.0, Last},
+};
+
+static struct key keys_compose_x[] = {
+ {"", "", 10.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"χ", "Χ", 1.0, Copy, 0x03C7, 0, 0x03A7},
+ {"ξ", "Ξ", 1.0, Copy, 0x03BE, 0, 0x039E},
+ {"", "", 9.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"⇧", "⇧", 1.5, Mod, Shift},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 9.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"χ", "Χ", 1.0, Copy, 0x03C7, 0, 0x03A7},
+ {"", "", 9.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"⇧", "⇧", 1.5, Mod, Shift},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 0.0, Last},
+};
+
+static struct key keys_compose_v[] = {
+ {"", "", 10.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"", "", 10.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"⇧", "⇧", 1.5, Mod, Shift},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 0.0, Last},
+};
+
+static struct key keys_compose_b[] = {
+ {"", "", 10.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"β", "Β", 1.0, Copy, 0x03B2, 0, 0x0392},
+ {"", "", 9.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"⇧", "⇧", 1.5, Mod, Shift},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 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},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 0.0, Last},
+};
+
+static struct key keys_compose_m[] = {
+ {"", "", 10.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"μ", "Μ", 1.0, Copy, 0x03BC, 0, 0x039C},
+ {"", "", 9.0, Pad },
+ {"", "", 0.0, EndRow},
+ {"⇧", "⇧", 1.5, Mod, Shift},
+ {"", "", 7, Pad},
+ {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
+ {"", "", 0.0, EndRow},
+ {"Abc", "Abc", 1.0, Layout, 0, &layouts[DefaultLayout]},
+ {"Ctr", "Ctr", 1.0, Mod, Ctrl},
+ {",", "'", 1.0, Code, KEY_COMMA},
+ {"", "", 4.0, Code, KEY_SPACE},
+ {".", "?", 1.0, Code, KEY_DOT},
+ {"Enter", "Enter", 2.0, Code, KEY_ENTER},
+ {"", "", 0.0, Last},
+};
diff --git a/main.c b/main.c
@@ -6,6 +6,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <wchar.h>
#include <sys/mman.h>
#include <wayland-client.h>
@@ -46,6 +47,7 @@ static uint32_t anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM |
/* application state */
static bool run_display = true;
static int cur_x = -1, cur_y = -1;
+static int compose = 0;
/* event handler prototypes */
static void wl_pointer_enter(void *data, struct wl_pointer *wl_pointer,
@@ -92,6 +94,7 @@ static void layer_surface_configure(void *data,
uint32_t serial, uint32_t w, uint32_t h);
static void layer_surface_closed(void *data,
struct zwlr_layer_surface_v1 *surface);
+static void create_and_upload_keymap(uint32_t comp_unichr, uint32_t comp_shift_unichr);
/* event handlers */
static const struct wl_pointer_listener pointer_listener = {
@@ -273,10 +276,27 @@ layer_surface_closed(void *data, struct zwlr_layer_surface_v1 *surface) {
run_display = false;
}
+void
+create_and_upload_keymap(uint32_t comp_unichr, uint32_t comp_shift_unichr) {
+ const char * keymap_str = get_keymap(comp_unichr, comp_shift_unichr);
+ size_t keymap_size = strlen(keymap_str) + 1;
+ 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");
+ }
+ strcpy(ptr, keymap_str);
+ zwp_virtual_keyboard_v1_keymap(
+ keyboard.vkbd, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, keymap_fd, keymap_size);
+}
+
int
main(int argc, char **argv) {
uint8_t i;
- int keymap_fd = os_create_anonymous_file(keymap_size);
/* connect to compositor */
display = wl_display_connect(NULL);
@@ -307,17 +327,7 @@ main(int argc, char **argv) {
zwp_virtual_keyboard_manager_v1_create_virtual_keyboard(vkbd_mgr, seat);
/* upload keymap */
- 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");
- }
- strcpy(ptr, keymap_str);
- zwp_virtual_keyboard_v1_keymap(
- keyboard.vkbd, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, keymap_fd, keymap_size);
+ create_and_upload_keymap(0,0);
/* assign kbd state */
keyboard.surf = &draw_surf;