Fix keybindings on a Spanish ISO keyboard (cherry-pick #20995) (#20999)

gcp-cherry-pick-bot[bot] , Conrad Irwin , and Peter created

Cherry-picked Fix keybindings on a Spanish ISO keyboard (#20995)

Co-Authored-By: Peter <peter@zed.dev>

Also reformatted the mappings to be easier to read/edit by hand.

Release Notes:

- Fixed keyboard shortcuts on Spanish ISO keyboards

---------

Co-authored-by: Peter <peter@zed.dev>

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Co-authored-by: Peter <peter@zed.dev>

Change summary

crates/settings/src/key_equivalents.rs | 1518 +++++++++++++++++++++++++--
1 file changed, 1,369 insertions(+), 149 deletions(-)

Detailed changes

crates/settings/src/key_equivalents.rs 🔗

@@ -26,157 +26,1377 @@ use collections::HashMap;
 // From there I used multi-cursor to produce this match statement.
 #[cfg(target_os = "macos")]
 pub fn get_key_equivalents(layout: &str) -> Option<HashMap<char, char>> {
-    let (from, to) = match layout {
-        "com.apple.keylayout.Welsh" => ("#", "£"),
-        "com.apple.keylayout.Turkmen" => ("qc]Q`|[XV\\^v~Cx}{", "äçöÄžŞňÜÝş№ýŽÇüÖŇ"),
-        "com.apple.keylayout.Turkish-QWERTY-PC" => (
-            "$\\|`'[}^=.#{*+:/~;)(@<,&]>\"",
-            "+,;<ığÜ&.ç^Ğ(:Ş*>ş=)'Öö/üÇI",
-        ),
-        "com.apple.keylayout.Sami-PC" => (
-            "}*x\"w[~^/@`]{|<)>W(\\X=Qq&':;",
-            "Æ(čŊšøŽ&´\"žæØĐ;=:Š)đČ`Áá/ŋÅå",
-        ),
-        "com.apple.keylayout.LatinAmerican" => {
-            ("[^~>`(<\\@{;*&/):]|='}\"", "{&>:<);¿\"[ñ(/'=Ñ}¡*´]¨")
-        }
-        "com.apple.keylayout.IrishExtended" => ("#", "£"),
-        "com.apple.keylayout.Icelandic" => ("[}=:/'){(*&;^|`\"\\>]<~@", "æ´*Ð'ö=Æ)(/ð&Þ<Öþ:´;>\""),
-        "com.apple.keylayout.German-DIN-2137" => {
-            ("}~/<^>{`:\\)&=[]@|;#'\"(*", "Ä>ß;&:Ö<Ü#=/*öä\"'ü§´`)(")
-        }
-        "com.apple.keylayout.FinnishSami-PC" => {
-            (")=*\"\\[@{:>';/<|~(]}^`&", "=`(ˆ@ö\"ÖÅ:¨å´;*>)äÄ&</")
-        }
-        "com.apple.keylayout.FinnishExtended" => {
-            ("];{`:'*<~=/}\\|&[\"($^)>@", "äåÖ<Ũ(;>`´Ä'*/öˆ)€&=:\"")
-        }
-        "com.apple.keylayout.Faroese" => ("}\";/$>^@~`:&[*){|]=(\\<'", "ÐØæ´€:&\"><Æ/å(=Å*ð`)';ø"),
-        "com.apple.keylayout.Croatian-PC" => {
-            ("{@~;<=>(&*['|]\":/}^`)\\", "Š\">č;*:)/(šćŽđĆČ'Đ&<=ž")
-        }
-        "com.apple.keylayout.Croatian" => ("{@;<~=>(&*['|]\":}^)\\`", "Š\"č;>*:)'(šćŽđĆČĐ&=ž<"),
-        "com.apple.keylayout.Azeri" => (":{W?./\"[}<]|,>';w", "IÖÜ,ş.ƏöĞÇğ/çŞəıü"),
-        "com.apple.keylayout.Albanian" => ("\\'~;:|<>`\"@", "ë@>çÇË;:<'\""),
-        "com.apple.keylayout.SwissFrench" => (
-            ":@&'~^)$;\"][\\/#={!|*+`<(>}",
-            "ü\"/^>&=çè`àé$'*¨ö+£(!<;):ä",
-        ),
-        "com.apple.keylayout.Swedish" => ("(]\\\"~$`^{|/>*:;<)&=[}'@", ")ä'^>€<&Ö*´:(Åå;=/`öĨ\""),
-        "com.apple.keylayout.Swedish-Pro" => {
-            ("/^*`'{|)$>&<[\\;(~\"}@]:=", "´&(<¨Ö*=€:/;ö'å)>^Ä\"äÅ`")
-        }
-        "com.apple.keylayout.Spanish" => ("|!\\<{[:;@`/~].'>}\"^", "\"¡'¿Ññº´!<.>;ç`Ç:¨/"),
-        "com.apple.keylayout.Spanish-ISO" => (
-            "|~`]/:)(<&^>*;#}\"{.\\['@",
-            "\"><;.º=)¿/&Ç(´·not found¨Ñç'ñ`\"",
-        ),
-        "com.apple.keylayout.Portuguese" => (")`/'^\"<];>[:{@}(&*=~", "=<'´&`;~º:çªÇ\"^)/(*>"),
-        "com.apple.keylayout.Italian" => (
-            "*7};8:!5%(1&4]^\\6)32>.</0|$,'{[`\"~9#@",
-            "8)*ò£!1ç59&7($6§è0'\"/:.,é°4;ù^ì<%>à32",
-        ),
-        "com.apple.keylayout.Italian-Pro" => {
-            ("/:@[]'\\=){;|#<\"(*^&`}>~", "'é\"òàìù*=çè§£;^)(&/<°:>")
-        }
-        "com.apple.keylayout.Irish" => ("#", "£"),
-        "com.apple.keylayout.German" => ("=`#'}:)/\"^&]*{;|[<(>~@\\", "*<§´ÄÜ=ß`&/ä(Öü'ö;):>\"#"),
-        "com.apple.keylayout.French" => (
-            "*}7;8:!5%(1&4]\\^6)32>.</0|${'[`\"~9#@",
-            "8*è)!°1(59&7'$`6§0\"é/;.:à£4¨ù^<%>ç32",
-        ),
-        "com.apple.keylayout.French-numerical" => (
-            "|!52;][>&@\"%'{)<~7.1/^(}*8#0$9`6\\3:4",
-            "£1(é)$^/72%5ù¨0.>è;&:69*8!3à4ç<§`\"°'",
-        ),
-        "com.apple.keylayout.French-PC" => (
-            "!&\"_$}/72>8]#:31)*<%4;6\\-{['@(0|5.`9~^",
-            "17%°4£:èé/_$3§\"&08.5'!-*)¨^ù29àμ(;<ç>6",
-        ),
-        "com.apple.keylayout.Finnish" => ("/^*`)'{|$>&<[\\~;(\"}@]:=", "´&(<=¨Ö*€:/;ö'>å)^Ä\"äÅ`"),
-        "com.apple.keylayout.Danish" => ("=[;'`{}|>]*^(&@~)<\\/$\":", "`æå¨<ÆØ*:ø(&)/\">=;'´€^Å"),
-        "com.apple.keylayout.Canadian-CSA" => ("\\?']/><[{}|~`\"", "àÉèçé\"'^¨ÇÀÙùÈ"),
-        "com.apple.keylayout.British" => ("#", "£"),
-        "com.apple.keylayout.Brazilian-ABNT2" => ("\"|~?`'/^\\", "`^\"Ç'´ç¨~"),
-        "com.apple.keylayout.Belgian" => (
-            "`3/*<\\8>7#&96@);024(|'1\":$[~5.%^}]{!",
-            "<\":8.`!/è37ç§20)àé'9£ù&%°4^>(;56*$¨1",
-        ),
-        "com.apple.keylayout.Austrian" => ("/^*`'{|)>&<[\\;(~\"}@]:=#", "ß&(<´Ö'=:/;ö#ü)>`Ä\"äÜ*§"),
-        "com.apple.keylayout.Slovak-QWERTY" => (
-            "):9;63'\"]^/+@~>`?<!#5&${2}%*18(704[",
-            "0\"íôžš§!ä6'%2Ň:ňˇ?13ť74ÚľÄ58+á9ýéčú",
-        ),
-        "com.apple.keylayout.Slovak" => (
-            "!$`10&:#4^*~{%5')}6/\"[8]97?;<@23>(+",
-            "14ň+é7\"3č68ŇÚ5ť§0Äž'!úáäíýˇô?2ľš:9%",
-        ),
-        "com.apple.keylayout.Polish" => (
-            "&)|?,%:;^}]_{!+#(*`/[~<\"$.>'@=\\",
-            ":\"$Ż.+Łł=)(ćź§]!/_<żó>śę?,ńą%[;",
-        ),
-        "com.apple.keylayout.Lithuanian" => ("+#&=!%1*@73^584$26", "ŽĘŲžĄĮąŪČųęŠįūėĖčš"),
-        "com.apple.keylayout.Hungarian" => (
-            "}(*@\"{=/|;>'[`<~\\!$&0#:]^)+",
-            "Ú)(\"ÁŐóüŰé:áőíÜÍű'!=ö+Éú/ÖÓ",
-        ),
-        "com.apple.keylayout.Hungarian-QWERTY" => (
-            "=]#>@/&<`0')~(\\!:*;$\"+^{|}[",
-            "óú+:\"ü=ÜíöáÖÍ)ű'É(é!ÁÓ/ŐŰÚő",
-        ),
-        "com.apple.keylayout.Czech-QWERTY" => (
-            "9>0[2()\"}@]46%5;#8{*7^~+!3?&'<$/1`:",
-            "í:éúě90!(2)čž5řů3áÚ8ý6`%1šˇ7§?4'+¨\"",
-        ),
-        "com.apple.keylayout.Maltese" => ("[`}{#]~", "ġżĦĠ£ħŻ"),
-        "com.apple.keylayout.Turkish" => (
-            "|}(#>&^-/`$%@]~*,[\"<_.{:'\\)",
-            "ÜI%\"Ç)/ş.<'(*ı>_öğ-ÖŞçĞ$,ü:",
-        ),
-        "com.apple.keylayout.Turkish-Standard" => {
-            ("|}(#>=&^`@]~*,;[\"<.{:'\\)", "ÜI)^;*'&ö\"ıÖ(.çğŞ:,ĞÇşü=")
-        }
-        "com.apple.keylayout.NorwegianSami-PC" => {
-            ("\"}~<`&>':{@*^|\\)=([]/;", "ˆÆ>;</:¨ÅØ\"(&*@=`)øæ´å")
-        }
-        "com.apple.keylayout.Serbian-Latin" => {
-            (";\\@>&'<]\"|(=}^)`[~:*{", "čž\":'ć;đĆŽ)*Đ&=<š>Č(Š")
-        }
-        "com.apple.keylayout.Slovenian" => ("]`^@)&\":'*=<{;}(~>\\|[", "đ<&\"='ĆČć(*;ŠčĐ)>:žŽš"),
-        "com.apple.keylayout.SwedishSami-PC" => {
-            ("@=<^|`>){'&\"}]~[/:*\\(;", "\"`;&*<:=Ö¨/ˆÄä>ö´Å(@)å")
-        }
-        "com.apple.keylayout.SwissGerman" => (
-            "={#:\\}!(+]/<\";$'`*[>&^~@)|",
-            "¨é*è$à+)!ä';`üç^<(ö:/&>\"=£",
-        ),
-        "com.apple.keylayout.Hawaiian" => ("'", "ʻ"),
-        "com.apple.keylayout.NorthernSami" => (
-            ":/[<{X\"wQx\\(;~>W}`*@])'^|=q&",
-            "Å´ø;ØČŊšÁčđ)åŽ:ŠÆž(\"æ=ŋ&Đ`á/",
-        ),
-        "com.apple.keylayout.USInternational-PC" => ("^~", "ˆ˜"),
-        "com.apple.keylayout.NorwegianExtended" => ("^~", "ˆ˜"),
-        "com.apple.keylayout.Norwegian" => ("`'~\"\\*|=/@)[:}&><]{(^;", "<¨>^@(*`´\"=øÅÆ/:;æØ)&å"),
-        "com.apple.keylayout.ABC-QWERTZ" => {
-            ("\"}~<`>'&#:{@*^|\\)=(]/;[", "`Ä>;<:´/§ÜÖ\"(&'#=*)äßüö")
-        }
-        "com.apple.keylayout.ABC-AZERTY" => (
-            ">[$61%@7|)&8\":}593(.4^<!{`2]\\#;~*/'0",
-            "/^4§&52è£07!%°*(ç\"9;'6.1¨<é$`3)>8:ùà",
-        ),
-        "com.apple.keylayout.Czech" => (
-            "(7*#193620?/{)@~!$8+;:%4\">`^]&5}[<'",
-            "9ý83+íšžěéˇ'Ú02`14á%ů\"5č!:¨6)7ř(ú?§",
-        ),
-        "com.apple.keylayout.Brazilian-Pro" => ("^~", "ˆ˜"),
-        _ => {
-            return None;
-        }
+    let mappings: &[(char, char)] = match layout {
+        "com.apple.keylayout.ABC-AZERTY" => &[
+            ('!', '1'),
+            ('"', '%'),
+            ('#', '3'),
+            ('$', '4'),
+            ('%', '5'),
+            ('&', '7'),
+            ('(', '9'),
+            (')', '0'),
+            ('*', '8'),
+            ('.', ';'),
+            ('/', ':'),
+            ('0', 'à'),
+            ('1', '&'),
+            ('2', 'é'),
+            ('3', '"'),
+            ('4', '\''),
+            ('5', '('),
+            ('6', '§'),
+            ('7', 'è'),
+            ('8', '!'),
+            ('9', 'ç'),
+            (':', '°'),
+            (';', ')'),
+            ('<', '.'),
+            ('>', '/'),
+            ('@', '2'),
+            ('[', '^'),
+            ('\'', 'ù'),
+            ('\\', '`'),
+            (']', '$'),
+            ('^', '6'),
+            ('`', '<'),
+            ('{', '¨'),
+            ('|', '£'),
+            ('}', '*'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.ABC-QWERTZ" => &[
+            ('"', '`'),
+            ('#', '§'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', 'ß'),
+            (':', 'Ü'),
+            (';', 'ü'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '´'),
+            ('\\', '#'),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ö'),
+            ('|', '\''),
+            ('}', 'Ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Albanian" => &[
+            ('"', '\''),
+            (':', 'Ç'),
+            (';', 'ç'),
+            ('<', ';'),
+            ('>', ':'),
+            ('@', '"'),
+            ('\'', '@'),
+            ('\\', 'ë'),
+            ('`', '<'),
+            ('|', 'Ë'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Austrian" => &[
+            ('"', '`'),
+            ('#', '§'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', 'ß'),
+            (':', 'Ü'),
+            (';', 'ü'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '´'),
+            ('\\', '#'),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ö'),
+            ('|', '\''),
+            ('}', 'Ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Azeri" => &[
+            ('"', 'Ə'),
+            (',', 'ç'),
+            ('.', 'ş'),
+            ('/', '.'),
+            (':', 'I'),
+            (';', 'ı'),
+            ('<', 'Ç'),
+            ('>', 'Ş'),
+            ('?', ','),
+            ('W', 'Ü'),
+            ('[', 'ö'),
+            ('\'', 'ə'),
+            (']', 'ğ'),
+            ('w', 'ü'),
+            ('{', 'Ö'),
+            ('|', '/'),
+            ('}', 'Ğ'),
+        ],
+        "com.apple.keylayout.Belgian" => &[
+            ('!', '1'),
+            ('"', '%'),
+            ('#', '3'),
+            ('$', '4'),
+            ('%', '5'),
+            ('&', '7'),
+            ('(', '9'),
+            (')', '0'),
+            ('*', '8'),
+            ('.', ';'),
+            ('/', ':'),
+            ('0', 'à'),
+            ('1', '&'),
+            ('2', 'é'),
+            ('3', '"'),
+            ('4', '\''),
+            ('5', '('),
+            ('6', '§'),
+            ('7', 'è'),
+            ('8', '!'),
+            ('9', 'ç'),
+            (':', '°'),
+            (';', ')'),
+            ('<', '.'),
+            ('>', '/'),
+            ('@', '2'),
+            ('[', '^'),
+            ('\'', 'ù'),
+            ('\\', '`'),
+            (']', '$'),
+            ('^', '6'),
+            ('`', '<'),
+            ('{', '¨'),
+            ('|', '£'),
+            ('}', '*'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Brazilian-ABNT2" => &[
+            ('"', '`'),
+            ('/', 'ç'),
+            ('?', 'Ç'),
+            ('\'', '´'),
+            ('\\', '~'),
+            ('^', '¨'),
+            ('`', '\''),
+            ('|', '^'),
+            ('~', '"'),
+        ],
+        "com.apple.keylayout.Brazilian-Pro" => &[('^', 'ˆ'), ('~', '˜')],
+        "com.apple.keylayout.British" => &[('#', '£')],
+        "com.apple.keylayout.Canadian-CSA" => &[
+            ('"', 'È'),
+            ('/', 'é'),
+            ('<', '\''),
+            ('>', '"'),
+            ('?', 'É'),
+            ('[', '^'),
+            ('\'', 'è'),
+            ('\\', 'à'),
+            (']', 'ç'),
+            ('`', 'ù'),
+            ('{', '¨'),
+            ('|', 'À'),
+            ('}', 'Ç'),
+            ('~', 'Ù'),
+        ],
+        "com.apple.keylayout.Croatian" => &[
+            ('"', 'Ć'),
+            ('&', '\''),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            (':', 'Č'),
+            (';', 'č'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'š'),
+            ('\'', 'ć'),
+            ('\\', 'ž'),
+            (']', 'đ'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Š'),
+            ('|', 'Ž'),
+            ('}', 'Đ'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Croatian-PC" => &[
+            ('"', 'Ć'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '\''),
+            (':', 'Č'),
+            (';', 'č'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'š'),
+            ('\'', 'ć'),
+            ('\\', 'ž'),
+            (']', 'đ'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Š'),
+            ('|', 'Ž'),
+            ('}', 'Đ'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Czech" => &[
+            ('!', '1'),
+            ('"', '!'),
+            ('#', '3'),
+            ('$', '4'),
+            ('%', '5'),
+            ('&', '7'),
+            ('(', '9'),
+            (')', '0'),
+            ('*', '8'),
+            ('+', '%'),
+            ('/', '\''),
+            ('0', 'é'),
+            ('1', '+'),
+            ('2', 'ě'),
+            ('3', 'š'),
+            ('4', 'č'),
+            ('5', 'ř'),
+            ('6', 'ž'),
+            ('7', 'ý'),
+            ('8', 'á'),
+            ('9', 'í'),
+            (':', '"'),
+            (';', 'ů'),
+            ('<', '?'),
+            ('>', ':'),
+            ('?', 'ˇ'),
+            ('@', '2'),
+            ('[', 'ú'),
+            ('\'', '§'),
+            (']', ')'),
+            ('^', '6'),
+            ('`', '¨'),
+            ('{', 'Ú'),
+            ('}', '('),
+            ('~', '`'),
+        ],
+        "com.apple.keylayout.Czech-QWERTY" => &[
+            ('!', '1'),
+            ('"', '!'),
+            ('#', '3'),
+            ('$', '4'),
+            ('%', '5'),
+            ('&', '7'),
+            ('(', '9'),
+            (')', '0'),
+            ('*', '8'),
+            ('+', '%'),
+            ('/', '\''),
+            ('0', 'é'),
+            ('1', '+'),
+            ('2', 'ě'),
+            ('3', 'š'),
+            ('4', 'č'),
+            ('5', 'ř'),
+            ('6', 'ž'),
+            ('7', 'ý'),
+            ('8', 'á'),
+            ('9', 'í'),
+            (':', '"'),
+            (';', 'ů'),
+            ('<', '?'),
+            ('>', ':'),
+            ('?', 'ˇ'),
+            ('@', '2'),
+            ('[', 'ú'),
+            ('\'', '§'),
+            (']', ')'),
+            ('^', '6'),
+            ('`', '¨'),
+            ('{', 'Ú'),
+            ('}', '('),
+            ('~', '`'),
+        ],
+        "com.apple.keylayout.Danish" => &[
+            ('"', '^'),
+            ('$', '€'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'æ'),
+            ('\'', '¨'),
+            ('\\', '\''),
+            (']', 'ø'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Æ'),
+            ('|', '*'),
+            ('}', 'Ø'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Faroese" => &[
+            ('"', 'Ø'),
+            ('$', '€'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Æ'),
+            (';', 'æ'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'å'),
+            ('\'', 'ø'),
+            ('\\', '\''),
+            (']', 'ð'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Å'),
+            ('|', '*'),
+            ('}', 'Ð'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Finnish" => &[
+            ('"', '^'),
+            ('$', '€'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '¨'),
+            ('\\', '\''),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ö'),
+            ('|', '*'),
+            ('}', 'Ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.FinnishExtended" => &[
+            ('"', 'ˆ'),
+            ('$', '€'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '¨'),
+            ('\\', '\''),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ö'),
+            ('|', '*'),
+            ('}', 'Ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.FinnishSami-PC" => &[
+            ('"', 'ˆ'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '¨'),
+            ('\\', '@'),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ö'),
+            ('|', '*'),
+            ('}', 'Ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.French" => &[
+            ('!', '1'),
+            ('"', '%'),
+            ('#', '3'),
+            ('$', '4'),
+            ('%', '5'),
+            ('&', '7'),
+            ('(', '9'),
+            (')', '0'),
+            ('*', '8'),
+            ('.', ';'),
+            ('/', ':'),
+            ('0', 'à'),
+            ('1', '&'),
+            ('2', 'é'),
+            ('3', '"'),
+            ('4', '\''),
+            ('5', '('),
+            ('6', '§'),
+            ('7', 'è'),
+            ('8', '!'),
+            ('9', 'ç'),
+            (':', '°'),
+            (';', ')'),
+            ('<', '.'),
+            ('>', '/'),
+            ('@', '2'),
+            ('[', '^'),
+            ('\'', 'ù'),
+            ('\\', '`'),
+            (']', '$'),
+            ('^', '6'),
+            ('`', '<'),
+            ('{', '¨'),
+            ('|', '£'),
+            ('}', '*'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.French-PC" => &[
+            ('!', '1'),
+            ('"', '%'),
+            ('#', '3'),
+            ('$', '4'),
+            ('%', '5'),
+            ('&', '7'),
+            ('(', '9'),
+            (')', '0'),
+            ('*', '8'),
+            ('-', ')'),
+            ('.', ';'),
+            ('/', ':'),
+            ('0', 'à'),
+            ('1', '&'),
+            ('2', 'é'),
+            ('3', '"'),
+            ('4', '\''),
+            ('5', '('),
+            ('6', '-'),
+            ('7', 'è'),
+            ('8', '_'),
+            ('9', 'ç'),
+            (':', '§'),
+            (';', '!'),
+            ('<', '.'),
+            ('>', '/'),
+            ('@', '2'),
+            ('[', '^'),
+            ('\'', 'ù'),
+            ('\\', '*'),
+            (']', '$'),
+            ('^', '6'),
+            ('_', '°'),
+            ('`', '<'),
+            ('{', '¨'),
+            ('|', 'μ'),
+            ('}', '£'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.French-numerical" => &[
+            ('!', '1'),
+            ('"', '%'),
+            ('#', '3'),
+            ('$', '4'),
+            ('%', '5'),
+            ('&', '7'),
+            ('(', '9'),
+            (')', '0'),
+            ('*', '8'),
+            ('.', ';'),
+            ('/', ':'),
+            ('0', 'à'),
+            ('1', '&'),
+            ('2', 'é'),
+            ('3', '"'),
+            ('4', '\''),
+            ('5', '('),
+            ('6', '§'),
+            ('7', 'è'),
+            ('8', '!'),
+            ('9', 'ç'),
+            (':', '°'),
+            (';', ')'),
+            ('<', '.'),
+            ('>', '/'),
+            ('@', '2'),
+            ('[', '^'),
+            ('\'', 'ù'),
+            ('\\', '`'),
+            (']', '$'),
+            ('^', '6'),
+            ('`', '<'),
+            ('{', '¨'),
+            ('|', '£'),
+            ('}', '*'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.German" => &[
+            ('"', '`'),
+            ('#', '§'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', 'ß'),
+            (':', 'Ü'),
+            (';', 'ü'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '´'),
+            ('\\', '#'),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ö'),
+            ('|', '\''),
+            ('}', 'Ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.German-DIN-2137" => &[
+            ('"', '`'),
+            ('#', '§'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', 'ß'),
+            (':', 'Ü'),
+            (';', 'ü'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '´'),
+            ('\\', '#'),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ö'),
+            ('|', '\''),
+            ('}', 'Ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Hawaiian" => &[('\'', 'ʻ')],
+        "com.apple.keylayout.Hungarian" => &[
+            ('!', '\''),
+            ('"', 'Á'),
+            ('#', '+'),
+            ('$', '!'),
+            ('&', '='),
+            ('(', ')'),
+            (')', 'Ö'),
+            ('*', '('),
+            ('+', 'Ó'),
+            ('/', 'ü'),
+            ('0', 'ö'),
+            (':', 'É'),
+            (';', 'é'),
+            ('<', 'Ü'),
+            ('=', 'ó'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ő'),
+            ('\'', 'á'),
+            ('\\', 'ű'),
+            (']', 'ú'),
+            ('^', '/'),
+            ('`', 'í'),
+            ('{', 'Ő'),
+            ('|', 'Ű'),
+            ('}', 'Ú'),
+            ('~', 'Í'),
+        ],
+        "com.apple.keylayout.Hungarian-QWERTY" => &[
+            ('!', '\''),
+            ('"', 'Á'),
+            ('#', '+'),
+            ('$', '!'),
+            ('&', '='),
+            ('(', ')'),
+            (')', 'Ö'),
+            ('*', '('),
+            ('+', 'Ó'),
+            ('/', 'ü'),
+            ('0', 'ö'),
+            (':', 'É'),
+            (';', 'é'),
+            ('<', 'Ü'),
+            ('=', 'ó'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ő'),
+            ('\'', 'á'),
+            ('\\', 'ű'),
+            (']', 'ú'),
+            ('^', '/'),
+            ('`', 'í'),
+            ('{', 'Ő'),
+            ('|', 'Ű'),
+            ('}', 'Ú'),
+            ('~', 'Í'),
+        ],
+        "com.apple.keylayout.Icelandic" => &[
+            ('"', 'Ö'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '\''),
+            (':', 'Ð'),
+            (';', 'ð'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'æ'),
+            ('\'', 'ö'),
+            ('\\', 'þ'),
+            (']', '´'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Æ'),
+            ('|', 'Þ'),
+            ('}', '´'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Irish" => &[('#', '£')],
+        "com.apple.keylayout.IrishExtended" => &[('#', '£')],
+        "com.apple.keylayout.Italian" => &[
+            ('!', '1'),
+            ('"', '%'),
+            ('#', '3'),
+            ('$', '4'),
+            ('%', '5'),
+            ('&', '7'),
+            ('(', '9'),
+            (')', '0'),
+            ('*', '8'),
+            (',', ';'),
+            ('.', ':'),
+            ('/', ','),
+            ('0', 'é'),
+            ('1', '&'),
+            ('2', '"'),
+            ('3', '\''),
+            ('4', '('),
+            ('5', 'ç'),
+            ('6', 'è'),
+            ('7', ')'),
+            ('8', '£'),
+            ('9', 'à'),
+            (':', '!'),
+            (';', 'ò'),
+            ('<', '.'),
+            ('>', '/'),
+            ('@', '2'),
+            ('[', 'ì'),
+            ('\'', 'ù'),
+            ('\\', '§'),
+            (']', '$'),
+            ('^', '6'),
+            ('`', '<'),
+            ('{', '^'),
+            ('|', '°'),
+            ('}', '*'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Italian-Pro" => &[
+            ('"', '^'),
+            ('#', '£'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '\''),
+            (':', 'é'),
+            (';', 'è'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ò'),
+            ('\'', 'ì'),
+            ('\\', 'ù'),
+            (']', 'à'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'ç'),
+            ('|', '§'),
+            ('}', '°'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.LatinAmerican" => &[
+            ('"', '¨'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '\''),
+            (':', 'Ñ'),
+            (';', 'ñ'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', '{'),
+            ('\'', '´'),
+            ('\\', '¿'),
+            (']', '}'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', '['),
+            ('|', '¡'),
+            ('}', ']'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Lithuanian" => &[
+            ('!', 'Ą'),
+            ('#', 'Ę'),
+            ('$', 'Ė'),
+            ('%', 'Į'),
+            ('&', 'Ų'),
+            ('*', 'Ū'),
+            ('+', 'Ž'),
+            ('1', 'ą'),
+            ('2', 'č'),
+            ('3', 'ę'),
+            ('4', 'ė'),
+            ('5', 'į'),
+            ('6', 'š'),
+            ('7', 'ų'),
+            ('8', 'ū'),
+            ('=', 'ž'),
+            ('@', 'Č'),
+            ('^', 'Š'),
+        ],
+        "com.apple.keylayout.Maltese" => &[
+            ('#', '£'),
+            ('[', 'ġ'),
+            (']', 'ħ'),
+            ('`', 'ż'),
+            ('{', 'Ġ'),
+            ('}', 'Ħ'),
+            ('~', 'Ż'),
+        ],
+        "com.apple.keylayout.NorthernSami" => &[
+            ('"', 'Ŋ'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('Q', 'Á'),
+            ('W', 'Š'),
+            ('X', 'Č'),
+            ('[', 'ø'),
+            ('\'', 'ŋ'),
+            ('\\', 'đ'),
+            (']', 'æ'),
+            ('^', '&'),
+            ('`', 'ž'),
+            ('q', 'á'),
+            ('w', 'š'),
+            ('x', 'č'),
+            ('{', 'Ø'),
+            ('|', 'Đ'),
+            ('}', 'Æ'),
+            ('~', 'Ž'),
+        ],
+        "com.apple.keylayout.Norwegian" => &[
+            ('"', '^'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ø'),
+            ('\'', '¨'),
+            ('\\', '@'),
+            (']', 'æ'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ø'),
+            ('|', '*'),
+            ('}', 'Æ'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.NorwegianExtended" => &[('^', 'ˆ'), ('~', '˜')],
+        "com.apple.keylayout.NorwegianSami-PC" => &[
+            ('"', 'ˆ'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ø'),
+            ('\'', '¨'),
+            ('\\', '@'),
+            (']', 'æ'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ø'),
+            ('|', '*'),
+            ('}', 'Æ'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Polish" => &[
+            ('!', '§'),
+            ('"', 'ę'),
+            ('#', '!'),
+            ('$', '?'),
+            ('%', '+'),
+            ('&', ':'),
+            ('(', '/'),
+            (')', '"'),
+            ('*', '_'),
+            ('+', ']'),
+            (',', '.'),
+            ('.', ','),
+            ('/', 'ż'),
+            (':', 'Ł'),
+            (';', 'ł'),
+            ('<', 'ś'),
+            ('=', '['),
+            ('>', 'ń'),
+            ('?', 'Ż'),
+            ('@', '%'),
+            ('[', 'ó'),
+            ('\'', 'ą'),
+            ('\\', ';'),
+            (']', '('),
+            ('^', '='),
+            ('_', 'ć'),
+            ('`', '<'),
+            ('{', 'ź'),
+            ('|', '$'),
+            ('}', ')'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Portuguese" => &[
+            ('"', '`'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '\''),
+            (':', 'ª'),
+            (';', 'º'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ç'),
+            ('\'', '´'),
+            (']', '~'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ç'),
+            ('}', '^'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Sami-PC" => &[
+            ('"', 'Ŋ'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('Q', 'Á'),
+            ('W', 'Š'),
+            ('X', 'Č'),
+            ('[', 'ø'),
+            ('\'', 'ŋ'),
+            ('\\', 'đ'),
+            (']', 'æ'),
+            ('^', '&'),
+            ('`', 'ž'),
+            ('q', 'á'),
+            ('w', 'š'),
+            ('x', 'č'),
+            ('{', 'Ø'),
+            ('|', 'Đ'),
+            ('}', 'Æ'),
+            ('~', 'Ž'),
+        ],
+        "com.apple.keylayout.Serbian-Latin" => &[
+            ('"', 'Ć'),
+            ('&', '\''),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            (':', 'Č'),
+            (';', 'č'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'š'),
+            ('\'', 'ć'),
+            ('\\', 'ž'),
+            (']', 'đ'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Š'),
+            ('|', 'Ž'),
+            ('}', 'Đ'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Slovak" => &[
+            ('!', '1'),
+            ('"', '!'),
+            ('#', '3'),
+            ('$', '4'),
+            ('%', '5'),
+            ('&', '7'),
+            ('(', '9'),
+            (')', '0'),
+            ('*', '8'),
+            ('+', '%'),
+            ('/', '\''),
+            ('0', 'é'),
+            ('1', '+'),
+            ('2', 'ľ'),
+            ('3', 'š'),
+            ('4', 'č'),
+            ('5', 'ť'),
+            ('6', 'ž'),
+            ('7', 'ý'),
+            ('8', 'á'),
+            ('9', 'í'),
+            (':', '"'),
+            (';', 'ô'),
+            ('<', '?'),
+            ('>', ':'),
+            ('?', 'ˇ'),
+            ('@', '2'),
+            ('[', 'ú'),
+            ('\'', '§'),
+            (']', 'ä'),
+            ('^', '6'),
+            ('`', 'ň'),
+            ('{', 'Ú'),
+            ('}', 'Ä'),
+            ('~', 'Ň'),
+        ],
+        "com.apple.keylayout.Slovak-QWERTY" => &[
+            ('!', '1'),
+            ('"', '!'),
+            ('#', '3'),
+            ('$', '4'),
+            ('%', '5'),
+            ('&', '7'),
+            ('(', '9'),
+            (')', '0'),
+            ('*', '8'),
+            ('+', '%'),
+            ('/', '\''),
+            ('0', 'é'),
+            ('1', '+'),
+            ('2', 'ľ'),
+            ('3', 'š'),
+            ('4', 'č'),
+            ('5', 'ť'),
+            ('6', 'ž'),
+            ('7', 'ý'),
+            ('8', 'á'),
+            ('9', 'í'),
+            (':', '"'),
+            (';', 'ô'),
+            ('<', '?'),
+            ('>', ':'),
+            ('?', 'ˇ'),
+            ('@', '2'),
+            ('[', 'ú'),
+            ('\'', '§'),
+            (']', 'ä'),
+            ('^', '6'),
+            ('`', 'ň'),
+            ('{', 'Ú'),
+            ('}', 'Ä'),
+            ('~', 'Ň'),
+        ],
+        "com.apple.keylayout.Slovenian" => &[
+            ('"', 'Ć'),
+            ('&', '\''),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            (':', 'Č'),
+            (';', 'č'),
+            ('<', ';'),
+            ('=', '*'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'š'),
+            ('\'', 'ć'),
+            ('\\', 'ž'),
+            (']', 'đ'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Š'),
+            ('|', 'Ž'),
+            ('}', 'Đ'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Spanish" => &[
+            ('!', '¡'),
+            ('"', '¨'),
+            ('.', 'ç'),
+            ('/', '.'),
+            (':', 'º'),
+            (';', '´'),
+            ('<', '¿'),
+            ('>', 'Ç'),
+            ('@', '!'),
+            ('[', 'ñ'),
+            ('\'', '`'),
+            ('\\', '\''),
+            (']', ';'),
+            ('^', '/'),
+            ('`', '<'),
+            ('{', 'Ñ'),
+            ('|', '"'),
+            ('}', ':'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Spanish-ISO" => &[
+            ('"', '¨'),
+            ('#', '·'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('.', 'ç'),
+            ('/', '.'),
+            (':', 'º'),
+            (';', '´'),
+            ('<', '¿'),
+            ('>', 'Ç'),
+            ('@', '"'),
+            ('[', 'ñ'),
+            ('\'', '`'),
+            ('\\', '\''),
+            (']', ';'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ñ'),
+            ('|', '"'),
+            ('}', '`'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Swedish" => &[
+            ('"', '^'),
+            ('$', '€'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '¨'),
+            ('\\', '\''),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ö'),
+            ('|', '*'),
+            ('}', 'Ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Swedish-Pro" => &[
+            ('"', '^'),
+            ('$', '€'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '¨'),
+            ('\\', '\''),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ö'),
+            ('|', '*'),
+            ('}', 'Ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.SwedishSami-PC" => &[
+            ('"', 'ˆ'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('/', '´'),
+            (':', 'Å'),
+            (';', 'å'),
+            ('<', ';'),
+            ('=', '`'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '¨'),
+            ('\\', '@'),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ö'),
+            ('|', '*'),
+            ('}', 'Ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.SwissFrench" => &[
+            ('!', '+'),
+            ('"', '`'),
+            ('#', '*'),
+            ('$', 'ç'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('+', '!'),
+            ('/', '\''),
+            (':', 'ü'),
+            (';', 'è'),
+            ('<', ';'),
+            ('=', '¨'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'é'),
+            ('\'', '^'),
+            ('\\', '$'),
+            (']', 'à'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'ö'),
+            ('|', '£'),
+            ('}', 'ä'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.SwissGerman" => &[
+            ('!', '+'),
+            ('"', '`'),
+            ('#', '*'),
+            ('$', 'ç'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('+', '!'),
+            ('/', '\''),
+            (':', 'è'),
+            (';', 'ü'),
+            ('<', ';'),
+            ('=', '¨'),
+            ('>', ':'),
+            ('@', '"'),
+            ('[', 'ö'),
+            ('\'', '^'),
+            ('\\', '$'),
+            (']', 'ä'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'é'),
+            ('|', '£'),
+            ('}', 'à'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Turkish" => &[
+            ('"', '-'),
+            ('#', '"'),
+            ('$', '\''),
+            ('%', '('),
+            ('&', ')'),
+            ('(', '%'),
+            (')', ':'),
+            ('*', '_'),
+            (',', 'ö'),
+            ('-', 'ş'),
+            ('.', 'ç'),
+            ('/', '.'),
+            (':', '$'),
+            ('<', 'Ö'),
+            ('>', 'Ç'),
+            ('@', '*'),
+            ('[', 'ğ'),
+            ('\'', ','),
+            ('\\', 'ü'),
+            (']', 'ı'),
+            ('^', '/'),
+            ('_', 'Ş'),
+            ('`', '<'),
+            ('{', 'Ğ'),
+            ('|', 'Ü'),
+            ('}', 'I'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Turkish-QWERTY-PC" => &[
+            ('"', 'I'),
+            ('#', '^'),
+            ('$', '+'),
+            ('&', '/'),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            ('+', ':'),
+            (',', 'ö'),
+            ('.', 'ç'),
+            ('/', '*'),
+            (':', 'Ş'),
+            (';', 'ş'),
+            ('<', 'Ö'),
+            ('=', '.'),
+            ('>', 'Ç'),
+            ('@', '\''),
+            ('[', 'ğ'),
+            ('\'', 'ı'),
+            ('\\', ','),
+            (']', 'ü'),
+            ('^', '&'),
+            ('`', '<'),
+            ('{', 'Ğ'),
+            ('|', ';'),
+            ('}', 'Ü'),
+            ('~', '>'),
+        ],
+        "com.apple.keylayout.Turkish-Standard" => &[
+            ('"', 'Ş'),
+            ('#', '^'),
+            ('&', '\''),
+            ('(', ')'),
+            (')', '='),
+            ('*', '('),
+            (',', '.'),
+            ('.', ','),
+            (':', 'Ç'),
+            (';', 'ç'),
+            ('<', ':'),
+            ('=', '*'),
+            ('>', ';'),
+            ('@', '"'),
+            ('[', 'ğ'),
+            ('\'', 'ş'),
+            ('\\', 'ü'),
+            (']', 'ı'),
+            ('^', '&'),
+            ('`', 'ö'),
+            ('{', 'Ğ'),
+            ('|', 'Ü'),
+            ('}', 'I'),
+            ('~', 'Ö'),
+        ],
+        "com.apple.keylayout.Turkmen" => &[
+            ('C', 'Ç'),
+            ('Q', 'Ä'),
+            ('V', 'Ý'),
+            ('X', 'Ü'),
+            ('[', 'ň'),
+            ('\\', 'ş'),
+            (']', 'ö'),
+            ('^', '№'),
+            ('`', 'ž'),
+            ('c', 'ç'),
+            ('q', 'ä'),
+            ('v', 'ý'),
+            ('x', 'ü'),
+            ('{', 'Ň'),
+            ('|', 'Ş'),
+            ('}', 'Ö'),
+            ('~', 'Ž'),
+        ],
+        "com.apple.keylayout.USInternational-PC" => &[('^', 'ˆ'), ('~', '˜')],
+        "com.apple.keylayout.Welsh" => &[('#', '£')],
+
+        _ => return None,
     };
-    debug_assert!(from.chars().count() == to.chars().count());
 
-    Some(HashMap::from_iter(from.chars().zip(to.chars())))
+    Some(HashMap::from_iter(mappings.into_iter().cloned()))
 }
 
 #[cfg(not(target_os = "macos"))]