layout.mobile-intl.h - svkbd - simple virtual keyboard
 (HTM) git clone git://git.suckless.org/svkbd
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) 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 };