//    #define KEYS 98 static Key keys_en[KEYS] = { { "Prtscr", XK_Print, 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 }, { "F11", XK_F11, 1 }, { "F12", XK_F12, 1 }, { "Del", XK_Delete, 1 }, { 0 }, /* New row */ { "`~", XK_grave, 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 }, { "-_", XK_minus, 1 }, { "=+", XK_plus, 1 }, { "⌫", XK_BackSpace, 1 }, { "Insert",XK_Insert, 1}, { 0 }, /* New row */ { "->|", XK_Tab, 1 }, { 0, XK_q, 1 }, { 0, XK_w, 1 }, { 0, XK_e, 1 }, { 0, XK_r, 1 }, { 0, XK_t, 1 }, { 0, XK_y, 1 }, { 0, XK_u, 1 }, { 0, XK_i, 1 }, { 0, XK_o, 1 }, { 0, XK_p, 1 }, { "[", XK_bracketleft, 1 }, { "]", XK_bracketright, 1 }, { "\\|", XK_backslash, 1 }, { "Home",XK_Home, 1}, { 0 }, /* New row */ { "", XK_Cancel, 1}, { 0, XK_a, 1 }, { 0, XK_s, 1 }, { 0, XK_d, 1 }, { 0, XK_f, 1 }, { 0, XK_g, 1 }, { 0, XK_h, 1 }, { 0, XK_j, 1 }, { 0, XK_k, 1 }, { 0, XK_l, 1 }, { ":;", XK_semicolon, 1 }, { "'\"", XK_apostrophe, 1 }, { "↵", XK_Return, 1 }, { "End",XK_End, 1}, { 0 }, /* New row */ { "Shift", XK_Shift_L, 1 }, { 0, XK_z, 1 }, { 0, XK_x, 1 }, { 0, XK_c, 1 }, { 0, XK_v, 1 }, { 0, XK_b, 1 }, { 0, XK_n, 1 }, { 0, XK_m, 1 }, { "↑", XK_Up, 1 }, { "<,", XK_comma, 1 }, { ">.", XK_period, 1 }, { "/?", XK_slash, 1 }, { "Shift", XK_Shift_R, 1 }, { "PgDn",XK_Page_Down, 1}, { 0 }, /* New row */ { "Esc", XK_Escape, 1 }, { "Ctrl", XK_Control_L, 1 }, { "Alt", XK_Alt_L, 1 }, { "", XK_Super_L, 1 }, { "", XK_space, 3 }, { "←", XK_Left, 1 }, { "↓", XK_Down, 1 }, { "→", XK_Right, 1}, { "Alt", XK_Alt_R, 1 }, { "", XK_Super_R, 1 }, { "Ctrl", XK_Control_R, 1 }, { "PgUp",XK_Page_Up, 1}, }; static Key keys_random [KEYS] = { { "🙂", 0x101f642 ,1 }, //1 { "😀", 0x101f600 ,1 },//2 { "😁", 0x101f601 ,1 },//3 { "😂", 0x101f602 ,1 },//4 { "😃", 0x101f603 ,1 },//5 { "😄", 0x101f604 ,1 },//6 { "😅", 0x101f605 ,1 },//7 { "😆", 0x101f606 ,1 },//8 { "😇", 0x101f607 ,1 },//9 { "😈", 0x101f608 ,1 },//0 { "😉", 0x101f609 ,1 },//11 { "😊", 0x101f60a ,1 },//12 { "😋", 0x101f60b ,1 },//13 { "😌", 0x101f60c ,1 },//14 {0}, { "😍", 0x101f60d ,1 },//15 { "😎", 0x101f60e ,1 },//16 { "😏", 0x101f60f ,1 },//17 { "😐", 0x101f610 ,1 },//18 { "😒", 0x101f612 ,1 },//19 { "😓", 0x101f613 ,1 },//20 { "😛", 0x101f61b ,1 },//21 { "😮", 0x101f62e ,1 },//22 { "😟", 0x101f61f ,1 },//23 { "😟", 0x101f620 ,1 },//24 { "😢", 0x101f622 ,1 },//25 { "😭", 0x101f62d ,1 },//26 { "😳", 0x101f633 ,1 },//27 { "😴", 0x101f634 ,1 },//28 { 0 }, /* New row */ { "▶", XF86XK_AudioPlay, 1 },//30 { "●", XF86XK_AudioRecord, 1 },//31 { "■", XF86XK_AudioStop, 1 },//32 { "◂◂", XF86XK_AudioPrev, 1 },//33 { "▸▸", XF86XK_AudioNext, 1 },//34 { "♫M", XF86XK_AudioMute, 1 },//35 { "♫-", XF86XK_AudioLowerVolume, 1 },//36 { "♫+", XF86XK_AudioRaiseVolume, 1 },//37 { "☀-", XF86XK_MonBrightnessDown, 1 },//38 { "☀+", XF86XK_MonBrightnessUp, 1 },//39 { "öÖ˝", 0xf6, 1 }, { "äÄ^", 0xe4, 1 }, { "üܨ", 0xfc, 1 }, { "ъ", XK_Cyrillic_hardsign,1 }, { "⌫", XK_BackSpace, 1 }, { 0 }, /* New row */ { "", XK_Cancel, 1},//52 { "й", 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_e ,1 }, { "і", XK_Ukrainian_i ,1 }, { "ё", XK_Cyrillic_io ,1 }, { "Є", XK_Ukrainian_ie ,1 }, { 0 }, /* New row */ { "Shift", XK_Shift_L, 1 }, { "Є", XK_Ukrainian_ie ,1 }, { "і", XK_Ukrainian_i ,1 }, { "ї", XK_Ukrainian_yi ,1 }, { "ў", XK_Byelorussian_shortu ,1 }, { "ф", 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 }, { "ї", XK_Ukrainian_yi ,1 }, { "ў", XK_Byelorussian_shortu ,1 }, { "х", XK_Cyrillic_ha, 1 }, { 0 }, /* New row */ { "ј", XK_Cyrillic_je ,1 }, { "љ", XK_Cyrillic_lje ,1 }, { "њ", XK_Cyrillic_nje ,1 }, { "џ", XK_Cyrillic_dzhe ,1 }, { "ћ", XK_Serbian_tshe ,1 }, { "ђ", XK_Serbian_dje ,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 }, }; Buttonmod buttonmods[] = { { XK_Shift_L, Button2 }, { XK_Alt_L, Button3 }, }; #define OVERLAYS 180 static Key overlay[OVERLAYS] = { { 0, XK_a }, //Overlay for a //--- { "à", XK_agrave }, { "á", XK_aacute }, { "â", XK_acircumflex }, { "ä", XK_adiaeresis }, { "ą", XK_aogonek }, { "ã", XK_atilde }, { "ā", XK_amacron }, { "ă", XK_abreve }, { "å", XK_aring }, { "æ", XK_ae }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ //-- { 0, XK_e }, //Overlay for e (first item after boundary defines the trigger) //--- { "è", XK_egrave }, { "é", XK_eacute }, { "ê", XK_ecircumflex }, { "ë", XK_ediaeresis }, { "ę", XK_eogonek }, { "ē", XK_emacron }, { "ė", XK_eabovedot }, { 0, XK_Cancel }, //-- { 0, XK_y }, //New overlay //--- { "ỳ", XK_ygrave }, { "ý", XK_yacute }, { "ŷ", XK_ycircumflex }, { "ÿ", XK_ydiaeresis }, { 0, XK_Cancel }, //-- { 0, XK_u }, //New overlay //--- { "ù", XK_ugrave }, { "ú", XK_uacute }, { "û", XK_ucircumflex }, { "ü", XK_udiaeresis }, { "ų", XK_uogonek }, { "ū", XK_umacron }, { "ů", XK_uring}, { "ŭ", XK_ubreve}, { "ű", XK_udoubleacute }, { 0, XK_Cancel }, //-- { 0, XK_i }, //New overlay //--- { "ì", XK_igrave }, { "í", XK_iacute }, { "î", XK_icircumflex }, { "ï", XK_idiaeresis }, { "į", XK_iogonek }, { "ī", XK_imacron }, { "ı", XK_idotless }, { 0, XK_Cancel }, //-- { 0, XK_o }, //New overlay //--- { "ò", XK_ograve }, { "ó", XK_oacute }, { "ô", XK_ocircumflex }, { "ö", XK_odiaeresis }, { "ǫ", XK_ogonek }, { "õ", XK_otilde }, { "ō", XK_omacron }, { "ø", XK_oslash }, { "ő", XK_odoubleacute }, { "œ", XK_oe }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ //-- { 0, XK_d }, //New overlay //--- { "ď", XK_dcaron }, { "ð", XK_eth }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ //-- { 0, XK_c }, //New overlay //--- { "ç", XK_ccedilla }, { "ĉ", XK_ccircumflex }, { "č", XK_ccaron }, { "ć", XK_cacute }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ //-- { 0, XK_s }, //New overlay //--- { "ş", XK_scedilla }, { "ŝ", XK_scircumflex }, { "š", XK_scaron }, { "ś", XK_sacute }, { "ß", XK_ssharp }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ //--- { 0, XK_z }, //New overlay //--- { "ž", XK_zcaron }, { "ż", XK_zabovedot }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ //-- { 0, XK_n }, //New overlay //--- { "ñ", XK_ntilde }, { "ń", XK_nacute }, { "ň", XK_ncaron }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ // { 0, XK_t }, //New overlay //--- { "ț", XK_tcedilla }, { "ť", XK_tcaron }, { "þ", XK_thorn }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ //---- { 0, XK_g }, //New overlay //--- { "ĝ", XK_gcircumflex }, { "ğ", XK_gbreve }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ // { 0, XK_h }, //New overlay //--- { "ĥ", XK_hcircumflex }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ // { 0, XK_j }, //New overlay //--- { "ĵ", XK_jcircumflex }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ //-- { 0, XK_l }, //New overlay //--- { "ł", XK_lstroke }, { "ľ", XK_lcaron }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ //-- { 0, XK_r }, //New overlay //--- { "ř", XK_rcaron }, { 0, XK_Cancel }, /* XK_Cancel signifies overlay boundary */ }; #define LAYERS 2 static char* layer_names[LAYERS] = { "en", "random", }; static Key* available_layers[LAYERS] = { keys_en, keys_random, };