Introduction
Introduction Statistics Contact Development Disclaimer Help
Added a second key label for the shift-activated symbols - svkbd - simple virtu…
git clone git://git.suckless.org/svkbd
Log
Files
Refs
README
LICENSE
---
commit d06db9eb4fb8f1de5f5d144f5b8fb3bbf4cce84c
parent 6633915997619c5e3cb21b12f28d5f1d48e854d5
Author: Maarten van Gompel <[email protected]>
Date: Sat, 6 Mar 2021 16:30:44 +0100
Added a second key label for the shift-activated symbols
Diffstat:
M config.def.h | 8 +++++++-
M layout.mobile-intl.h | 843 +++++++++++++++--------------…
M svkbd.c | 37 ++++++++++++++++++++++++++---…
3 files changed, 459 insertions(+), 429 deletions(-)
---
diff --git a/config.def.h b/config.def.h
@@ -10,8 +10,14 @@ static const char *fonts[] = {
static const char *colors[SchemeLast][2] = {
/* fg bg */
[SchemeNorm] = { "#bbbbbb", "#132a33" },
+ [SchemeNormShift] = { "#008ac0", "#132a33" },
[SchemeNormABC] = { "#ffffff", "#14313d" },
- [SchemePress] = { "#ffffff", "#000000" },
+ [SchemeNormABCShift] = { "#008ac0", "#14313d" },
+ [SchemePress] = { "#ffffff", "#259937" },
+ [SchemePressShift] = { "#00c001", "#259937" },
[SchemeHighlight] = { "#58a7c6", "#005577" },
+ [SchemeHighlightShift] = { "#008ac0", "#005577" },
[SchemeOverlay] = { "#ffffff", "#2b3313" },
+ [SchemeOverlayShift] = { "#008ac0", "#2b3313" },
};
+
diff --git a/layout.mobile-intl.h b/layout.mobile-intl.h
@@ -1,550 +1,549 @@
#define KEYS 55
static Key keys_en[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 },
+ { "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 */
- { 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_apostrophe, 1 },
+ { 0, 0, XK_q, 1 },
+ { 0, 0, XK_w, 1 },
+ { 0, 0, XK_e, 1 },
+ { 0, 0, XK_r, 1 },
+ { 0, 0, XK_t, 1 },
+ { 0, 0, XK_y, 1 },
+ { 0, 0, XK_u, 1 },
+ { 0, 0, XK_i, 1 },
+ { 0, 0, XK_o, 1 },
+ { 0, 0, XK_p, 1 },
+ { "'", "\"", XK_apostrophe, 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_slash, 1 },
- { "Tab", XK_Tab, 1 },
+ { 0, 0, XK_a, 1 },
+ { 0, 0, XK_s, 1 },
+ { 0, 0, XK_d, 1 },
+ { 0, 0, XK_f, 1 },
+ { 0, 0, XK_g, 1 },
+ { 0, 0, XK_h, 1 },
+ { 0, 0, XK_j, 1 },
+ { 0, 0, XK_k, 1 },
+ { 0, 0, XK_l, 1 },
+ { "/", "?", XK_slash, 1 },
+ { "Tab", 0, XK_Tab, 1 },
{ 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_comma, 1 },
- { ".>", XK_period, 1 },
- { "⌫Bksp", XK_BackSpace, 2 },
+ { 0, 0, XK_z, 1 },
+ { 0, 0, XK_x, 1 },
+ { 0, 0, XK_c, 1 },
+ { 0, 0, XK_v, 1 },
+ { 0, 0, XK_b, 1 },
+ { 0, 0, XK_n, 1 },
+ { 0, 0, XK_m, 1 },
+ { ",", "<", XK_comma, 1 },
+ { ".", ">", XK_period, 1 },
+ { "⌫Bksp", 0, 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 },
+ { "↺", 0, XK_Cancel, 1},
+ { "Shift", 0, XK_Shift_L, 2 },
+ { "Ctrl", 0, XK_Control_L, 1 },
+ { "Alt", 0, XK_Alt_L, 1 },
+ { "", 0, XK_space, 2 },
+ { "↓", 0, XK_Down, 1 },
+ { "↑", 0, XK_Up, 1 },
+ { "↲ Enter", 0, 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, 0, XK_a }, //Overlay for a
+ //---
+ { "à", 0, XK_agrave },
+ { "á", 0, XK_aacute },
+ { "â", 0, XK_acircumflex },
+ { "ä", 0, XK_adiaeresis },
+ { "ą", 0, XK_aogonek },
+ { "ã", 0, XK_atilde },
+ { "ā", 0, XK_amacron },
+ { "ă", 0, XK_abreve },
+ { "å", 0, XK_aring },
+ { "æ", 0, XK_ae },
+ { 0, 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, 0, XK_e }, //Overlay for e (first item after boundary defines the…
+ //---
+ { "è", 0, XK_egrave },
+ { "é", 0, XK_eacute },
+ { "ê", 0, XK_ecircumflex },
+ { "ë", 0, XK_ediaeresis },
+ { "ę", 0, XK_eogonek },
+ { "ē", 0, XK_emacron },
+ { "ė", 0, XK_eabovedot },
+ { 0, 0, XK_Cancel },
//--
- { 0, XK_y }, //New overlay
+ { 0, 0, XK_y }, //New overlay
//---
- { "ỳ", XK_ygrave },
- { "ý", XK_yacute },
- { "ŷ", XK_ycircumflex },
- { "ÿ", XK_ydiaeresis },
- { 0, XK_Cancel },
+ { "ỳ", 0, XK_ygrave },
+ { "ý", 0, XK_yacute },
+ { "ŷ", 0, XK_ycircumflex },
+ { "ÿ", 0, XK_ydiaeresis },
+ { 0, 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, 0, XK_u }, //New overlay
+ //---
+ { "ù", 0, XK_ugrave },
+ { "ú", 0, XK_uacute },
+ { "û", 0, XK_ucircumflex },
+ { "ü", 0, XK_udiaeresis },
+ { "ų", 0, XK_uogonek },
+ { "ū", 0, XK_umacron },
+ { "ů", 0, XK_uring},
+ { "ŭ", 0, XK_ubreve},
+ { "ű", 0, XK_udoubleacute },
+ { 0, 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, 0, XK_i }, //New overlay
+ //---
+ { "ì", 0, XK_igrave },
+ { "í", 0, XK_iacute },
+ { "î", 0, XK_icircumflex },
+ { "ï", 0, XK_idiaeresis },
+ { "į", 0, XK_iogonek },
+ { "ī", 0, XK_imacron },
+ { "ı", 0, XK_idotless },
+ { 0, 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, 0, XK_o }, //New overlay
+ //---
+ { "ò", 0, XK_ograve },
+ { "ó", 0, XK_oacute },
+ { "ô", 0, XK_ocircumflex },
+ { "ö", 0, XK_odiaeresis },
+ { "ǫ", 0, XK_ogonek },
+ { "õ", 0, XK_otilde },
+ { "ō", 0, XK_omacron },
+ { "ø", 0, XK_oslash },
+ { "ő", 0, XK_odoubleacute },
+ { "œ", 0, XK_oe },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//--
- { 0, XK_d }, //New overlay
+ { 0, 0, XK_d }, //New overlay
//---
- { "ď", XK_dcaron },
- { "ð", XK_eth },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ď", 0, XK_dcaron },
+ { "ð", 0, XK_eth },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//--
- { 0, XK_c }, //New overlay
+ { 0, 0, XK_c }, //New overlay
//---
- { "ç", XK_ccedilla },
- { "ĉ", XK_ccircumflex },
- { "č", XK_ccaron },
- { "ć", XK_cacute },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ç", 0, XK_ccedilla },
+ { "ĉ", 0, XK_ccircumflex },
+ { "č", 0, XK_ccaron },
+ { "ć", 0, XK_cacute },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//--
- { 0, XK_s }, //New overlay
+ { 0, 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_scedilla },
+ { "ŝ", 0, XK_scircumflex },
+ { "š", 0, XK_scaron },
+ { "ś", 0, XK_sacute },
+ { "ß", 0, XK_ssharp },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//---
- { 0, XK_z }, //New overlay
+ { 0, 0, XK_z }, //New overlay
//---
- { "ž", XK_zcaron },
- { "ż", XK_zabovedot },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ž", 0, XK_zcaron },
+ { "ż", 0, XK_zabovedot },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//--
- { 0, XK_n }, //New overlay
+ { 0, 0, XK_n }, //New overlay
//---
- { "ñ", XK_ntilde },
- { "ń", XK_nacute },
- { "ň", XK_ncaron },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ñ", 0, XK_ntilde },
+ { "ń", 0, XK_nacute },
+ { "ň", 0, XK_ncaron },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//
- { 0, XK_t }, //New overlay
+ { 0, 0, XK_t }, //New overlay
//---
- { "ț", XK_tcedilla },
- { "ť", XK_tcaron },
- { "þ", XK_thorn },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ț", 0, XK_tcedilla },
+ { "ť", 0, XK_tcaron },
+ { "þ", 0, XK_thorn },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//----
- { 0, XK_g }, //New overlay
+ { 0, 0, XK_g }, //New overlay
//---
- { "ĝ", XK_gcircumflex },
- { "ğ", XK_gbreve },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ĝ", 0, XK_gcircumflex },
+ { "ğ", 0, XK_gbreve },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//
- { 0, XK_h }, //New overlay
+ { 0, 0, XK_h }, //New overlay
//---
- { "ĥ", XK_hcircumflex },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ĥ", 0, XK_hcircumflex },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//
- { 0, XK_j }, //New overlay
+ { 0, 0, XK_j }, //New overlay
//---
- { "ĵ", XK_jcircumflex },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ĵ", 0, XK_jcircumflex },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//--
- { 0, XK_l }, //New overlay
+ { 0, 0, XK_l }, //New overlay
//---
- { "ł", XK_lstroke },
- { "ľ", XK_lcaron },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ł", 0, XK_lstroke },
+ { "ľ", 0, XK_lcaron },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//--
- { 0, XK_r }, //New overlay
+ { 0, 0, XK_r }, //New overlay
//---
- { "ř", XK_rcaron },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ř", 0, XK_rcaron },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//---
- { 0, XK_Cyrillic_softsign }, //New overlay
+ { 0, 0, XK_Cyrillic_softsign }, //New overlay
//---
- { "ъ", XK_Cyrillic_hardsign },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ъ", 0, XK_Cyrillic_hardsign },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//---
- { 0, XK_Cyrillic_ie }, //New overlay
+ { 0, 0, XK_Cyrillic_ie }, //New overlay
//---
- { "ё", XK_Cyrillic_io },
- { "э", XK_Cyrillic_e },
- { "Є", XK_Ukrainian_ie },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ё", 0, XK_Cyrillic_io },
+ { "э", 0, XK_Cyrillic_e },
+ { "Є", 0, XK_Ukrainian_ie },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//---
- { 0, XK_Cyrillic_i }, //New overlay
+ { 0, 0, XK_Cyrillic_i }, //New overlay
//---
- { "і", XK_Ukrainian_i },
- { "ї", XK_Ukrainian_yi },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "і", 0, XK_Ukrainian_i },
+ { "ї", 0, XK_Ukrainian_yi },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//---
- { 0, XK_Cyrillic_u }, //New overlay
+ { 0, 0, XK_Cyrillic_u }, //New overlay
//---
- { "ў", XK_Byelorussian_shortu },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ў", 0, XK_Byelorussian_shortu },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//---
- { 0, XK_Cyrillic_shorti }, //New overlay
+ { 0, 0, XK_Cyrillic_shorti }, //New overlay
//---
- { "ј", XK_Cyrillic_je },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ј", 0, XK_Cyrillic_je },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//---
- { 0, XK_Cyrillic_el }, //New overlay
+ { 0, 0, XK_Cyrillic_el }, //New overlay
//---
- { "љ", XK_Cyrillic_lje },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "љ", 0, XK_Cyrillic_lje },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//---
- { 0, XK_Cyrillic_en }, //New overlay
+ { 0, 0, XK_Cyrillic_en }, //New overlay
//---
- { "њ", XK_Cyrillic_nje },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "њ", 0, XK_Cyrillic_nje },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//---
- { 0, XK_Cyrillic_tse }, //New overlay
+ { 0, 0, XK_Cyrillic_tse }, //New overlay
//---
- { "џ", XK_Cyrillic_dzhe },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "џ", 0, XK_Cyrillic_dzhe },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//---
- { 0, XK_Cyrillic_che }, //New overlay
+ { 0, 0, XK_Cyrillic_che }, //New overlay
//---
- { "ћ", XK_Serbian_tshe },
- { "ђ", XK_Serbian_dje },
- { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
+ { "ћ", 0, XK_Serbian_tshe },
+ { "ђ", 0, XK_Serbian_dje },
+ { 0, 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 */
+ { "🙂", 0, 0x101f642 }, //emoji overlay
+ //---
+ { "😀", 0, 0x101f600 },
+ { "😁", 0, 0x101f601 },
+ { "😂", 0, 0x101f602 },
+ { "😃", 0, 0x101f603 },
+ { "😄", 0, 0x101f604 },
+ { "😅", 0, 0x101f605 },
+ { "😆", 0, 0x101f606 },
+ { "😇", 0, 0x101f607 },
+ { "😈", 0, 0x101f608 },
+ { "😉", 0, 0x101f609 },
+ { "😊", 0, 0x101f60a },
+ { "😋", 0, 0x101f60b },
+ { "😌", 0, 0x101f60c },
+ { "😍", 0, 0x101f60d },
+ { "😎", 0, 0x101f60e },
+ { "😏", 0, 0x101f60f },
+ { "😐", 0, 0x101f610 },
+ { "😒", 0, 0x101f612 },
+ { "😓", 0, 0x101f613 },
+ { "😛", 0, 0x101f61b },
+ { "😮", 0, 0x101f62e },
+ { "😟", 0, 0x101f61f },
+ { "😟", 0, 0x101f620 },
+ { "😢", 0, 0x101f622 },
+ { "😭", 0, 0x101f62d },
+ { "😳", 0, 0x101f633 },
+ { "😴", 0, 0x101f634 },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
//--
- { "/?", XK_slash }, //punctuation overlay
+ { "/?", 0, 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 */
+ { "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 },
+ { "¡", 0, XK_exclamdown, 1 },
+ { "?", 0, XK_questiondown, 1 },
+ { "°", 0, XK_degree, 1 },
+ { "£", 0, XK_sterling, 1 },
+ { "€", 0, XK_EuroSign, 1 },
+ { "¥", 0, XK_yen, 1 },
+ { ";", ":", XK_colon, 1 },
+ { 0, 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */
};
static Key keys_symbols[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 },
+ { "Esc", 0, XK_Escape, 1 },
+ { "F1", 0, XK_F1, 1 },
+ { "F2", 0, XK_F2, 1 },
+ { "F3", 0, XK_F3, 1 },
+ { "F4", 0, XK_F4, 1 },
+ { "F5", 0, XK_F5, 1 },
+ { "F6", 0, XK_F6, 1 },
+ { "F7", 0, XK_F7, 1 },
+ { "F8", 0, XK_F8, 1 },
+ { "F9", 0, XK_F9, 1 },
+ { "F10", 0, XK_F10, 1 },
{ 0 }, /* New row */
- { "'\"", XK_apostrophe, 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, XK_apostrophe, 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_period, 1 },
- { ",<", XK_comma, 1 },
- { "`~", XK_grave, 1 },
- { "-_", XK_minus, 1 },
- { "=+", XK_plus, 1 },
- { "\\|", XK_backslash, 1 },
- { ";:", XK_colon, 1 },
- { "/?", XK_slash, 1 },
- { "[{", XK_bracketleft, 1 },
- { "]}", XK_bracketright, 1 },
- { "Del", XK_Delete, 1 },
+ { ".", ">", XK_period, 1 },
+ { ",", "<", XK_comma, 1 },
+ { "`", "~", XK_grave, 1 },
+ { "-", "_", XK_minus, 1 },
+ { "=", "+", XK_plus, 1 },
+ { "\\", "|", XK_backslash, 1 },
+ { ";", ":", XK_colon, 1 },
+ { "/", "?", XK_slash, 1 },
+ { "[", "{", XK_bracketleft, 1 },
+ { "]", "}", XK_bracketright, 1 },
+ { "Del", 0, XK_Delete, 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 },
+ { "abc", 0, XK_Mode_switch, 1 },
+ { "☺", 0, 0x101f642, 1 },
+ { "⇤", 0, XK_Home, 1 },
+ { "←", 0, XK_Left, 1 },
+ { "→", 0, XK_Right, 1 },
+ { "⇥", 0, XK_End, 1 },
+ { "⇊", 0, XK_Next, 1 },
+ { "⇈", 0, XK_Prior, 1 },
+ { "Tab", 0, XK_Tab, 1 },
+ { "⌫Bksp", 0, 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 },
+ { "↺", 0, XK_Cancel, 1},
+ { "Shift", 0, XK_Shift_L, 2 },
+ { "Ctrl", 0, XK_Control_L, 1 },
+ { "Alt", 0, XK_Alt_L, 1 },
+ { "", 0, XK_space, 2 },
+ { "↓", 0, XK_Down, 1 },
+ { "↑", 0, XK_Up, 1 },
+ { "↲ Enter", 0, XK_Return, 2 },
};
static Key keys_functions[KEYS] = {
- { "Esc", XK_Escape, 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 },
+ { "Esc", 0, XK_Escape, 1 },
+ { "▶", 0, XF86XK_AudioPlay, 1 },
+ { "●", 0, XF86XK_AudioRecord, 1 },
+ { "■", 0, XF86XK_AudioStop, 1 },
+ { "◂◂", 0, XF86XK_AudioPrev, 1 },
+ { "▸▸", 0, XF86XK_AudioNext, 1 },
+ { "♫M", 0, XF86XK_AudioMute, 1 },
+ { "♫-", 0, XF86XK_AudioLowerVolume, 1 },
+ { "♫+", 0, XF86XK_AudioRaiseVolume, 1 },
+ { "☀-", 0, XF86XK_MonBrightnessDown, 1 },
+ { "☀+", 0, XF86XK_MonBrightnessUp, 1 },
{ 0 }, /* New row */
- { "≅", XK_KP_Insert, 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, XK_KP_Insert, 1 },
+ { "Del", 0, XK_Delete, 1 },
+ { "⇤", 0, XK_Home, 1 },
+ { "←", 0, XK_Left, 1 },
+ { "→", 0, XK_Right, 1 },
+ { "⇥", 0, XK_End, 1 },
+ { "⇊", 0, XK_Next, 1 },
+ { "⇈", 0, XK_Prior, 1 },
+ { "Tab", 0, XK_Tab, 1 },
+ { "⌫Bksp", 0, 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 },
+ { "↺", 0, XK_Cancel, 1},
+ { "Shift", 0, XK_Shift_L, 2 },
+ { "Ctrl", 0, XK_Control_L, 1 },
+ { "Alt", 0, XK_Alt_L, 1 },
+ { "", 0, XK_space, 2 },
+ { "↓", 0, XK_Down, 1 },
+ { "↑", 0, XK_Up, 1 },
+ { "↲ Enter", 0, XK_Return, 2 },
{ 0 }, /* Last item (double 0) */
{ 0 }, /* Last item (double 0) */
};
static Key keys_navigation[KEYS] = {
- { "Esc", XK_Escape, 1 },
- { "⇤", XK_Home, 1 },
- { "↑", XK_Up, 1 },
- { "⇥", XK_End, 1 },
- { "⇈", XK_Prior, 1 },
+ { "Esc", 0, XK_Escape, 1 },
+ { "⇤", 0, XK_Home, 1 },
+ { "↑", 0, XK_Up, 1 },
+ { "⇥", 0, XK_End, 1 },
+ { "⇈", 0, XK_Prior, 1 },
{ 0 }, /* New row */
- { "Shift", XK_Shift_L, 1 },
- { "←", XK_Left, 1 },
- { "", XK_space, 1 },
- { "→", XK_Right, 1 },
- { "⇊", XK_Next, 1 },
+ { "Shift", 0, XK_Shift_L, 1 },
+ { "←", 0, XK_Left, 1 },
+ { "", 0, XK_space, 1 },
+ { "→", 0, XK_Right, 1 },
+ { "⇊", 0, XK_Next, 1 },
{ 0 }, /* New row */
- { "↺", XK_Cancel, 1},
- { "⌫Bksp", XK_BackSpace, 1 },
- { "↓", XK_Down, 1 },
- { "Tab", XK_Tab, 1 },
- { "↲ Enter", XK_Return, 1},
+ { "↺", 0, XK_Cancel, 1},
+ { "⌫Bksp", 0, XK_BackSpace, 1 },
+ { "↓", 0, XK_Down, 1 },
+ { "Tab", 0, XK_Tab, 1 },
+ { "↲ Enter", 0, XK_Return, 1},
{ 0 }, /* Last item (double 0) */
{ 0 }, /* Last item (double 0) */
};
static Key keys_ru[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 },
-
+ { "Esc", 0, 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_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, XK_Cyrillic_shorti, 1 },
+ { "ц", 0, XK_Cyrillic_tse, 1 },
+ { "у", 0, XK_Cyrillic_u, 1 },
+ { "к", 0, XK_Cyrillic_ka, 1 },
+ { "е", 0, XK_Cyrillic_ie, 1 },
+ { "н", 0, XK_Cyrillic_en, 1 },
+ { "г", 0, XK_Cyrillic_ghe, 1 },
+ { "ш", 0, XK_Cyrillic_sha, 1 },
+ { "щ", 0, XK_Cyrillic_shcha, 1 },
+ { "з", 0, XK_Cyrillic_ze, 1 },
+ { "х", 0, 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_er, 1 },
- { "о", XK_Cyrillic_o, 1 },
- { "л", XK_Cyrillic_el, 1 },
- { "д", XK_Cyrillic_de, 1 },
- { "ж", XK_Cyrillic_zhe, 1 },
- { "ю", XK_Cyrillic_yu, 1 },
+ { "ф", 0, XK_Cyrillic_ef, 1 },
+ { "ы", 0, XK_Cyrillic_yeru, 1 },
+ { "в", 0, XK_Cyrillic_ve, 1 },
+ { "а", 0, XK_Cyrillic_a, 1 },
+ { "п", 0, XK_Cyrillic_pe, 1 },
+ { "р", 0, XK_Cyrillic_er, 1 },
+ { "о", 0, XK_Cyrillic_o, 1 },
+ { "л", 0, XK_Cyrillic_el, 1 },
+ { "д", 0, XK_Cyrillic_de, 1 },
+ { "ж", 0, XK_Cyrillic_zhe, 1 },
+ { "ю", 0, 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 },
+ { "123", 0, XK_Mode_switch, 1 },
+ { "я", 0, XK_Cyrillic_ya, 1 },
+ { "ч", 0, XK_Cyrillic_che, 1 },
+ { "с", 0, XK_Cyrillic_es, 1 },
+ { "м", 0, XK_Cyrillic_em, 1 },
+ { "и", 0, XK_Cyrillic_i, 1 },
+ { "т", 0, XK_Cyrillic_te, 1 },
+ { "ь", 0, XK_Cyrillic_softsign, 1 },
+ { "б", 0, XK_Cyrillic_be, 1 },
+ { "⌫Bksp", 0, 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 },
+ { "↺", 0, XK_Cancel, 1},
+ { "Shift", 0, XK_Shift_L, 2 },
+ { "Ctrl", 0, XK_Control_L, 1 },
+ { "Alt", 0, XK_Alt_L, 1 },
+ { "", 0, XK_space, 2 },
+ { "↓", 0, XK_Down, 1 },
+ { "↑", 0, XK_Up, 1 },
+ { "↲ Enter", 0, 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 },
+ { "Esc", 0, XK_Escape, 1 },
+ { "1", "!" , XK_1, 1 },
+ { "2", "@", XK_2, 1 },
+ { "3", "#", XK_3, 1 },
+ { "⌫Bksp", 0, 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 },
+ { "Shift", 0, 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 },
+ { "abc", 0, 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, XK_Cancel, 1},
+ { "", 0, XK_space, 1 },
+ { "0", ")", XK_0, 1 },
+ { ".", ">", XK_period, 1 },
+ { "↲ Enter", 0, XK_Return, 2},
{ 0 }, /* New row */
{ 0 }, /* Last item (double 0) */
};
diff --git a/svkbd.c b/svkbd.c
@@ -33,12 +33,13 @@
#define STRINGTOKEYSYM(X) (XStringToKeySym(X))
/* enums */
-enum { SchemeNorm, SchemeNormABC, SchemePress, SchemeHighlight, SchemeOverlay,…
+enum { SchemeNorm, SchemeNormABC, SchemeNormABCShift, SchemeNormShift, SchemeP…
enum { NetWMWindowType, NetLast };
/* typedefs */
typedef struct {
char *label;
+ char *label2;
KeySym keysym;
unsigned int width;
KeySym modifier;
@@ -303,20 +304,25 @@ void
drawkey(Key *k, int idx)
{
int x, y, w, h;
+ int x2, y2, w2, h2;
const char *l;
+ int use_scheme = SchemeNorm;
+
if (k->pressed)
- drw_setscheme(drw, scheme[SchemePress]);
+ use_scheme = SchemePress;
else if (k->highlighted)
- drw_setscheme(drw, scheme[SchemeHighlight]);
+ use_scheme = SchemeHighlight;
else if (idx < overlaykeycount)
- drw_setscheme(drw, scheme[SchemeOverlay]);
+ use_scheme = SchemeOverlay;
else if ((k->keysym == XK_Return) ||
((k->keysym >= XK_a) && (k->keysym <= XK_z)) ||
((k->keysym >= XK_Cyrillic_io) && (k->keysym <= XK_Cyr…
- drw_setscheme(drw, scheme[SchemeNormABC]);
+ use_scheme = SchemeNormABC;
else
- drw_setscheme(drw, scheme[SchemeNorm]);
+ use_scheme = SchemeNorm;
+
+ drw_setscheme(drw, scheme[use_scheme]);
drw_rect(drw, k->x, k->y, k->w, k->h, 1, 1);
if (k->keysym == XK_KP_Insert) {
@@ -335,6 +341,24 @@ drawkey(Key *k, int idx)
w = TEXTW(l);
x = k->x + (k->w / 2) - (w / 2);
drw_text(drw, x, y, w, h, 0, l, 0);
+ if (k->label2) {
+ if (use_scheme == SchemeNorm)
+ use_scheme = SchemeNormShift;
+ else if (use_scheme == SchemeNormABC)
+ use_scheme = SchemeNormABCShift;
+ else if (use_scheme == SchemePress)
+ use_scheme = SchemePressShift;
+ else if (use_scheme == SchemeHighlight)
+ use_scheme = SchemeHighlightShift;
+ else if (use_scheme == SchemeOverlay)
+ use_scheme = SchemeOverlayShift;
+ drw_setscheme(drw, scheme[use_scheme]);
+ x += w;
+ y -= 15;
+ l = k->label2;
+ w = TEXTW(l);
+ drw_text(drw, x, y, w, h, 0, l, 0);
+ }
drw_map(drw, win, k->x, k->y, k->w, k->h);
}
@@ -882,6 +906,7 @@ showoverlay(int idx)
if (overlay[i].width)
j += overlay[i].width;
keys[j].label = overlay[i].label;
+ keys[j].label2 = overlay[i].label2;
keys[j].keysym = overlay[i].keysym;
keys[j].modifier = overlay[i].modifier;
}
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.