From: Diego Augusto Date: Sat, 15 Oct 2022 17:32:53 +0000 (-0400) Subject: scripts: Update keymap-render script to handle xkb keymaps too X-Git-Tag: 23.51.283~51 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a2f03d4b989d98bc40443659a01b1a8c79c5f771;p=thirdparty%2Fplymouth.git scripts: Update keymap-render script to handle xkb keymaps too At the moment the keyboard-render script only generates short names for console layouts. We're going to add /dev/input support to plymouth using libxkbcommon, so we're going to need a list of of those keymaps too. This commit adds that. Some contributions by n3rdopolis and Ray Strode. --- diff --git a/scripts/keymap-render.py b/scripts/keymap-render.py index 53b67dd3..2dc86575 100755 --- a/scripts/keymap-render.py +++ b/scripts/keymap-render.py @@ -3,12 +3,18 @@ import cairo import subprocess import math +import lxml +from lxml import etree FONT_SIZE = 30 MARGIN = int(FONT_SIZE / 3) +#python3-lxml utility is required + def get_keymaps(): + xml = etree.XML(bytes(open('/usr/share/X11/xkb/rules/evdev.xml', 'r').read(), encoding="utf-8")) + keymaps_x11 = xml.xpath('//layout/configItem/description/text()') keymaps = subprocess.check_output(["localectl", "list-keymaps"]).decode("utf-8").strip().split() # Note when changing this you MUST keep ply_keymap_normalize_keymap() @@ -31,12 +37,17 @@ def get_keymaps(): return parts[0] keymaps = list(map(normalize_keymaps ,keymaps)) - #Remove duplicates - ret = [] + keymaps_dedupe = [] for k in keymaps: - if k not in ret: - ret.append(k) + if k not in keymaps_dedupe: + keymaps_dedupe.append(k) + + ret = [] + for k in keymaps_dedupe: + ret.append((k, "PLY_LAYOUT_TERMINAL")) + for k in keymaps_x11: + ret.append((k, "PLY_LAYOUT_XKB")) return ret @@ -49,7 +60,8 @@ ct.set_font_size(FONT_SIZE) max_height = 0.0 total_width = 0.0 for i in get_keymaps(): - extents = ct.text_extents(i) + text=i[0] + extents = ct.text_extents(text) h = extents.height if h > max_height: max_height = h @@ -73,9 +85,11 @@ ct.move_to(MARGIN, MARGIN + max_height - descent) current_x, current_y = (MARGIN, MARGIN + max_height - descent) metadata = [] for km in get_keymaps(): - extents = ct.text_extents(km) - ct.show_text(km) - metadata.append((km, current_x, extents.width + MARGIN * 2)) + km_text=km[0] + km_type=km[1] + extents = ct.text_extents(km_text) + ct.show_text(km_text) + metadata.append((km_text, current_x, extents.width + MARGIN * 2, km_type)) current_x += extents.width + (MARGIN * 2) ct.move_to(current_x, current_y) @@ -84,16 +98,22 @@ sf.write_to_png("keymap-render.png") print("/* This file is autogenerated by running:") print(" * scripts/keymap-render.py > src/libply-splash-graphics/ply-keymap-metadata.h") print(" */") -print("struct ply_keymap_metadata {") +print("typedef struct {") print(" const char *name;") print(" int offset;") print(" int width;") -print("};") +print(" int type;") +print("} ply_keymap_metadata_t;") +print("") +print("typedef enum {") +print(" PLY_LAYOUT_TERMINAL,") +print(" PLY_LAYOUT_XKB,") +print("} ply_layout_types_t;") print("") -print("static struct ply_keymap_metadata ply_keymap_metadata[] = {") +print("static ply_keymap_metadata_t ply_keymap_metadata[] = {") for i in metadata: - print((" { \"%s\", %d, %d }," % (i[0],i[1],i[2]))) + print((" { \"%s\", %d, %d, %s}," % (i[0],i[1],i[2],i[3]))) print(" { NULL, } /* End of array marker */ ") print("};") diff --git a/src/libply-splash-graphics/ply-keymap-metadata.h b/src/libply-splash-graphics/ply-keymap-metadata.h index ef715ae4..d8b13f1c 100644 --- a/src/libply-splash-graphics/ply-keymap-metadata.h +++ b/src/libply-splash-graphics/ply-keymap-metadata.h @@ -1,139 +1,256 @@ /* This file is autogenerated by running: * scripts/keymap-render.py > src/libply-splash-graphics/ply-keymap-metadata.h */ -struct ply_keymap_metadata +typedef struct { const char *name; int offset; int width; -}; + int type; +} ply_keymap_metadata_t; + +typedef enum +{ + PLY_LAYOUT_TERMINAL, + PLY_LAYOUT_XKB, +} ply_layout_types_t; -static struct ply_keymap_metadata ply_keymap_metadata[] = { - { "dvorak", 10, 113 }, - { "al", 123, 44 }, - { "amiga", 167, 101 }, - { "applkey", 268, 126 }, - { "at", 394, 46 }, - { "atari", 440, 81 }, - { "az", 521, 49 }, - { "azerty", 570, 104 }, - { "ba", 674, 49 }, - { "backspace", 723, 157 }, - { "bashkir", 880, 119 }, - { "be", 999, 50 }, - { "bg", 1049, 51 }, - { "br", 1100, 48 }, - { "by", 1148, 51 }, - { "bywin", 1199, 98 }, - { "ca", 1297, 47 }, - { "carpalx", 1344, 118 }, - { "cf", 1462, 45 }, - { "ch", 1507, 49 }, - { "cm", 1556, 59 }, - { "cn", 1615, 49 }, - { "croat", 1664, 89 }, - { "ctrl", 1753, 65 }, - { "cz", 1818, 47 }, - { "de", 1865, 51 }, - { "defkeymap", 1916, 170 }, - { "dk", 2086, 53 }, - { "dz", 2139, 50 }, - { "ee", 2189, 50 }, - { "emacs", 2239, 106 }, - { "emacs2", 2345, 122 }, - { "en", 2467, 51 }, - { "epo", 2518, 68 }, - { "es", 2586, 49 }, - { "et", 2635, 46 }, - { "euro", 2681, 80 }, - { "euro1", 2761, 95 }, - { "euro2", 2856, 97 }, - { "fi", 2953, 38 }, - { "fo", 2991, 47 }, - { "fr", 3038, 44 }, - { "gb", 3082, 53 }, - { "ge", 3135, 51 }, - { "gh", 3186, 52 }, - { "gr", 3238, 49 }, - { "hr", 3287, 48 }, - { "hu", 3335, 50 }, - { "hu101", 3385, 99 }, - { "ie", 3484, 42 }, - { "il", 3526, 36 }, - { "in", 3562, 43 }, - { "iq", 3605, 43 }, - { "ir", 3648, 40 }, - { "is", 3688, 41 }, - { "it", 3729, 38 }, - { "it2", 3767, 54 }, - { "jp", 3821, 46 }, - { "jp106", 3867, 96 }, - { "kazakh", 3963, 112 }, - { "ke", 4075, 49 }, - { "keypad", 4124, 114 }, - { "kr", 4238, 47 }, - { "ky", 4285, 50 }, - { "kyrgyz", 4335, 107 }, - { "kz", 4442, 48 }, - { "la", 4490, 42 }, - { "latam", 4532, 97 }, - { "lk", 4629, 45 }, - { "lt", 4674, 39 }, - { "lv", 4713, 44 }, - { "ma", 4757, 59 }, - { "pl", 4816, 44 }, - { "pt", 4860, 46 }, - { "se", 4906, 48 }, - { "template", 4954, 142 }, - { "uk", 5096, 53 }, - { "us", 5149, 50 }, - { "md", 5199, 61 }, - { "me", 5260, 60 }, - { "mk", 5320, 62 }, - { "mk0", 5382, 79 }, - { "ml", 5461, 54 }, - { "mm", 5515, 71 }, - { "mt", 5586, 56 }, - { "ng", 5642, 51 }, - { "nl", 5693, 44 }, - { "nl2", 5737, 60 }, - { "no", 5797, 51 }, - { "pc110", 5848, 95 }, - { "ph", 5943, 51 }, - { "pl1", 5994, 58 }, - { "pl2", 6052, 60 }, - { "pl3", 6112, 60 }, - { "pl4", 6172, 62 }, - { "ro", 6234, 46 }, - { "rs", 6280, 44 }, - { "ru", 6324, 45 }, - { "ru1", 6369, 61 }, - { "ru2", 6430, 63 }, - { "ru3", 6493, 63 }, - { "ru4", 6556, 65 }, - { "ruwin", 6621, 95 }, - { "sg", 6716, 49 }, - { "si", 6765, 40 }, - { "sk", 6805, 50 }, - { "slovene", 6855, 122 }, - { "sr", 6977, 46 }, - { "sunkeymap", 7023, 174 }, - { "sv", 7197, 49 }, - { "sy", 7246, 49 }, - { "tj", 7295, 38 }, - { "tm", 7333, 57 }, - { "tr", 7390, 44 }, - { "tralt", 7434, 79 }, - { "trf", 7513, 55 }, - { "trq", 7568, 59 }, - { "ttwin", 7627, 90 }, - { "tw", 7717, 56 }, - { "ua", 7773, 50 }, - { "unicode", 7823, 124 }, - { "uz", 7947, 50 }, - { "vn", 7997, 51 }, - { "wangbe", 8048, 126 }, - { "wangbe2", 8174, 143 }, - { "windowkeys", 8317, 188 }, - { NULL, } /* End of array marker */ +static ply_keymap_metadata_t ply_keymap_metadata[] = { + { "3l", 10, 47, PLY_LAYOUT_TERMINAL }, + { "dvorak", 57, 113, PLY_LAYOUT_TERMINAL }, + { "adnw", 170, 94, PLY_LAYOUT_TERMINAL }, + { "al", 264, 45, PLY_LAYOUT_TERMINAL }, + { "amiga", 309, 103, PLY_LAYOUT_TERMINAL }, + { "apple", 412, 93, PLY_LAYOUT_TERMINAL }, + { "applkey", 505, 126, PLY_LAYOUT_TERMINAL }, + { "ara", 631, 62, PLY_LAYOUT_TERMINAL }, + { "at", 693, 46, PLY_LAYOUT_TERMINAL }, + { "atari", 739, 81, PLY_LAYOUT_TERMINAL }, + { "az", 820, 49, PLY_LAYOUT_TERMINAL }, + { "azerty", 869, 105, PLY_LAYOUT_TERMINAL }, + { "ba", 974, 50, PLY_LAYOUT_TERMINAL }, + { "backspace", 1024, 157, PLY_LAYOUT_TERMINAL }, + { "bashkir", 1181, 119, PLY_LAYOUT_TERMINAL }, + { "be", 1300, 50, PLY_LAYOUT_TERMINAL }, + { "bg", 1350, 51, PLY_LAYOUT_TERMINAL }, + { "bone", 1401, 84, PLY_LAYOUT_TERMINAL }, + { "br", 1485, 48, PLY_LAYOUT_TERMINAL }, + { "by", 1533, 51, PLY_LAYOUT_TERMINAL }, + { "bywin", 1584, 98, PLY_LAYOUT_TERMINAL }, + { "ca", 1682, 48, PLY_LAYOUT_TERMINAL }, + { "carpalx", 1730, 118, PLY_LAYOUT_TERMINAL }, + { "cf", 1848, 46, PLY_LAYOUT_TERMINAL }, + { "ch", 1894, 49, PLY_LAYOUT_TERMINAL }, + { "cm", 1943, 59, PLY_LAYOUT_TERMINAL }, + { "cn", 2002, 49, PLY_LAYOUT_TERMINAL }, + { "croat", 2051, 89, PLY_LAYOUT_TERMINAL }, + { "ctrl", 2140, 66, PLY_LAYOUT_TERMINAL }, + { "cz", 2206, 47, PLY_LAYOUT_TERMINAL }, + { "de", 2253, 51, PLY_LAYOUT_TERMINAL }, + { "defkeymap", 2304, 170, PLY_LAYOUT_TERMINAL }, + { "dk", 2474, 53, PLY_LAYOUT_TERMINAL }, + { "dz", 2527, 50, PLY_LAYOUT_TERMINAL }, + { "ee", 2577, 50, PLY_LAYOUT_TERMINAL }, + { "emacs", 2627, 106, PLY_LAYOUT_TERMINAL }, + { "emacs2", 2733, 122, PLY_LAYOUT_TERMINAL }, + { "en", 2855, 51, PLY_LAYOUT_TERMINAL }, + { "epo", 2906, 69, PLY_LAYOUT_TERMINAL }, + { "es", 2975, 49, PLY_LAYOUT_TERMINAL }, + { "et", 3024, 46, PLY_LAYOUT_TERMINAL }, + { "euro", 3070, 81, PLY_LAYOUT_TERMINAL }, + { "euro1", 3151, 92, PLY_LAYOUT_TERMINAL }, + { "euro2", 3243, 97, PLY_LAYOUT_TERMINAL }, + { "fa", 3340, 46, PLY_LAYOUT_TERMINAL }, + { "fi", 3386, 38, PLY_LAYOUT_TERMINAL }, + { "fo", 3424, 48, PLY_LAYOUT_TERMINAL }, + { "fr", 3472, 44, PLY_LAYOUT_TERMINAL }, + { "gb", 3516, 54, PLY_LAYOUT_TERMINAL }, + { "ge", 3570, 52, PLY_LAYOUT_TERMINAL }, + { "gh", 3622, 53, PLY_LAYOUT_TERMINAL }, + { "gr", 3675, 50, PLY_LAYOUT_TERMINAL }, + { "hr", 3725, 48, PLY_LAYOUT_TERMINAL }, + { "hu", 3773, 50, PLY_LAYOUT_TERMINAL }, + { "hu101", 3823, 96, PLY_LAYOUT_TERMINAL }, + { "id", 3919, 43, PLY_LAYOUT_TERMINAL }, + { "ie", 3962, 42, PLY_LAYOUT_TERMINAL }, + { "il", 4004, 37, PLY_LAYOUT_TERMINAL }, + { "in", 4041, 43, PLY_LAYOUT_TERMINAL }, + { "iq", 4084, 43, PLY_LAYOUT_TERMINAL }, + { "ir", 4127, 40, PLY_LAYOUT_TERMINAL }, + { "is", 4167, 41, PLY_LAYOUT_TERMINAL }, + { "it", 4208, 38, PLY_LAYOUT_TERMINAL }, + { "it2", 4246, 54, PLY_LAYOUT_TERMINAL }, + { "jp", 4300, 46, PLY_LAYOUT_TERMINAL }, + { "jp106", 4346, 96, PLY_LAYOUT_TERMINAL }, + { "kazakh", 4442, 113, PLY_LAYOUT_TERMINAL }, + { "ke", 4555, 49, PLY_LAYOUT_TERMINAL }, + { "keypad", 4604, 114, PLY_LAYOUT_TERMINAL }, + { "ko", 4718, 51, PLY_LAYOUT_TERMINAL }, + { "koy", 4769, 67, PLY_LAYOUT_TERMINAL }, + { "kr", 4836, 47, PLY_LAYOUT_TERMINAL }, + { "ky", 4883, 50, PLY_LAYOUT_TERMINAL }, + { "kyrgyz", 4933, 108, PLY_LAYOUT_TERMINAL }, + { "kz", 5041, 48, PLY_LAYOUT_TERMINAL }, + { "la", 5089, 42, PLY_LAYOUT_TERMINAL }, + { "latam", 5131, 96, PLY_LAYOUT_TERMINAL }, + { "lk", 5227, 44, PLY_LAYOUT_TERMINAL }, + { "lt", 5271, 38, PLY_LAYOUT_TERMINAL }, + { "lv", 5309, 43, PLY_LAYOUT_TERMINAL }, + { "ma", 5352, 60, PLY_LAYOUT_TERMINAL }, + { "no", 5412, 52, PLY_LAYOUT_TERMINAL }, + { "pl", 5464, 45, PLY_LAYOUT_TERMINAL }, + { "pt", 5509, 46, PLY_LAYOUT_TERMINAL }, + { "se", 5555, 48, PLY_LAYOUT_TERMINAL }, + { "template", 5603, 142, PLY_LAYOUT_TERMINAL }, + { "uk", 5745, 53, PLY_LAYOUT_TERMINAL }, + { "us", 5798, 50, PLY_LAYOUT_TERMINAL }, + { "md", 5848, 61, PLY_LAYOUT_TERMINAL }, + { "me", 5909, 60, PLY_LAYOUT_TERMINAL }, + { "mk", 5969, 62, PLY_LAYOUT_TERMINAL }, + { "mk0", 6031, 79, PLY_LAYOUT_TERMINAL }, + { "ml", 6110, 55, PLY_LAYOUT_TERMINAL }, + { "mm", 6165, 71, PLY_LAYOUT_TERMINAL }, + { "mt", 6236, 56, PLY_LAYOUT_TERMINAL }, + { "neo", 6292, 68, PLY_LAYOUT_TERMINAL }, + { "neoqwertz", 6360, 162, PLY_LAYOUT_TERMINAL }, + { "ng", 6522, 51, PLY_LAYOUT_TERMINAL }, + { "nl", 6573, 45, PLY_LAYOUT_TERMINAL }, + { "nl2", 6618, 60, PLY_LAYOUT_TERMINAL }, + { "pc110", 6678, 95, PLY_LAYOUT_TERMINAL }, + { "ph", 6773, 51, PLY_LAYOUT_TERMINAL }, + { "pl1", 6824, 55, PLY_LAYOUT_TERMINAL }, + { "pl2", 6879, 60, PLY_LAYOUT_TERMINAL }, + { "pl3", 6939, 61, PLY_LAYOUT_TERMINAL }, + { "pl4", 7000, 62, PLY_LAYOUT_TERMINAL }, + { "ro", 7062, 47, PLY_LAYOUT_TERMINAL }, + { "rs", 7109, 44, PLY_LAYOUT_TERMINAL }, + { "ru", 7153, 45, PLY_LAYOUT_TERMINAL }, + { "ru1", 7198, 58, PLY_LAYOUT_TERMINAL }, + { "ru2", 7256, 63, PLY_LAYOUT_TERMINAL }, + { "ru3", 7319, 64, PLY_LAYOUT_TERMINAL }, + { "ru4", 7383, 65, PLY_LAYOUT_TERMINAL }, + { "ruwin", 7448, 95, PLY_LAYOUT_TERMINAL }, + { "sg", 7543, 49, PLY_LAYOUT_TERMINAL }, + { "si", 7592, 40, PLY_LAYOUT_TERMINAL }, + { "sk", 7632, 50, PLY_LAYOUT_TERMINAL }, + { "slovene", 7682, 122, PLY_LAYOUT_TERMINAL }, + { "sr", 7804, 46, PLY_LAYOUT_TERMINAL }, + { "sunkeymap", 7850, 174, PLY_LAYOUT_TERMINAL }, + { "sv", 8024, 49, PLY_LAYOUT_TERMINAL }, + { "sy", 8073, 49, PLY_LAYOUT_TERMINAL }, + { "tj", 8122, 38, PLY_LAYOUT_TERMINAL }, + { "tm", 8160, 57, PLY_LAYOUT_TERMINAL }, + { "tr", 8217, 44, PLY_LAYOUT_TERMINAL }, + { "tralt", 8261, 79, PLY_LAYOUT_TERMINAL }, + { "trf", 8340, 56, PLY_LAYOUT_TERMINAL }, + { "trq", 8396, 59, PLY_LAYOUT_TERMINAL }, + { "ttwin", 8455, 90, PLY_LAYOUT_TERMINAL }, + { "tw", 8545, 56, PLY_LAYOUT_TERMINAL }, + { "ua", 8601, 51, PLY_LAYOUT_TERMINAL }, + { "unicode", 8652, 124, PLY_LAYOUT_TERMINAL }, + { "us1", 8776, 61, PLY_LAYOUT_TERMINAL }, + { "uz", 8837, 50, PLY_LAYOUT_TERMINAL }, + { "vn", 8887, 51, PLY_LAYOUT_TERMINAL }, + { "wangbe", 8938, 127, PLY_LAYOUT_TERMINAL }, + { "wangbe2", 9065, 144, PLY_LAYOUT_TERMINAL }, + { "windowkeys", 9209, 188, PLY_LAYOUT_TERMINAL }, + { "English (US)", 9397, 182, PLY_LAYOUT_XKB }, + { "Dari", 9579, 75, PLY_LAYOUT_XKB }, + { "Arabic", 9654, 107, PLY_LAYOUT_XKB }, + { "Albanian", 9761, 139, PLY_LAYOUT_XKB }, + { "Armenian", 9900, 152, PLY_LAYOUT_XKB }, + { "German (Austria)", 10052, 252, PLY_LAYOUT_XKB }, + { "English (Australian)", 10304, 284, PLY_LAYOUT_XKB }, + { "Azerbaijani", 10588, 172, PLY_LAYOUT_XKB }, + { "Belarusian", 10760, 162, PLY_LAYOUT_XKB }, + { "Belgian", 10922, 121, PLY_LAYOUT_XKB }, + { "Bangla", 11043, 113, PLY_LAYOUT_XKB }, + { "Indian", 11156, 101, PLY_LAYOUT_XKB }, + { "Bosnian", 11257, 126, PLY_LAYOUT_XKB }, + { "Portuguese (Brazil)", 11383, 279, PLY_LAYOUT_XKB }, + { "Bulgarian", 11662, 150, PLY_LAYOUT_XKB }, + { "Berber (Algeria, Latin)", 11812, 317, PLY_LAYOUT_XKB }, + { "Arabic (Morocco)", 12129, 249, PLY_LAYOUT_XKB }, + { "English (Cameroon)", 12378, 285, PLY_LAYOUT_XKB }, + { "Burmese", 12663, 139, PLY_LAYOUT_XKB }, + { "French (Canada)", 12802, 237, PLY_LAYOUT_XKB }, + { "French (Democratic Republic of the Congo)", 13039, 594, PLY_LAYOUT_XKB }, + { "Chinese", 13633, 125, PLY_LAYOUT_XKB }, + { "Croatian", 13758, 134, PLY_LAYOUT_XKB }, + { "Czech", 13892, 99, PLY_LAYOUT_XKB }, + { "Danish", 13991, 111, PLY_LAYOUT_XKB }, + { "Dutch", 14102, 98, PLY_LAYOUT_XKB }, + { "Dzongkha", 14200, 155, PLY_LAYOUT_XKB }, + { "Estonian", 14355, 135, PLY_LAYOUT_XKB }, + { "Persian", 14490, 118, PLY_LAYOUT_XKB }, + { "Iraqi", 14608, 79, PLY_LAYOUT_XKB }, + { "Faroese", 14687, 125, PLY_LAYOUT_XKB }, + { "Finnish", 14812, 115, PLY_LAYOUT_XKB }, + { "French", 14927, 110, PLY_LAYOUT_XKB }, + { "English (Ghana)", 15037, 232, PLY_LAYOUT_XKB }, + { "N'Ko (AZERTY)", 15269, 225, PLY_LAYOUT_XKB }, + { "Georgian", 15494, 144, PLY_LAYOUT_XKB }, + { "German", 15638, 128, PLY_LAYOUT_XKB }, + { "Greek", 15766, 102, PLY_LAYOUT_XKB }, + { "Hungarian", 15868, 160, PLY_LAYOUT_XKB }, + { "Icelandic", 16028, 138, PLY_LAYOUT_XKB }, + { "Hebrew", 16166, 126, PLY_LAYOUT_XKB }, + { "Italian", 16292, 103, PLY_LAYOUT_XKB }, + { "Japanese", 16395, 144, PLY_LAYOUT_XKB }, + { "Kyrgyz", 16539, 112, PLY_LAYOUT_XKB }, + { "Khmer (Cambodia)", 16651, 272, PLY_LAYOUT_XKB }, + { "Kazakh", 16923, 117, PLY_LAYOUT_XKB }, + { "Lao", 17040, 67, PLY_LAYOUT_XKB }, + { "Spanish (Latin American)", 17107, 355, PLY_LAYOUT_XKB }, + { "Lithuanian", 17462, 160, PLY_LAYOUT_XKB }, + { "Latvian", 17622, 116, PLY_LAYOUT_XKB }, + { "Maori", 17738, 96, PLY_LAYOUT_XKB }, + { "Montenegrin", 17834, 192, PLY_LAYOUT_XKB }, + { "Macedonian", 18026, 181, PLY_LAYOUT_XKB }, + { "Maltese", 18207, 125, PLY_LAYOUT_XKB }, + { "Mongolian", 18332, 162, PLY_LAYOUT_XKB }, + { "Norwegian", 18494, 168, PLY_LAYOUT_XKB }, + { "Polish", 18662, 100, PLY_LAYOUT_XKB }, + { "Portuguese", 18762, 173, PLY_LAYOUT_XKB }, + { "Romanian", 18935, 154, PLY_LAYOUT_XKB }, + { "Russian", 19089, 122, PLY_LAYOUT_XKB }, + { "Serbian", 19211, 122, PLY_LAYOUT_XKB }, + { "Slovenian", 19333, 151, PLY_LAYOUT_XKB }, + { "Slovak", 19484, 111, PLY_LAYOUT_XKB }, + { "Spanish", 19595, 125, PLY_LAYOUT_XKB }, + { "Swedish", 19720, 132, PLY_LAYOUT_XKB }, + { "German (Switzerland)", 19852, 316, PLY_LAYOUT_XKB }, + { "Arabic (Syria)", 20168, 200, PLY_LAYOUT_XKB }, + { "Tajik", 20368, 87, PLY_LAYOUT_XKB }, + { "Sinhala (phonetic)", 20455, 262, PLY_LAYOUT_XKB }, + { "Thai", 20717, 78, PLY_LAYOUT_XKB }, + { "Turkish", 20795, 121, PLY_LAYOUT_XKB }, + { "Taiwanese", 20916, 164, PLY_LAYOUT_XKB }, + { "Ukrainian", 21080, 149, PLY_LAYOUT_XKB }, + { "English (UK)", 21229, 185, PLY_LAYOUT_XKB }, + { "Uzbek", 21414, 105, PLY_LAYOUT_XKB }, + { "Vietnamese", 21519, 179, PLY_LAYOUT_XKB }, + { "Korean", 21698, 115, PLY_LAYOUT_XKB }, + { "Irish", 21813, 77, PLY_LAYOUT_XKB }, + { "Urdu (Pakistan)", 21890, 227, PLY_LAYOUT_XKB }, + { "Dhivehi", 22117, 120, PLY_LAYOUT_XKB }, + { "English (South Africa)", 22237, 310, PLY_LAYOUT_XKB }, + { "Esperanto", 22547, 156, PLY_LAYOUT_XKB }, + { "Nepali", 22703, 106, PLY_LAYOUT_XKB }, + { "English (Nigeria)", 22809, 245, PLY_LAYOUT_XKB }, + { "Amharic", 23054, 134, PLY_LAYOUT_XKB }, + { "Wolof", 23188, 106, PLY_LAYOUT_XKB }, + { "Braille", 23294, 107, PLY_LAYOUT_XKB }, + { "Turkmen", 23401, 142, PLY_LAYOUT_XKB }, + { "Bambara", 23543, 141, PLY_LAYOUT_XKB }, + { "Swahili (Tanzania)", 23684, 267, PLY_LAYOUT_XKB }, + { "French (Togo)", 23951, 206, PLY_LAYOUT_XKB }, + { "Swahili (Kenya)", 24157, 228, PLY_LAYOUT_XKB }, + { "Tswana", 24385, 124, PLY_LAYOUT_XKB }, + { "Filipino", 24509, 119, PLY_LAYOUT_XKB }, + { "Moldavian", 24628, 158, PLY_LAYOUT_XKB }, + { "Indonesian (Latin)", 24786, 259, PLY_LAYOUT_XKB }, + { "Malay (Jawi, Arabic Keyboard)", 25045, 423, PLY_LAYOUT_XKB }, + { "A user-defined custom Layout", 25468, 423, PLY_LAYOUT_XKB }, + { NULL, } /* End of array marker */ }; diff --git a/themes/spinfinity/keymap-render.png b/themes/spinfinity/keymap-render.png index 4f8c459d..91a3eec9 100644 Binary files a/themes/spinfinity/keymap-render.png and b/themes/spinfinity/keymap-render.png differ diff --git a/themes/spinner/keymap-render.png b/themes/spinner/keymap-render.png index 4aaed5ab..91a3eec9 100644 Binary files a/themes/spinner/keymap-render.png and b/themes/spinner/keymap-render.png differ