svkbd

simple virtual keyboard
git clone git://git.suckless.org/svkbd
Log | Files | Refs | README | LICENSE

layout.mobile-intl.h (19259B)


      1 #define KEYS 57
      2 
      3 static Key keys_en[KEYS] = {
      4 	{ "Esc", "", XK_Escape, 1 },
      5 	{ "1", "!", XK_1, 1 },
      6 	{ "2", "@", XK_2, 1 },
      7 	{ "3", "#", XK_3, 1 },
      8 	{ "4", "$", XK_4, 1 },
      9 	{ "5", "%", XK_5, 1 },
     10 	{ "6", "^", XK_6, 1 },
     11 	{ "7", "&", XK_7, 1 },
     12 	{ "8", "*", XK_8, 1 },
     13 	{ "9", "(", XK_9, 1 },
     14 	{ "0", ")", XK_0, 1 },
     15 	{ "-", "_", XK_minus, 1 },
     16 
     17 	{ 0 }, /* New row */
     18 
     19 	{ "↹", 0, XK_Tab, 0.75 },
     20 	{ 0, "☺", XK_q, 1 },
     21 	{ 0, 0, XK_w, 1 },
     22 	{ 0, 0, XK_e, 1 },
     23 	{ 0, 0, XK_r, 1 },
     24 	{ 0, 0, XK_t, 1 },
     25 	{ 0, 0, XK_y, 1 },
     26 	{ 0, 0, XK_u, 1 },
     27 	{ 0, 0, XK_i, 1 },
     28 	{ 0, 0, XK_o, 1 },
     29 	{ 0, 0, XK_p, 1 },
     30 	{ "/", "?", XK_slash, .75 },
     31 
     32 	{ 0 }, /* New row */
     33 
     34 	{ "^", 0, XK_Control_L, 1 },
     35 	{ 0, 0, XK_a, 1 },
     36 	{ 0, 0, XK_s, 1 },
     37 	{ 0, 0, XK_d, 1 },
     38 	{ 0, 0, XK_f, 1 },
     39 	{ 0, 0, XK_g, 1 },
     40 	{ 0, 0, XK_h, 1 },
     41 	{ 0, 0, XK_j, 1 },
     42 	{ 0, 0, XK_k, 1 },
     43 	{ 0, 0, XK_l, 1 },
     44 	{ ";", ":", XK_colon, 1 },
     45 	{ "'", "\"", XK_apostrophe, 1 },
     46 
     47 	{ 0 }, /* New row */
     48 
     49 	{ "⇧", 0, XK_Shift_L, 1.5 },
     50 	{ 0, 0, XK_z, 1 },
     51 	{ 0, 0, XK_x, 1 },
     52 	{ 0, 0, XK_c, 1 },
     53 	{ 0, 0, XK_v, 1 },
     54 	{ 0, 0, XK_b, 1 },
     55 	{ 0, 0, XK_n, 1 },
     56 	{ 0, 0, XK_m, 1 },
     57 	{ ",", "<", XK_comma, 1 },
     58 	{ ".", ">", XK_period, 1 },
     59 	{ "⌫", 0, XK_BackSpace, 1 },
     60 
     61 	{ 0 }, /* New row */
     62 	{ "↺", 0, XK_Cancel, 1},
     63 	{ "Alt", 0, XK_Alt_L, 1 },
     64 	{ "", 0, XK_space, 4 },
     65 	{ "↓", 0, XK_Down, 1 },
     66 	{ "↑", 0, XK_Up, 1 },
     67 	{ "↲ Enter", 0, XK_Return, 2 },
     68 };
     69 
     70 static Key keys_dvorak[KEYS] = {
     71 	{ "Esc", "", XK_Escape, 1 },
     72 	{ "1", "!", XK_1, 1 },
     73 	{ "2", "@", XK_2, 1 },
     74 	{ "3", "#", XK_3, 1 },
     75 	{ "4", "$", XK_4, 1 },
     76 	{ "5", "%", XK_5, 1 },
     77 	{ "6", "^", XK_6, 1 },
     78 	{ "7", "&", XK_7, 1 },
     79 	{ "8", "*", XK_8, 1 },
     80 	{ "9", "(", XK_9, 1 },
     81 	{ "0", ")", XK_0, 1 },
     82 
     83 	{ 0 }, /* New row */
     84 
     85 	{ "↹", 0, XK_Tab, 0.75 },
     86 	{ ";", ":", XK_colon, 1 },
     87 	{ ",", "<", XK_comma, 1 },
     88 	{ ".", ">", XK_period, 1 },
     89 	{ 0, 0, XK_p, 1 },
     90 	{ 0, 0, XK_y, 1 },
     91 	{ 0, 0, XK_f, 1 },
     92 	{ 0, 0, XK_g, 1 },
     93 	{ 0, 0, XK_c, 1 },
     94 	{ 0, 0, XK_r, 1 },
     95 	{ 0, 0, XK_l, 1 },
     96 	{ "/", "?", XK_slash, .75 },
     97 
     98 	{ 0 }, /* New row */
     99 
    100 	{ "^", 0, XK_Control_L, 1 },
    101 	{ 0, 0, XK_a, 1 },
    102 	{ 0, 0, XK_o, 1 },
    103 	{ 0, 0, XK_e, 1 },
    104 	{ 0, 0, XK_u, 1 },
    105 	{ 0, 0, XK_i, 1 },
    106 	{ 0, 0, XK_d, 1 },
    107 	{ 0, 0, XK_h, 1 },
    108 	{ 0, 0, XK_t, 1 },
    109 	{ 0, 0, XK_n, 1 },
    110 	{ 0, 0, XK_s, 1 },
    111 	{ "-", "_", XK_minus, 1 },
    112 
    113 	{ 0 }, /* New row */
    114 
    115 	{ "⇧", 0, XK_Shift_L, 1.5 },
    116 	{ "'", "\"", XK_apostrophe, 1 },
    117 	{ 0, 0, XK_q, 1 },
    118 	{ 0, 0, XK_j, 1 },
    119 	{ 0, 0, XK_k, 1 },
    120 	{ 0, 0, XK_x, 1 },
    121 	{ 0, 0, XK_b, 1 },
    122 	{ 0, 0, XK_m, 1 },
    123 	{ 0, 0, XK_w, 1 },
    124 	{ 0, 0, XK_v, 1 },
    125 	{ 0, 0, XK_z, 1 },
    126 	{ "⌫", 0, XK_BackSpace, 1 },
    127 
    128 	{ 0 }, /* New row */
    129 	{ "↺", 0, XK_Cancel, 1},
    130 	{ "Alt", 0, XK_Alt_L, 1 },
    131 	{ "", 0, XK_space, 4 },
    132 	{ "↓", 0, XK_Down, 1 },
    133 	{ "↑", 0, XK_Up, 1 },
    134 	{ "↲ Enter", 0, XK_Return, 2 },
    135 };
    136 
    137 static Key keys_minimal[KEYS] = {
    138 	{ 0, "☺", XK_q, 1 },
    139 	{ 0, 0, XK_w, 1 },
    140 	{ 0, 0, XK_e, 1 },
    141 	{ 0, 0, XK_r, 1 },
    142 	{ 0, 0, XK_t, 1 },
    143 	{ 0, 0, XK_y, 1 },
    144 	{ 0, 0, XK_u, 1 },
    145 	{ 0, 0, XK_i, 1 },
    146 	{ 0, 0, XK_o, 1 },
    147 	{ 0, 0, XK_p, 1 },
    148 
    149 	{ 0 }, /* New row */
    150 
    151 	{ 0, 0, XK_a, 1 },
    152 	{ 0, 0, XK_s, 1 },
    153 	{ 0, 0, XK_d, 1 },
    154 	{ 0, 0, XK_f, 1 },
    155 	{ 0, 0, XK_g, 1 },
    156 	{ 0, 0, XK_h, 1 },
    157 	{ 0, 0, XK_j, 1 },
    158 	{ 0, 0, XK_k, 1 },
    159 	{ 0, 0, XK_l, 1 },
    160 
    161 	{ 0 }, /* New row */
    162 
    163 	{ "⇧", 0, XK_Shift_L, 1.5 },
    164 	{ 0, 0, XK_z, 1 },
    165 	{ 0, 0, XK_x, 1 },
    166 	{ 0, 0, XK_c, 1 },
    167 	{ 0, 0, XK_v, 1 },
    168 	{ 0, 0, XK_b, 1 },
    169 	{ 0, 0, XK_n, 1 },
    170 	{ 0, 0, XK_m, 1 },
    171 	{ "⌫", 0, XK_BackSpace, 1.5 },
    172 
    173 	{ 0 }, /* New row */
    174 
    175 	{ "↺", 0, XK_Cancel, 1},
    176 	{ "'", "\"", XK_apostrophe, 1 },
    177 	{ ",", "<", XK_comma, 1 },
    178 	{ "", 0, XK_space, 4 },
    179 	{ ".", ">", XK_period, 1 },
    180 	{ "↲ Enter", 0, XK_Return, 2 },
    181 };
    182 
    183 #define OVERLAYS 226
    184 static Key overlay[OVERLAYS] = {
    185 	{ 0, 0, XK_a }, //Overlay for a
    186 	{ "à", 0, XK_agrave },
    187 	{ "á", 0, XK_aacute },
    188 	{ "â", 0, XK_acircumflex },
    189 	{ "ä", 0, XK_adiaeresis },
    190 	{ "ą", 0, XK_aogonek },
    191 	{ "ã", 0, XK_atilde },
    192 	{ "ā", 0, XK_amacron },
    193 	{ "ă", 0, XK_abreve },
    194 	{ "å", 0, XK_aring },
    195 	{ "æ", 0, XK_ae },
    196 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    197 	{ 0, 0, XK_e }, //Overlay for e (first item after boundary defines the trigger)
    198 	{ "è", 0, XK_egrave },
    199 	{ "é", 0, XK_eacute },
    200 	{ "ê", 0, XK_ecircumflex },
    201 	{ "ë", 0, XK_ediaeresis },
    202 	{ "ę", 0, XK_eogonek },
    203 	{ "ē", 0, XK_emacron },
    204 	{ "ė", 0, XK_eabovedot },
    205 	{ "ě", 0, XK_ecaron },
    206 	{ 0, 0, XK_Cancel },
    207 	{ 0, 0, XK_y }, //New overlay
    208 	{ "ỳ", 0, XK_ygrave },
    209 	{ "ý", 0, XK_yacute },
    210 	{ "ŷ", 0, XK_ycircumflex },
    211 	{ "ÿ", 0, XK_ydiaeresis },
    212 	{ 0, 0, XK_Cancel },
    213 	{ 0, 0, XK_u }, //New overlay
    214 	{ "ù", 0, XK_ugrave },
    215 	{ "ú", 0, XK_uacute },
    216 	{ "û", 0, XK_ucircumflex },
    217 	{ "ü", 0, XK_udiaeresis },
    218 	{ "ų", 0, XK_uogonek },
    219 	{ "ū", 0, XK_umacron },
    220 	{ "ů", 0, XK_uring},
    221 	{ "ŭ", 0, XK_ubreve},
    222 	{ "ű", 0, XK_udoubleacute },
    223 	{ 0, 0, XK_Cancel },
    224 	{ 0, 0, XK_i }, //New overlay
    225 	{ "ì", 0, XK_igrave },
    226 	{ "í", 0, XK_iacute },
    227 	{ "î", 0, XK_icircumflex },
    228 	{ "ï", 0, XK_idiaeresis },
    229 	{ "į", 0, XK_iogonek },
    230 	{ "ī", 0, XK_imacron },
    231 	{ "ı", 0, XK_idotless },
    232 	{ 0, 0, XK_Cancel },
    233 	{ 0, 0, XK_o }, //New overlay
    234 	{ "ò", 0, XK_ograve },
    235 	{ "ó", 0, XK_oacute },
    236 	{ "ô", 0, XK_ocircumflex },
    237 	{ "ö", 0, XK_odiaeresis },
    238 	{ "ǫ", 0, XK_ogonek },
    239 	{ "õ", 0, XK_otilde },
    240 	{ "ō", 0, XK_omacron },
    241 	{ "ø", 0, XK_oslash },
    242 	{ "ő", 0, XK_odoubleacute },
    243 	{ "œ", 0, XK_oe },
    244 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    245 	{ 0, 0, XK_d }, //New overlay
    246 	{ "ď", 0, XK_dcaron },
    247 	{ "ð", 0, XK_eth },
    248 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    249 	{ 0, 0, XK_c }, //New overlay
    250 	{ "ç", 0, XK_ccedilla },
    251 	{ "ĉ", 0, XK_ccircumflex },
    252 	{ "č", 0, XK_ccaron },
    253 	{ "ć", 0, XK_cacute },
    254 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    255 	{ 0, 0, XK_s }, //New overlay
    256 	{ "ş", 0, XK_scedilla },
    257 	{ "ŝ", 0, XK_scircumflex },
    258 	{ "š", 0, XK_scaron },
    259 	{ "ś", 0, XK_sacute },
    260 	{ "ß", 0, XK_ssharp },
    261 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    262 	{ 0, 0, XK_z }, //New overlay
    263 	{ "ž", 0, XK_zcaron },
    264 	{ "ż", 0, XK_zabovedot },
    265 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    266 	{ 0, 0, XK_n }, //New overlay
    267 	{ "ñ", 0, XK_ntilde },
    268 	{ "ń", 0, XK_nacute },
    269 	{ "ň", 0, XK_ncaron },
    270 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    271 	{ 0, 0, XK_t }, //New overlay
    272 	{ "ț", 0, XK_tcedilla },
    273 	{ "ť", 0, XK_tcaron },
    274 	{ "þ", 0, XK_thorn },
    275 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    276 	{ 0, 0, XK_g }, //New overlay
    277 	{ "ĝ", 0, XK_gcircumflex },
    278 	{ "ğ", 0, XK_gbreve },
    279 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    280 	{ 0, 0, XK_h }, //New overlay
    281 	{ "ĥ", 0, XK_hcircumflex },
    282 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    283 	{ 0, 0, XK_j }, //New overlay
    284 	{ "ĵ", 0, XK_jcircumflex },
    285 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    286 	{ 0, 0, XK_l }, //New overlay
    287 	{ "ł", 0, XK_lstroke },
    288 	{ "ľ", 0, XK_lcaron },
    289 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    290 	{ 0, 0, XK_r }, //New overlay
    291 	{ "ř", 0, XK_rcaron },
    292 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    293 	{ 0, 0, XK_Cyrillic_softsign }, //New overlay
    294 	{ "ъ", 0, XK_Cyrillic_hardsign },
    295 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    296 	{ 0, 0, XK_Cyrillic_ie }, //New overlay
    297 	{ "ё", 0, XK_Cyrillic_io },
    298 	{ "э", 0, XK_Cyrillic_e },
    299 	{ "Є", 0, XK_Ukrainian_ie },
    300 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    301 	{ 0, 0, XK_Cyrillic_i }, //New overlay
    302 	{ "і", 0, XK_Ukrainian_i },
    303 	{ "ї", 0, XK_Ukrainian_yi },
    304 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    305 	{ 0, 0, XK_Cyrillic_u }, //New overlay
    306 	{ "ў", 0, XK_Byelorussian_shortu },
    307 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    308 	{ 0, 0, XK_Cyrillic_shorti }, //New overlay
    309 	{ "ј", 0, XK_Cyrillic_je },
    310 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    311 	{ 0, 0, XK_Cyrillic_el }, //New overlay
    312 	{ "љ", 0, XK_Cyrillic_lje },
    313 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    314 	{ 0, 0, XK_Cyrillic_en }, //New overlay
    315 	{ "њ", 0, XK_Cyrillic_nje },
    316 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    317 	{ 0, 0, XK_Cyrillic_tse }, //New overlay
    318 	{ "џ", 0, XK_Cyrillic_dzhe },
    319 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    320 	{ 0, 0, XK_Cyrillic_che }, //New overlay
    321 	{ "ћ", 0, XK_Serbian_tshe },
    322 	{ "ђ", 0, XK_Serbian_dje },
    323 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    324 	{ "🙂", 0, 0x101f642 }, //New overlay -> emoji overlay
    325 	{ "😀", 0, 0x101f600 },
    326 	{ "😁", 0, 0x101f601 },
    327 	{ "😂", 0, 0x101f602 },
    328 	{ "😃", 0, 0x101f603 },
    329 	{ "😄", 0, 0x101f604 },
    330 	{ "😅", 0, 0x101f605 },
    331 	{ "😆", 0, 0x101f606 },
    332 	{ "😇", 0, 0x101f607 },
    333 	{ "😈", 0, 0x101f608 },
    334 	{ "😉", 0, 0x101f609 },
    335 	{ "😊", 0, 0x101f60a },
    336 	{ "😋", 0, 0x101f60b },
    337 	{ "😌", 0, 0x101f60c },
    338 	{ "😍", 0, 0x101f60d },
    339 	{ "😎", 0, 0x101f60e },
    340 	{ "😏", 0, 0x101f60f },
    341 	{ "😐", 0, 0x101f610 },
    342 	{ "😒", 0, 0x101f612 },
    343 	{ "😓", 0, 0x101f613 },
    344 	{ "😛", 0, 0x101f61b },
    345 	{ "😮", 0, 0x101f62e },
    346 	{ "😟", 0, 0x101f61f },
    347 	{ "😟", 0, 0x101f620 },
    348 	{ "😢", 0, 0x101f622 },
    349 	{ "😭", 0, 0x101f62d },
    350 	{ "😳", 0, 0x101f633 },
    351 	{ "😴", 0, 0x101f634 },
    352 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    353 	{ "q", 0, XK_q }, //New overlay -> emoji overlay on Q key (for minimal layer)
    354 	{ "😀", 0, 0x101f600 },
    355 	{ "😁", 0, 0x101f601 },
    356 	{ "😂", 0, 0x101f602 },
    357 	{ "😃", 0, 0x101f603 },
    358 	{ "😄", 0, 0x101f604 },
    359 	{ "😅", 0, 0x101f605 },
    360 	{ "😆", 0, 0x101f606 },
    361 	{ "😇", 0, 0x101f607 },
    362 	{ "😈", 0, 0x101f608 },
    363 	{ "😉", 0, 0x101f609 },
    364 	{ "😊", 0, 0x101f60a },
    365 	{ "😋", 0, 0x101f60b },
    366 	{ "😌", 0, 0x101f60c },
    367 	{ "😍", 0, 0x101f60d },
    368 	{ "😎", 0, 0x101f60e },
    369 	{ "😏", 0, 0x101f60f },
    370 	{ "😐", 0, 0x101f610 },
    371 	{ "😒", 0, 0x101f612 },
    372 	{ "😓", 0, 0x101f613 },
    373 	{ "😛", 0, 0x101f61b },
    374 	{ "😮", 0, 0x101f62e },
    375 	{ "😟", 0, 0x101f61f },
    376 	{ "😟", 0, 0x101f620 },
    377 	{ "😢", 0, 0x101f622 },
    378 	{ "😭", 0, 0x101f62d },
    379 	{ "😳", 0, 0x101f633 },
    380 	{ "😴", 0, 0x101f634 },
    381 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    382 	{ "/?", 0, XK_slash }, //New overlay - punctuation overlay
    383 	{ "1", "!", XK_1, 1 },
    384 	{ "2", "@", XK_2, 1 },
    385 	{ "3", "#", XK_3, 1 },
    386 	{ "4", "$", XK_4, 1 },
    387 	{ "5", "%", XK_5, 1 },
    388 	{ "6", "^", XK_6, 1 },
    389 	{ "7", "&", XK_7, 1 },
    390 	{ "8", "*", XK_8, 1 },
    391 	{ "9", "(", XK_9, 1 },
    392 	{ "0", ")", XK_0, 1 },
    393 	{ "'", "\"", XK_apostrophe, 1 },
    394 	{ "`", "~", XK_grave, 1 },
    395 	{ "-", "_", XK_minus, 1 },
    396 	{ "=", "+", XK_plus, 1 },
    397 	{ "[", "{", XK_bracketleft, 1 },
    398 	{ "]", "}", XK_bracketright, 1 },
    399 	{ ",", "<", XK_comma, 1 },
    400 	{ ".", ">", XK_period, 1 },
    401 	{ "/", "?", XK_slash, 1 },
    402 	{ "\\", "|", XK_backslash, 1 },
    403 	{ "¡", 0, XK_exclamdown, 1 },
    404 	{ "?", 0, XK_questiondown, 1 },
    405 	{ "°", 0, XK_degree, 1 },
    406 	{ "£", 0, XK_sterling, 1 },
    407 	{ "€", 0, XK_EuroSign, 1 },
    408 	{ "¥", 0, XK_yen, 1 },
    409 	{ ";", ":", XK_colon, 1 },
    410 	{ 0, 0, XK_Cancel }, /* XK_Cancel signifies  overlay boundary */
    411 };
    412 
    413 static Key keys_symbols[KEYS] = {
    414 	{ "Esc", 0, XK_Escape, 1 },
    415 	{ "F1", 0, XK_F1, 1 },
    416 	{ "F2", 0, XK_F2, 1 },
    417 	{ "F3", 0, XK_F3, 1 },
    418 	{ "F4", 0, XK_F4, 1 },
    419 	{ "F5", 0, XK_F5, 1 },
    420 	{ "F6", 0, XK_F6, 1 },
    421 	{ "F7", 0, XK_F7, 1 },
    422 	{ "F8", 0, XK_F8, 1 },
    423 	{ "F9", 0, XK_F9, 1 },
    424 	{ "F10", 0, XK_F10, 1 },
    425 	{ 0 }, /* New row */
    426 
    427 	{ "'\"", 0, XK_apostrophe, 1 },
    428 	{ "1", "!", XK_1, 1 },
    429 	{ "2", "@", XK_2, 1 },
    430 	{ "3", "#", XK_3, 1 },
    431 	{ "4", "$", XK_4, 1 },
    432 	{ "5", "%", XK_5, 1 },
    433 	{ "6", "^", XK_6, 1 },
    434 	{ "7", "&", XK_7, 1 },
    435 	{ "8", "*", XK_8, 1 },
    436 	{ "9", "(", XK_9, 1 },
    437 	{ "0", ")", XK_0, 1 },
    438 
    439 	{ 0 }, /* New row */
    440 
    441 	{ ".", ">", XK_period, 1 },
    442 	{ ",", "<", XK_comma, 1 },
    443 	{ "`", "~", XK_grave, 1 },
    444 	{ "-", "_", XK_minus, 1 },
    445 	{ "=", "+", XK_plus, 1 },
    446 	{ "\\", "|", XK_backslash, 1 },
    447 	{ ";", ":", XK_colon, 1 },
    448 	{ "/", "?", XK_slash, 1 },
    449 	{ "[", "{", XK_bracketleft, 1 },
    450 	{ "]", "}", XK_bracketright, 1 },
    451 	{ "Del", 0, XK_Delete, 1 },
    452 
    453 	{ 0 }, /* New row */
    454 
    455 	{ "abc", 0, XK_Mode_switch, 1 },
    456 	{ "☺", 0, 0x101f642, 1 },
    457 	{ "⇤", 0, XK_Home, 1 },
    458 	{ "←", 0, XK_Left, 1 },
    459 	{ "→", 0, XK_Right, 1 },
    460 	{ "⇥", 0, XK_End, 1 },
    461 	{ "⇊", 0, XK_Next, 1 },
    462 	{ "⇈", 0, XK_Prior, 1 },
    463 	{ "Tab", 0, XK_Tab, 1 },
    464 	{ "⌫Bksp", 0, XK_BackSpace, 2 },
    465 
    466 	{ 0 }, /* New row */
    467 	{ "↺", 0, XK_Cancel, 1},
    468 	{ "Shift", 0, XK_Shift_L, 2 },
    469 	{ "Ctrl", 0, XK_Control_L, 1 },
    470 	{ "Alt", 0, XK_Alt_L, 1 },
    471 	{ "", 0, XK_space, 2 },
    472 	{ "↓", 0, XK_Down, 1 },
    473 	{ "↑", 0, XK_Up, 1 },
    474 	{ "↲ Enter", 0, XK_Return, 2 },
    475 };
    476 
    477 static Key keys_functions[KEYS] = {
    478 
    479 	{ "Esc", 0, XK_Escape, 1 },
    480 	{ "▶", 0, XF86XK_AudioPlay, 1 },
    481 	{ "●", 0, XF86XK_AudioRecord, 1 },
    482 	{ "■", 0, XF86XK_AudioStop, 1 },
    483 	{ "◂◂", 0, XF86XK_AudioPrev, 1 },
    484 	{ "▸▸", 0, XF86XK_AudioNext, 1 },
    485 	{ "♫M", 0, XF86XK_AudioMute, 1 },
    486 	{ "♫-", 0, XF86XK_AudioLowerVolume, 1 },
    487 	{ "♫+", 0, XF86XK_AudioRaiseVolume, 1 },
    488 	{ "☀-", 0, XF86XK_MonBrightnessDown, 1 },
    489 	{ "☀+", 0, XF86XK_MonBrightnessUp, 1 },
    490 
    491 	{ 0 }, /* New row */
    492 
    493 	{ "≅", 0, XK_KP_Insert, 1 },
    494 	{ "Del", 0, XK_Delete, 1 },
    495 	{ "⇤", 0, XK_Home, 1 },
    496 	{ "←", 0, XK_Left, 1 },
    497 	{ "→", 0, XK_Right, 1 },
    498 	{ "⇥", 0, XK_End, 1 },
    499 	{ "⇊", 0, XK_Next, 1 },
    500 	{ "⇈", 0, XK_Prior, 1 },
    501 	{ "Tab", 0, XK_Tab, 1 },
    502 	{ "⌫Bksp", 0, XK_BackSpace, 2 },
    503 
    504 	{ 0 }, /* New row */
    505 	{ "↺", 0, XK_Cancel, 1},
    506 	{ "Shift", 0, XK_Shift_L, 2 },
    507 	{ "Ctrl", 0, XK_Control_L, 1 },
    508 	{ "Alt", 0, XK_Alt_L, 1 },
    509 	{ "", 0, XK_space, 2 },
    510 	{ "↓", 0, XK_Down, 1 },
    511 	{ "↑", 0, XK_Up, 1 },
    512 	{ "↲ Enter", 0, XK_Return, 2 },
    513 
    514 	{ 0 }, /* Last item (double 0) */
    515 	{ 0 }, /* Last item (double 0) */
    516 };
    517 
    518 static Key keys_navigation[KEYS] = {
    519 	{ "Esc", 0, XK_Escape, 1 },
    520 	{ "⇤", 0, XK_Home, 1 },
    521 	{ "↑", 0, XK_Up, 1 },
    522 	{ "⇥", 0, XK_End, 1 },
    523 	{ "⇈", 0, XK_Prior, 1 },
    524 	{ 0 }, /* New row */
    525 
    526 	{ "Shift", 0, XK_Shift_L, 1 },
    527 	{ "←", 0, XK_Left, 1 },
    528 	{ "", 0, XK_space, 1 },
    529 	{ "→", 0, XK_Right, 1 },
    530 	{ "⇊", 0, XK_Next, 1 },
    531 
    532 	{ 0 }, /* New row */
    533 
    534 	{ "↺", 0, XK_Cancel, 1},
    535 	{ "⌫Bksp", 0, XK_BackSpace, 1 },
    536 	{ "↓", 0, XK_Down, 1 },
    537 	{ "Tab", 0, XK_Tab, 1 },
    538 	{ "↲ Enter", 0, XK_Return, 1},
    539 
    540 	{ 0 }, /* Last item (double 0) */
    541 	{ 0 }, /* Last item (double 0) */
    542 };
    543 
    544 static Key keys_am[KEYS] = {
    545 	{ "՝","՜", XK_Armenian_exclam, 1 },
    546 	{ "ֆ","Ֆ", XK_Armenian_fe, 1 },
    547 	{ "ձ","Ձ", XK_Armenian_dza, 1 },
    548 	{ "֊","—", XK_Armenian_hyphen, 1 },
    549 	{ ",","՟", XK_comma, 1 },
    550 	{ "։","…", XK_Armenian_full_stop, 1 },
    551 	{ "՞","%", XK_Armenian_question, 1 },
    552 	{ "․","և", XK_Armenian_ligature_ew, 1 },
    553 	{ "՛","՚", XK_Armenian_accent, 1 },
    554 	{ ")","(", XK_parenright, 1 },
    555 	{ "օ","Օ", XK_Armenian_o, 1 },
    556 	{ "է","Է", XK_Armenian_e, 1 },
    557 	{ "ղ","Ղ", XK_Armenian_ghat, 1 },
    558 	{ 0 }, /* New row */
    559 
    560 	{ "ճ", "Ճ", XK_Armenian_tche, 1 },
    561 	{ "փ", "Փ", XK_Armenian_pyur, 1 },
    562 	{ "բ", "Բ", XK_Armenian_ben, 1 },
    563 	{ "ս", "Ս", XK_Armenian_se, 1 },
    564 	{ "մ", "Մ", XK_Armenian_men, 1 },
    565 	{ "ո", "Ո", XK_Armenian_vo, 1 },
    566 	{ "ւ", "Ւ", XK_Armenian_vyun, 1 },
    567 	{ "կ","Կ", XK_Armenian_ken, 1 },
    568 	{ "ը", "Ը", XK_Armenian_at, 1 },
    569 	{ "թ", "Թ", XK_Armenian_to, 1 },
    570 	{ "ծ", "Ծ", XK_Armenian_tsa, 1 },
    571 	{ "ց", "Ց", XK_Armenian_tso, 1 },
    572 	{ 0 }, /* New row */
    573 
    574 	{ "ջ", "Ջ", XK_Armenian_je, 1 },
    575 	{ "վ", "Վ", XK_Armenian_vev, 1 },
    576 	{ "գ", "Գ", XK_Armenian_gim, 1 },
    577 	{ "ե", "Ե", XK_Armenian_yech, 1 },
    578 	{ "ա", "Ա", XK_Armenian_ayb, 1 },
    579 	{ "ն", "Ն", XK_Armenian_nu, 1 },
    580 	{ "ի", "Ի", XK_Armenian_ini, 1 },
    581 	{ "տ", "Տ", XK_Armenian_tyun, 1 },
    582 	{ "հ", "Հ", XK_Armenian_ho, 1 },
    583 	{ "պ", "Պ", XK_Armenian_pe, 1 },
    584 	{ "ր", "Ր", XK_Armenian_re, 1 },
    585 	{ 0 }, /* New row */
    586 
    587 	{ "123", 0, XK_Mode_switch, 1 },
    588 	{ "ժ", "Ժ", XK_Armenian_zhe, 1 },
    589 	{ "դ", "Դ", XK_Armenian_da, 1 },
    590 	{ "չ", "Չ", XK_Armenian_cha, 1 },
    591 	{ "յ", "Յ", XK_Armenian_hi, 1 },
    592 	{ "զ", "Զ", XK_Armenian_za, 1 },
    593 	{ "լ", "Լ", XK_Armenian_lyun, 1 },
    594 	{ "ք", "Ք", XK_Armenian_ke, 1 },
    595 	{ "խ", "Խ", XK_Armenian_khe, 1 },
    596 	{ "շ", "Շ", XK_Armenian_sha, 1 },
    597 	{ "ռ", "Ռ", XK_Armenian_ra, 1 },
    598 	{ "⌫Bksp", 0, XK_BackSpace, 2 },
    599 
    600 	{ 0 }, /* New row */
    601 	{ "↺", 0, XK_Cancel, 1},
    602 	{ "Shift", 0, XK_Shift_L, 2 },
    603 	{ "", 0, XK_space, 2 },
    604 	{ "↲ Enter", 0, XK_Return, 2 },
    605 };
    606 
    607 static Key keys_ru[KEYS] = {
    608 	{ "Esc", 0, XK_Escape, 1 },
    609 	{ "1", "!", XK_1, 1 },
    610 	{ "2", "@", XK_2, 1 },
    611 	{ "3", "#", XK_3, 1 },
    612 	{ "4", "$", XK_4, 1 },
    613 	{ "5", "%", XK_5, 1 },
    614 	{ "6", "^", XK_6, 1 },
    615 	{ "7", "&", XK_7, 1 },
    616 	{ "8", "*", XK_8, 1 },
    617 	{ "9", "(", XK_9, 1 },
    618 	{ "0", ")", XK_0, 1 },
    619 	{ 0 }, /* New row */
    620 
    621 	{ "й", 0, XK_Cyrillic_shorti, 1 },
    622 	{ "ц", 0, XK_Cyrillic_tse, 1 },
    623 	{ "у", 0, XK_Cyrillic_u, 1 },
    624 	{ "к", 0, XK_Cyrillic_ka, 1 },
    625 	{ "е", 0, XK_Cyrillic_ie, 1 },
    626 	{ "н", 0, XK_Cyrillic_en, 1 },
    627 	{ "г", 0, XK_Cyrillic_ghe, 1 },
    628 	{ "ш", 0, XK_Cyrillic_sha, 1 },
    629 	{ "щ", 0, XK_Cyrillic_shcha, 1 },
    630 	{ "з", 0, XK_Cyrillic_ze, 1 },
    631 	{ "х", 0, XK_Cyrillic_ha, 1 },
    632 
    633 	{ 0 }, /* New row */
    634 
    635 	{ "ф", 0, XK_Cyrillic_ef, 1 },
    636 	{ "ы", 0, XK_Cyrillic_yeru, 1 },
    637 	{ "в", 0, XK_Cyrillic_ve, 1 },
    638 	{ "а", 0, XK_Cyrillic_a, 1 },
    639 	{ "п", 0, XK_Cyrillic_pe, 1 },
    640 	{ "р", 0, XK_Cyrillic_er, 1 },
    641 	{ "о", 0, XK_Cyrillic_o, 1 },
    642 	{ "л", 0, XK_Cyrillic_el, 1 },
    643 	{ "д", 0, XK_Cyrillic_de, 1 },
    644 	{ "ж", 0, XK_Cyrillic_zhe, 1 },
    645 	{ "ю", 0, XK_Cyrillic_yu, 1 },
    646 
    647 	{ 0 }, /* New row */
    648 
    649 	{ "123", 0, XK_Mode_switch, 1 },
    650 	{ "я", 0, XK_Cyrillic_ya, 1 },
    651 	{ "ч", 0, XK_Cyrillic_che, 1 },
    652 	{ "с", 0, XK_Cyrillic_es, 1 },
    653 	{ "м", 0, XK_Cyrillic_em, 1 },
    654 	{ "и", 0, XK_Cyrillic_i, 1 },
    655 	{ "т", 0, XK_Cyrillic_te, 1 },
    656 	{ "ь", 0, XK_Cyrillic_softsign, 1 },
    657 	{ "б", 0, XK_Cyrillic_be, 1 },
    658 	{ "⌫Bksp", 0, XK_BackSpace, 2 },
    659 
    660 	{ 0 }, /* New row */
    661 	{ "↺", 0, XK_Cancel, 1},
    662 	{ "Shift", 0, XK_Shift_L, 2 },
    663 	{ "Ctrl", 0, XK_Control_L, 1 },
    664 	{ "Alt", 0, XK_Alt_L, 1 },
    665 	{ "", 0, XK_space, 2 },
    666 	{ "↓", 0, XK_Down, 1 },
    667 	{ "↑", 0, XK_Up, 1 },
    668 	{ "↲ Enter", 0, XK_Return, 2 },
    669 };
    670 
    671 static Key keys_dialer[KEYS] = {
    672 	{ "Esc", 0, XK_Escape, 1 },
    673 	{ "1", "!" , XK_1, 1 },
    674 	{ "2", "@", XK_2, 1 },
    675 	{ "3", "#", XK_3, 1 },
    676 	{ "-", "_", XK_minus, 1 },
    677 	{ ",", "<", XK_comma, 1 },
    678 	{ 0 }, /* New row */
    679 
    680 	{ "Shift", 0, XK_Shift_L, 1 },
    681 	{ "4", "$", XK_4, 1 },
    682 	{ "5", "%", XK_5, 1 },
    683 	{ "6", "^", XK_6, 1 },
    684 	{ "=", "+", XK_equal, 1 },
    685 	{ "/", "?", XK_slash, 1 },
    686 	{ 0 }, /* New row */
    687 
    688 	{ "abc", 0, XK_Mode_switch, 1 },
    689 	{ "7", "&", XK_7, 1 },
    690 	{ "8", "*", XK_8, 1 },
    691 	{ "9", "(", XK_9, 1 },
    692 	{ "⌫Bksp", 0, XK_BackSpace, 2 },
    693 	{ 0 }, /* New row */
    694 
    695 	{ "↺", 0, XK_Cancel, 1},
    696 	{ "", 0, XK_space, 1 },
    697 	{ "0", ")", XK_0, 1 },
    698 	{ ".", ">", XK_period, 1 },
    699 	{ "↲ Enter", 0, XK_Return, 2},
    700 	{ 0 }, /* New row */
    701 	{ 0 }, /* Last item (double 0) */
    702 };
    703 
    704 #define LAYERS 8
    705 static char* layer_names[LAYERS] = {
    706 	"en",
    707 	"symbols",
    708 	"navigation",
    709 	"dialer",
    710 	"minimal",
    711 	"dvorak",
    712 	"am",
    713 	"ru"
    714 };
    715 
    716 static Key* available_layers[LAYERS] = {
    717 	keys_en,
    718 	keys_symbols,
    719 	keys_navigation,
    720 	keys_dialer,
    721 	keys_minimal,
    722 	keys_dvorak,
    723 	keys_am,
    724 	keys_ru,
    725 };
    726 
    727 Buttonmod buttonmods[] = {
    728 	{ XK_Shift_L, Button2 },
    729 	{ XK_Alt_L, Button3 },
    730 };