Made the old layouts compatible with the new svkbd, re-added the old english la… | |
git clone git://git.suckless.org/svkbd | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 13d20da8efda2fc025279cf22b8b66bd0beff6c7 | |
parent eae90f28d998af064ec163074a026a585ccb6417 | |
Author: Maarten van Gompel <[email protected]> | |
Date: Sun, 2 Aug 2020 15:46:19 +0200 | |
Made the old layouts compatible with the new svkbd, re-added the old english la… | |
Diffstat: | |
D README | 66 -----------------------------… | |
A README.md | 87 +++++++++++++++++++++++++++++… | |
M config.mk | 2 +- | |
M layout.arrows.h | 18 ++++++++++++++++-- | |
M layout.de.h | 18 ++++++++++++++++-- | |
A layout.en.h | 84 +++++++++++++++++++++++++++++… | |
A layout.mobile-intl.h | 522 +++++++++++++++++++++++++++++… | |
A layout.mobile-plain.h | 125 +++++++++++++++++++++++++++++… | |
M layout.ru.h | 17 +++++++++++++++-- | |
M layout.sh.h | 17 +++++++++++++++-- | |
D layout.sxmo.h | 523 -----------------------------… | |
M svkbd.c | 10 ++++++++-- | |
12 files changed, 889 insertions(+), 600 deletions(-) | |
--- | |
diff --git a/README b/README | |
@@ -1,66 +0,0 @@ | |
-SVKBD | |
-===== | |
- | |
-This is a simple virtual keyboard, intended to be used in environments, | |
-where no keyboard is available. | |
- | |
-Installation | |
------------- | |
- | |
- $ make | |
- $ make install | |
- | |
-This will create by default `svkbd-sxmo`, which is svkbd using an versatile | |
-layout with multiple layers and overlays, and optimised for mobile devices. | |
-It was designed for [Simple X Mobile](https://sr.ht/~mil/Sxmo). | |
- | |
-You can create svkbd for additional layouts by doing: | |
- | |
- $ make LAYOUT=$layout | |
- | |
-This will take the file `layout.$layout.h` and create `svkbd-$layout`. | |
-`make install` will then pick up the new file and install it accordingly. | |
- | |
-Usage | |
------ | |
- | |
- % svkbd-sxmo | |
- | |
-This will open svkbd at the bottom of the screen, showing the default | |
-English layout. | |
- | |
- % svkbd-sxmo -d | |
- | |
-This tells svkbd-sxmo to announce itself being a dock window, which then | |
-is managed differently between different window managers. If using dwm | |
-and the dock patch, then this will make svkbd being managed by dwm and | |
-some space of the screen being reserved for it. | |
- | |
- % svkbd-sxmo -g 400x200+1+1 | |
- | |
-This will start svkbd-en with a size of 400x200 and at the upper left | |
-window corner. | |
- | |
-You can enable layers on the fly through either the ``-l`` flag or through the… | |
-They both take a comma separated list of layer names (as defined in your ``lay… | |
-bottom-left to cycle through all the layers. | |
- | |
-The virtual keyboard comes with overlays that will show when certain keys are … | |
-example, a long press on the ``a`` key will enable an overview showing all kin… | |
- | |
-Overlay functionality interferes with the ability to hold a key and have it ou… | |
-overlay functionality with the ``-O`` flag or by setting the environment varia… | |
-also a key on the function layer of the keyboard itself to enable/disable this… | |
-``≅`` when the overlay functionality is enabled and ``≇`` when not. | |
- | |
-Notes | |
---------- | |
- | |
-This virtual keyboard does not actually modify the X keyboard layout, it simpl… | |
-(setxkbmap us) being activated. If you use another XKB layout you will get unp… | |
-labels on the virtual keycaps. | |
- | |
-Repository | |
----------- | |
- | |
- git clone http://git.suckless.org/svkbd | |
diff --git a/README.md b/README.md | |
@@ -0,0 +1,87 @@ | |
+SVKBD: Simple Virtual Keyboard | |
+================================= | |
+ | |
+This is a simple virtual keyboard, intended to be used in environments, | |
+where no keyboard is available. | |
+ | |
+Installation | |
+------------ | |
+ | |
+ $ make | |
+ $ make install | |
+ | |
+This will create by default `svkbd-intl`, which is svkbd using an international | |
+layout with multiple layers and overlays, and optimised for mobile devices. | |
+ | |
+You can create svkbd for additional layouts by doing: | |
+ | |
+ $ make LAYOUT=$layout | |
+ | |
+This will take the file `layout.$layout.h` and create `svkbd-$layout`. | |
+`make install` will then pick up the new file and install it accordingly. | |
+ | |
+Layouts | |
+--------- | |
+ | |
+The following layouts are available: | |
+ | |
+* **Mobile Layouts:** | |
+ * ``mobile-intl`` - A small international layout optimised for mobile devi… | |
+ can be switched on the fly, and overlays that appear on long-press of … | |
+ diacritics and other variants, as well as some emoji. The layers are: | |
+ * a basic qwerty layer | |
+ * a layer for numeric input, arrows, and punctuation | |
+ * a layer for function keys, media keys, and arrows | |
+ * a cyrillic layer (ЙЦУКЕН) | |
+ * a dialer/numeric layer | |
+ * ``mobile-plain`` - This is a plain layout with only a qwerty layer and n… | |
+ originally made for [sxmo](https://sr.ht/~mil/Sxmo/). | |
+* **Traditional layouts**: | |
+ * ``en`` - An english layout without layers (QWERTY) | |
+ * ``de`` - A german layout (QWERTZ) | |
+ * ``ru`` - A russian layout (ЙЦУКЕН) | |
+ * ``sh`` - A serbo-croatian layout using latin script (QWERTZ) | |
+ | |
+Usage | |
+----- | |
+ | |
+ $ svkbd-mobile-intl | |
+ | |
+This will open svkbd at the bottom of the screen, showing the default | |
+international layout. | |
+ | |
+ $ svkbd-mobile-intl -d | |
+ | |
+This tells svkbd to announce itself being a dock window, which then | |
+is managed differently between different window managers. If using dwm | |
+and the dock patch, then this will make svkbd being managed by dwm and | |
+some space of the screen being reserved for it. | |
+ | |
+ $ svkbd-mobile-intl -g 400x200+1+1 | |
+ | |
+This will start svkbd-intl with a size of 400x200 and at the upper left | |
+window corner. | |
+ | |
+For layouts that consist of multiple layers, you can enable layers on program … | |
+through the ``SVKBD_LAYERS`` environment variable. They both take a comma sep… | |
+your ``layout.*.h``). Use the ``↺`` button in the bottom-left to cycle throu… | |
+ | |
+Some layouts come with overlays that will show when certain keys are hold pres… | |
+example, a long press on the ``a`` key will enable an overview showing all kin… | |
+ | |
+Overlay functionality interferes with the ability to hold a key and have it ou… | |
+overlay functionality with the ``-O`` flag or by setting the environment varia… | |
+also a key on the function layer of the keyboard itself to enable/disable this… | |
+``≅`` when the overlay functionality is enabled and ``≇`` when not. | |
+ | |
+Notes | |
+--------- | |
+ | |
+This virtual keyboard does not actually modify the X keyboard layout, the ``mo… | |
+ | |
+If you use another XKB layout you will get unpredictable output that does not … | |
+ | |
+Repository | |
+---------- | |
+ | |
+ git clone https://git.suckless.org/svkbd | |
diff --git a/config.mk b/config.mk | |
@@ -1,4 +1,4 @@ | |
-LAYOUT = sxmo | |
+LAYOUT = mobile-intl | |
# paths | |
PREFIX = /usr/local | |
diff --git a/layout.arrows.h b/layout.arrows.h | |
@@ -1,11 +1,11 @@ | |
-static Key keys[] = { | |
+#define KEYS 6 | |
+static Key keys_arrows[] = { | |
{ 0, XK_Shift_L, 2 }, | |
{ "←", XK_Left, 1 }, | |
{ "↓", XK_Down, 1 }, | |
{ "↑", XK_Up, 1 }, | |
{ "→", XK_Right, 1}, | |
{ "Alt", XK_Alt_L, 2 }, | |
- { "[X]", XK_Cancel, 1 }, | |
}; | |
Buttonmod buttonmods[] = { | |
@@ -13,3 +13,17 @@ Buttonmod buttonmods[] = { | |
{ XK_Alt_L, Button3 }, | |
}; | |
+#define OVERLAYS 1 | |
+static Key overlay[OVERLAYS] = { | |
+ { 0, XK_Cancel }, | |
+}; | |
+ | |
+#define LAYERS 1 | |
+static char* layer_names[LAYERS] = { | |
+ "arrows", | |
+}; | |
+ | |
+static Key* available_layers[LAYERS] = { | |
+ keys_arrows, | |
+}; | |
+ | |
diff --git a/layout.de.h b/layout.de.h | |
@@ -1,4 +1,5 @@ | |
-static Key keys[] = { | |
+#define KEYS 66 | |
+static Key keys_de[KEYS] = { | |
{ "^°′", XK_dead_circumflex, 1}, | |
{ "1!¹", XK_1, 1 }, | |
{ "2\"²", XK_2, 1 }, | |
@@ -65,7 +66,6 @@ static Key keys[] = { | |
{ "Alt Gr", XK_ISO_Level3_Shift, 2 }, | |
{ "Menu", XK_Menu, 2 }, | |
{ "Ctrl", XK_Control_R, 2 }, | |
- { "[X]", XK_Cancel, 1}, | |
}; | |
Buttonmod buttonmods[] = { | |
@@ -73,3 +73,17 @@ Buttonmod buttonmods[] = { | |
{ XK_Alt_L, Button3 }, | |
}; | |
+#define OVERLAYS 1 | |
+static Key overlay[OVERLAYS] = { | |
+ { 0, XK_Cancel }, | |
+}; | |
+ | |
+#define LAYERS 1 | |
+static char* layer_names[LAYERS] = { | |
+ "de", | |
+}; | |
+ | |
+static Key* available_layers[LAYERS] = { | |
+ keys_de, | |
+}; | |
+ | |
diff --git a/layout.en.h b/layout.en.h | |
@@ -0,0 +1,84 @@ | |
+#define KEYS 61 | |
+static Key keys_en[] = { | |
+ { "1!", XK_1, 1 }, | |
+ { "2@", XK_2, 1 }, | |
+ { "3#", XK_3, 1 }, | |
+ { "4$", XK_4, 1 }, | |
+ { "5%", XK_5, 1 }, | |
+ { "6^", XK_6, 1 }, | |
+ { "7&", XK_7, 1 }, | |
+ { "8*", XK_8, 1 }, | |
+ { "9(", XK_9, 1 }, | |
+ { "0)", XK_0, 1 }, | |
+ { "-_", XK_minus, 1 }, | |
+ { "=+", XK_plus, 1 }, | |
+ { "<-", XK_BackSpace, 2 }, | |
+ { 0 }, /* New row */ | |
+ { "->|", XK_Tab, 1 }, | |
+ { 0, XK_q, 1 }, | |
+ { 0, XK_w, 1 }, | |
+ { 0, XK_e, 1 }, | |
+ { 0, XK_r, 1 }, | |
+ { 0, XK_t, 1 }, | |
+ { 0, XK_y, 1 }, | |
+ { 0, XK_u, 1 }, | |
+ { 0, XK_i, 1 }, | |
+ { 0, XK_o, 1 }, | |
+ { 0, XK_p, 1 }, | |
+ { "[", XK_bracketleft, 1 }, | |
+ { "]", XK_bracketright, 1 }, | |
+ { "Return", XK_Return, 3 }, | |
+ { 0 }, /* New row */ | |
+ { 0, XK_Caps_Lock, 2 }, | |
+ { 0, XK_a, 1 }, | |
+ { 0, XK_s, 1 }, | |
+ { 0, XK_d, 1 }, | |
+ { 0, XK_f, 1 }, | |
+ { 0, XK_g, 1 }, | |
+ { 0, XK_h, 1 }, | |
+ { 0, XK_j, 1 }, | |
+ { 0, XK_k, 1 }, | |
+ { 0, XK_l, 1 }, | |
+ { ":;", XK_semicolon, 1 }, | |
+ { "'\"", XK_exclam, 1 }, | |
+ { "\\|", XK_backslash, 1 }, | |
+ { 0 }, /* New row */ | |
+ { 0, XK_Shift_L, 3 }, | |
+ { 0, XK_z, 1 }, | |
+ { 0, XK_x, 1 }, | |
+ { 0, XK_c, 1 }, | |
+ { 0, XK_v, 1 }, | |
+ { 0, XK_b, 1 }, | |
+ { 0, XK_n, 1 }, | |
+ { 0, XK_m, 1 }, | |
+ { ",", XK_colon, 1 }, | |
+ { ".", XK_period, 1 }, | |
+ { "/?", XK_slash, 1 }, | |
+ { 0, XK_Shift_R, 2 }, | |
+ { 0 }, /* New row */ | |
+ { "Ctrl", XK_Control_L, 2 }, | |
+ { "Alt", XK_Alt_L, 2 }, | |
+ { "", XK_space, 5 }, | |
+ { "Alt", XK_Alt_R, 2 }, | |
+ { "Ctrl", XK_Control_R, 2 }, | |
+}; | |
+ | |
+Buttonmod buttonmods[] = { | |
+ { XK_Shift_L, Button2 }, | |
+ { XK_Alt_L, Button3 }, | |
+}; | |
+ | |
+#define OVERLAYS 1 | |
+static Key overlay[OVERLAYS] = { | |
+ { 0, XK_Cancel }, | |
+}; | |
+ | |
+#define LAYERS 1 | |
+static char* layer_names[LAYERS] = { | |
+ "en", | |
+}; | |
+ | |
+static Key* available_layers[LAYERS] = { | |
+ keys_en, | |
+}; | |
+ | |
diff --git a/layout.mobile-intl.h b/layout.mobile-intl.h | |
@@ -0,0 +1,522 @@ | |
+#define KEYS 43 | |
+ | |
+static Key keys_en[KEYS] = { | |
+ { "Esc", XK_Escape, 1 }, | |
+ { 0, XK_q, 1 }, | |
+ { 0, XK_w, 1 }, | |
+ { 0, XK_e, 1 }, | |
+ { 0, XK_r, 1 }, | |
+ { 0, XK_t, 1 }, | |
+ { 0, XK_y, 1 }, | |
+ { 0, XK_u, 1 }, | |
+ { 0, XK_i, 1 }, | |
+ { 0, XK_o, 1 }, | |
+ { 0, XK_p, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { "'\"", XK_apostrophe, 1 }, | |
+ { 0, XK_a, 1 }, | |
+ { 0, XK_s, 1 }, | |
+ { 0, XK_d, 1 }, | |
+ { 0, XK_f, 1 }, | |
+ { 0, XK_g, 1 }, | |
+ { 0, XK_h, 1 }, | |
+ { 0, XK_j, 1 }, | |
+ { 0, XK_k, 1 }, | |
+ { 0, XK_l, 1 }, | |
+ { "/?", XK_slash, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { "123", XK_Mode_switch, 1 }, | |
+ { 0, XK_z, 1 }, | |
+ { 0, XK_x, 1 }, | |
+ { 0, XK_c, 1 }, | |
+ { 0, XK_v, 1 }, | |
+ { 0, XK_b, 1 }, | |
+ { 0, XK_n, 1 }, | |
+ { 0, XK_m, 1 }, | |
+ { "Tab", XK_Tab, 1 }, | |
+ { "⌫Bksp", XK_BackSpace, 2 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ { "↺", XK_Cancel, 1}, | |
+ { "Shift", XK_Shift_L, 2 }, | |
+ { "Ctrl", XK_Control_L, 1 }, | |
+ { "Alt", XK_Alt_L, 1 }, | |
+ { "", XK_space, 2 }, | |
+ { "↓", XK_Down, 1 }, | |
+ { "↑", XK_Up, 1 }, | |
+ { "↲ Enter", XK_Return, 2 }, | |
+}; | |
+ | |
+#define OVERLAYS 197 | |
+static Key overlay[OVERLAYS] = { | |
+ { 0, XK_a }, //Overlay for a | |
+ //--- | |
+ { "à", XK_agrave }, | |
+ { "á", XK_aacute }, | |
+ { "â", XK_acircumflex }, | |
+ { "ä", XK_adiaeresis }, | |
+ { "ą", XK_aogonek }, | |
+ { "ã", XK_atilde }, | |
+ { "ā", XK_amacron }, | |
+ { "ă", XK_abreve }, | |
+ { "å", XK_aring }, | |
+ { "æ", XK_ae }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //-- | |
+ { 0, XK_e }, //Overlay for e (first item after boundary defines the tr… | |
+ //--- | |
+ { "è", XK_egrave }, | |
+ { "é", XK_eacute }, | |
+ { "ê", XK_ecircumflex }, | |
+ { "ë", XK_ediaeresis }, | |
+ { "ę", XK_eogonek }, | |
+ { "ē", XK_emacron }, | |
+ { "ė", XK_eabovedot }, | |
+ { 0, XK_Cancel }, | |
+ //-- | |
+ { 0, XK_y }, //New overlay | |
+ //--- | |
+ { "ỳ", XK_ygrave }, | |
+ { "ý", XK_yacute }, | |
+ { "ŷ", XK_ycircumflex }, | |
+ { "ÿ", XK_ydiaeresis }, | |
+ { 0, XK_Cancel }, | |
+ //-- | |
+ { 0, XK_u }, //New overlay | |
+ //--- | |
+ { "ù", XK_ugrave }, | |
+ { "ú", XK_uacute }, | |
+ { "û", XK_ucircumflex }, | |
+ { "ü", XK_udiaeresis }, | |
+ { "ų", XK_uogonek }, | |
+ { "ū", XK_umacron }, | |
+ { "ů", XK_uring}, | |
+ { "ŭ", XK_ubreve}, | |
+ { "ű", XK_udoubleacute }, | |
+ { 0, XK_Cancel }, | |
+ //-- | |
+ { 0, XK_i }, //New overlay | |
+ //--- | |
+ { "ì", XK_igrave }, | |
+ { "í", XK_iacute }, | |
+ { "î", XK_icircumflex }, | |
+ { "ï", XK_idiaeresis }, | |
+ { "į", XK_iogonek }, | |
+ { "ī", XK_imacron }, | |
+ { "ı", XK_idotless }, | |
+ { 0, XK_Cancel }, | |
+ //-- | |
+ { 0, XK_o }, //New overlay | |
+ //--- | |
+ { "ò", XK_ograve }, | |
+ { "ó", XK_oacute }, | |
+ { "ô", XK_ocircumflex }, | |
+ { "ö", XK_odiaeresis }, | |
+ { "ǫ", XK_ogonek }, | |
+ { "õ", XK_otilde }, | |
+ { "ō", XK_omacron }, | |
+ { "ø", XK_oslash }, | |
+ { "ő", XK_odoubleacute }, | |
+ { "œ", XK_oe }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //-- | |
+ { 0, XK_d }, //New overlay | |
+ //--- | |
+ { "ď", XK_dcaron }, | |
+ { "ð", XK_eth }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //-- | |
+ { 0, XK_c }, //New overlay | |
+ //--- | |
+ { "ç", XK_ccedilla }, | |
+ { "ĉ", XK_ccircumflex }, | |
+ { "č", XK_ccaron }, | |
+ { "ć", XK_cacute }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //-- | |
+ { 0, XK_s }, //New overlay | |
+ //--- | |
+ { "ş", XK_scedilla }, | |
+ { "ŝ", XK_scircumflex }, | |
+ { "š", XK_scaron }, | |
+ { "ś", XK_sacute }, | |
+ { "ß", XK_ssharp }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_z }, //New overlay | |
+ //--- | |
+ { "ž", XK_zcaron }, | |
+ { "ż", XK_zabovedot }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //-- | |
+ { 0, XK_n }, //New overlay | |
+ //--- | |
+ { "ñ", XK_ntilde }, | |
+ { "ń", XK_nacute }, | |
+ { "ň", XK_ncaron }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ // | |
+ { 0, XK_t }, //New overlay | |
+ //--- | |
+ { "ț", XK_tcedilla }, | |
+ { "ť", XK_tcaron }, | |
+ { "þ", XK_thorn }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //---- | |
+ { 0, XK_g }, //New overlay | |
+ //--- | |
+ { "ĝ", XK_gcircumflex }, | |
+ { "ğ", XK_gbreve }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ // | |
+ { 0, XK_h }, //New overlay | |
+ //--- | |
+ { "ĥ", XK_hcircumflex }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ // | |
+ { 0, XK_j }, //New overlay | |
+ //--- | |
+ { "ĵ", XK_jcircumflex }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //-- | |
+ { 0, XK_l }, //New overlay | |
+ //--- | |
+ { "ł", XK_lstroke }, | |
+ { "ľ", XK_lcaron }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //-- | |
+ { 0, XK_r }, //New overlay | |
+ //--- | |
+ { "ř", XK_rcaron }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_Cyrillic_softsign }, //New overlay | |
+ //--- | |
+ { "ъ", XK_Cyrillic_hardsign }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_Cyrillic_ie }, //New overlay | |
+ //--- | |
+ { "ё", XK_Cyrillic_io }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_Cyrillic_e }, //New overlay | |
+ //--- | |
+ { "Є", XK_Ukrainian_ie }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_Cyrillic_i }, //New overlay | |
+ //--- | |
+ { "і", XK_Ukrainian_i }, | |
+ { "ї", XK_Ukrainian_yi }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_Cyrillic_u }, //New overlay | |
+ //--- | |
+ { "ў", XK_Byelorussian_shortu }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_Cyrillic_shorti }, //New overlay | |
+ //--- | |
+ { "ј", XK_Cyrillic_je }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_Cyrillic_el }, //New overlay | |
+ //--- | |
+ { "љ", XK_Cyrillic_lje }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_Cyrillic_en }, //New overlay | |
+ //--- | |
+ { "њ", XK_Cyrillic_nje }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_Cyrillic_tse }, //New overlay | |
+ //--- | |
+ { "џ", XK_Cyrillic_dzhe }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { 0, XK_Cyrillic_che }, //New overlay | |
+ //--- | |
+ { "ћ", XK_Serbian_tshe }, | |
+ { "ђ", XK_Serbian_dje }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //--- | |
+ { "🙂", 0x101f642 }, //emoji overlay | |
+ //--- | |
+ { "😀", 0x101f600 }, | |
+ { "😁", 0x101f601 }, | |
+ { "😂", 0x101f602 }, | |
+ { "😃", 0x101f603 }, | |
+ { "😄", 0x101f604 }, | |
+ { "😅", 0x101f605 }, | |
+ { "😆", 0x101f606 }, | |
+ { "😇", 0x101f607 }, | |
+ { "😈", 0x101f608 }, | |
+ { "😉", 0x101f609 }, | |
+ { "😊", 0x101f60a }, | |
+ { "😋", 0x101f60b }, | |
+ { "😌", 0x101f60c }, | |
+ { "😍", 0x101f60d }, | |
+ { "😎", 0x101f60e }, | |
+ { "😏", 0x101f60f }, | |
+ { "😐", 0x101f610 }, | |
+ { "😒", 0x101f612 }, | |
+ { "😓", 0x101f613 }, | |
+ { "😛", 0x101f61b }, | |
+ { "😮", 0x101f62e }, | |
+ { "😟", 0x101f61f }, | |
+ { "😟", 0x101f620 }, | |
+ { "😢", 0x101f622 }, | |
+ { "😭", 0x101f62d }, | |
+ { "😳", 0x101f633 }, | |
+ { "😴", 0x101f634 }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+ //-- | |
+ { "/?", XK_slash }, //punctuation overlay | |
+ //-- | |
+ { "1!", XK_1, 1 }, | |
+ { "2@", XK_2, 1 }, | |
+ { "3#", XK_3, 1 }, | |
+ { "4$", XK_4, 1 }, | |
+ { "5%", XK_5, 1 }, | |
+ { "6^", XK_6, 1 }, | |
+ { "7&", XK_7, 1 }, | |
+ { "8*", XK_8, 1 }, | |
+ { "9(", XK_9, 1 }, | |
+ { "0)", XK_0, 1 }, | |
+ { "'\"", XK_apostrophe, 1 }, | |
+ { "`~", XK_grave, 1 }, | |
+ { "-_", XK_minus, 1 }, | |
+ { "=+", XK_plus, 1 }, | |
+ { "[{", XK_bracketleft, 1 }, | |
+ { "]}", XK_bracketright, 1 }, | |
+ { ",<", XK_comma, 1 }, | |
+ { ".>", XK_period, 1 }, | |
+ { "/?", XK_slash, 1 }, | |
+ { "\\|", XK_backslash, 1 }, | |
+ { "¡", XK_exclamdown, 1 }, | |
+ { "?", XK_questiondown, 1 }, | |
+ { "°", XK_degree, 1 }, | |
+ { "£", XK_sterling, 1 }, | |
+ { "€", XK_EuroSign, 1 }, | |
+ { "¥", XK_yen, 1 }, | |
+ { ";:", XK_colon, 1 }, | |
+ { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
+}; | |
+ | |
+ | |
+static Key keys_symbols[KEYS] = { | |
+ { "Esc", XK_Escape, 1 }, | |
+ { "1!", XK_1, 1 }, | |
+ { "2@", XK_2, 1 }, | |
+ { "3#", XK_3, 1 }, | |
+ { "4$", XK_4, 1 }, | |
+ { "5%", XK_5, 1 }, | |
+ { "6^", XK_6, 1 }, | |
+ { "7&", XK_7, 1 }, | |
+ { "8*", XK_8, 1 }, | |
+ { "9(", XK_9, 1 }, | |
+ { "0)", XK_0, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { "'\"", XK_apostrophe, 1 }, | |
+ { "`~", XK_grave, 1 }, | |
+ { "-_", XK_minus, 1 }, | |
+ { "=+", XK_plus, 1 }, | |
+ { "[{", XK_bracketleft, 1 }, | |
+ { "]}", XK_bracketright, 1 }, | |
+ { ",<", XK_comma, 1 }, | |
+ { ".>", XK_period, 1 }, | |
+ { "/?", XK_slash, 1 }, | |
+ { "\\|", XK_backslash, 1 }, | |
+ { ";:", XK_colon, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { "abc", XK_Mode_switch, 1 }, | |
+ { "☺", 0x101f642, 1 }, | |
+ { "⇤", XK_Home, 1 }, | |
+ { "←", XK_Left, 1 }, | |
+ { "→", XK_Right, 1 }, | |
+ { "⇥", XK_End, 1 }, | |
+ { "⇊", XK_Next, 1 }, | |
+ { "⇈", XK_Prior, 1 }, | |
+ { "Tab", XK_Tab, 1 }, | |
+ { "⌫Bksp", XK_BackSpace, 2 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ { "↺", XK_Cancel, 1}, | |
+ { "Shift", XK_Shift_L, 2 }, | |
+ { "Ctrl", XK_Control_L, 1 }, | |
+ { "Alt", XK_Alt_L, 1 }, | |
+ { "", XK_space, 2 }, | |
+ { "↓", XK_Down, 1 }, | |
+ { "↑", XK_Up, 1 }, | |
+ { "↲ Enter", XK_Return, 2 }, | |
+}; | |
+ | |
+static Key keys_functions[KEYS] = { | |
+ { "Esc", XK_Escape, 1 }, | |
+ { "F1", XK_F1, 1 }, | |
+ { "F2", XK_F2, 1 }, | |
+ { "F3", XK_F3, 1 }, | |
+ { "F4", XK_F4, 1 }, | |
+ { "F5", XK_F5, 1 }, | |
+ { "F6", XK_F6, 1 }, | |
+ { "F7", XK_F7, 1 }, | |
+ { "F8", XK_F8, 1 }, | |
+ { "F9", XK_F9, 1 }, | |
+ { "F10", XK_F10, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { "≅", XK_KP_Insert, 1 }, | |
+ { "▶", XF86XK_AudioPlay, 1 }, | |
+ { "●", XF86XK_AudioRecord, 1 }, | |
+ { "■", XF86XK_AudioStop, 1 }, | |
+ { "◂◂", XF86XK_AudioPrev, 1 }, | |
+ { "▸▸", XF86XK_AudioNext, 1 }, | |
+ { "♫M", XF86XK_AudioMute, 1 }, | |
+ { "♫-", XF86XK_AudioLowerVolume, 1 }, | |
+ { "♫+", XF86XK_AudioRaiseVolume, 1 }, | |
+ { "☀-", XF86XK_MonBrightnessDown, 1 }, | |
+ { "☀+", XF86XK_MonBrightnessUp, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { "abc", XK_Mode_switch, 1 }, | |
+ { "Del", XK_Delete, 1 }, | |
+ { "⇤", XK_Home, 1 }, | |
+ { "←", XK_Left, 1 }, | |
+ { "→", XK_Right, 1 }, | |
+ { "⇥", XK_End, 1 }, | |
+ { "⇊", XK_Next, 1 }, | |
+ { "⇈", XK_Prior, 1 }, | |
+ { "Tab", XK_Tab, 1 }, | |
+ { "⌫Bksp", XK_BackSpace, 2 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ { "↺", XK_Cancel, 1}, | |
+ { "Shift", XK_Shift_L, 2 }, | |
+ { "Ctrl", XK_Control_L, 1 }, | |
+ { "Alt", XK_Alt_L, 1 }, | |
+ { "", XK_space, 2 }, | |
+ { "↓", XK_Down, 1 }, | |
+ { "↑", XK_Up, 1 }, | |
+ { "↲ Enter", XK_Return, 2 }, | |
+}; | |
+ | |
+ | |
+static Key keys_ru[KEYS] = { | |
+ { "и", XK_Cyrillic_shorti, 1 }, | |
+ { "ц", XK_Cyrillic_tse, 1 }, | |
+ { "у", XK_Cyrillic_u, 1 }, | |
+ { "к", XK_Cyrillic_ka, 1 }, | |
+ { "е", XK_Cyrillic_ie, 1 }, | |
+ { "н", XK_Cyrillic_en, 1 }, | |
+ { "г", XK_Cyrillic_ghe, 1 }, | |
+ { "ш", XK_Cyrillic_sha, 1 }, | |
+ { "щ", XK_Cyrillic_shcha, 1 }, | |
+ { "з", XK_Cyrillic_ze, 1 }, | |
+ { "х", XK_Cyrillic_ha, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { "ф", XK_Cyrillic_ef, 1 }, | |
+ { "ы", XK_Cyrillic_yeru, 1 }, | |
+ { "в", XK_Cyrillic_ve, 1 }, | |
+ { "а", XK_Cyrillic_a, 1 }, | |
+ { "п", XK_Cyrillic_pe, 1 }, | |
+ { "о", XK_Cyrillic_o, 1 }, | |
+ { "л", XK_Cyrillic_el, 1 }, | |
+ { "д", XK_Cyrillic_de, 1 }, | |
+ { "ж", XK_Cyrillic_zhe, 1 }, | |
+ { "э", XK_Cyrillic_e, 1 }, | |
+ { "ю", XK_Cyrillic_yu, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { "123", XK_Mode_switch, 1 }, | |
+ { "я", XK_Cyrillic_ya, 1 }, | |
+ { "ч", XK_Cyrillic_che, 1 }, | |
+ { "с", XK_Cyrillic_es, 1 }, | |
+ { "м", XK_Cyrillic_em, 1 }, | |
+ { "и", XK_Cyrillic_i, 1 }, | |
+ { "т", XK_Cyrillic_te, 1 }, | |
+ { "ь", XK_Cyrillic_softsign, 1 }, | |
+ { "б", XK_Cyrillic_be, 1 }, | |
+ { "⌫Bksp", XK_BackSpace, 2 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ { "↺", XK_Cancel, 1}, | |
+ { "Shift", XK_Shift_L, 2 }, | |
+ { "Ctrl", XK_Control_L, 1 }, | |
+ { "Alt", XK_Alt_L, 1 }, | |
+ { "", XK_space, 2 }, | |
+ { "↓", XK_Down, 1 }, | |
+ { "↑", XK_Up, 1 }, | |
+ { "↲ Enter", XK_Return, 2 }, | |
+}; | |
+ | |
+static Key keys_dialer[KEYS] = { | |
+ { "Esc", XK_Escape, 1 }, | |
+ { "1!", XK_1, 1 }, | |
+ { "2@", XK_2, 1 }, | |
+ { "3#", XK_3, 1 }, | |
+ { "⌫Bksp", XK_BackSpace, 2 }, | |
+ { 0 }, /* New row */ | |
+ | |
+ { "Shift", XK_Shift_L, 1 }, | |
+ { "4$", XK_4, 1 }, | |
+ { "5%", XK_5, 1 }, | |
+ { "6^", XK_6, 1 }, | |
+ { "-_", XK_minus, 1 }, | |
+ { ",<", XK_comma, 1 }, | |
+ { 0 }, /* New row */ | |
+ | |
+ { "abc", XK_Mode_switch, 1 }, | |
+ { "7&", XK_7, 1 }, | |
+ { "8*", XK_8, 1 }, | |
+ { "9(", XK_9, 1 }, | |
+ { "=+", XK_equal, 1 }, | |
+ { "/?", XK_slash, 1 }, | |
+ { 0 }, /* New row */ | |
+ | |
+ { "↺", XK_Cancel, 1}, | |
+ { "", XK_space, 1 }, | |
+ { "0)", XK_0, 1 }, | |
+ { ".>", XK_period, 1 }, | |
+ { "↲ Enter", XK_Return, 2}, | |
+ { 0 }, /* New row */ | |
+ { 0 }, /* Last item (double 0) */ | |
+}; | |
+ | |
+#define LAYERS 5 | |
+static char* layer_names[LAYERS] = { | |
+ "en", | |
+ "symbols", | |
+ "functions", | |
+ "dialer", | |
+ "ru", | |
+}; | |
+ | |
+static Key* available_layers[LAYERS] = { | |
+ keys_en, | |
+ keys_symbols, | |
+ keys_functions, | |
+ keys_dialer, | |
+ keys_ru | |
+}; | |
+ | |
+ | |
+Buttonmod buttonmods[] = { | |
+ { XK_Shift_L, Button2 }, | |
+ { XK_Alt_L, Button3 }, | |
+}; | |
+ | |
diff --git a/layout.mobile-plain.h b/layout.mobile-plain.h | |
@@ -0,0 +1,125 @@ | |
+#define KEYS 40 | |
+static Key keys_en[KEYS] = { | |
+ { 0, XK_q, 1 }, | |
+ { 0, XK_w, 1 }, | |
+ { 0, XK_e, 1 }, | |
+ { 0, XK_r, 1 }, | |
+ { 0, XK_t, 1 }, | |
+ { 0, XK_y, 1 }, | |
+ { 0, XK_u, 1 }, | |
+ { 0, XK_i, 1 }, | |
+ { 0, XK_o, 1 }, | |
+ { 0, XK_p, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { 0, XK_a, 1 }, | |
+ { 0, XK_s, 1 }, | |
+ { 0, XK_d, 1 }, | |
+ { 0, XK_f, 1 }, | |
+ { 0, XK_g, 1 }, | |
+ { 0, XK_h, 1 }, | |
+ { 0, XK_j, 1 }, | |
+ { 0, XK_k, 1 }, | |
+ { 0, XK_l, 1 }, | |
+ { ";:", XK_colon, 1 }, | |
+ /*{ "'", XK_apostrophe, 2 },*/ | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { 0, XK_z, 1 }, | |
+ { 0, XK_x, 1 }, | |
+ { 0, XK_c, 1 }, | |
+ { 0, XK_v, 1 }, | |
+ { 0, XK_b, 1 }, | |
+ { 0, XK_n, 1 }, | |
+ { 0, XK_m, 1 }, | |
+ /*{ "/?", XK_slash, 1 },*/ | |
+ { "Tab", XK_Tab, 1 }, | |
+ { "⇍ Bksp", XK_BackSpace, 2 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ { "↺", XK_Cancel, 1}, | |
+ { "Shft", XK_Shift_L, 1 }, | |
+ /*{ "L", XK_Left, 1 },*/ | |
+ { "↓", XK_Down, 1 }, | |
+ { "↑", XK_Up, 1 }, | |
+ /*{ "R", XK_Right, 1 },*/ | |
+ { "", XK_space, 2 }, | |
+ { "Esc", XK_Escape, 1 }, | |
+ { "Ctrl", XK_Control_L, 1 }, | |
+ /*{ "Alt", XK_Alt_L, 1 },*/ | |
+ { "↲ Enter", XK_Return, 2 }, | |
+}; | |
+ | |
+static Key keys_symbols[40] = { | |
+ { "1!", XK_1, 1 }, | |
+ { "2@", XK_2, 1 }, | |
+ { "3#", XK_3, 1 }, | |
+ { "4$", XK_4, 1 }, | |
+ { "5%", XK_5, 1 }, | |
+ { "6^", XK_6, 1 }, | |
+ { "7&", XK_7, 1 }, | |
+ { "8*", XK_8, 1 }, | |
+ { "9(", XK_9, 1 }, | |
+ { "0)", XK_0, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { "'\"", XK_apostrophe, 1 }, | |
+ { "`~", XK_grave, 1 }, | |
+ { "-_", XK_minus, 1 }, | |
+ { "=+", XK_plus, 1 }, | |
+ { "[{", XK_bracketleft, 1 }, | |
+ { "]}", XK_bracketright, 1 }, | |
+ { ",<", XK_comma, 1 }, | |
+ { ".>", XK_period, 1 }, | |
+ { "/?", XK_slash, 1 }, | |
+ { "\\|", XK_backslash, 1 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ | |
+ { "", XK_Shift_L|XK_bar, 1 }, | |
+ { "⇤", XK_Home, 1 }, | |
+ { "←", XK_Left, 1 }, | |
+ { "→", XK_Right, 1 }, | |
+ { "⇥", XK_End, 1 }, | |
+ { "⇊", XK_Next, 1 }, | |
+ { "⇈", XK_Prior, 1 }, | |
+ { "Tab", XK_Tab, 1 }, | |
+ { "⇍ Bksp", XK_BackSpace, 2 }, | |
+ | |
+ { 0 }, /* New row */ | |
+ { "↺", XK_Cancel, 1}, | |
+ { "Shft", XK_Shift_L, 1 }, | |
+ /*{ "L", XK_Left, 1 },*/ | |
+ { "↓", XK_Down, 1 }, | |
+ { "↑", XK_Up, 1 }, | |
+ /*{ "R", XK_Right, 1 },*/ | |
+ { "", XK_space, 2 }, | |
+ { "Esc", XK_Escape, 1 }, | |
+ { "Ctrl", XK_Control_L, 1 }, | |
+ /*{ "Alt", XK_Alt_L, 1 },*/ | |
+ { "↲ Enter", XK_Return, 2 }, | |
+}; | |
+ | |
+Buttonmod buttonmods[] = { | |
+ { XK_Shift_L, Button2 }, | |
+ { XK_Alt_L, Button3 }, | |
+}; | |
+ | |
+#define OVERLAYS 1 | |
+static Key overlay[OVERLAYS] = { | |
+ { 0, XK_Cancel }, | |
+}; | |
+ | |
+#define LAYERS 2 | |
+static char* layer_names[LAYERS] = { | |
+ "en", | |
+ "symbols", | |
+}; | |
+ | |
+static Key* available_layers[LAYERS] = { | |
+ keys_en, | |
+ keys_symbols, | |
+}; | |
diff --git a/layout.ru.h b/layout.ru.h | |
@@ -1,4 +1,5 @@ | |
-static Key keys[] = { | |
+#define KEYS 63 | |
+static Key keys_ru[] = { | |
{ "ёЁ", XK_Cyrillic_io, 1 }, | |
{ "1!", XK_1, 1 }, | |
{ "2\"", XK_2, 1 }, | |
@@ -62,7 +63,6 @@ static Key keys[] = { | |
{ "", XK_space, 5 }, | |
{ "Alt", XK_Alt_R, 2 }, | |
{ "Ctrl", XK_Control_R, 2 }, | |
- { "[X]", XK_Cancel, 1}, | |
}; | |
Buttonmod buttonmods[] = { | |
@@ -70,3 +70,16 @@ Buttonmod buttonmods[] = { | |
{ XK_Alt_L, Button3 }, | |
}; | |
+#define OVERLAYS 1 | |
+static Key overlay[OVERLAYS] = { | |
+ { 0, XK_Cancel }, | |
+}; | |
+ | |
+#define LAYERS 1 | |
+static char* layer_names[LAYERS] = { | |
+ "ru", | |
+}; | |
+ | |
+static Key* available_layers[LAYERS] = { | |
+ keys_ru, | |
+}; | |
diff --git a/layout.sh.h b/layout.sh.h | |
@@ -1,4 +1,5 @@ | |
-static Key keys[] = { | |
+#define KEYS 66 | |
+static Key keys_sh[] = { | |
{ "`~", XK_quoteleft, 1}, | |
{ "1!~", XK_1, 1 }, | |
{ "2\"ˇ", XK_2, 1 }, | |
@@ -65,7 +66,6 @@ static Key keys[] = { | |
{ "Alt Gr", XK_ISO_Level3_Shift, 2 }, | |
{ "Menu", XK_Menu, 2 }, | |
{ "Ctrl", XK_Control_R, 2 }, | |
- { "[X]", XK_Cancel, 1}, | |
}; | |
Buttonmod buttonmods[] = { | |
@@ -73,3 +73,16 @@ Buttonmod buttonmods[] = { | |
{ XK_Alt_L, Button3 }, | |
}; | |
+#define OVERLAYS 1 | |
+static Key overlay[OVERLAYS] = { | |
+ { 0, XK_Cancel }, | |
+}; | |
+ | |
+#define LAYERS 1 | |
+static char* layer_names[LAYERS] = { | |
+ "sh", | |
+}; | |
+ | |
+static Key* available_layers[LAYERS] = { | |
+ keys_sh, | |
+}; | |
diff --git a/layout.sxmo.h b/layout.sxmo.h | |
@@ -1,523 +0,0 @@ | |
-#define KEYS 43 | |
-static Key keys[KEYS] = { NULL }; | |
- | |
-static Key keys_en[KEYS] = { | |
- { "Esc", XK_Escape, 1 }, | |
- { 0, XK_q, 1 }, | |
- { 0, XK_w, 1 }, | |
- { 0, XK_e, 1 }, | |
- { 0, XK_r, 1 }, | |
- { 0, XK_t, 1 }, | |
- { 0, XK_y, 1 }, | |
- { 0, XK_u, 1 }, | |
- { 0, XK_i, 1 }, | |
- { 0, XK_o, 1 }, | |
- { 0, XK_p, 1 }, | |
- | |
- { 0 }, /* New row */ | |
- | |
- { "'\"", XK_apostrophe, 1 }, | |
- { 0, XK_a, 1 }, | |
- { 0, XK_s, 1 }, | |
- { 0, XK_d, 1 }, | |
- { 0, XK_f, 1 }, | |
- { 0, XK_g, 1 }, | |
- { 0, XK_h, 1 }, | |
- { 0, XK_j, 1 }, | |
- { 0, XK_k, 1 }, | |
- { 0, XK_l, 1 }, | |
- { "/?", XK_slash, 1 }, | |
- | |
- { 0 }, /* New row */ | |
- | |
- { "123", XK_Mode_switch, 1 }, | |
- { 0, XK_z, 1 }, | |
- { 0, XK_x, 1 }, | |
- { 0, XK_c, 1 }, | |
- { 0, XK_v, 1 }, | |
- { 0, XK_b, 1 }, | |
- { 0, XK_n, 1 }, | |
- { 0, XK_m, 1 }, | |
- { "Tab", XK_Tab, 1 }, | |
- { "⌫Bksp", XK_BackSpace, 2 }, | |
- | |
- { 0 }, /* New row */ | |
- { "↺", XK_Cancel, 1}, | |
- { "Shift", XK_Shift_L, 2 }, | |
- { "Ctrl", XK_Control_L, 1 }, | |
- { "Alt", XK_Alt_L, 1 }, | |
- { "", XK_space, 2 }, | |
- { "↓", XK_Down, 1 }, | |
- { "↑", XK_Up, 1 }, | |
- { "↲ Enter", XK_Return, 2 }, | |
-}; | |
- | |
-#define OVERLAYS 197 | |
-static Key overlay[OVERLAYS] = { | |
- { 0, XK_a }, //Overlay for a | |
- //--- | |
- { "à", XK_agrave }, | |
- { "á", XK_aacute }, | |
- { "â", XK_acircumflex }, | |
- { "ä", XK_adiaeresis }, | |
- { "ą", XK_aogonek }, | |
- { "ã", XK_atilde }, | |
- { "ā", XK_amacron }, | |
- { "ă", XK_abreve }, | |
- { "å", XK_aring }, | |
- { "æ", XK_ae }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //-- | |
- { 0, XK_e }, //Overlay for e (first item after boundary defines the tr… | |
- //--- | |
- { "è", XK_egrave }, | |
- { "é", XK_eacute }, | |
- { "ê", XK_ecircumflex }, | |
- { "ë", XK_ediaeresis }, | |
- { "ę", XK_eogonek }, | |
- { "ē", XK_emacron }, | |
- { "ė", XK_eabovedot }, | |
- { 0, XK_Cancel }, | |
- //-- | |
- { 0, XK_y }, //New overlay | |
- //--- | |
- { "ỳ", XK_ygrave }, | |
- { "ý", XK_yacute }, | |
- { "ŷ", XK_ycircumflex }, | |
- { "ÿ", XK_ydiaeresis }, | |
- { 0, XK_Cancel }, | |
- //-- | |
- { 0, XK_u }, //New overlay | |
- //--- | |
- { "ù", XK_ugrave }, | |
- { "ú", XK_uacute }, | |
- { "û", XK_ucircumflex }, | |
- { "ü", XK_udiaeresis }, | |
- { "ų", XK_uogonek }, | |
- { "ū", XK_umacron }, | |
- { "ů", XK_uring}, | |
- { "ŭ", XK_ubreve}, | |
- { "ű", XK_udoubleacute }, | |
- { 0, XK_Cancel }, | |
- //-- | |
- { 0, XK_i }, //New overlay | |
- //--- | |
- { "ì", XK_igrave }, | |
- { "í", XK_iacute }, | |
- { "î", XK_icircumflex }, | |
- { "ï", XK_idiaeresis }, | |
- { "į", XK_iogonek }, | |
- { "ī", XK_imacron }, | |
- { "ı", XK_idotless }, | |
- { 0, XK_Cancel }, | |
- //-- | |
- { 0, XK_o }, //New overlay | |
- //--- | |
- { "ò", XK_ograve }, | |
- { "ó", XK_oacute }, | |
- { "ô", XK_ocircumflex }, | |
- { "ö", XK_odiaeresis }, | |
- { "ǫ", XK_ogonek }, | |
- { "õ", XK_otilde }, | |
- { "ō", XK_omacron }, | |
- { "ø", XK_oslash }, | |
- { "ő", XK_odoubleacute }, | |
- { "œ", XK_oe }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //-- | |
- { 0, XK_d }, //New overlay | |
- //--- | |
- { "ď", XK_dcaron }, | |
- { "ð", XK_eth }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //-- | |
- { 0, XK_c }, //New overlay | |
- //--- | |
- { "ç", XK_ccedilla }, | |
- { "ĉ", XK_ccircumflex }, | |
- { "č", XK_ccaron }, | |
- { "ć", XK_cacute }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //-- | |
- { 0, XK_s }, //New overlay | |
- //--- | |
- { "ş", XK_scedilla }, | |
- { "ŝ", XK_scircumflex }, | |
- { "š", XK_scaron }, | |
- { "ś", XK_sacute }, | |
- { "ß", XK_ssharp }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_z }, //New overlay | |
- //--- | |
- { "ž", XK_zcaron }, | |
- { "ż", XK_zabovedot }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //-- | |
- { 0, XK_n }, //New overlay | |
- //--- | |
- { "ñ", XK_ntilde }, | |
- { "ń", XK_nacute }, | |
- { "ň", XK_ncaron }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- // | |
- { 0, XK_t }, //New overlay | |
- //--- | |
- { "ț", XK_tcedilla }, | |
- { "ť", XK_tcaron }, | |
- { "þ", XK_thorn }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //---- | |
- { 0, XK_g }, //New overlay | |
- //--- | |
- { "ĝ", XK_gcircumflex }, | |
- { "ğ", XK_gbreve }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- // | |
- { 0, XK_h }, //New overlay | |
- //--- | |
- { "ĥ", XK_hcircumflex }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- // | |
- { 0, XK_j }, //New overlay | |
- //--- | |
- { "ĵ", XK_jcircumflex }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //-- | |
- { 0, XK_l }, //New overlay | |
- //--- | |
- { "ł", XK_lstroke }, | |
- { "ľ", XK_lcaron }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //-- | |
- { 0, XK_r }, //New overlay | |
- //--- | |
- { "ř", XK_rcaron }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_Cyrillic_softsign }, //New overlay | |
- //--- | |
- { "ъ", XK_Cyrillic_hardsign }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_Cyrillic_ie }, //New overlay | |
- //--- | |
- { "ё", XK_Cyrillic_io }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_Cyrillic_e }, //New overlay | |
- //--- | |
- { "Є", XK_Ukrainian_ie }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_Cyrillic_i }, //New overlay | |
- //--- | |
- { "і", XK_Ukrainian_i }, | |
- { "ї", XK_Ukrainian_yi }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_Cyrillic_u }, //New overlay | |
- //--- | |
- { "ў", XK_Byelorussian_shortu }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_Cyrillic_shorti }, //New overlay | |
- //--- | |
- { "ј", XK_Cyrillic_je }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_Cyrillic_el }, //New overlay | |
- //--- | |
- { "љ", XK_Cyrillic_lje }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_Cyrillic_en }, //New overlay | |
- //--- | |
- { "њ", XK_Cyrillic_nje }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_Cyrillic_tse }, //New overlay | |
- //--- | |
- { "џ", XK_Cyrillic_dzhe }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { 0, XK_Cyrillic_che }, //New overlay | |
- //--- | |
- { "ћ", XK_Serbian_tshe }, | |
- { "ђ", XK_Serbian_dje }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //--- | |
- { "🙂", 0x101f642 }, //emoji overlay | |
- //--- | |
- { "😀", 0x101f600 }, | |
- { "😁", 0x101f601 }, | |
- { "😂", 0x101f602 }, | |
- { "😃", 0x101f603 }, | |
- { "😄", 0x101f604 }, | |
- { "😅", 0x101f605 }, | |
- { "😆", 0x101f606 }, | |
- { "😇", 0x101f607 }, | |
- { "😈", 0x101f608 }, | |
- { "😉", 0x101f609 }, | |
- { "😊", 0x101f60a }, | |
- { "😋", 0x101f60b }, | |
- { "😌", 0x101f60c }, | |
- { "😍", 0x101f60d }, | |
- { "😎", 0x101f60e }, | |
- { "😏", 0x101f60f }, | |
- { "😐", 0x101f610 }, | |
- { "😒", 0x101f612 }, | |
- { "😓", 0x101f613 }, | |
- { "😛", 0x101f61b }, | |
- { "😮", 0x101f62e }, | |
- { "😟", 0x101f61f }, | |
- { "😟", 0x101f620 }, | |
- { "😢", 0x101f622 }, | |
- { "😭", 0x101f62d }, | |
- { "😳", 0x101f633 }, | |
- { "😴", 0x101f634 }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
- //-- | |
- { "/?", XK_slash }, //punctuation overlay | |
- //-- | |
- { "1!", XK_1, 1 }, | |
- { "2@", XK_2, 1 }, | |
- { "3#", XK_3, 1 }, | |
- { "4$", XK_4, 1 }, | |
- { "5%", XK_5, 1 }, | |
- { "6^", XK_6, 1 }, | |
- { "7&", XK_7, 1 }, | |
- { "8*", XK_8, 1 }, | |
- { "9(", XK_9, 1 }, | |
- { "0)", XK_0, 1 }, | |
- { "'\"", XK_apostrophe, 1 }, | |
- { "`~", XK_grave, 1 }, | |
- { "-_", XK_minus, 1 }, | |
- { "=+", XK_plus, 1 }, | |
- { "[{", XK_bracketleft, 1 }, | |
- { "]}", XK_bracketright, 1 }, | |
- { ",<", XK_comma, 1 }, | |
- { ".>", XK_period, 1 }, | |
- { "/?", XK_slash, 1 }, | |
- { "\\|", XK_backslash, 1 }, | |
- { "¡", XK_exclamdown, 1 }, | |
- { "?", XK_questiondown, 1 }, | |
- { "°", XK_degree, 1 }, | |
- { "£", XK_sterling, 1 }, | |
- { "€", XK_EuroSign, 1 }, | |
- { "¥", XK_yen, 1 }, | |
- { ";:", XK_colon, 1 }, | |
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ | |
-}; | |
- | |
- | |
-static Key keys_symbols[KEYS] = { | |
- { "Esc", XK_Escape, 1 }, | |
- { "1!", XK_1, 1 }, | |
- { "2@", XK_2, 1 }, | |
- { "3#", XK_3, 1 }, | |
- { "4$", XK_4, 1 }, | |
- { "5%", XK_5, 1 }, | |
- { "6^", XK_6, 1 }, | |
- { "7&", XK_7, 1 }, | |
- { "8*", XK_8, 1 }, | |
- { "9(", XK_9, 1 }, | |
- { "0)", XK_0, 1 }, | |
- | |
- { 0 }, /* New row */ | |
- | |
- { "'\"", XK_apostrophe, 1 }, | |
- { "`~", XK_grave, 1 }, | |
- { "-_", XK_minus, 1 }, | |
- { "=+", XK_plus, 1 }, | |
- { "[{", XK_bracketleft, 1 }, | |
- { "]}", XK_bracketright, 1 }, | |
- { ",<", XK_comma, 1 }, | |
- { ".>", XK_period, 1 }, | |
- { "/?", XK_slash, 1 }, | |
- { "\\|", XK_backslash, 1 }, | |
- { ";:", XK_colon, 1 }, | |
- | |
- { 0 }, /* New row */ | |
- | |
- { "abc", XK_Mode_switch, 1 }, | |
- { "☺", 0x101f642, 1 }, | |
- { "⇤", XK_Home, 1 }, | |
- { "←", XK_Left, 1 }, | |
- { "→", XK_Right, 1 }, | |
- { "⇥", XK_End, 1 }, | |
- { "⇊", XK_Next, 1 }, | |
- { "⇈", XK_Prior, 1 }, | |
- { "Tab", XK_Tab, 1 }, | |
- { "⌫Bksp", XK_BackSpace, 2 }, | |
- | |
- { 0 }, /* New row */ | |
- { "↺", XK_Cancel, 1}, | |
- { "Shift", XK_Shift_L, 2 }, | |
- { "Ctrl", XK_Control_L, 1 }, | |
- { "Alt", XK_Alt_L, 1 }, | |
- { "", XK_space, 2 }, | |
- { "↓", XK_Down, 1 }, | |
- { "↑", XK_Up, 1 }, | |
- { "↲ Enter", XK_Return, 2 }, | |
-}; | |
- | |
-static Key keys_functions[KEYS] = { | |
- { "Esc", XK_Escape, 1 }, | |
- { "F1", XK_F1, 1 }, | |
- { "F2", XK_F2, 1 }, | |
- { "F3", XK_F3, 1 }, | |
- { "F4", XK_F4, 1 }, | |
- { "F5", XK_F5, 1 }, | |
- { "F6", XK_F6, 1 }, | |
- { "F7", XK_F7, 1 }, | |
- { "F8", XK_F8, 1 }, | |
- { "F9", XK_F9, 1 }, | |
- { "F10", XK_F10, 1 }, | |
- | |
- { 0 }, /* New row */ | |
- | |
- { "≅", XK_KP_Insert, 1 }, | |
- { "▶", XF86XK_AudioPlay, 1 }, | |
- { "●", XF86XK_AudioRecord, 1 }, | |
- { "■", XF86XK_AudioStop, 1 }, | |
- { "◂◂", XF86XK_AudioPrev, 1 }, | |
- { "▸▸", XF86XK_AudioNext, 1 }, | |
- { "♫M", XF86XK_AudioMute, 1 }, | |
- { "♫-", XF86XK_AudioLowerVolume, 1 }, | |
- { "♫+", XF86XK_AudioRaiseVolume, 1 }, | |
- { "☀-", XF86XK_MonBrightnessDown, 1 }, | |
- { "☀+", XF86XK_MonBrightnessUp, 1 }, | |
- | |
- { 0 }, /* New row */ | |
- | |
- { "abc", XK_Mode_switch, 1 }, | |
- { "Del", XK_Delete, 1 }, | |
- { "⇤", XK_Home, 1 }, | |
- { "←", XK_Left, 1 }, | |
- { "→", XK_Right, 1 }, | |
- { "⇥", XK_End, 1 }, | |
- { "⇊", XK_Next, 1 }, | |
- { "⇈", XK_Prior, 1 }, | |
- { "Tab", XK_Tab, 1 }, | |
- { "⌫Bksp", XK_BackSpace, 2 }, | |
- | |
- { 0 }, /* New row */ | |
- { "↺", XK_Cancel, 1}, | |
- { "Shift", XK_Shift_L, 2 }, | |
- { "Ctrl", XK_Control_L, 1 }, | |
- { "Alt", XK_Alt_L, 1 }, | |
- { "", XK_space, 2 }, | |
- { "↓", XK_Down, 1 }, | |
- { "↑", XK_Up, 1 }, | |
- { "↲ Enter", XK_Return, 2 }, | |
-}; | |
- | |
- | |
-static Key keys_ru[KEYS] = { | |
- { "и", XK_Cyrillic_shorti, 1 }, | |
- { "ц", XK_Cyrillic_tse, 1 }, | |
- { "у", XK_Cyrillic_u, 1 }, | |
- { "к", XK_Cyrillic_ka, 1 }, | |
- { "е", XK_Cyrillic_ie, 1 }, | |
- { "н", XK_Cyrillic_en, 1 }, | |
- { "г", XK_Cyrillic_ghe, 1 }, | |
- { "ш", XK_Cyrillic_sha, 1 }, | |
- { "щ", XK_Cyrillic_shcha, 1 }, | |
- { "з", XK_Cyrillic_ze, 1 }, | |
- { "х", XK_Cyrillic_ha, 1 }, | |
- | |
- { 0 }, /* New row */ | |
- | |
- { "ф", XK_Cyrillic_ef, 1 }, | |
- { "ы", XK_Cyrillic_yeru, 1 }, | |
- { "в", XK_Cyrillic_ve, 1 }, | |
- { "а", XK_Cyrillic_a, 1 }, | |
- { "п", XK_Cyrillic_pe, 1 }, | |
- { "о", XK_Cyrillic_o, 1 }, | |
- { "л", XK_Cyrillic_el, 1 }, | |
- { "д", XK_Cyrillic_de, 1 }, | |
- { "ж", XK_Cyrillic_zhe, 1 }, | |
- { "э", XK_Cyrillic_e, 1 }, | |
- { "ю", XK_Cyrillic_yu, 1 }, | |
- | |
- { 0 }, /* New row */ | |
- | |
- { "123", XK_Mode_switch, 1 }, | |
- { "я", XK_Cyrillic_ya, 1 }, | |
- { "ч", XK_Cyrillic_che, 1 }, | |
- { "с", XK_Cyrillic_es, 1 }, | |
- { "м", XK_Cyrillic_em, 1 }, | |
- { "и", XK_Cyrillic_i, 1 }, | |
- { "т", XK_Cyrillic_te, 1 }, | |
- { "ь", XK_Cyrillic_softsign, 1 }, | |
- { "б", XK_Cyrillic_be, 1 }, | |
- { "⌫Bksp", XK_BackSpace, 2 }, | |
- | |
- { 0 }, /* New row */ | |
- { "↺", XK_Cancel, 1}, | |
- { "Shift", XK_Shift_L, 2 }, | |
- { "Ctrl", XK_Control_L, 1 }, | |
- { "Alt", XK_Alt_L, 1 }, | |
- { "", XK_space, 2 }, | |
- { "↓", XK_Down, 1 }, | |
- { "↑", XK_Up, 1 }, | |
- { "↲ Enter", XK_Return, 2 }, | |
-}; | |
- | |
-static Key keys_dialer[KEYS] = { | |
- { "Esc", XK_Escape, 1 }, | |
- { "1!", XK_1, 1 }, | |
- { "2@", XK_2, 1 }, | |
- { "3#", XK_3, 1 }, | |
- { "⌫Bksp", XK_BackSpace, 2 }, | |
- { 0 }, /* New row */ | |
- | |
- { "Shift", XK_Shift_L, 1 }, | |
- { "4$", XK_4, 1 }, | |
- { "5%", XK_5, 1 }, | |
- { "6^", XK_6, 1 }, | |
- { "-_", XK_minus, 1 }, | |
- { ",<", XK_comma, 1 }, | |
- { 0 }, /* New row */ | |
- | |
- { "abc", XK_Mode_switch, 1 }, | |
- { "7&", XK_7, 1 }, | |
- { "8*", XK_8, 1 }, | |
- { "9(", XK_9, 1 }, | |
- { "=+", XK_equal, 1 }, | |
- { "/?", XK_slash, 1 }, | |
- { 0 }, /* New row */ | |
- | |
- { "↺", XK_Cancel, 1}, | |
- { "", XK_space, 1 }, | |
- { "0)", XK_0, 1 }, | |
- { ".>", XK_period, 1 }, | |
- { "↲ Enter", XK_Return, 2}, | |
- { 0 }, /* New row */ | |
- { 0 }, /* Last item (double 0) */ | |
-}; | |
- | |
-#define LAYERS 5 | |
-static char* layer_names[LAYERS] = { | |
- "en", | |
- "symbols", | |
- "functions", | |
- "dialer", | |
- "ru", | |
-}; | |
- | |
-static Key* available_layers[LAYERS] = { | |
- keys_en, | |
- keys_symbols, | |
- keys_functions, | |
- keys_dialer, | |
- keys_ru | |
-}; | |
- | |
- | |
-Buttonmod buttonmods[] = { | |
- { XK_Shift_L, Button2 }, | |
- { XK_Alt_L, Button3 }, | |
-}; | |
- | |
diff --git a/svkbd.c b/svkbd.c | |
@@ -125,6 +125,7 @@ Bool sigtermd = False; | |
#endif | |
#include LAYOUT | |
+static Key keys[KEYS] = { NULL }; | |
static Key* layers[LAYERS]; | |
void | |
@@ -876,9 +877,14 @@ main(int argc, char *argv[]) { | |
signal(SIGTERM, sigterm); | |
+ | |
//parse environment variables | |
- const char* enableoverlays_env = getenv("SVKBD_ENABLEOVERLAYS"); | |
- if (enableoverlays_env != NULL) enableoverlays = atoi(enableoverlays_e… | |
+ if (OVERLAYS <= 1) { | |
+ enableoverlays = 0; | |
+ } else { | |
+ const char* enableoverlays_env = getenv("SVKBD_ENABLEOVERLAYS"… | |
+ if (enableoverlays_env != NULL) enableoverlays = atoi(enableov… | |
+ } | |
const char* layers_env = getenv("SVKBD_LAYERS"); | |
if (layers_env != NULL) { | |
layer_names_list = malloc(128); |