Introduction
Introduction Statistics Contact Development Disclaimer Help
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);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.