commit 13d20da8efda2fc025279cf22b8b66bd0beff6c7
parent eae90f28d998af064ec163074a026a585ccb6417
Author: Maarten van Gompel <proycon@anaproy.nl>
Date: Sun, 2 Aug 2020 15:46:19 +0200
Made the old layouts compatible with the new svkbd, re-added the old english layout that was removed, and re-added the initial sxmo layout and renamed the mobile layouts. Documentation updated accordingly. Final cleanup and fixes for the whole patch series.
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 ``SVKBD_LAYERS`` environment variable.
-They both take a comma separated list of layer names (as defined in your ``layout.*.h``). Use the ``↺`` button in the
-bottom-left to cycle through all the layers.
-
-The virtual keyboard comes with overlays that will show when certain keys are hold pressed for a longer time. For
-example, a long press on the ``a`` key will enable an overview showing all kinds of diacritic combinations for ``a``.
-
-Overlay functionality interferes with the ability to hold a key and have it outputted repeatedly. You can disable
-overlay functionality with the ``-O`` flag or by setting the environment variable ``SVKBD_ENABLEOVERLAYS=0``. There is
-also a key on the function layer of the keyboard itself to enable/disable this behaviour on the fly. Its label shows
-``≅`` when the overlay functionality is enabled and ``≇`` when not.
-
-Notes
----------
-
-This virtual keyboard does not actually modify the X keyboard layout, it simply relies on a standard US QWERTY layout
-(setxkbmap us) being activated. If you use another XKB layout you will get unpredictable output that does not match the
-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 devices. This layout consists of multiple layers which
+ can be switched on the fly, and overlays that appear on long-press of certain keys, adding input ability for
+ 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 numeric/punctuation layer. It was
+ 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 start through either the ``-l`` flag or
+through the ``SVKBD_LAYERS`` environment variable. They both take a comma separated list of layer names (as defined in
+your ``layout.*.h``). Use the ``↺`` button in the bottom-left to cycle through all the layers.
+
+Some layouts come with overlays that will show when certain keys are hold pressed for a longer time. For
+example, a long press on the ``a`` key will enable an overview showing all kinds of diacritic combinations for ``a``.
+
+Overlay functionality interferes with the ability to hold a key and have it outputted repeatedly. You can disable
+overlay functionality with the ``-O`` flag or by setting the environment variable ``SVKBD_ENABLEOVERLAYS=0``. There is
+also a key on the function layer of the keyboard itself to enable/disable this behaviour on the fly. Its label shows
+``≅`` when the overlay functionality is enabled and ``≇`` when not.
+
+Notes
+---------
+
+This virtual keyboard does not actually modify the X keyboard layout, the ``mobile-intl``, ``mobile-plain`` and ``en`` layouts simply rely on a standard US QWERTY layout (setxkbmap us) being activated, the other layouts (``de``, ``ru``, ``sh``) require their respective XKB keymaps to be active.
+
+If you use another XKB layout you will get unpredictable output that does not match the labels on the virtual keycaps!
+
+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 trigger)
+ //---
+ { "è", 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 trigger)
- //---
- { "è", 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_env);
+ if (OVERLAYS <= 1) {
+ enableoverlays = 0;
+ } else {
+ const char* enableoverlays_env = getenv("SVKBD_ENABLEOVERLAYS");
+ if (enableoverlays_env != NULL) enableoverlays = atoi(enableoverlays_env);
+ }
const char* layers_env = getenv("SVKBD_LAYERS");
if (layers_env != NULL) {
layer_names_list = malloc(128);