commit d06db9eb4fb8f1de5f5d144f5b8fb3bbf4cce84c
Author: Maarten van Gompel <[email protected]>
AuthorDate: Sat Mar 6 16:30:44 2021 +0100
Commit: Hiltjo Posthuma <[email protected]>
CommitDate: Sun Mar 28 14:35:01 2021 +0200
Added a second key label for the shift-activated symbols
diff --git a/config.def.h b/config.def.h
index 44fcd5c..91e51dd 100644
--- 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
index c196b88..7f162e9 100644
--- 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
trigger)
- //---
- { "è", 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
trigger)
+ //---
+ { "è", 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
index f66c4e6..ca64035 100644
--- a/svkbd.c
+++ b/svkbd.c
@@ -33,12 +33,13 @@
#define STRINGTOKEYSYM(X) (XStringToKeySym(X))
/* enums */
-enum { SchemeNorm, SchemeNormABC, SchemePress, SchemeHighlight, SchemeOverlay,
SchemeLast };
+enum { SchemeNorm, SchemeNormABC, SchemeNormABCShift, SchemeNormShift,
SchemePress, SchemePressShift, SchemeHighlight, SchemeHighlightShift,
SchemeOverlay, SchemeOverlayShift, SchemeLast };
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_Cyrillic_hardsign)))
- 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;
}