summaryrefslogtreecommitdiff
path: root/quantum/keymap_extras
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/keymap_extras')
-rw-r--r--quantum/keymap_extras/keymap_bepo.h678
-rw-r--r--quantum/keymap_extras/keymap_fr_ch.h303
-rw-r--r--quantum/keymap_extras/keymap_french_osx.h306
-rw-r--r--quantum/keymap_extras/keymap_german_ch.h245
-rw-r--r--quantum/keymap_extras/keymap_german_osx.h385
-rw-r--r--quantum/keymap_extras/keymap_italian_osx_ansi.h333
-rw-r--r--quantum/keymap_extras/keymap_italian_osx_iso.h334
-rw-r--r--quantum/keymap_extras/keymap_spanish_dvorak.h151
-rw-r--r--quantum/keymap_extras/keymap_workman_zxcvm.h125
-rw-r--r--quantum/keymap_extras/sendstring_bepo.h6
-rw-r--r--quantum/keymap_extras/sendstring_fr_ch.h100
-rw-r--r--quantum/keymap_extras/sendstring_french.h2
-rw-r--r--quantum/keymap_extras/sendstring_french_osx.h100
-rw-r--r--quantum/keymap_extras/sendstring_german_ch.h100
-rw-r--r--quantum/keymap_extras/sendstring_german_osx.h100
-rw-r--r--quantum/keymap_extras/sendstring_italian_osx_ansi.h100
-rw-r--r--quantum/keymap_extras/sendstring_italian_osx_iso.h100
-rw-r--r--quantum/keymap_extras/sendstring_spanish.h2
-rw-r--r--quantum/keymap_extras/sendstring_spanish_dvorak.h100
-rw-r--r--quantum/keymap_extras/sendstring_workman_zxcvm.h59
20 files changed, 2818 insertions, 811 deletions
diff --git a/quantum/keymap_extras/keymap_bepo.h b/quantum/keymap_extras/keymap_bepo.h
index 718baaa683..ea04aed3c1 100644
--- a/quantum/keymap_extras/keymap_bepo.h
+++ b/quantum/keymap_extras/keymap_bepo.h
@@ -1,4 +1,4 @@
-/* Copyright 2016 Didier Loiseau
+/* Copyright 2020
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -13,305 +13,393 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* Keymap macros for the French BÉPO layout - http://bepo.fr */
-#ifndef KEYMAP_BEPO_H
-#define KEYMAP_BEPO_H
-#include "keymap.h"
-
-// Normal characters
-// First row (on usual keyboards)
-#define BP_DOLLAR KC_GRAVE // $
-#define BP_DLR BP_DOLLAR
-#define BP_DOUBLE_QUOTE KC_1 // "
-#define BP_DQOT BP_DOUBLE_QUOTE
-#define BP_LEFT_GUILLEMET KC_2 // «
-#define BP_LGIL BP_LEFT_GUILLEMET
-#define BP_RIGHT_GUILLEMET KC_3 // »
-#define BP_RGIL BP_RIGHT_GUILLEMET
-#define BP_LEFT_PAREN KC_4 // (
-#define BP_LPRN BP_LEFT_PAREN
-#define BP_RIGHT_PAREN KC_5 // )
-#define BP_RPRN BP_RIGHT_PAREN
-#define BP_AT KC_6 // @
-#define BP_PLUS KC_7 // +
-#define BP_MINUS KC_8 // -
-#define BP_MINS BP_MINUS
-#define BP_SLASH KC_9 // /
-#define BP_SLSH BP_SLASH
-#define BP_ASTERISK KC_0 // *
-#define BP_ASTR BP_ASTERISK
-#define BP_EQUAL KC_MINUS // =
-#define BP_EQL BP_EQUAL
-#define BP_PERCENT KC_EQUAL // %
-#define BP_PERC BP_PERCENT
-
-// Second row
-#define BP_B KC_Q
-#define BP_E_ACUTE KC_W // é
-#define BP_ECUT BP_E_ACUTE
-#define BP_P KC_E
-#define BP_O KC_R
-#define BP_E_GRAVE KC_T // è
-#define BP_EGRV BP_E_GRAVE
-#define BP_DEAD_CIRCUMFLEX KC_Y // dead ^
-#define BP_DCRC BP_DEAD_CIRCUMFLEX
-#define BP_V KC_U
-#define BP_D KC_I
-#define BP_L KC_O
-#define BP_J KC_P
-#define BP_Z KC_LBRACKET
-#define BP_W KC_RBRACKET
-
-// Third row
-#define BP_A KC_A
-#define BP_U KC_S
-#define BP_I KC_D
-#define BP_E KC_F
-#define BP_COMMA KC_G // ,
-#define BP_COMM BP_COMMA
-#define BP_C KC_H
-#define BP_T KC_J
-#define BP_S KC_K
-#define BP_R KC_L
-#define BP_N KC_SCOLON
-#define BP_M KC_QUOTE
-#define BP_C_CEDILLA KC_BSLASH // ç
-#define BP_CCED BP_C_CEDILLA
-
-// Fourth row
-#define BP_E_CIRCUMFLEX KC_NONUS_BSLASH // ê
-#define BP_ECRC BP_E_CIRCUMFLEX
-#define BP_A_GRAVE KC_Z // à
-#define BP_AGRV BP_A_GRAVE
-#define BP_Y KC_X
-#define BP_X KC_C
-#define BP_DOT KC_V // .
-#define BP_K KC_B
-#define BP_APOSTROPHE KC_N
-#define BP_APOS BP_APOSTROPHE // '
-#define BP_Q KC_M
-#define BP_G KC_COMMA
-#define BP_H KC_DOT
-#define BP_F KC_SLASH
-
-// Shifted characters
-// First row
-#define BP_HASH LSFT(BP_DOLLAR) // #
-#define BP_1 LSFT(KC_1)
-#define BP_2 LSFT(KC_2)
-#define BP_3 LSFT(KC_3)
-#define BP_4 LSFT(KC_4)
-#define BP_5 LSFT(KC_5)
-#define BP_6 LSFT(KC_6)
-#define BP_7 LSFT(KC_7)
-#define BP_8 LSFT(KC_8)
-#define BP_9 LSFT(KC_9)
-#define BP_0 LSFT(KC_0)
-#define BP_DEGREE LSFT(BP_EQUAL) // °
-#define BP_DEGR BP_DEGREE
-#define BP_GRAVE LSFT(BP_PERCENT) // `
-#define BP_GRV BP_GRAVE
-
-// Second row
-#define BP_EXCLAIM LSFT(BP_DEAD_CIRCUMFLEX) // !
-#define BP_EXLM BP_EXCLAIM
-
-// Third row
-#define BP_SCOLON LSFT(BP_COMMA) // ;
-#define BP_SCLN BP_SCOLON
-
-// Fourth row
-#define BP_COLON LSFT(BP_DOT) // :
-#define BP_COLN BP_COLON
-#define BP_QUESTION LSFT(BP_APOS) // ?
-#define BP_QEST BP_QUESTION
-
-// Space bar
-#define BP_NON_BREAKING_SPACE LSFT(KC_SPACE)
-#define BP_NBSP BP_NON_BREAKING_SPACE
+#pragma once
-// AltGr-ed characters
-// First row
-#define BP_EN_DASH ALGR(BP_DOLLAR) // –
-#define BP_NDSH BP_EN_DASH
-#define BP_EM_DASH ALGR(KC_1) // —
-#define BP_MDSH BP_EM_DASH
-#define BP_LESS ALGR(KC_2) // <
-#define BP_GREATER ALGR(KC_3) // >
-#define BP_GRTR BP_GREATER
-#define BP_LBRACKET ALGR(KC_4) // [
-#define BP_LBRC BP_LBRACKET
-#define BP_RBRACKET ALGR(KC_5) // ]
-#define BP_RBRC BP_RBRACKET
-#define BP_CIRCUMFLEX ALGR(KC_6) // ^
-#define BP_CIRC BP_CIRCUMFLEX
-#define BP_PLUS_MINUS ALGR(KC_7) // ±
-#define BP_PSMS BP_PLUS_MINUS
-#define BP_MATH_MINUS ALGR(KC_8) // −
-#define BP_MMNS BP_MATH_MINUS
-#define BP_OBELUS ALGR(KC_9) // ÷
-#define BP_OBEL BP_OBELUS
-// more conventional name of the symbol
-#define BP_DIVISION_SIGN BP_OBELUS
-#define BP_DVSN BP_DIVISION_SIGN
-#define BP_TIMES ALGR(KC_0) // ×
-#define BP_TIMS BP_TIMES
-#define BP_DIFFERENT ALGR(BP_EQUAL) // ≠
-#define BP_DIFF BP_DIFFERENT
-#define BP_PERMILLE ALGR(BP_PERCENT) // ‰
-#define BP_PMIL BP_PERMILLE
-
-// Second row
-#define BP_PIPE ALGR(BP_B) // |
-#define BP_DEAD_ACUTE ALGR(BP_E_ACUTE) // dead ´
-#define BP_DACT BP_DEAD_ACUTE
-#define BP_AMPERSAND ALGR(BP_P) // &
-#define BP_AMPR BP_AMPERSAND
-#define BP_OE_LIGATURE ALGR(BP_O) // œ
-#define BP_OE BP_OE_LIGATURE
-#define BP_DEAD_GRAVE ALGR(BP_E_GRAVE) // `
-#define BP_DGRV BP_DEAD_GRAVE
-#define BP_INVERTED_EXCLAIM ALGR(BP_DEAD_CIRCUMFLEX) // ¡
-#define BP_IXLM BP_INVERTED_EXCLAIM
-#define BP_DEAD_CARON ALGR(BP_V) // dead ˇ
-#define BP_DCAR BP_DEAD_CARON
-#define BP_ETH ALGR(BP_D) // ð
-#define BP_DEAD_SLASH ALGR(BP_L) // dead /
-#define BP_DSLH BP_DEAD_SLASH
-#define BP_IJ_LIGATURE ALGR(BP_J) // ij
-#define BP_IJ BP_IJ_LIGATURE
-#define BP_SCHWA ALGR(BP_Z) // ə
-#define BP_SCWA BP_SCHWA
-#define BP_DEAD_BREVE ALGR(BP_W) // dead ˘
-#define BP_DBRV BP_DEAD_BREVE
-
-// Third row
-#define BP_AE_LIGATURE ALGR(BP_A) // æ
-#define BP_AE BP_AE_LIGATURE
-#define BP_U_GRAVE ALGR(BP_U) // ù
-#define BP_UGRV BP_U_GRAVE
-#define BP_DEAD_TREMA ALGR(BP_I) // dead ¨ (trema/umlaut/diaresis)
-#define BP_DTRM BP_DEAD_TREMA
-#define BP_EURO ALGR(BP_E) // €
-#define BP_TYPOGRAPHICAL_APOSTROPHE ALGR(BP_COMMA) // ’
-#define BP_TAPO BP_TYPOGRAPHICAL_APOSTROPHE
-#define BP_COPYRIGHT ALGR(BP_C) // ©
-#define BP_CPRT BP_COPYRIGHT
-#define BP_THORN ALGR(BP_T) // þ
-#define BP_THRN BP_THORN
-#define BP_SHARP_S ALGR(BP_S) // ß
-#define BP_SRPS BP_SHARP_S
-#define BP_REGISTERED_TRADEMARK ALGR(BP_R) // ®
-#define BP_RTM BP_REGISTERED_TRADEMARK
-#define BP_DEAD_TILDE ALGR(BP_N) // dead ~
-#define BP_DTLD BP_DEAD_TILDE
-#define BP_DEAD_MACRON ALGR(BP_M) // dead ¯
-#define BP_DMCR BP_DEAD_MACRON
-#define BP_DEAD_CEDILLA ALGR(BP_C_CEDILLA) // dead ¸
-#define BP_DCED BP_DEAD_CEDILLA
-
-// Fourth row
-#define BP_NONUS_SLASH ALGR(BP_E_CIRCUMFLEX) // / on non-us backslash key (102nd key, ê in bépo)
-#define BP_NUSL BP_NONUS_SLASH
-#define BP_BACKSLASH ALGR(BP_A_GRAVE) /* \ */
-#define BP_BSLS BP_BACKSLASH
-#define BP_LEFT_CURLY_BRACE ALGR(BP_Y) // {
-#define BP_LCBR BP_LEFT_CURLY_BRACE
-#define BP_RIGHT_CURLY_BRACE ALGR(BP_X) // }
-#define BP_RCBR BP_RIGHT_CURLY_BRACE
-#define BP_ELLIPSIS ALGR(BP_DOT) // …
-#define BP_ELPS BP_ELLIPSIS
-#define BP_TILDE ALGR(BP_K) // ~
-#define BP_TILD BP_TILDE
-#define BP_INVERTED_QUESTION ALGR(BP_QUESTION) // ¿
-#define BP_IQST BP_INVERTED_QUESTION
-#define BP_DEAD_RING ALGR(BP_Q) // dead °
-#define BP_DRNG BP_DEAD_RING
-#define BP_DEAD_GREEK ALGR(BP_G) // dead Greek key (following key will make a Greek letter)
-#define BP_DGRK BP_DEAD_GREEK
-#define BP_DAGGER ALGR(BP_H) // †
-#define BP_DAGR BP_DAGGER
-#define BP_DEAD_OGONEK ALGR(BP_F) // dead ˛
-#define BP_DOGO BP_DEAD_OGONEK
-
-// Space bar
-#define BP_UNDERSCORE ALGR(KC_SPACE) // _
-#define BP_UNDS BP_UNDERSCORE
+#include "keymap.h"
-// AltGr-Shifted characters (different from capitalised AltGr-ed characters)
-// First row
-#define BP_PARAGRAPH ALGR(BP_HASH) // ¶
-#define BP_PARG BP_PARAGRAPH
-#define BP_LOW_DOUBLE_QUOTE ALGR(BP_1) // „
-#define BP_LWQT BP_LOW_DOUBLE_QUOTE
-#define BP_LEFT_DOUBLE_QUOTE ALGR(BP_2) // “
-#define BP_LDQT BP_LEFT_DOUBLE_QUOTE
-#define BP_RIGHT_DOUBLE_QUOTE ALGR(BP_3) // ”
-#define BP_RDQT BP_RIGHT_DOUBLE_QUOTE
-#define BP_LESS_OR_EQUAL ALGR(BP_4) // ≤
-#define BP_LEQL BP_LESS_OR_EQUAL
-#define BP_GREATER_OR_EQUAL ALGR(BP_5) // ≥
-#define BP_GEQL BP_GREATER_OR_EQUAL
-// nothing on ALGR(BP_6)
-#define BP_NEGATION ALGR(BP_7) // ¬
-#define BP_NEGT BP_NEGATION
-#define BP_ONE_QUARTER ALGR(BP_8) // ¼
-#define BP_1QRT BP_ONE_QUARTER
-#define BP_ONE_HALF ALGR(BP_9) // ½
-#define BP_1HLF BP_ONE_HALF
-#define BP_THREE_QUARTERS ALGR(BP_0) // ¾
-#define BP_3QRT BP_THREE_QUARTERS
-#define BP_MINUTES ALGR(BP_DEGREE) // ′
-#define BP_MNUT BP_MINUTES
-#define BP_SECONDS ALGR(BP_GRAVE) // ″
-#define BP_SCND BP_SECONDS
+// clang-format off
-// Second row
-#define BP_BROKEN_PIPE LSFT(BP_PIPE) // ¦
-#define BP_BPIP BP_BROKEN_PIPE
-#define BP_DEAD_DOUBLE_ACUTE LSFT(BP_DEAD_ACUTE) // ˝
-#define BP_DDCT BP_DEAD_DOUBLE_ACUTE
-#define BP_SECTION ALGR(LSFT(BP_P)) // §
-#define BP_SECT BP_SECTION
-// LSFT(BP_DEAD_GRAVE) is actually the same character as LSFT(BP_PERCENT)
-#define BP_GRAVE_BIS LSFT(BP_DEAD_GRAVE) // `
-#define BP_GRVB BP_GRAVE_BIS
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ $ │ " │ « │ » │ ( │ ) │ @ │ + │ - │ / │ * │ = │ % │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │ B │ É │ P │ O │ È │ ^ │ V │ D │ L │ J │ Z │ W │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ A │ U │ I │ E │ , │ C │ T │ S │ R │ N │ M │ Ç │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │ Ê │ À │ Y │ X │ . │ K │ ' │ Q │ G │ H │ F │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define BP_DLR KC_GRV // $
+#define BP_DQUO KC_1 // "
+#define BP_LDAQ KC_2 // «
+#define BP_RDAQ KC_3 // »
+#define BP_LPRN KC_4 // (
+#define BP_RPRN KC_5 // )
+#define BP_AT KC_6 // @
+#define BP_PLUS KC_7 // +
+#define BP_MINS KC_8 // -
+#define BP_SLSH KC_9 // /
+#define BP_ASTR KC_0 // *
+#define BP_EQL KC_MINS // =
+#define BP_PERC KC_EQL // %
+// Row 2
+#define BP_B KC_Q // B
+#define BP_EACU KC_W // É
+#define BP_P KC_E // P
+#define BP_O KC_R // O
+#define BP_EGRV KC_T // È
+#define BP_DCIR KC_Y // ^ (dead)
+#define BP_V KC_U // V
+#define BP_D KC_I // D
+#define BP_L KC_O // L
+#define BP_J KC_P // J
+#define BP_Z KC_LBRC // Z
+#define BP_W KC_RBRC // W
+// Row 3
+#define BP_A KC_A // A
+#define BP_U KC_S // U
+#define BP_I KC_D // I
+#define BP_E KC_F // E
+#define BP_COMM KC_G // ,
+#define BP_C KC_H // C
+#define BP_T KC_J // T
+#define BP_S KC_K // S
+#define BP_R KC_L // R
+#define BP_N KC_SCLN // N
+#define BP_M KC_QUOT // M
+#define BP_CCED KC_BSLS // Ç
+// Row 4
+#define BP_ECIR KC_NUBS // Ê
+#define BP_AGRV KC_Z // À
+#define BP_Y KC_X // Y
+#define BP_X KC_C // X
+#define BP_DOT KC_V // .
+#define BP_K KC_B // K
+#define BP_QUOT KC_N // '
+#define BP_Q KC_M // Q
+#define BP_G KC_COMM // G
+#define BP_H KC_DOT // H
+#define BP_F KC_SLSH // F
-// Third row
-#define BP_DEAD_DOT_ABOVE LSFT(BP_DEAD_TREMA) // dead ˙
-#define BP_DDTA BP_DEAD_DOT_ABOVE
-#define BP_DEAD_CURRENCY LSFT(BP_EURO) // dead ¤ (next key will generate a currency code like ¥ or £)
-#define BP_DCUR BP_DEAD_CURRENCY
-#define BP_DEAD_HORN LSFT(ALGR(BP_COMMA)) // dead ̛
-#define BP_DHRN BP_DEAD_HORN
-#define BP_LONG_S LSFT(ALGR(BP_C)) // ſ
-#define BP_LNGS BP_LONG_S
-#define BP_TRADEMARK LSFT(BP_REGISTERED_TRADEMARK) // ™
-#define BP_TM BP_TRADEMARK
-#define BP_ORDINAL_INDICATOR_O LSFT(ALGR(BP_M)) // º
-#define BP_ORDO BP_ORDINAL_INDICATOR_O
-#define BP_DEAD_COMMA LSFT(BP_DEAD_CEDILLA) // dead ˛
-#define BP_DCOM BP_DEAD_COMMA
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ ` │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │   │   │   │   │   │ ! │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │ ; │   │   │   │   │   │   │   │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │   │   │   │   │ : │   │ ? │   │   │   │   │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define BP_HASH S(BP_DLR) // #
+#define BP_1 S(BP_DQUO) // 1
+#define BP_2 S(BP_LDAQ) // 2
+#define BP_3 S(BP_RDAQ) // 3
+#define BP_4 S(BP_LPRN) // 4
+#define BP_5 S(BP_RPRN) // 5
+#define BP_6 S(BP_AT) // 6
+#define BP_7 S(BP_PLUS) // 7
+#define BP_8 S(BP_MINS) // 8
+#define BP_9 S(BP_SLSH) // 9
+#define BP_0 S(BP_ASTR) // 0
+#define BP_DEG S(BP_EQL) // °
+#define BP_GRV S(BP_PERC) // `
+// Row 2
+#define BP_EXLM S(BP_DCIR) // !
+// Row 3
+#define BP_SCLN S(BP_COMM) // ;
+// Row 4
+#define BP_COLN S(BP_DOT) // :
+#define BP_QUES S(BP_QUOT) // ?
+// Row 5
+#define BP_NBSP S(KC_SPC) // (non-breaking space)
-// Fourth row
-#define BP_LEFT_QUOTE LSFT(ALGR(BP_Y)) // ‘
-#define BP_LQOT BP_LEFT_QUOTE
-#define BP_RIGHT_QUOTE LSFT(ALGR(BP_X)) // ’
-#define BP_RQOT BP_RIGHT_QUOTE
-#define BP_INTERPUNCT LSFT(ALGR(BP_DOT)) // ·
-#define BP_IPCT BP_INTERPUNCT
-#define BP_DEAD_HOOK_ABOVE LSFT(ALGR(BP_QUESTION)) // dead ̉
-#define BP_DHKA BP_DEAD_HOOK_ABOVE
-#define BP_DEAD_UNDERDOT LSFT(BP_DEAD_RING) // dead ̣
-#define BP_DUDT BP_DEAD_UNDERDOT
-#define BP_DOUBLE_DAGGER LSFT(BP_DAGGER) // ‡
-#define BP_DDGR BP_DOUBLE_DAGGER
-#define BP_ORDINAL_INDICATOR_A LSFT(ALGR(BP_F)) // ª
-#define BP_ORDA BP_ORDINAL_INDICATOR_A
+/* AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ – │ — │ < │ > │ [ │ ] │ ^ │ ± │ − │ ÷ │ × │ ≠ │ ‰ │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │ | │ ´ │ & │ Œ │ ` │ ¡ │ ˇ │ Ð │ / │ IJ │ Ə │ ˘ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ Æ │ Ù │ ¨ │ € │   │ © │ Þ │ ẞ │ ® │ ~ │ ¯ │ ¸ │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │   │ \ │ { │ } │ … │ ~ │ ¿ │ ° │   │ † │ ˛ │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │           _            │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define BP_NDSH ALGR(BP_DLR) // –
+#define BP_MDSH ALGR(BP_DQUO) // —
+#define BP_LABK ALGR(BP_LDAQ) // <
+#define BP_RABK ALGR(BP_RDAQ) // >
+#define BP_LBRC ALGR(BP_LPRN) // [
+#define BP_RBRC ALGR(BP_RPRN) // ]
+#define BP_CIRC ALGR(BP_AT) // ^
+#define BP_PLMN ALGR(BP_PLUS) // ±
+#define BP_MMNS ALGR(BP_MINS) // −
+#define BP_DIV ALGR(BP_SLSH) // ÷
+#define BP_MUL ALGR(BP_ASTR) // ×
+#define BP_NEQL ALGR(BP_EQL) // ≠
+#define BP_PERM ALGR(BP_PERC) // ‰
+// Row 2
+#define BP_PIPE ALGR(BP_B) // |
+#define BP_ACUT ALGR(BP_EACU) // ´ (dead)
+#define BP_AMPR ALGR(BP_P) // &
+#define BP_OE ALGR(BP_O) // Œ
+#define BP_DGRV ALGR(BP_EGRV) // ` (dead)
+#define BP_IEXL ALGR(BP_DCIR) // ¡
+#define BP_CARN ALGR(BP_V) // ˇ (dead)
+#define BP_ETH ALGR(BP_D) // Ð
+#define BP_DSLS ALGR(BP_L) // / (dead)
+#define BP_IJ ALGR(BP_J) // IJ
+#define BP_SCHW ALGR(BP_Z) // Ə
+#define BP_BREV ALGR(BP_W) // ˘ (dead)
+// Row 3
+#define BP_AE ALGR(BP_A) // Æ
+#define BP_UGRV ALGR(BP_U) // Ù
+#define BP_DIAE ALGR(BP_I) // ¨ (dead)
+#define BP_EURO ALGR(BP_E) // €
+#define BP_COPY ALGR(BP_C) // ©
+#define BP_THRN ALGR(BP_T) // Þ
+#define BP_SS ALGR(BP_S) // ẞ
+#define BP_REGD ALGR(BP_R) // ®
+#define BP_DTIL ALGR(BP_N) // ~ (dead)
+#define BP_MACR ALGR(BP_M) // ¯ (dead)
+#define BP_CEDL ALGR(BP_CCED) // ¸ (dead)
+// Row 4
+#define BP_BSLS ALGR(BP_AGRV) // (backslash)
+#define BP_LCBR ALGR(BP_Y) // {
+#define BP_RCBR ALGR(BP_X) // }
+#define BP_ELLP ALGR(BP_DOT) // …
+#define BP_TILD ALGR(BP_K) // ~
+#define BP_IQUE ALGR(BP_QEST) // ¿
+#define BP_RNGA ALGR(BP_Q) // ° (dead)
+#define BP_DGRK ALGR(BP_G) // µ (dead Greek key)
+#define BP_DAGG ALGR(BP_H) // †
+#define BP_OGON ALGR(BP_F) // ˛ (dead)
+// Row 5
+#define BP_UNDS ALGR(KC_SPC) // _
-// Space bar
-#define BP_NARROW_NON_BREAKING_SPACE ALGR(BP_NON_BREAKING_SPACE)
-#define BP_NNBS BP_NARROW_NON_BREAKING_SPACE
+/* Shift+AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ¶ │ „ │ “ │ ” │ ≤ │ ≥ │   │ ¬ │ ¼ │ ½ │ ¾ │ ′ │ ″ │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │ ¦ │ ˝ │ § │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │ ˙ │ ¤ │ ̛  │ ſ │   │   │ ™ │   │ º │ , │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │   │   │ ‘ │ ’ │ · │ ⌨ │ ̉  │ ̣  │   │ ‡ │ ª │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define BP_PARA S(ALGR(BP_DLR)) // ¶
+#define BP_DLQU S(ALGR(BP_DQUO)) // „
+#define BP_LDQU S(ALGR(BP_LDAQ)) // “
+#define BP_RDQU S(ALGR(BP_RDAQ)) // ”
+#define BP_LEQL S(ALGR(BP_LPRN)) // ≤
+#define BP_GEQL S(ALGR(BP_RPRN)) // ≥
+#define BP_NOT S(ALGR(BP_PLUS)) // ¬
+#define BP_QRTR S(ALGR(BP_MINS)) // ¼
+#define BP_HALF S(ALGR(BP_SLSH)) // ½
+#define BP_TQTR S(ALGR(BP_ASTR)) // ¾
+#define BP_PRIM S(ALGR(BP_EQL)) // ′
+#define BP_DPRM S(ALGR(BP_PERC)) // ″
+// Row 2
+#define BP_BRKP S(ALGR(BP_B)) // ¦
+#define BP_DACU S(ALGR(BP_EACU)) // ˝ (dead)
+#define BP_SECT S(ALGR(BP_P)) // §
+// Row 3
+#define BP_DOTA S(ALGR(BP_I)) // ˙ (dead)
+#define BP_CURR S(ALGR(BP_E)) // ¤ (dead)
+#define BP_HORN S(ALGR(BP_COMM)) // ̛ (dead)
+#define BP_LNGS S(ALGR(BP_C)) // ſ
+#define BP_TM S(ALGR(BP_R)) // ™
+#define BP_MORD S(ALGR(BP_M)) // º
+#define BP_DCMM S(ALGR(BP_CCED)) // , (dead)
+// Row 4
+#define BP_LSQU S(ALGR(BP_Y)) // ‘
+#define BP_RSQU S(ALGR(BP_X)) // ’
+#define BP_MDDT S(ALGR(BP_DOT)) // ·
+#define BP_KEYB S(ALGR(BP_K)) // ⌨
+#define BP_HOKA S(ALGR(BP_QUOT)) // ̉ (dead)
+#define BP_DOTB S(ALGR(BP_Q)) // ̣ (dead)
+#define BP_DDAG S(ALGR(BP_H)) // ‡
+#define BP_FORD S(ALGR(BP_F)) // ª
+// Row 5
+#define BP_NNBS S(ALGR(BP_)) // (narrow non-breaking space)
-#endif
+// DEPRECATED
+#define BP_DOLLAR BP_DLR
+#define BP_DOUBLE_QUOTE BP_DQUO
+#define BP_DQOT BP_DQUO
+#define BP_LEFT_GUILLEMET BP_LDAQ
+#define BP_LGIL BP_LDAQ
+#define BP_RIGHT_GUILLEMET BP_RDAQ
+#define BP_RGIL BP_RDAQ
+#define BP_LEFT_PAREN BP_LPRN
+#define BP_RIGHT_PAREN BP_RPRN
+#define BP_MINUS BP_MINS
+#define BP_SLASH BP_SLSH
+#define BP_ASTERISK BP_ASTR
+#define BP_EQUAL BP_EQL
+#define BP_PERCENT BP_PERC
+#define BP_E_ACUTE BP_EACU
+#define BP_ECUT BP_EACU
+#define BP_E_GRAVE BP_EGRV
+#define BP_DEAD_CIRCUMFLEX BP_DCIR
+#define BP_DCRC BP_DCIR
+#define BP_COMMA BP_COMM
+#define BP_C_CEDILLA BP_CCED
+#define BP_E_CIRCUMFLEX BP_ECIR
+#define BP_ECRC BP_ECIR
+#define BP_A_GRAVE BP_AGRV
+#define BP_APOSTROPHE BP_QUOT
+#define BP_APOS BP_QUOT
+#define BP_DEGREE BP_DEG
+#define BP_DEGR BP_DEG
+#define BP_GRAVE BP_GRV
+#define BP_EXCLAIM BP_EXLM
+#define BP_SCOLON BP_SCLN
+#define BP_COLON BP_COLN
+#define BP_QUESTION BP_QUES
+#define BP_QEST BP_QUES
+#define BP_NON_BREAKING_SPACE BP_NBSP
+#define BP_EN_DASH BP_NDSH
+#define BP_EM_DASH BP_MDSH
+#define BP_LESS BP_LABK
+#define BP_GREATER BP_RABK
+#define BP_GRTR BP_RABK
+#define BP_LBRACKET BP_LBRC
+#define BP_RBRACKET BP_RBRC
+#define BP_CIRCUMFLEX CIRC
+#define BP_PLUS_MINUS BP_PLMN
+#define BP_PSMS BP_PLMN
+#define BP_MATH_MINUS BP_MMNS
+#define BP_OBELUS BP_DIV
+#define BP_OBEL BP_DIV
+#define BP_DIVISION_SIGN BP_DIV
+#define BP_DVSN BP_DIV
+#define BP_TIMES BP_MUL
+#define BP_TIMS BP_MUL
+#define BP_DIFFERENT BP_NEQL
+#define BP_DIFF BP_NEQL
+#define BP_PERMILLE BP_PERM
+#define BP_PMIL BP_PERM
+#define BP_DEAD_ACUTE BP_ACUT
+#define BP_DACT BP_ACUT
+#define BP_AMPERSAND BP_AMPR
+#define BP_OE_LIGATURE BP_OE
+#define BP_DEAD_GRAVE BP_DGRV
+#define BP_INVERTED_EXCLAIM BP_IEXL
+#define BP_IXLM BP_IEXL
+#define BP_DEAD_CARON BP_CARN
+#define BP_DCAR BP_CARN
+#define BP_DEAD_SLASH BP_DSLS
+#define BP_DSLH BP_DSLS
+#define BP_IJ_LIGATURE BP_IJ
+#define BP_SCHWA BP_SCHW
+#define BP_SCWA BP_SCHW
+#define BP_DEAD_BREVE BP_BREV
+#define BP_DBRV BP_BREV
+#define BP_AE_LIGATURE BP_AE
+#define BP_U_GRAVE BP_UGRV
+#define BP_DEAD_TREMA BP_DIAE
+#define BP_DTRM BP_DIAE
+#define BP_TYPOGRAPHICAL_APOSTROPHE BP_COMM
+#define BP_TAPO BP_COMM
+#define BP_COPYRIGHT BP_COPY
+#define BP_CPRT BP_COPY
+#define BP_THORN BP_THRN
+#define BP_SHARP_S BP_SS
+#define BP_SRPS BP_SS
+#define BP_REGISTERED_TRADEMARK BP_REGD
+#define BP_RTM BP_REGD
+#define BP_DEAD_TILDE BP_DTIL
+#define BP_DTLD BP_DTIL
+#define BP_DEAD_MACRON BP_MACR
+#define BP_DMCR BP_MACR
+#define BP_DEAD_CEDILLA BP_CEDL
+#define BP_DCED BP_CEDL
+#define BP_NONUS_SLASH BP_SLSH
+#define BP_NUSL BP_SLSH
+#define BP_BACKSLASH BP_BSLS
+#define BP_LEFT_CURLY_BRACE BP_LCBR
+#define BP_RIGHT_CURLY_BRACE BP_RCBR
+#define BP_ELLIPSIS BP_ELLP
+#define BP_ELPS BP_ELLP
+#define BP_TILDE BP_TILD
+#define BP_INVERTED_QUESTION BP_IQUE
+#define BP_IQST BP_IQUE
+#define BP_DEAD_RING BP_RNGA
+#define BP_DRNG BP_RNGA
+#define BP_DEAD_GREEK BP_DGRK
+#define BP_DAGGER BP_DAGG
+#define BP_DAGR BP_DAGG
+#define BP_DEAD_OGONEK BP_OGON
+#define BP_DOGO BP_OGON
+#define BP_UNDERSCORE BP_UNDS
+#define BP_PARAGRAPH BP_PARA
+#define BP_PARG BP_PARA
+#define BP_LOW_DOUBLE_QUOTE BP_DLQU
+#define BP_LWQT BP_DLQU
+#define BP_LEFT_DOUBLE_QUOTE BP_RDQU
+#define BP_RIGHT_DOUBLE_QUOTE BP_RDQU
+#define BP_LESS_OR_EQUAL BP_LEQL
+#define BP_GREATER_OR_EQUAL BP_GEQL
+#define BP_NEGATION BP_NOT
+#define BP_NEGT BP_NOT
+#define BP_ONE_QUARTER BP_QRTR
+#define BP_1QRT BP_QRTR
+#define BP_ONE_HALF BP_HALF
+#define BP_1HLF BP_HALF
+#define BP_THREE_QUARTERS TQTR
+#define BP_3QRT BP_TQTR
+#define BP_MINUTES BP_PRIM
+#define BP_MNUT BP_PRIM
+#define BP_SECONDS BP_DPRM
+#define BP_SCND BP_DPRM
+#define BP_BROKEN_PIPE BP_BRKP
+#define BP_BPIP BP_BRKP
+#define BP_DEAD_DOUBLE_ACUTE BP_DACU
+#define BP_DDCT BP_DACU
+#define BP_SECTION BP_SECT
+#define BP_GRAVE_BIS BP_GRV
+#define BP_GRVB BP_GRV
+#define BP_DEAD_DOT_ABOVE BP_DOTA
+#define BP_DDTA BP_DOTA
+#define BP_DEAD_CURRENCY BP_CURR
+#define BP_DCUR BP_CURR
+#define BP_DEAD_HORN BP_HORN
+#define BP_DHRN BP_HORN
+#define BP_LONG_S BP_LNGS
+#define BP_TRADEMARK BP_TM
+#define BP_ORDINAL_INDICATOR_O MORD
+#define BP_ORDO BP_MORD
+#define BP_DEAD_COMMA BP_DCMM
+#define BP_DCOM BP_DCMM
+#define BP_LEFT_QUOTE BP_LSQU
+#define BP_LQOT BP_LSQU
+#define BP_RIGHT_QUOTE BP_RSQU
+#define BP_RQOT BP_RSQU
+#define BP_INTERPUNCT BP_MDDT
+#define BP_IPCT BP_MDDT
+#define BP_DEAD_HOOK_ABOVE BP_HOKA
+#define BP_DHKA BP_HOKA
+#define BP_DEAD_UNDERDOT BP_DOTB
+#define BP_DUDT BP_DOTB
+#define BP_DOUBLE_DAGGER BP_DDAG
+#define BP_DDGR BP_DDAG
+#define BP_ORDINAL_INDICATOR_A BP_FORD
+#define BP_ORDA BP_FORD
+#define BP_NARROW_NON_BREAKING_SPACE BP_NNBS
diff --git a/quantum/keymap_extras/keymap_fr_ch.h b/quantum/keymap_extras/keymap_fr_ch.h
index 8da5ae6aa5..02ee22a12e 100644
--- a/quantum/keymap_extras/keymap_fr_ch.h
+++ b/quantum/keymap_extras/keymap_fr_ch.h
@@ -13,97 +13,226 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEYMAP_FR_CH
-#define KEYMAP_FR_CH
-#include "keymap.h"
-
-// normal characters
-#define FR_CH_Z KC_Y
-#define FR_CH_Y KC_Z
-
-#define FR_CH_A KC_A
-#define FR_CH_B KC_B
-#define FR_CH_C KC_C
-#define FR_CH_D KC_D
-#define FR_CH_E KC_E
-#define FR_CH_F KC_F
-#define FR_CH_G KC_G
-#define FR_CH_H KC_H
-#define FR_CH_I KC_I
-#define FR_CH_J KC_J
-#define FR_CH_K KC_K
-#define FR_CH_L KC_L
-#define FR_CH_M KC_M
-#define FR_CH_N KC_N
-#define FR_CH_O KC_O
-#define FR_CH_P KC_P
-#define FR_CH_Q KC_Q
-#define FR_CH_R KC_R
-#define FR_CH_S KC_S
-#define FR_CH_T KC_T
-#define FR_CH_U KC_U
-#define FR_CH_V KC_V
-#define FR_CH_W KC_W
-#define FR_CH_X KC_X
-
-#define FR_CH_0 KC_0
-#define FR_CH_1 KC_1
-#define FR_CH_2 KC_2
-#define FR_CH_3 KC_3
-#define FR_CH_4 KC_4
-#define FR_CH_5 KC_5
-#define FR_CH_6 KC_6
-#define FR_CH_7 KC_7
-#define FR_CH_8 KC_8
-#define FR_CH_9 KC_9
+#pragma once
-#define FR_CH_DOT KC_DOT
-#define FR_CH_COMM KC_COMM
+#include "keymap.h"
-#define FR_CH_QUOT KC_MINS
-#define FR_CH_AE KC_QUOT
-#define FR_CH_UE KC_LBRC
-#define FR_CH_OE KC_SCLN
+// clang-format off
-#define FR_CH_CIRC KC_EQL // accent circumflex ^ and grave ` and ~
-#define FR_CH_LESS KC_NUBS // < and > and backslash
-#define FR_CH_MINS KC_SLSH // - and _
-#define FR_CH_DLR KC_BSLS // $, £ and }
-#define FR_CH_PARA KC_GRV // § and ring °
-#define FR_CH_DIAE KC_RBRC // accent ¨
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ § │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ^ │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ è │ ¨ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ é │ à │ $ │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define CH_SECT KC_GRV // §
+#define CH_1 KC_1 // 1
+#define CH_2 KC_2 // 2
+#define CH_3 KC_3 // 3
+#define CH_4 KC_4 // 4
+#define CH_5 KC_5 // 5
+#define CH_6 KC_6 // 6
+#define CH_7 KC_7 // 7
+#define CH_8 KC_8 // 8
+#define CH_9 KC_9 // 9
+#define CH_0 KC_0 // 0
+#define CH_QUOT KC_MINS // '
+#define CH_CIRC KC_EQL // ^ (dead)
+// Row 2
+#define CH_Q KC_Q // Q
+#define CH_W KC_W // W
+#define CH_E KC_E // E
+#define CH_R KC_R // R
+#define CH_T KC_T // T
+#define CH_Z KC_Y // Z
+#define CH_U KC_U // U
+#define CH_I KC_I // I
+#define CH_O KC_O // O
+#define CH_P KC_P // P
+#define CH_EGRV KC_LBRC // è
+#define CH_DIAE KC_RBRC // ¨ (dead)
+// Row 3
+#define CH_A KC_A // A
+#define CH_S KC_S // S
+#define CH_D KC_D // D
+#define CH_F KC_F // F
+#define CH_G KC_G // G
+#define CH_H KC_H // H
+#define CH_J KC_J // J
+#define CH_K KC_K // K
+#define CH_L KC_L // L
+#define CH_EACU KC_SCLN // é
+#define CH_AGRV KC_QUOT // à
+#define CH_DLR KC_NUHS // $
+// Row 4
+#define CH_LABK KC_NUBS // <
+#define CH_Y KC_Z // Y
+#define CH_X KC_X // X
+#define CH_C KC_C // C
+#define CH_V KC_V // V
+#define CH_B KC_B // B
+#define CH_N KC_N // N
+#define CH_M KC_M // M
+#define CH_COMM KC_COMM // ,
+#define CH_DOT KC_DOT // .
+#define CH_MINS KC_SLSH // -
-// shifted characters
-#define FR_CH_RING LSFT(KC_GRV) // °
-#define FR_CH_EXLM LSFT(KC_RBRC) // !
-#define FR_CH_PLUS LSFT(KC_1) // +
-#define FR_CH_DQOT LSFT(KC_2) // "
-#define FR_CH_ASTR LSFT(KC_3) // *
-#define FR_CH_PERC LSFT(KC_5) // %
-#define FR_CH_AMPR LSFT(KC_6) // &
-#define FR_CH_SLSH LSFT(KC_7) // /
-#define FR_CH_LPRN LSFT(KC_8) // (
-#define FR_CH_RPRN LSFT(KC_9) // )
-#define FR_CH_EQL LSFT(KC_0) // =
-#define FR_CH_QST LSFT(FR_CH_QUOT) // ?
-#define FR_CH_MORE LSFT(FR_CH_LESS) // >
-#define FR_CH_COLN LSFT(KC_DOT) // :
-#define FR_CH_SCLN LSFT(KC_COMM) // ;
-#define FR_CH_UNDS LSFT(FR_CH_MINS) // _
-#define FR_CH_CCED LSFT(KC_4) // ç
-#define FR_CH_GRV LSFT(FR_CH_CIRC) // accent grave `
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ° │ + │ " │ * │ ç │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │   │   │   │   │   │   │   │   │   │   │ ü │ ! │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │ ö │ ä │ £ │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define CH_DEG S(CH_SECT) // °
+#define CH_PLUS S(CH_1) // +
+#define CH_DQUO S(CH_2) // "
+#define CH_ASTR S(CH_3) // *
+#define CH_CCED S(CH_4) // ç
+#define CH_PERC S(CH_5) // %
+#define CH_AMPR S(CH_6) // &
+#define CH_SLSH S(CH_7) // /
+#define CH_LPRN S(CH_8) // (
+#define CH_RPRN S(CH_9) // )
+#define CH_EQL S(CH_0) // =
+#define CH_QUES S(CH_QUOT) // ?
+#define CH_GRV S(CH_CIRC) // ` (dead)
+// Row 2
+#define CH_UDIA S(CH_EGRV) // ü
+#define CH_EXLM S(CH_DIAE) // !
+// Row 3
+#define CH_ODIA S(CH_EACU) // ö
+#define CH_ADIA S(CH_AGRV) // ä
+#define CH_PND S(CH_DLR) // £
+// Row 4
+#define CH_RABK S(CH_LABK) // >
+#define CH_SCLN S(CH_COMM) // ;
+#define CH_COLN S(CH_DOT) // :
+#define CH_UNDS S(CH_MINS) // _
-// Alt Gr-ed characters
-#define FR_CH_LCBR ALGR(KC_QUOT) // {
-#define FR_CH_LBRC ALGR(KC_LBRC) // [
-#define FR_CH_RBRC ALGR(KC_9) // ]
-#define FR_CH_RCBR ALGR(KC_0) // }
-#define FR_CH_BSLS ALGR(FR_CH_LESS) // backslash
-#define FR_CH_AT ALGR(KC_2) // @
-#define FR_CH_EURO ALGR(KC_E) // €
-#define FR_CH_TILD ALGR(FR_CH_CIRC) // ~
-#define FR_CH_PIPE ALGR(KC_1) // |
-#define FR_CH_HASH ALGR(KC_3) // #
-#define FR_CH_ACUT ALGR(FR_CH_QUOT) // accent acute ´
+/* AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │   │ ¦ │ @ │ # │   │   │ ¬ │ | │ ¢ │   │   │ ´ │ ~ │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │   │   │ € │   │   │   │   │   │   │   │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ { │ } │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │ \ │   │   │   │   │   │   │   │   │   │   │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define CH_BRKP ALGR(CH_1) // ¦
+#define CH_AT ALGR(CH_2) // @
+#define CH_HASH ALGR(CH_3) // #
+#define CH_NOT ALGR(CH_6) // ¬
+#define CH_PIPE ALGR(CH_7) // |
+#define CH_CENT ALGR(CH_8) // ¢
+#define CH_ACUT ALGR(CH_QUOT) // ´ (dead)
+#define CH_TILD ALGR(CH_CIRC) // ~ (dead)
+// Row 2
+#define CH_EURO ALGR(CH_E) // €
+#define CH_LBRC ALGR(CH_EGRV) // [
+#define CH_RBRC ALGR(CH_DIAE) // ]
+// Row 3
+#define CH_LCBR ALGR(CH_AGRV) // {
+#define CH_RCBR ALGR(CH_DLR) // }
+// Row 4
+#define CH_BSLS ALGR(CH_LABK) // (backslash)
-#endif
+// DEPRECATED
+#define FR_CH_Z CH_Z
+#define FR_CH_Y CH_Y
+#define FR_CH_A CH_A
+#define FR_CH_B CH_B
+#define FR_CH_C CH_C
+#define FR_CH_D CH_D
+#define FR_CH_E CH_E
+#define FR_CH_F CH_F
+#define FR_CH_G CH_G
+#define FR_CH_H CH_H
+#define FR_CH_I CH_I
+#define FR_CH_J CH_J
+#define FR_CH_K CH_K
+#define FR_CH_L CH_L
+#define FR_CH_M CH_M
+#define FR_CH_N CH_N
+#define FR_CH_O CH_O
+#define FR_CH_P CH_P
+#define FR_CH_Q CH_Q
+#define FR_CH_R CH_R
+#define FR_CH_S CH_S
+#define FR_CH_T CH_T
+#define FR_CH_U CH_U
+#define FR_CH_V CH_V
+#define FR_CH_W CH_W
+#define FR_CH_X CH_X
+#define FR_CH_0 CH_0
+#define FR_CH_1 CH_1
+#define FR_CH_2 CH_2
+#define FR_CH_3 CH_3
+#define FR_CH_4 CH_4
+#define FR_CH_5 CH_5
+#define FR_CH_6 CH_6
+#define FR_CH_7 CH_7
+#define FR_CH_8 CH_8
+#define FR_CH_9 CH_9
+#define FR_CH_DOT CH_DOT
+#define FR_CH_COMM CH_COMM
+#define FR_CH_QUOT CH_QUOT
+#define FR_CH_AE CH_AGRV
+#define FR_CH_UE CH_EGRV
+#define FR_CH_OE CH_EACU
+#define FR_CH_CIRC CH_CIRC
+#define FR_CH_LESS CH_LABK
+#define FR_CH_MINS CH_MINS
+#define FR_CH_DLR CH_DLR
+#define FR_CH_PARA CH_SECT
+#define FR_CH_DIAE CH_DIAE
+#define FR_CH_RING CH_DEG
+#define FR_CH_EXLM CH_EXLM
+#define FR_CH_PLUS CH_PLUS
+#define FR_CH_DQOT CH_DQUO
+#define FR_CH_ASTR CH_ASTR
+#define FR_CH_PERC CH_PERC
+#define FR_CH_AMPR CH_AMPR
+#define FR_CH_SLSH CH_SLSH
+#define FR_CH_LPRN CH_LPRN
+#define FR_CH_RPRN CH_RPRN
+#define FR_CH_EQL CH_EQL
+#define FR_CH_QST CH_QUES
+#define FR_CH_MORE CH_RABK
+#define FR_CH_COLN CH_COLN
+#define FR_CH_SCLN CH_SCLN
+#define FR_CH_UNDS CH_UNDS
+#define FR_CH_CCED CH_CCED
+#define FR_CH_GRV CH_GRV
+#define FR_CH_LCBR CH_LCBR
+#define FR_CH_LBRC CH_LBRC
+#define FR_CH_RBRC CH_RBRC
+#define FR_CH_RCBR CH_RCBR
+#define FR_CH_BSLS CH_BSLS
+#define FR_CH_AT CH_AT
+#define FR_CH_EURO CH_EURO
+#define FR_CH_TILD CH_TILD
+#define FR_CH_PIPE CH_PIPE
+#define FR_CH_HASH CH_HASH
+#define FR_CH_ACUT CH_ACUT
diff --git a/quantum/keymap_extras/keymap_french_osx.h b/quantum/keymap_extras/keymap_french_osx.h
index 3a231874a4..d0132a2d85 100644
--- a/quantum/keymap_extras/keymap_french_osx.h
+++ b/quantum/keymap_extras/keymap_french_osx.h
@@ -13,80 +13,248 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEYMAP_FRENCH_OSX_H
-#define KEYMAP_FRENCH_OSX_H
-#include "keymap.h"
-
-// Normal characters
-#define FR_AT KC_GRV
-#define FR_AMP KC_1
-#define FR_EACU KC_2
-#define FR_QUOT KC_3
-#define FR_APOS KC_4
-#define FR_LPRN KC_5
-#define FR_SECT KC_6
-#define FR_EGRV KC_7
-#define FR_EXLM KC_8
-#define FR_CCED KC_9
-#define FR_AGRV KC_0
-#define FR_RPRN KC_MINS
-#define FR_MINS KC_EQL
-
-#define FR_A KC_Q
-#define FR_Z KC_W
-#define FR_CIRC KC_LBRC
-#define FR_DLR KC_RBRC
-
-#define FR_Q KC_A
-#define FR_M KC_SCLN
-#define FR_UGRV KC_QUOT
-#define FR_GRV KC_NUHS
-
-#define FR_LESS KC_NUBS
-#define FR_W KC_Z
-#define FR_COMM KC_M
-#define FR_SCLN KC_COMM
-#define FR_COLN KC_DOT
-#define FR_EQL KC_SLSH
+#pragma once
-// Shifted characters
-#define FR_HASH LSFT(KC_GRV)
-#define FR_1 LSFT(KC_1)
-#define FR_2 LSFT(KC_2)
-#define FR_3 LSFT(KC_3)
-#define FR_4 LSFT(KC_4)
-#define FR_5 LSFT(KC_5)
-#define FR_6 LSFT(KC_6)
-#define FR_7 LSFT(KC_7)
-#define FR_8 LSFT(KC_8)
-#define FR_9 LSFT(KC_9)
-#define FR_0 LSFT(KC_0)
-#define FR_UNDS LSFT(FR_MINS)
+#include "keymap.h"
-#define FR_UMLT LSFT(FR_CIRC)
-#define FR_ASTR LSFT(FR_DLR)
+// clang-format off
-#define FR_PERC LSFT(FR_UGRV)
-#define FR_PND LSFT(FR_GRV)
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ @ │ & │ é │ " │ ' │ ( │ § │ è │ ! │ ç │ à │ ) │ - │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ $ │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ ù │ ` │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ < │ W │ X │ C │ V │ B │ N │ , │ ; │ : │ = │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define FR_AT KC_GRV // @
+#define FR_AMPR KC_1 // &
+#define FR_LEAC KC_2 // é
+#define FR_DQUO KC_3 // "
+#define FR_QUOT KC_4 // '
+#define FR_LPRN KC_5 // (
+#define FR_SECT KC_6 // §
+#define FR_LEGR KC_7 // è
+#define FR_EXLM KC_8 // !
+#define FR_LCCE KC_9 // ç
+#define FR_LAGR KC_0 // à
+#define FR_RPRN KC_MINS // )
+#define FR_MINS KC_EQL // -
+// Row 2
+#define FR_A KC_Q // A
+#define FR_Z KC_W // Z
+#define FR_E KC_E // E
+#define FR_R KC_R // R
+#define FR_T KC_T // T
+#define FR_Y KC_Y // Y
+#define FR_U KC_U // U
+#define FR_I KC_I // I
+#define FR_O KC_O // O
+#define FR_P KC_P // P
+#define FR_CIRC KC_LBRC // ^
+#define FR_DLR KC_RBRC // $
+// Row 3
+#define FR_Q KC_A // Q
+#define FR_S KC_S // S
+#define FR_D KC_D // D
+#define FR_F KC_F // F
+#define FR_G KC_G // G
+#define FR_H KC_H // H
+#define FR_J KC_J // J
+#define FR_K KC_K // K
+#define FR_L KC_L // L
+#define FR_M KC_SCLN // M
+#define FR_LUGR KC_QUOT // ù
+#define FR_GRV KC_NUHS // `
+// Row 4
+#define FR_LABK KC_NUBS // <
+#define FR_W KC_Z // W
+#define FR_X KC_X // X
+#define FR_C KC_C // C
+#define FR_V KC_V // V
+#define FR_B KC_B // B
+#define FR_N KC_N // N
+#define FR_COMM KC_M // ,
+#define FR_SCLN KC_COMM // ;
+#define FR_COLN KC_DOT // :
+#define FR_EQL KC_SLSH // =
-#define FR_GRTR LSFT(FR_LESS)
-#define FR_QUES LSFT(FR_COMM)
-#define FR_DOT LSFT(FR_SCLN)
-#define FR_SLSH LSFT(FR_COLN)
-#define FR_PLUS LSFT(FR_EQL)
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ _ │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │   │   │   │   │   │   │   │   │   │   │ ¨ │ * │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │   │   │   │   │   │   │   │   │   │   │ % │ £ │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ > │   │   │   │   │   │   │ ? │ . │ / │ + │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define FR_HASH S(FR_AT) // #
+#define FR_1 S(FR_AMPR) // 1
+#define FR_2 S(FR_LEAC) // 2
+#define FR_3 S(FR_DQUO) // 3
+#define FR_4 S(FR_QUOT) // 4
+#define FR_5 S(FR_LPRN) // 5
+#define FR_6 S(FR_SECT) // 6
+#define FR_7 S(FR_LEGR) // 7
+#define FR_8 S(FR_EXLM) // 8
+#define FR_9 S(FR_LCCE) // 9
+#define FR_0 S(FR_LAGR) // 0
+#define FR_DEG S(FR_RPRN) // °
+#define FR_UNDS S(FR_MINS) // _
+// Row 2
+#define FR_DIAE S(FR_CIRC) // ¨ (dead)
+#define FR_ASTR S(FR_DLR) // *
+// Row 3
+#define FR_PERC S(FR_LUGR) // %
+#define FR_PND S(FR_GRV) // £
+// Row 4
+#define FR_RABK S(FR_LABK) // >
+#define FR_QUES S(FR_COMM) // ?
+#define FR_DOT S(FR_SCLN) // .
+#define FR_SLSH S(FR_COLN) // /
+#define FR_PLUS S(FR_EQL) // +
-// Alted characters
-#define FR_LCBR LALT(KC_5)
-#define FR_RCBR LALT(FR_RPRN)
-#define FR_EURO LALT(KC_E)
-#define FR_BULT LALT(FR_DLR)
-#define FR_TILD LALT(KC_N)
+/* Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ • │  │ ë │ “ │ ‘ │ { │ ¶ │ « │ ¡ │ Ç │ Ø │ } │ — │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ Æ │ Â │ Ê │ ® │ † │ Ú │ º │ î │ Œ │ π │ Ô │ € │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │ ‡ │ Ò │ ∂ │ ƒ │ fi │ Ì │ Ï │ È │ ¬ │ µ │ Ù │   │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ ≤ │ ‹ │ ≈ │ © │ ◊ │ ß │ ~ │ ∞ │ … │ ÷ │ ≠ │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define FR_BULT A(FR_AT) // •
+#define FR_APPL A(FR_AMPR) //  (Apple logo)
+#define FR_LEDI A(FR_LEAC) // ë
+#define FR_LDQU A(FR_DQUO) // “
+#define FR_LSQU A(FR_QUOT) // ‘
+#define FR_LCBR A(FR_LPRN) // {
+#define FR_PILC A(FR_SECT) // ¶
+#define FR_LDAQ A(FR_LEGR) // «
+#define FR_IEXL A(FR_EXLM) // ¡
+#define FR_CCCE A(FR_LCCE) // Ç
+#define FR_OSTR A(FR_LAGR) // Ø
+#define FR_RCBR A(FR_RPRN) // }
+#define FR_MDSH A(FR_MINS) // —
+// Row 2
+#define FR_AE A(FR_A) // Æ
+#define FR_CACI A(FR_Z) // Â
+#define FR_ECIR A(FR_E) // Ê
+#define FR_REGD A(FR_R) // ®
+#define FR_DAGG A(FR_T) // †
+#define FR_CUAC A(FR_Y) // Ú
+#define FR_MORD A(FR_U) // º
+#define FR_LICI A(FR_I) // î
+#define FR_OE A(FR_O) // Œ
+#define FR_PI A(FR_P) // π
+#define FR_OCIR A(FR_CIRC) // Ô
+#define FR_EURO A(FR_DLR) // €
+// Row 3
+#define FR_DDAG A(FR_Q) // ‡
+#define FR_COGR A(FR_S) // Ò
+#define FR_PDIF A(FR_D) // ∂
+#define FR_FHK A(FR_F) // ƒ
+#define FR_FI A(FR_G) // fi
+#define FR_CIGR A(FR_H) // Ì
+#define FR_CIDI A(FR_J) // Ï
+#define FR_CEGR A(FR_K) // È
+#define FR_NOT A(FR_L) // ¬
+#define FR_MICR A(FR_M) // µ
+#define FR_CUGR A(FR_LUGR) // Ù
+// Row 4
+#define FR_LTEQ A(FR_LABK) // ≤
+#define FR_LSAQ A(FR_W) // ‹
+#define FR_AEQL A(FR_X) // ≈
+#define FR_COPY A(FR_C) // ©
+#define FR_LOZN A(FR_V) // ◊
+#define FR_SS A(FR_B) // ß
+#define FR_TILD A(FR_N) // ~ (dead)
+#define FR_INFN A(FR_COMM) // ∞
+#define FR_ELLP A(FR_SCLN) // …
+#define FR_DIV A(FR_COLN) // ÷
+#define FR_NEQL A(FR_EQL) // ≠
-// Shift+Alt-ed characters
-#define FR_LBRC LSFT(LALT(KC_5))
-#define FR_RBRC LSFT(LALT(FR_RPRN))
-#define FR_PIPE LSFT(LALT(KC_L))
-#define FR_BSLS LSFT(LALT(FR_COLN))
+/* Shift+Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ Ÿ │ ´ │ „ │   │   │ [ │ å │ » │ Û │ Á │   │ ] │ – │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │   │ Å │   │ ‚ │ ™ │   │ ª │ ï │   │ ∏ │   │ ¥ │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │ Ω │ ∑ │ ∆ │ · │ fl │ Î │ Í │ Ë │ | │ Ó │ ‰ │   │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ ≥ │ › │ ⁄ │ ¢ │ √ │ ∫ │ ı │ ¿ │   │ \ │ ± │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define FR_CYDI S(A(FR_AT)) // Ÿ
+#define FR_ACUT S(A(FR_AMPR)) // ´ (dead)
+#define FR_DLQU S(A(FR_LEAC)) // „
+#define FR_LBRC S(A(FR_LPRN)) // [
+#define FR_LARI S(A(FR_SECT)) // å
+#define FR_RDAQ S(A(FR_LEGR)) // »
+#define FR_CUCI S(A(FR_EXLM)) // Û
+#define FR_CAAC S(A(FR_LCCE)) // Á
+#define FR_RBRC S(A(FR_RPRN)) // ]
+#define FR_NDSH S(A(FR_MINS)) // –
+// Row 2
+#define FR_CARI S(A(FR_Z)) // Å
+#define FR_SLQU S(A(FR_R)) // ‚
+#define FR_TM S(A(FR_T)) // ™
+#define FR_FORD S(A(FR_U)) // ª
+#define FR_LIDI S(A(FR_I)) // ï
+#define FR_NARP S(A(FR_P)) // ∏
+#define FR_YEN S(A(FR_DLR)) // ¥
+// Row 3
+#define FR_OMEG S(A(FR_Q)) // Ω
+#define FR_NARS S(A(FR_S)) // ∑
+#define FR_INCR S(A(FR_D)) // ∆
+#define FR_MDDT S(A(FR_F)) // ·
+#define FR_FL S(A(FR_G)) // fl
+#define FR_CICI S(A(FR_H)) // Î
+#define FR_CIAC S(A(FR_J)) // Í
+#define FR_CEDI S(A(FR_K)) // Ë
+#define FR_PIPE S(A(FR_L)) // |
+#define FR_COAC S(A(FR_M)) // Ó
+#define FR_PERM S(A(FR_LUGR)) // ‰
+// Row 4
+#define FR_GTEQ S(A(FR_LABK)) // ≥
+#define FR_LSAQ S(A(FR_W)) // ›
+#define FR_FRSL S(A(FR_X)) // ⁄
+#define FR_CENT S(A(FR_C)) // ¢
+#define FR_SQRT S(A(FR_V)) // √
+#define FR_INTG S(A(FR_B)) // ∫
+#define FR_DLSI S(A(FR_N)) // ı
+#define FR_IQUE S(A(FR_COMM)) // ¿
+#define FR_BSLS S(A(FR_COLN)) // (backslash)
+#define FR_PLMN S(A(FR_EQL)) // ±
-#endif
+// DEPRECATED
+#define FR_AMP FR_AMPR
+#define FR_EACU FR_LEAC
+#define FR_APOS FR_QUOT
+#define FR_EGRV FR_LEGR
+#define FR_CCED FR_LCCE
+#define FR_AGRV FR_LAGR
+#define FR_UGRV FR_LUGR
+#define FR_LESS FR_LABK
+#define FR_UMLT FR_DIAE
+#define FR_GRTR FR_RABK
diff --git a/quantum/keymap_extras/keymap_german_ch.h b/quantum/keymap_extras/keymap_german_ch.h
index 19b3627587..07f4503a14 100644
--- a/quantum/keymap_extras/keymap_german_ch.h
+++ b/quantum/keymap_extras/keymap_german_ch.h
@@ -13,105 +13,170 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEYMAP_SWISS_GERMAN
-#define KEYMAP_SWISS_GERMAN
+
+#pragma once
#include "keymap.h"
-// normal characters
-#define CH_Z KC_Y
-#define CH_Y KC_Z
+// clang-format off
-#define CH_A KC_A
-#define CH_B KC_B
-#define CH_C KC_C
-#define CH_D KC_D
-#define CH_E KC_E
-#define CH_F KC_F
-#define CH_G KC_G
#ifdef CH_H
// The ChibiOS ch.h file defines this...
# undef CH_H
#endif
-#define CH_H KC_H
-#define CH_I KC_I
-#define CH_J KC_J
-#define CH_K KC_K
-#define CH_L KC_L
-#define CH_M KC_M
-#define CH_N KC_N
-#define CH_O KC_O
-#define CH_P KC_P
-#define CH_Q KC_Q
-#define CH_R KC_R
-#define CH_S KC_S
-#define CH_T KC_T
-#define CH_U KC_U
-#define CH_V KC_V
-#define CH_W KC_W
-#define CH_X KC_X
-
-#define CH_0 KC_0
-#define CH_1 KC_1
-#define CH_2 KC_2
-#define CH_3 KC_3
-#define CH_4 KC_4
-#define CH_5 KC_5
-#define CH_6 KC_6
-#define CH_7 KC_7
-#define CH_8 KC_8
-#define CH_9 KC_9
-
-#define CH_DOT KC_DOT
-#define CH_COMM KC_COMM
-
-#define CH_QUOT KC_MINS // ' ? ´
-#define CH_AE KC_QUOT
-#define CH_UE KC_LBRC
-#define CH_OE KC_SCLN
-#define CH_PARA KC_GRAVE // secction sign § and °
-#define CH_CARR KC_EQL // carret ^ ` ~
-#define CH_DIER KC_RBRC // dieresis ¨ ! ]
-#define CH_DLR KC_BSLS // $ £ }
-#define CH_LESS KC_NUBS // < and > and backslash
-#define CH_MINS KC_SLSH // - and _
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ § │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ^ │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ ü │ ¨ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ö │ ä │ $ │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define CH_SECT KC_GRV // §
+#define CH_1 KC_1 // 1
+#define CH_2 KC_2 // 2
+#define CH_3 KC_3 // 3
+#define CH_4 KC_4 // 4
+#define CH_5 KC_5 // 5
+#define CH_6 KC_6 // 6
+#define CH_7 KC_7 // 7
+#define CH_8 KC_8 // 8
+#define CH_9 KC_9 // 9
+#define CH_0 KC_0 // 0
+#define CH_QUOT KC_MINS // '
+#define CH_CIRC KC_EQL // ^ (dead)
+// Row 2
+#define CH_Q KC_Q // Q
+#define CH_W KC_W // W
+#define CH_E KC_E // E
+#define CH_R KC_R // R
+#define CH_T KC_T // T
+#define CH_Z KC_Y // Z
+#define CH_U KC_U // U
+#define CH_I KC_I // I
+#define CH_O KC_O // O
+#define CH_P KC_P // P
+#define CH_UDIA KC_LBRC // ü
+#define CH_DIAE KC_RBRC // ¨ (dead)
+// Row 3
+#define CH_A KC_A // A
+#define CH_S KC_S // S
+#define CH_D KC_D // D
+#define CH_F KC_F // F
+#define CH_G KC_G // G
+#define CH_H KC_H // H
+#define CH_J KC_J // J
+#define CH_K KC_K // K
+#define CH_L KC_L // L
+#define CH_ODIA KC_SCLN // ö
+#define CH_ADIA KC_QUOT // ä
+#define CH_DLR KC_NUHS // $
+// Row 4
+#define CH_LABK KC_NUBS // <
+#define CH_Y KC_Z // Y
+#define CH_X KC_X // X
+#define CH_C KC_C // C
+#define CH_V KC_V // V
+#define CH_B KC_B // B
+#define CH_N KC_N // N
+#define CH_M KC_M // M
+#define CH_COMM KC_COMM // ,
+#define CH_DOT KC_DOT // .
+#define CH_MINS KC_SLSH // -
-// shifted characters
-#define CH_RING LSFT(CH_PARA) // °
-#define CH_PLUS LSFT(KC_1) // +
-#define CH_DQOT LSFT(KC_2) // "
-#define CH_PAST LSFT(KC_3) // *
-#define CH_CELA LSFT(KC_4) // ç
-#define CH_PERC LSFT(KC_5) // %
-#define CH_AMPR LSFT(KC_6) // &
-#define CH_SLSH LSFT(KC_7) // /
-#define CH_LPRN LSFT(KC_8) // (
-#define CH_RPRN LSFT(KC_9) // )
-#define CH_EQL LSFT(KC_0) // =
-#define CH_QST LSFT(CH_QUOT) // ?
-#define CH_GRV LSFT(CH_CARR) // `
-#define CH_EXLM LSFT(CH_DIER) // !
-#define CH_POND LSFT(CH_DLR) // £
-#define CH_MORE LSFT(CH_LESS) // >
-#define CH_COLN LSFT(KC_DOT) // :
-#define CH_SCLN LSFT(KC_COMM) // ;
-#define CH_UNDS LSFT(CH_MINS) // _
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ° │ + │ " │ * │ ç │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │   │   │   │   │   │   │   │   │   │   │ è │ ! │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │ é │ à │ £ │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define CH_DEG S(CH_SECT) // °
+#define CH_PLUS S(CH_1) // +
+#define CH_DQUO S(CH_2) // "
+#define CH_ASTR S(CH_3) // *
+#define CH_CCED S(CH_4) // ç
+#define CH_PERC S(CH_5) // %
+#define CH_AMPR S(CH_6) // &
+#define CH_SLSH S(CH_7) // /
+#define CH_LPRN S(CH_8) // (
+#define CH_RPRN S(CH_9) // )
+#define CH_EQL S(CH_0) // =
+#define CH_QUES S(CH_QUOT) // ?
+#define CH_GRV S(CH_CIRC) // ` (dead)
+// Row 2
+#define CH_EGRV S(CH_UDIA) // è
+#define CH_EXLM S(CH_DIAE) // !
+// Row 3
+#define CH_EACU S(CH_ODIA) // é
+#define CH_AGRV S(CH_ADIA) // à
+#define CH_PND S(CH_DLR) // £
+// Row 4
+#define CH_RABK S(CH_LABK) // >
+#define CH_SCLN S(CH_COMM) // ;
+#define CH_COLN S(CH_DOT) // :
+#define CH_UNDS S(CH_MINS) // _
-// Alt Gr-ed characters
-#define CH_BRBR ALGR(KC_1) // ¦ brocken bar
-#define CH_AT ALGR(KC_2) // @
-#define CH_HASH ALGR(KC_3) // #
-#define CH_NOTL ALGR(KC_6) // ¬ negative logic
-#define CH_PIPE ALGR(KC_7) // |
-#define CH_CENT ALGR(KC_8) // ¢ cent
-#define CH_ACUT ALGR(CH_QUOT) // ´
-#define CH_TILD ALGR(CH_CARR) // ~
-#define CH_EURO ALGR(KC_E) // €
-#define CH_LBRC ALGR(CH_UE) // [
-#define CH_RBRC ALGR(CH_DIER) // ]
-#define CH_LCBR ALGR(CH_AE) // {
-#define CH_RCBR ALGR(CH_DLR) // }
-#define CH_BSLS ALGR(CH_LESS) // backslash
+/* AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │   │ ¦ │ @ │ # │   │   │ ¬ │ | │ ¢ │   │   │ ´ │ ~ │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │   │   │ € │   │   │   │   │   │   │   │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ { │ } │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │ \ │   │   │   │   │   │   │   │   │   │   │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define CH_BRKP ALGR(CH_1) // ¦
+#define CH_AT ALGR(CH_2) // @
+#define CH_HASH ALGR(CH_3) // #
+#define CH_NOT ALGR(CH_6) // ¬
+#define CH_PIPE ALGR(CH_7) // |
+#define CH_CENT ALGR(CH_8) // ¢
+#define CH_ACUT ALGR(CH_QUOT) // ´ (dead)
+#define CH_TILD ALGR(CH_CIRC) // ~ (dead)
+// Row 2
+#define CH_EURO ALGR(CH_E) // €
+#define CH_LBRC ALGR(CH_UDIA) // [
+#define CH_RBRC ALGR(CH_DIAE) // ]
+// Row 3
+#define CH_LCBR ALGR(CH_ADIA) // {
+#define CH_RCBR ALGR(CH_DLR) // }
+// Row 4
+#define CH_BSLS ALGR(CH_LABK) // (backslash)
-#endif
+// DEPRECATED
+#define CH_AE CH_ADIA
+#define CH_UE CH_UDIA
+#define CH_OE CH_ODIA
+#define CH_PARA CH_SECT
+#define CH_CARR CH_CIRC
+#define CH_DIER CH_DIAE
+#define CH_LESS CH_LABK
+#define CH_RING CH_DEG
+#define CH_DQOT CH_DQUO
+#define CH_PAST CH_ASTR
+#define CH_CELA CH_CCED
+#define CH_QST CH_QUES
+#define CH_POND CH_PND
+#define CH_MORE CH_RABK
+#define CH_BRBR CH_BRKP
+#define CH_NOTL CH_NOT
diff --git a/quantum/keymap_extras/keymap_german_osx.h b/quantum/keymap_extras/keymap_german_osx.h
index 29dee07ee0..0d15532e40 100644
--- a/quantum/keymap_extras/keymap_german_osx.h
+++ b/quantum/keymap_extras/keymap_german_osx.h
@@ -13,100 +13,311 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEYMAP_GERMAN_OSX
-#define KEYMAP_GERMAN_OSX
-#include "keymap.h"
-
-// Alt gr
+#pragma once
-// normal characters
-#define DE_OSX_Z KC_Y
-#define DE_OSX_Y KC_Z
+#include "keymap.h"
-#define DE_OSX_A KC_A
-#define DE_OSX_B KC_B
-#define DE_OSX_C KC_C
-#define DE_OSX_D KC_D
-#define DE_OSX_E KC_E
-#define DE_OSX_F KC_F
-#define DE_OSX_G KC_G
-#define DE_OSX_H KC_H
-#define DE_OSX_I KC_I
-#define DE_OSX_J KC_J
-#define DE_OSX_K KC_K
-#define DE_OSX_L KC_L
-#define DE_OSX_M KC_M
-#define DE_OSX_N KC_N
-#define DE_OSX_O KC_O
-#define DE_OSX_P KC_P
-#define DE_OSX_Q KC_Q
-#define DE_OSX_R KC_R
-#define DE_OSX_S KC_S
-#define DE_OSX_T KC_T
-#define DE_OSX_U KC_U
-#define DE_OSX_V KC_V
-#define DE_OSX_W KC_W
-#define DE_OSX_X KC_X
+// clang-format off
-#define DE_OSX_0 KC_0
-#define DE_OSX_1 KC_1
-#define DE_OSX_2 KC_2
-#define DE_OSX_3 KC_3
-#define DE_OSX_4 KC_4
-#define DE_OSX_5 KC_5
-#define DE_OSX_6 KC_6
-#define DE_OSX_7 KC_7
-#define DE_OSX_8 KC_8
-#define DE_OSX_9 KC_9
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ß │ ´ │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ Ü │ + │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ö │ Ä │ # │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define DE_CIRC KC_GRV // ^ (dead)
+#define DE_1 KC_1 // 1
+#define DE_2 KC_2 // 2
+#define DE_3 KC_3 // 3
+#define DE_4 KC_4 // 4
+#define DE_5 KC_5 // 5
+#define DE_6 KC_6 // 6
+#define DE_7 KC_7 // 7
+#define DE_8 KC_8 // 8
+#define DE_9 KC_9 // 9
+#define DE_0 KC_0 // 0
+#define DE_SS KC_MINS // ß
+#define DE_ACUT KC_EQL // ´ (dead)
+// Row 2
+#define DE_Q KC_Q // Q
+#define DE_W KC_W // W
+#define DE_E KC_E // E
+#define DE_R KC_R // R
+#define DE_T KC_T // T
+#define DE_Z KC_Y // Z
+#define DE_U KC_U // U
+#define DE_I KC_I // I
+#define DE_O KC_O // O
+#define DE_P KC_P // P
+#define DE_UDIA KC_LBRC // Ü
+#define DE_PLUS KC_RBRC // +
+// Row 3
+#define DE_A KC_A // A
+#define DE_S KC_S // S
+#define DE_D KC_D // D
+#define DE_F KC_F // F
+#define DE_G KC_G // G
+#define DE_H KC_H // H
+#define DE_J KC_J // J
+#define DE_K KC_K // K
+#define DE_L KC_L // L
+#define DE_ODIA KC_SCLN // Ö
+#define DE_ADIA KC_QUOT // Ä
+#define DE_HASH KC_NUHS // #
+// Row 4
+#define DE_LABK KC_NUBS // <
+#define DE_Y KC_Z // Y
+#define DE_X KC_X // X
+#define DE_C KC_C // C
+#define DE_V KC_V // V
+#define DE_B KC_B // B
+#define DE_N KC_N // N
+#define DE_M KC_M // M
+#define DE_COMM KC_COMM // ,
+#define DE_DOT KC_DOT // .
+#define DE_MINS KC_SLSH // -
-#define DE_OSX_DOT KC_DOT
-#define DE_OSX_COMM KC_COMM
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ ° │ ! │ " │ § │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ * │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ ' │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define DE_DEG S(DE_CIRC) // °
+#define DE_EXLM S(DE_1) // !
+#define DE_DQUO S(DE_2) // "
+#define DE_SECT S(DE_3) // §
+#define DE_DLR S(DE_4) // $
+#define DE_PERC S(DE_5) // %
+#define DE_AMPR S(DE_6) // &
+#define DE_SLSH S(DE_7) // /
+#define DE_LPRN S(DE_8) // (
+#define DE_RPRN S(DE_9) // )
+#define DE_EQL S(DE_0) // =
+#define DE_QUES S(DE_SS) // ?
+#define DE_GRV S(DE_ACUT) // ` (dead)
+// Row 2
+#define DE_ASTR S(DE_PLUS) // *
+// Row 3
+#define DE_QUOT S(DE_HASH) // '
+// Row 4
+#define DE_RABK S(DE_LABK) // >
+#define DE_SCLN S(DE_COMM) // ;
+#define DE_COLN S(DE_DOT) // :
+#define DE_UNDS S(DE_MINS) // _
-#define DE_OSX_SS KC_MINS
-#define DE_OSX_AE KC_QUOT
-#define DE_OSX_UE KC_LBRC
-#define DE_OSX_OE KC_SCLN
+/* Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ „ │ ¡ │ “ │ ¶ │ ¢ │ [ │ ] │ | │ { │ } │ ≠ │ ¿ │   │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ « │ ∑ │ € │ ® │ † │ Ω │ ¨ │ ⁄ │ Ø │ π │ • │ ± │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │ Å │ ‚ │ ∂ │ ƒ │ © │ ª │ º │ ∆ │ @ │ Œ │ Æ │ ‘ │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ ≤ │ ¥ │ ≈ │ Ç │ √ │ ∫ │ ~ │ µ │ ∞ │ … │ – │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define DE_DLQU A(DE_CIRC) // „
+#define DE_IEXL A(DE_1) // ¡
+#define DE_LDQU A(DE_2) // “
+#define DE_PILC A(DE_3) // ¶
+#define DE_CENT A(DE_4) // ¢
+#define DE_LBRC A(DE_5) // [
+#define DE_RBRC A(DE_6) // ]
+#define DE_PIPE A(DE_7) // |
+#define DE_LCBR A(DE_8) // {
+#define DE_RCBR A(DE_9) // }
+#define DE_NEQL A(DE_0) // ≠
+#define DE_IQUE A(DE_SS) // ¿
+// Row 2
+#define DE_LDAQ A(DE_Q) // «
+#define DE_NARS A(DE_W) // ∑
+#define DE_EURO A(DE_E) // €
+#define DE_REGD A(DE_R) // ®
+#define DE_DAGG A(DE_T) // †
+#define DE_OMEG A(DE_Z) // Ω
+#define DE_DIAE A(DE_U) // ¨ (dead)
+#define DE_FRSL A(DE_I) // ⁄
+#define DE_OSTR A(DE_O) // Ø
+#define DE_PI A(DE_P) // π
+#define DE_BULT A(DE_UDIA) // •
+#define DE_PLMN A(DE_PLUS) // ±
+// Row 3
+#define DE_ARNG A(DE_A) // Å
+#define DE_SLQU A(DE_S) // ‚
+#define DE_PDIF A(DE_D) // ∂
+#define DE_FHK A(DE_F) // ƒ
+#define DE_COPY A(DE_G) // ©
+#define DE_FORD A(DE_H) // ª
+#define DE_MORD A(DE_J) // º
+#define DE_INCR A(DE_K) // ∆
+#define DE_AT A(DE_L) // @
+#define DE_OE A(DE_ODIA) // Œ
+#define DE_AE A(DE_ADIA) // Æ
+#define DE_LSQU A(DE_HASH) // ‘
+// Row 4
+#define DE_LTEQ A(DE_LABK) // ≤
+#define DE_YEN A(DE_Y) // ¥
+#define DE_AEQL A(DE_X) // ≈
+#define DE_CCCE A(DE_C) // Ç
+#define DE_SQRT A(DE_V) // √
+#define DE_INTG A(DE_B) // ∫
+#define DE_TILD A(DE_N) // ~ (dead)
+#define DE_MICR A(DE_M) // µ
+#define DE_INFN A(DE_COMM) // ∞
+#define DE_ELLP A(DE_DOT) // …
+#define DE_NDSH A(DE_MINS) // –
-#define DE_OSX_CIRC KC_NUBS // accent circumflex ^ and ring °
-#define DE_OSX_ACUT KC_EQL // accent acute ´ and grave `
-#define DE_OSX_PLUS KC_RBRC // + and * and ~
-#define DE_OSX_HASH KC_BSLS // # and '
-#define DE_OSX_LESS KC_GRV // < and > and |
-#define DE_OSX_MINS KC_SLSH // - and _
+/* Shift+Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │   │ ¬ │ ” │   │ £ │ fi │   │ \ │ ˜ │ · │ ¯ │ ˙ │ ˚ │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ » │   │ ‰ │ ¸ │ ˝ │ ˇ │ Á │ Û │   │ ∏ │   │  │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │   │ Í │ ™ │ Ï │ Ì │ Ó │ ı │   │ fl │   │   │   │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ ≥ │ ‡ │ Ù │   │ ◊ │ ‹ │ › │ ˘ │ ˛ │ ÷ │ — │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define DE_NOT S(A(DE_1)) // ¬
+#define DE_RDQU S(A(DE_2)) // ”
+#define DE_PND S(A(DE_4)) // £
+#define DE_FI S(A(DE_5)) // fi
+#define DE_BSLS S(A(DE_7)) // (backslash)
+#define DE_STIL S(A(DE_8)) // ˜
+#define DE_MDDT S(A(DE_9)) // ·
+#define DE_MACR S(A(DE_0)) // ¯
+#define DE_DOTA S(A(DE_SS)) // ˙
+#define DE_RNGA S(A(DE_ACUT)) // ˚
+// Row 2
+#define DE_RDAQ S(A(DE_Q)) // »
+#define DE_PERM S(A(DE_E)) // ‰
+#define DE_CEDL S(A(DE_R)) // ¸
+#define DE_DACU S(A(DE_T)) // ˝
+#define DE_CARN S(A(DE_Z)) // ˇ
+#define DE_AACU S(A(DE_U)) // Á
+#define DE_UCIR S(A(DE_I)) // Û
+#define DE_NARP S(A(DE_P)) // ∏
+#define DE_APPL S(A(DE_PLUS)) //  (Apple logo)
+// Row 3
+#define DE_IACU S(A(DE_S)) // Í
+#define DE_TM S(A(DE_D)) // ™
+#define DE_IDIA S(A(DE_F)) // Ï
+#define DE_IGRV S(A(DE_G)) // Ì
+#define DE_OACU S(A(DE_H)) // Ó
+#define DE_DLSI S(A(DE_J)) // ı
+#define DE_FL S(A(DE_L)) // fl
+// Row 4
+#define DE_GTEQ S(A(DE_LABK)) // ≥
+#define DE_DDAG S(A(DE_Y)) // ‡
+#define DE_UGRV S(A(DE_X)) // Ù
+#define DE_LOZN S(A(DE_V)) // ◊
+#define DE_LSAQ S(A(DE_B)) // ‹
+#define DE_RSAQ S(A(DE_N)) // ›
+#define DE_BREV S(A(DE_M)) // ˘
+#define DE_OGON S(A(DE_COMM)) // ˛
+#define DE_DIV S(A(DE_DOT)) // ÷
+#define DE_MDSH S(A(DE_MINS)) // —
-// shifted characters
-#define DE_OSX_RING LSFT(DE_OSX_CIRC) // °
-#define DE_OSX_EXLM LSFT(KC_1) // !
-#define DE_OSX_DQOT LSFT(KC_2) // "
-#define DE_OSX_PARA LSFT(KC_3) // §
-#define DE_OSX_DLR LSFT(KC_4) // $
-#define DE_OSX_PERC LSFT(KC_5) // %
-#define DE_OSX_AMPR LSFT(KC_6) // &
-#define DE_OSX_SLSH LSFT(KC_7) // /
-#define DE_OSX_LPRN LSFT(KC_8) // (
-#define DE_OSX_RPRN LSFT(KC_9) // )
-#define DE_OSX_EQL LSFT(KC_0) // =
-#define DE_OSX_QST LSFT(DE_OSX_SS) // ?
-#define DE_OSX_GRV LSFT(DE_OSX_ACUT) // `
-#define DE_OSX_ASTR LSFT(DE_OSX_PLUS) // *
-#define DE_OSX_QUOT LSFT(DE_OSX_HASH) // '
-#define DE_OSX_MORE LSFT(DE_OSX_LESS) // >
-#define DE_OSX_COLN LSFT(KC_DOT) // :
-#define DE_OSX_SCLN LSFT(KC_COMM) // ;
-#define DE_OSX_UNDS LSFT(DE_OSX_MINS) // _
+// DEPRECATED
+#define DE_OSX_CIRC DE_CIRC
+#define DE_OSX_1 DE_1
+#define DE_OSX_2 DE_2
+#define DE_OSX_3 DE_3
+#define DE_OSX_4 DE_4
+#define DE_OSX_5 DE_5
+#define DE_OSX_6 DE_6
+#define DE_OSX_7 DE_7
+#define DE_OSX_8 DE_8
+#define DE_OSX_9 DE_9
+#define DE_OSX_0 DE_0
+#define DE_OSX_SS DE_SS
+#define DE_OSX_ACUT DE_ACUT
+#define DE_OSX_Q DE_Q
+#define DE_OSX_W DE_W
+#define DE_OSX_E DE_E
+#define DE_OSX_R DE_R
+#define DE_OSX_T DE_T
+#define DE_OSX_Z DE_Z
+#define DE_OSX_U DE_U
+#define DE_OSX_I DE_I
+#define DE_OSX_O DE_O
+#define DE_OSX_P DE_P
+#define DE_OSX_UE DE_UDIA
+#define DE_OSX_PLUS DE_PLUS
+#define DE_OSX_A DE_A
+#define DE_OSX_S DE_S
+#define DE_OSX_D DE_D
+#define DE_OSX_F DE_F
+#define DE_OSX_G DE_G
+#define DE_OSX_H DE_H
+#define DE_OSX_J DE_J
+#define DE_OSX_K DE_K
+#define DE_OSX_L DE_L
+#define DE_OSX_OE DE_ODIA
+#define DE_OSX_AE DE_ADIA
+#define DE_OSX_HASH DE_HASH
+#define DE_OSX_LESS DE_LABK
+#define DE_OSX_Y DE_Y
+#define DE_OSX_X DE_X
+#define DE_OSX_C DE_C
+#define DE_OSX_V DE_V
+#define DE_OSX_B DE_B
+#define DE_OSX_N DE_N
+#define DE_OSX_M DE_M
+#define DE_OSX_COMM DE_COMM
+#define DE_OSX_DOT DE_DOT
+#define DE_OSX_MINS DE_MINS
-// Alt-ed characters
-//#define DE_OSX_SQ2 LALT(KC_2) // ²
-//#define DE_OSX_SQ3 LALT(KC_3) // ³
-#define DE_OSX_LCBR LALT(KC_8) // {
-#define DE_OSX_LBRC LALT(KC_5) // [
-#define DE_OSX_RBRC LALT(KC_6) // ]
-#define DE_OSX_RCBR LALT(KC_9) // }
-#define DE_OSX_BSLS LALT(LSFT(KC_7)) // backslash
-#define DE_OSX_AT LALT(DE_OSX_L) // @
-#define DE_OSX_EURO LALT(KC_E) // €
-#define DE_OSX_TILD LALT(DE_OSX_N) // ~
-#define DE_OSX_PIPE LALT(DE_OSX_7) // |
+#define DE_OSX_RING DE_DEG
+#define DE_OSX_EXLM DE_EXLM
+#define DE_OSX_DQOT DE_DQUO
+#define DE_OSX_PARA DE_SECT
+#define DE_OSX_DLR DE_DLR
+#define DE_OSX_PERC DE_PERC
+#define DE_OSX_AMPR DE_AMPR
+#define DE_OSX_SLSH DE_SLSH
+#define DE_OSX_LPRN DE_LPRN
+#define DE_OSX_RPRN DE_RPRN
+#define DE_OSX_EQL DE_EQL
+#define DE_OSX_QST DE_QUES
+#define DE_OSX_GRV DE_GRV
+#define DE_OSX_ASTR DE_ASTR
+#define DE_OSX_QUOT DE_QUOT
+#define DE_OSX_MORE DE_RABK
+#define DE_OSX_COLN DE_COLN
+#define DE_OSX_SCLN DE_SCLN
+#define DE_OSX_UNDS DE_UNDS
-#endif
+#define DE_OSX_LBRC DE_LBRC
+#define DE_OSX_RBRC DE_RBRC
+#define DE_OSX_PIPE DE_PIPE
+#define DE_OSX_LCBR DE_LCBR
+#define DE_OSX_RCBR DE_RCBR
+#define DE_OSX_AT DE_AT
+#define DE_OSX_EURO DE_EURO
+#define DE_OSX_TILD DE_TILD
+#define DE_OSX_BSLS DE_BSLS
diff --git a/quantum/keymap_extras/keymap_italian_osx_ansi.h b/quantum/keymap_extras/keymap_italian_osx_ansi.h
index fa12d05dce..1f7fe8afc9 100644
--- a/quantum/keymap_extras/keymap_italian_osx_ansi.h
+++ b/quantum/keymap_extras/keymap_italian_osx_ansi.h
@@ -14,100 +14,255 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-// This is a clone of quantum/keymap_extra/keymap_italian.h intended to be used with Apple devices
-
-#ifndef KEYMAP_ITALIAN
-#define KEYMAP_ITALIAN
+#pragma once
#include "keymap.h"
-// normal characters
-#define IT_A KC_A
-#define IT_B KC_B
-#define IT_C KC_C
-#define IT_D KC_D
-#define IT_E KC_E
-#define IT_F KC_F
-#define IT_G KC_G
-#define IT_H KC_H
-#define IT_I KC_I
-#define IT_J KC_J
-#define IT_K KC_K
-#define IT_L KC_L
-#define IT_M KC_M
-#define IT_N KC_N
-#define IT_O KC_O
-#define IT_P KC_P
-#define IT_Q KC_Q
-#define IT_R KC_R
-#define IT_S KC_S
-#define IT_T KC_T
-#define IT_U KC_U
-#define IT_V KC_V
-#define IT_W KC_W
-#define IT_X KC_X
-#define IT_Y KC_Y
-#define IT_Z KC_Z
-
-#define IT_0 KC_0
-#define IT_1 KC_1
-#define IT_2 KC_2
-#define IT_3 KC_3
-#define IT_4 KC_4
-#define IT_5 KC_5
-#define IT_6 KC_6
-#define IT_7 KC_7
-#define IT_8 KC_8
-#define IT_9 KC_9
+// clang-format off
-// punctuation
-#define IT_DOT KC_DOT // . and :
-#define IT_COMM KC_COMM // , and ;
-#define IT_APOS KC_MINS // ' and ?
-#define IT_BSLS KC_NUBS // \ and |
-#define IT_LESS KC_GRV // < and >
-#define IT_MINS KC_SLSH // - and _
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ < │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ì │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ è │ + │ ù │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
+ * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ò │ à │      │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
+ * │        │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │        │
+ * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define IT_LABK KC_GRV // <
+#define IT_1 KC_1 // 1
+#define IT_2 KC_2 // 2
+#define IT_3 KC_3 // 3
+#define IT_4 KC_4 // 4
+#define IT_5 KC_5 // 5
+#define IT_6 KC_6 // 6
+#define IT_7 KC_7 // 7
+#define IT_8 KC_8 // 8
+#define IT_9 KC_9 // 9
+#define IT_0 KC_0 // 0
+#define IT_QUOT KC_MINS // '
+#define IT_IGRV KC_EQL // ì
+// Row 2
+#define IT_Q KC_Q // Q
+#define IT_W KC_W // W
+#define IT_E KC_E // E
+#define IT_R KC_R // R
+#define IT_T KC_T // T
+#define IT_Y KC_Y // Y
+#define IT_U KC_U // U
+#define IT_I KC_I // I
+#define IT_O KC_O // O
+#define IT_P KC_P // P
+#define IT_EGRV KC_LBRC // è
+#define IT_PLUS KC_RBRC // +
+#define IT_UGRV KC_BSLS // ù
+// Row 3
+#define IT_A KC_A // A
+#define IT_S KC_S // S
+#define IT_D KC_D // D
+#define IT_F KC_F // F
+#define IT_G KC_G // G
+#define IT_H KC_H // H
+#define IT_J KC_J // J
+#define IT_K KC_K // K
+#define IT_L KC_L // L
+#define IT_OGRV KC_SCLN // ò
+#define IT_AGRV KC_QUOT // à
+// Row 4
+#define IT_BSLS KC_NUBS // (backslash, not physically present)
+#define IT_Z KC_Z // Z
+#define IT_X KC_X // X
+#define IT_C KC_C // C
+#define IT_V KC_V // V
+#define IT_B KC_B // B
+#define IT_N KC_N // N
+#define IT_M KC_M // M
+#define IT_COMM KC_COMM // ,
+#define IT_DOT KC_DOT // .
+#define IT_MINS KC_SLSH // -
-// accented vowels (regular, with shift, with option, with option and shift)
-#define IT_EACC KC_LBRC // è, é, [, {
-#define IT_PLUS KC_RBRC // +, *, ], }
-#define IT_OACC KC_SCLN // ò, ç, @, Ç
-#define IT_AACC KC_QUOT // à, °, #, ∞
-#define IT_UACC KC_BSLS // ù, §, ¶, ◊
-#define IT_IACC KC_EQL // ì, ^, ˆ, ±
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ > │ ! │ " │ £ │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ^ │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │   │   │   │   │   │   │   │   │   │   │ é │ * │ § │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
+ * │      │   │   │   │   │   │   │   │   │   │ ç │ ° │      │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
+ * │        │   │   │   │   │   │   │   │ ; │ : │ _ │        │
+ * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define IT_RABK S(IT_LABK) // >
+#define IT_EXLM S(IT_1) // !
+#define IT_DQUO S(IT_2) // "
+#define IT_PND S(IT_3) // £
+#define IT_DLR S(IT_4) // $
+#define IT_PERC S(IT_5) // %
+#define IT_AMPR S(IT_6) // &
+#define IT_SLSH S(IT_7) // /
+#define IT_LPRN S(IT_8) // (
+#define IT_RPRN S(IT_9) // )
+#define IT_EQL S(IT_0) // =
+#define IT_QUES S(IT_QUOT) // ?
+#define IT_CIRC S(IT_IGRV) // ^
+// Row 2
+#define IT_EACU S(IT_EGRV) // é
+#define IT_ASTR S(IT_PLUS) // *
+#define IT_SECT S(IT_UGRV) // §
+// Row 3
+#define IT_LCCE S(IT_OGRV) // ç
+#define IT_DEG S(IT_AGRV) // °
+// Row 4
+#define IT_PIPE S(IT_BSLS) // | (not physically present)
+#define IT_SCLN S(IT_COMM) // ;
+#define IT_COLN S(IT_DOT) // :
+#define IT_UNDS S(IT_MINS) // _
-// shifted characters
-#define IT_EXLM LSFT(KC_1) // !
-#define IT_DQOT LSFT(KC_2) // "
-#define IT_STRL LSFT(KC_3) // £
-#define IT_DLR LSFT(KC_4) // $
-#define IT_PERC LSFT(KC_5) // %
-#define IT_AMPR LSFT(KC_6) // &
-#define IT_SLSH LSFT(KC_7) // /
-#define IT_LPRN LSFT(KC_8) // (
-#define IT_RPRN LSFT(KC_9) // )
-#define IT_EQL LSFT(KC_0) // =
-#define IT_DEGR LSFT(IT_AACC) // °
-#define IT_QST LSFT(IT_APOS) // ?
-#define IT_CRC LSFT(IT_IACC) // ^
-#define IT_ASTR LSFT(IT_PLUS) // *
-#define IT_MORE LSFT(IT_LESS) // >
-#define IT_COLN LSFT(IT_DOT) // :
-#define IT_SCLN LSFT(IT_COMM) // ;
-#define IT_UNDS LSFT(IT_MINS) // _
-#define IT_LCBR LSFT(IT_LBRC) // {
-#define IT_RCBR LSFT(IT_RBRC) // }
-#define IT_PIPE LSFT(IT_BSLS) // |
+/* Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ ≤ │ « │ “ │ ‘ │ ¥ │ ~ │ ‹ │ ÷ │ ´ │ ` │ ≠ │ ¡ │ ˆ │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ „ │ Ω │ € │ ® │ ™ │ Æ │ ¨ │ Œ │ Ø │ π │ [ │ ] │ ¶ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
+ * │      │ Å │ ß │ ∂ │ ƒ │ ∞ │ ∆ │ ª │ º │ ¬ │ @ │ # │      │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
+ * │        │ ∑ │ † │ © │ √ │ ∫ │ ˜ │ µ │ … │ • │ – │        │
+ * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define IT_LTEQ A(IT_LABK) // ≤
+#define IT_LDAQ A(IT_1) // «
+#define IT_LDQU A(IT_2) // “
+#define IT_LSQU A(IT_3) // ‘
+#define IT_YEN A(IT_4) // ¥
+#define IT_TILD A(IT_5) // ~
+#define IT_LSAQ A(IT_6) // ‹
+#define IT_DIV A(IT_7) // ÷
+#define IT_ACUT A(IT_8) // ´ (dead)
+#define IT_DGRV A(IT_9) // ` (dead)
+#define IT_NEQL A(IT_0) // ≠
+#define IT_IEXL A(IT_QUOT) // ¡
+#define IT_DCIR A(IT_IGRV) // ˆ (dead)
+// Row 2
+#define IT_DLQU A(IT_Q) // „
+#define IT_OMEG A(IT_W) // Ω
+#define IT_EURO A(IT_E) // €
+#define IT_REGD A(IT_R) // ®
+#define IT_TM A(IT_T) // ™
+#define IT_AE A(IT_Y) // Æ
+#define IT_DIAE A(IT_U) // ¨ (dead)
+#define IT_OE A(IT_I) // Œ
+#define IT_OSTR A(IT_O) // Ø
+#define IT_PI A(IT_P) // π
+#define IT_LBRC A(IT_EGRV) // [
+#define IT_RBRC A(IT_PLUS) // ]
+// Row 3
+#define IT_ARNG A(IT_A) // Å
+#define IT_SS A(IT_S) // ß
+#define IT_PDIF A(IT_D) // ∂
+#define IT_FHK A(IT_F) // ƒ
+#define IT_INFN A(IT_G) // ∞
+#define IT_INCR A(IT_H) // ∆
+#define IT_FORD A(IT_J) // ª
+#define IT_MORD A(IT_K) // º
+#define IT_NOT A(IT_L) // ¬
+#define IT_AT A(IT_OGRV) // @
+#define IT_HASH A(IT_AGRV) // #
+#define IT_PILC A(IT_UGRV) // ¶
+// Row 4
+#define IT_GRV A(IT_BSLS) // ` (not physically present)
+#define IT_NARS A(IT_Z) // ∑
+#define IT_DAGG A(IT_X) // †
+#define IT_COPY A(IT_C) // ©
+#define IT_SQRT A(IT_V) // √
+#define IT_INTG A(IT_B) // ∫
+#define IT_STIL A(IT_N) // ˜ (dead)
+#define IT_MICR A(IT_M) // µ
+#define IT_ELLP A(IT_COMM) // …
+#define IT_BULT A(IT_DOT) // •
+#define IT_NDSH A(IT_MINS) // –
-// Alt -ed characters
-#define IT_LBRC LALT(IT_EACC) // [
-#define IT_RBRC LALT(IT_PLUS) // ]
-#define IT_AT LALT(IT_OACC) // @
-#define IT_EURO LALT(KC_E) // €
-#define IT_SHRP LALT(IT_AACC) // #
-#define IT_ACUT LALT(KC_8) // ´
-#define IT_GRAVE LALT(KC_9) // `
-#define IT_TILDE LALT(KC_5) // ~
-#define IT_PLMN LALT(LSFT(IT_IACC)) // ±
+/* Shift+Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ ≥ │ » │ ” │ ’ │ ¢ │ ‰ │ › │ ⁄ │  │   │ ≈ │ ¿ │ ± │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ ‚ │ À │ È │ Ì │ Ò │   │ Ù │   │   │ ∏ │ { │ } │ ◊ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
+ * │      │   │ ¯ │ ˘ │ ˙ │ ˚ │ ¸ │ ˝ │ ˛ │ ˇ │ Ç │ ∞ │      │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
+ * │        │   │ ‡ │ Á │ É │ Í │ Ó │ Ú │   │ · │ — │        │
+ * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define IT_GTEQ S(A(IT_LABK)) // ≥
+#define IT_RDAQ S(A(IT_1)) // »
+#define IT_RDQU S(A(IT_2)) // ”
+#define IT_RSQU S(A(IT_3)) // ’
+#define IT_CENT S(A(IT_4)) // ¢
+#define IT_PERM S(A(IT_5)) // ‰
+#define IT_RSAQ S(A(IT_6)) // ›
+#define IT_FRSL S(A(IT_7)) // ⁄
+#define IT_APPL S(A(IT_8)) //  (Apple logo)
+#define IT_AEQL S(A(IT_0)) // ≈
+#define IT_IQUE S(A(IT_QUOT)) // ¿
+#define IT_PLMN S(A(IT_IGRV)) // ±
+// Row 2
+#define IT_SLQU S(A(IT_Q)) // ‚
+#define IT_CAGR S(A(IT_W)) // À
+#define IT_CEGR S(A(IT_E)) // È
+#define IT_CIGR S(A(IT_R)) // Ì
+#define IT_COGR S(A(IT_T)) // Ò
+#define IT_CUGR S(A(IT_U)) // Ù
+#define IT_NARP S(A(IT_P)) // ∏
+#define IT_LCBR S(A(IT_EGRV)) // {
+#define IT_RCBR S(A(IT_PLUS)) // }
+#define IT_LOZN S(A(IT_UGRV)) // ◊
+// Row 3
+#define IT_MACR S(A(IT_S)) // ¯
+#define IT_BREV S(A(IT_D)) // ˘
+#define IT_DOTA S(A(IT_F)) // ˙
+#define IT_RGNA S(A(IT_G)) // ˚
+#define IT_CEDL S(A(IT_H)) // ¸
+#define IT_DACU S(A(IT_J)) // ˝
+#define IT_OGON S(A(IT_K)) // ˛
+#define IT_CARN S(A(IT_L)) // ˇ
+#define IT_CCCE S(A(IT_OGRV)) // Ç
+// Row 4
+#define IT_DDAG S(A(IT_X)) // ‡
+#define IT_CAAC S(A(IT_C)) // Á
+#define IT_CEAC S(A(IT_V)) // É
+#define IT_CIAC S(A(IT_B)) // Í
+#define IT_COAC S(A(IT_N)) // Ó
+#define IT_CUAC S(A(IT_M)) // Ú
+#define IT_MDDT S(A(IT_DOT)) // ·
+#define IT_MDSH S(A(IT_MINS)) // —
-#endif
+// DEPRECATED
+#define IT_LESS IT_LABK
+#define IT_APOS IT_QUOT
+#define IT_IACC IT_IGRV
+#define IT_EACC IT_EGRV
+#define IT_UACC IT_UGRV
+#define IT_OACC IT_OGRV
+#define IT_AACC IT_AGRV
+#define IT_MORE IT_RABK
+#define IT_DQOT IT_DQUO
+#define IT_STRL IT_PND
+#define IT_QST IT_QUES
+#define IT_CRC IT_CIRC
+#define IT_DEGR IT_DEG
+#define IT_TILDE IT_TILD
+#define IT_GRAVE IT_GRV
+#define IT_SHRP IT_HASH
diff --git a/quantum/keymap_extras/keymap_italian_osx_iso.h b/quantum/keymap_extras/keymap_italian_osx_iso.h
index a9b36f16e6..5ed1e3abd4 100644
--- a/quantum/keymap_extras/keymap_italian_osx_iso.h
+++ b/quantum/keymap_extras/keymap_italian_osx_iso.h
@@ -14,100 +14,256 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-// This is a clone of quantum/keymap_extra/keymap_italian.h intended to be used with Apple devices
-
-#ifndef KEYMAP_ITALIAN
-#define KEYMAP_ITALIAN
+#pragma once
#include "keymap.h"
-// normal characters
-#define IT_A KC_A
-#define IT_B KC_B
-#define IT_C KC_C
-#define IT_D KC_D
-#define IT_E KC_E
-#define IT_F KC_F
-#define IT_G KC_G
-#define IT_H KC_H
-#define IT_I KC_I
-#define IT_J KC_J
-#define IT_K KC_K
-#define IT_L KC_L
-#define IT_M KC_M
-#define IT_N KC_N
-#define IT_O KC_O
-#define IT_P KC_P
-#define IT_Q KC_Q
-#define IT_R KC_R
-#define IT_S KC_S
-#define IT_T KC_T
-#define IT_U KC_U
-#define IT_V KC_V
-#define IT_W KC_W
-#define IT_X KC_X
-#define IT_Y KC_Y
-#define IT_Z KC_Z
-
-#define IT_0 KC_0
-#define IT_1 KC_1
-#define IT_2 KC_2
-#define IT_3 KC_3
-#define IT_4 KC_4
-#define IT_5 KC_5
-#define IT_6 KC_6
-#define IT_7 KC_7
-#define IT_8 KC_8
-#define IT_9 KC_9
+// clang-format off
-// punctuation
-#define IT_DOT KC_DOT // . and :
-#define IT_COMM KC_COMM // , and ;
-#define IT_APOS KC_MINS // ' and ?
-#define IT_BSLS KC_GRV // \ and |
-#define IT_LESS KC_NUBS // < and >
-#define IT_MINS KC_SLSH // - and _
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ \ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ì │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ è │ + │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ò │ à │ ù │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define IT_BSLS KC_GRV // (backslash)
+#define IT_1 KC_1 // 1
+#define IT_2 KC_2 // 2
+#define IT_3 KC_3 // 3
+#define IT_4 KC_4 // 4
+#define IT_5 KC_5 // 5
+#define IT_6 KC_6 // 6
+#define IT_7 KC_7 // 7
+#define IT_8 KC_8 // 8
+#define IT_9 KC_9 // 9
+#define IT_0 KC_0 // 0
+#define IT_QUOT KC_MINS // '
+#define IT_IGRV KC_EQL // ì
+// Row 2
+#define IT_Q KC_Q // Q
+#define IT_W KC_W // W
+#define IT_E KC_E // E
+#define IT_R KC_R // R
+#define IT_T KC_T // T
+#define IT_Y KC_Y // Y
+#define IT_U KC_U // U
+#define IT_I KC_I // I
+#define IT_O KC_O // O
+#define IT_P KC_P // P
+#define IT_EGRV KC_LBRC // è
+#define IT_PLUS KC_RBRC // +
+// Row 3
+#define IT_A KC_A // A
+#define IT_S KC_S // S
+#define IT_D KC_D // D
+#define IT_F KC_F // F
+#define IT_G KC_G // G
+#define IT_H KC_H // H
+#define IT_J KC_J // J
+#define IT_K KC_K // K
+#define IT_L KC_L // L
+#define IT_OGRV KC_SCLN // ò
+#define IT_AGRV KC_QUOT // à
+#define IT_UGRV KC_NUHS // ù
+// Row 4
+#define IT_LABK KC_NUBS // <
+#define IT_Z KC_Z // Z
+#define IT_X KC_X // X
+#define IT_C KC_C // C
+#define IT_V KC_V // V
+#define IT_B KC_B // B
+#define IT_N KC_N // N
+#define IT_M KC_M // M
+#define IT_COMM KC_COMM // ,
+#define IT_DOT KC_DOT // .
+#define IT_MINS KC_SLSH // -
-// accented vowels (regular, with shift, with option, with option and shift)
-#define IT_EACC KC_LBRC // è, é, [, {
-#define IT_PLUS KC_RBRC // +, *, ], }
-#define IT_OACC KC_SCLN // ò, ç, @, Ç
-#define IT_AACC KC_QUOT // à, °, #, ∞
-#define IT_UACC KC_BSLS // ù, §, ¶, ◊
-#define IT_IACC KC_EQL // ì, ^, ˆ, ±
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ | │ ! │ " │ £ │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ^ │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │   │   │   │   │   │   │   │   │   │   │ é │ * │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │   │   │   │   │   │   │   │   │   │ ç │ ° │ § │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define IT_PIPE S(IT_BSLS) // |
+#define IT_EXLM S(IT_1) // !
+#define IT_DQUO S(IT_2) // "
+#define IT_PND S(IT_3) // £
+#define IT_DLR S(IT_4) // $
+#define IT_PERC S(IT_5) // %
+#define IT_AMPR S(IT_6) // &
+#define IT_SLSH S(IT_7) // /
+#define IT_LPRN S(IT_8) // (
+#define IT_RPRN S(IT_9) // )
+#define IT_EQL S(IT_0) // =
+#define IT_QUES S(IT_QUOT) // ?
+#define IT_CIRC S(IT_IGRV) // ^
+// Row 2
+#define IT_EACU S(IT_EGRV) // é
+#define IT_ASTR S(IT_PLUS) // *
+// Row 3
+#define IT_LCCE S(IT_OGRV) // ç
+#define IT_DEG S(IT_AGRV) // °
+#define IT_SECT S(IT_UGRV) // §
+// Row 4
+#define IT_RABK S(IT_LABK) // >
+#define IT_SCLN S(IT_COMM) // ;
+#define IT_COLN S(IT_DOT) // :
+#define IT_UNDS S(IT_MINS) // _
-// shifted characters
-#define IT_EXLM LSFT(KC_1) // !
-#define IT_DQOT LSFT(KC_2) // "
-#define IT_STRL LSFT(KC_3) // £
-#define IT_DLR LSFT(KC_4) // $
-#define IT_PERC LSFT(KC_5) // %
-#define IT_AMPR LSFT(KC_6) // &
-#define IT_SLSH LSFT(KC_7) // /
-#define IT_LPRN LSFT(KC_8) // (
-#define IT_RPRN LSFT(KC_9) // )
-#define IT_EQL LSFT(KC_0) // =
-#define IT_DEGR LSFT(IT_AACC) // °
-#define IT_QST LSFT(IT_APOS) // ?
-#define IT_CRC LSFT(IT_IACC) // ^
-#define IT_ASTR LSFT(IT_PLUS) // *
-#define IT_MORE LSFT(IT_LESS) // >
-#define IT_COLN LSFT(IT_DOT) // :
-#define IT_SCLN LSFT(IT_COMM) // ;
-#define IT_UNDS LSFT(IT_MINS) // _
-#define IT_LCBR LSFT(IT_LBRC) // {
-#define IT_RCBR LSFT(IT_RBRC) // }
-#define IT_PIPE LSFT(IT_BSLS) // |
+/* Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ ` │ « │ “ │ ‘ │ ¥ │ ~ │ ‹ │ ÷ │ ´ │ ` │ ≠ │ ¡ │ ˆ │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ „ │ Ω │ € │ ® │ ™ │ Æ │ ¨ │ Œ │ Ø │ π │ [ │ ] │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │ Å │ ß │ ∂ │ ƒ │ ∞ │ ∆ │ ª │ º │ ¬ │ @ │ # │ ¶ │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ ≤ │ ∑ │ † │ © │ √ │ ∫ │ ˜ │ µ │ … │ • │ – │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define IT_GRV A(IT_BSLS) // `
+#define IT_LDAQ A(IT_1) // «
+#define IT_LDQU A(IT_2) // “
+#define IT_LSQU A(IT_3) // ‘
+#define IT_YEN A(IT_4) // ¥
+#define IT_TILD A(IT_5) // ~
+#define IT_LSAQ A(IT_6) // ‹
+#define IT_DIV A(IT_7) // ÷
+#define IT_ACUT A(IT_8) // ´ (dead)
+#define IT_DGRV A(IT_9) // ` (dead)
+#define IT_NEQL A(IT_0) // ≠
+#define IT_IEXL A(IT_QUOT) // ¡
+#define IT_DCIR A(IT_IGRV) // ˆ (dead)
+// Row 2
+#define IT_DLQU A(IT_Q) // „
+#define IT_OMEG A(IT_W) // Ω
+#define IT_EURO A(IT_E) // €
+#define IT_REGD A(IT_R) // ®
+#define IT_TM A(IT_T) // ™
+#define IT_AE A(IT_Y) // Æ
+#define IT_DIAE A(IT_U) // ¨ (dead)
+#define IT_OE A(IT_I) // Œ
+#define IT_OSTR A(IT_O) // Ø
+#define IT_PI A(IT_P) // π
+#define IT_LBRC A(IT_EGRV) // [
+#define IT_RBRC A(IT_PLUS) // ]
+// Row 3
+#define IT_ARNG A(IT_A) // Å
+#define IT_SS A(IT_S) // ß
+#define IT_PDIF A(IT_D) // ∂
+#define IT_FHK A(IT_F) // ƒ
+#define IT_INFN A(IT_G) // ∞
+#define IT_INCR A(IT_H) // ∆
+#define IT_FORD A(IT_J) // ª
+#define IT_MORD A(IT_K) // º
+#define IT_NOT A(IT_L) // ¬
+#define IT_AT A(IT_OGRV) // @
+#define IT_HASH A(IT_AGRV) // #
+#define IT_PILC A(IT_UGRV) // ¶
+// Row 4
+#define IT_LTEQ A(IT_LABK) // ≤
+#define IT_NARS A(IT_Z) // ∑
+#define IT_DAGG A(IT_X) // †
+#define IT_COPY A(IT_C) // ©
+#define IT_SQRT A(IT_V) // √
+#define IT_INTG A(IT_B) // ∫
+#define IT_STIL A(IT_N) // ˜ (dead)
+#define IT_MICR A(IT_M) // µ
+#define IT_ELLP A(IT_COMM) // …
+#define IT_BULT A(IT_DOT) // •
+#define IT_NDSH A(IT_MINS) // –
-// Alt -ed characters
-#define IT_LBRC LALT(IT_EACC) // [
-#define IT_RBRC LALT(IT_PLUS) // ]
-#define IT_AT LALT(IT_OACC) // @
-#define IT_EURO LALT(KC_E) // €
-#define IT_SHRP LALT(IT_AACC) // #
-#define IT_ACUT LALT(KC_8) // ´
-#define IT_GRAVE LALT(KC_9) // `
-#define IT_TILDE LALT(KC_5) // ~
-#define IT_PLMN LALT(LSFT(IT_IACC)) // ±
+/* Shift+Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ ı │ » │ ” │ ’ │ ¢ │ ‰ │ › │ ⁄ │  │   │ ≈ │ ¿ │ ± │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ ‚ │ À │ È │ Ì │ Ò │   │ Ù │   │   │ ∏ │ { │ } │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │   │ ¯ │ ˘ │ ˙ │ ˚ │ ¸ │ ˝ │ ˛ │ ˇ │ Ç │   │ ◊ │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ ≥ │   │ ‡ │ Á │ É │ Í │ Ó │ Ú │   │ · │ — │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define IT_DLSI S(A(IT_BSLS)) // ı
+#define IT_RDAQ S(A(IT_1)) // »
+#define IT_RDQU S(A(IT_2)) // ”
+#define IT_RSQU S(A(IT_3)) // ’
+#define IT_CENT S(A(IT_4)) // ¢
+#define IT_PERM S(A(IT_5)) // ‰
+#define IT_RSAQ S(A(IT_6)) // ›
+#define IT_FRSL S(A(IT_7)) // ⁄
+#define IT_APPL S(A(IT_8)) //  (Apple logo)
+#define IT_AEQL S(A(IT_0)) // ≈
+#define IT_IQUE S(A(IT_QUOT)) // ¿
+#define IT_PLMN S(A(IT_IGRV)) // ±
+// Row 2
+#define IT_SLQU S(A(IT_Q)) // ‚
+#define IT_CAGR S(A(IT_W)) // À
+#define IT_CEGR S(A(IT_E)) // È
+#define IT_CIGR S(A(IT_R)) // Ì
+#define IT_COGR S(A(IT_T)) // Ò
+#define IT_CUGR S(A(IT_U)) // Ù
+#define IT_NARP S(A(IT_P)) // ∏
+#define IT_LCBR S(A(IT_EGRV)) // {
+#define IT_RCBR S(A(IT_PLUS)) // }
+// Row 3
+#define IT_MACR S(A(IT_S)) // ¯
+#define IT_BREV S(A(IT_D)) // ˘
+#define IT_DOTA S(A(IT_F)) // ˙
+#define IT_RNGA S(A(IT_G)) // ˚
+#define IT_CEDL S(A(IT_H)) // ¸
+#define IT_DACU S(A(IT_J)) // ˝
+#define IT_OGON S(A(IT_K)) // ˛
+#define IT_CARN S(A(IT_L)) // ˇ
+#define IT_CCCE S(A(IT_OGRV)) // Ç
+#define IT_LOZN S(A(IT_UGRV)) // ◊
+// Row 4
+#define IT_GTEQ S(A(IT_LABK)) // ≥
+#define IT_DDAG S(A(IT_X)) // ‡
+#define IT_CAAC S(A(IT_C)) // Á
+#define IT_CEAC S(A(IT_V)) // É
+#define IT_CIAC S(A(IT_B)) // Í
+#define IT_COAC S(A(IT_N)) // Ó
+#define IT_CUAC S(A(IT_M)) // Ú
+#define IT_MDDT S(A(IT_DOT)) // ·
+#define IT_MDSH S(A(IT_MINS)) // —
-#endif
+// DEPRECATED
+#define IT_APOS IT_QUOT
+#define IT_IACC IT_IGRV
+#define IT_EACC IT_EGRV
+#define IT_OACC IT_OGRV
+#define IT_AACC IT_AGRV
+#define IT_UACC IT_UGRV
+#define IT_LESS IT_LABK
+#define IT_DQOT IT_DQUO
+#define IT_STRL IT_PND
+#define IT_QST IT_QUES
+#define IT_CRC IT_CIRC
+#define IT_DEGR IT_DEG
+#define IT_MORE IT_RABK
+#define IT_TILDE IT_TILD
+#define IT_GRAVE IT_GRV
+#define IT_SHRP IT_HASH
diff --git a/quantum/keymap_extras/keymap_spanish_dvorak.h b/quantum/keymap_extras/keymap_spanish_dvorak.h
new file mode 100644
index 0000000000..3b8bd5df97
--- /dev/null
+++ b/quantum/keymap_extras/keymap_spanish_dvorak.h
@@ -0,0 +1,151 @@
+/* Copyright 2020 José Andrés García
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "keymap.h"
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ º │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ¡ │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │ . │ , │ Ñ │ P │ Y │ F │ G │ C │ H │ L │ ` │ + │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ A │ O │ E │ U │ I │ D │ R │ T │ N │ S │ ' │ Ç │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │ < │ - │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define DV_MORD KC_GRV // º
+#define DV_1 KC_1 // 1
+#define DV_2 KC_2 // 2
+#define DV_3 KC_3 // 3
+#define DV_4 KC_4 // 4
+#define DV_5 KC_5 // 5
+#define DV_6 KC_6 // 6
+#define DV_7 KC_7 // 7
+#define DV_8 KC_8 // 8
+#define DV_9 KC_9 // 9
+#define DV_0 KC_0 // 0
+#define DV_QUOT KC_MINS // '
+#define DV_IEXL KC_EQL // ¡
+// Row 2
+#define DV_DOT KC_Q // .
+#define DV_COMM KC_W // ,
+#define DV_NTIL KC_E // Ñ
+#define DV_P KC_R // P
+#define DV_Y KC_T // Y
+#define DV_F KC_Y // F
+#define DV_G KC_U // G
+#define DV_C KC_I // C
+#define DV_H KC_O // H
+#define DV_L KC_P // L
+#define DV_GRV KC_LBRC // ` (dead)
+#define DV_PLUS KC_RBRC // +
+// Row 3
+#define DV_A KC_A // A
+#define DV_O KC_S // O
+#define DV_E KC_D // E
+#define DV_U KC_F // U
+#define DV_I KC_G // I
+#define DV_D KC_H // D
+#define DV_R KC_J // R
+#define DV_T KC_K // T
+#define DV_N KC_L // N
+#define DV_S KC_SCLN // S
+#define DV_ACUT KC_QUOT // ´ (dead)
+#define DV_CCED KC_NUHS // Ç
+// Row 4
+#define DV_LABK KC_NUBS // <
+#define DV_MINS KC_Z // -
+#define DV_Q KC_X // Q
+#define DV_J KC_C // J
+#define DV_K KC_V // K
+#define DV_X KC_B // X
+#define DV_B KC_N // B
+#define DV_M KC_M // M
+#define DV_W KC_COMM // W
+#define DV_V KC_DOT // V
+#define DV_Z KC_SLSH // Z
+
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ª │ ! │ " │ · │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ¿ │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │ : │ ; │   │   │   │   │   │   │   │   │ ^ │ * │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ ¨ │   │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │ > │ _ │   │   │   │   │   │   │   │   │   │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define DV_FORD S(DV_MORD) // ª
+#define DV_EXLM S(DV_1) // !
+#define DV_DQUO S(DV_2) // "
+#define DV_BULT S(DV_3) // ·
+#define DV_DLR S(DV_4) // $
+#define DV_PERC S(DV_5) // %
+#define DV_AMPR S(DV_6) // &
+#define DV_SLSH S(DV_7) // /
+#define DV_LPRN S(DV_8) // (
+#define DV_RPRN S(DV_9) // )
+#define DV_EQL S(DV_0) // =
+#define DV_QUES S(DV_QUOT) // ?
+#define DV_IQUE S(DV_IEXL) // ¿
+// Row 2
+#define DV_COLN S(KC_DOT) // :
+#define DV_SCLN S(KC_COMM) // ;
+#define DV_CIRC S(DV_GRV) // ^ (dead)
+#define DV_ASTR S(DV_PLUS) // *
+// Row 3
+#define DV_DIAE S(DV_GRV) // ¨ (dead)
+// Row 4
+#define DV_RABK S(DV_LABK) // >
+#define DV_UNDS S(DV_MINS) // _
+
+/* AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ \ │ | │ @ │ # │ ~ │ € │ ¬ │   │   │   │   │   │   │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │   │   │   │   │   │   │   │   │   │   │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ { │ } │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │    │   │   │   │   │   │   │   │   │   │   │   │          │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define DV_BSLS ALGR(DV_MORD) // (backslash)
+#define DV_PIPE ALGR(DV_1) // |
+#define DV_AT ALGR(DV_2) // @
+#define DV_HASH ALGR(DV_3) // #
+#define DV_TILD ALGR(DV_4) // ~
+#define DV_EURO ALGR(DV_5) // €
+#define DV_NOT ALGR(DV_6) // ¬
+// Row 2
+#define DV_LBRC ALGR(DV_GRV) // [
+#define DV_RBRC ALGR(DV_PLUS) // ]
+// Row 3
+#define DV_LCBR ALGR(DV_ACUT) // {
+#define DV_RCBR ALGR(DV_CCED) // }
diff --git a/quantum/keymap_extras/keymap_workman_zxcvm.h b/quantum/keymap_extras/keymap_workman_zxcvm.h
new file mode 100644
index 0000000000..4ba2ada9e7
--- /dev/null
+++ b/quantum/keymap_extras/keymap_workman_zxcvm.h
@@ -0,0 +1,125 @@
+/* Copyright 2018 Jacob Jerrell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "keymap.h"
+
+// clang-format off
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │ Q │ D │ R │ W │ B │ J │ F │ U │ P │ ; │ [ │ ] │  \  │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │      │ A │ S │ H │ T │ G │ Y │ N │ E │ O │ I │ ' │        │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │        │ Z │ X │ C │ V │ M │ K │ L │ , │ . │ / │          │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define WK_GRV KC_GRV // `
+#define WK_1 KC_1 // 1
+#define WK_2 KC_2 // 2
+#define WK_3 KC_3 // 3
+#define WK_4 KC_4 // 4
+#define WK_5 KC_5 // 5
+#define WK_6 KC_6 // 6
+#define WK_7 KC_7 // 7
+#define WK_8 KC_8 // 8
+#define WK_9 KC_9 // 9
+#define WK_0 KC_0 // 0
+#define WK_MINS KC_MINS // -
+#define WK_EQL KC_EQL // =
+// Row 2
+#define WK_Q KC_Q // Q
+#define WK_D KC_W // D
+#define WK_R KC_E // R
+#define WK_W KC_R // W
+#define WK_B KC_T // B
+#define WK_J KC_Y // J
+#define WK_F KC_U // F
+#define WK_U KC_I // U
+#define WK_P KC_O // P
+#define WK_SCLN KC_P // ;
+#define WK_LBRC KC_LBRC // [
+#define WK_RBRC KC_RBRC // ]
+#define WK_BSLS KC_BSLS // (backslash)
+// Row 3
+#define WK_A KC_A // A
+#define WK_S KC_S // S
+#define WK_H KC_D // H
+#define WK_T KC_F // T
+#define WK_G KC_G // G
+#define WK_Y KC_H // Y
+#define WK_N KC_J // N
+#define WK_E KC_K // E
+#define WK_O KC_L // O
+#define WK_I KC_SCLN // I
+#define WK_QUOT KC_QUOT // '
+// Row 4
+#define WK_Z KC_Z // Z
+#define WK_X KC_X // X
+#define WK_C KC_C // C
+#define WK_V KC_V // V
+#define WK_M KC_B // M
+#define WK_K KC_N // K
+#define WK_L KC_M // L
+#define WK_COMM KC_COMM // ,
+#define WK_DOT KC_DOT // .
+#define WK_SLSH KC_SLSH // /
+
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │   │   │   │   │   │   │   │   │   │ : │ { │ } │  |  │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │      │   │   │   │   │   │   │   │   │   │   │ " │        │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │        │   │   │   │   │   │   │   │ < │ > │ ? │          │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define WK_TILD S(WK_GRV) // ~
+#define WK_EXLM S(WK_1) // !
+#define WK_AT S(WK_2) // @
+#define WK_HASH S(WK_3) // #
+#define WK_DLR S(WK_4) // $
+#define WK_PERC S(WK_5) // %
+#define WK_CIRC S(WK_6) // ^
+#define WK_AMPR S(WK_7) // &
+#define WK_ASTR S(WK_8) // *
+#define WK_LPRN S(WK_9) // (
+#define WK_RPRN S(WK_0) // )
+#define WK_UNDS S(WK_MINS) // _
+#define WK_PLUS S(WK_EQL) // +
+// Row 2
+#define WK_COLN S(WK_SCLN) // :
+#define WK_LCBR S(WK_LBRC) // {
+#define WK_RCBR S(WK_RBRC) // }
+#define WK_PIPE S(WK_BSLS) // |
+// Row 3
+#define WK_DQUO S(WK_QUOT) // "
+// Row 4
+#define WK_LABK S(WK_COMM) // <
+#define WK_RABK S(WK_DOT) // >
+#define WK_QUES S(WK_SLSH) // ?
diff --git a/quantum/keymap_extras/sendstring_bepo.h b/quantum/keymap_extras/sendstring_bepo.h
index 2dfe7e4a41..8119cd9f54 100644
--- a/quantum/keymap_extras/sendstring_bepo.h
+++ b/quantum/keymap_extras/sendstring_bepo.h
@@ -74,13 +74,13 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
- KC_SPC, BP_DCRC, BP_DQOT, BP_DLR, BP_DLR, BP_PERC, BP_P, BP_APOS,
+ KC_SPC, BP_DCIR, BP_DQUO, BP_DLR, BP_DLR, BP_PERC, BP_P, BP_QUOT,
// ( ) * + , - . /
BP_LPRN, BP_RPRN, BP_ASTR, BP_PLUS, BP_COMM, BP_MINS, BP_DOT, BP_SLSH,
// 0 1 2 3 4 5 6 7
- BP_ASTR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, BP_AT, BP_PLUS,
+ BP_ASTR, BP_DQUO, BP_LDAQ, BP_RDAQ, BP_LPRN, BP_RPRN, BP_AT, BP_PLUS,
// 8 9 : ; < = > ?
- BP_MINS, BP_SLSH, BP_DOT, BP_COMM, BP_LGIL, BP_EQL, BP_RGIL, BP_APOS,
+ BP_MINS, BP_SLSH, BP_DOT, BP_COMM, BP_LDAQ, BP_EQL, BP_RDAQ, BP_QUOT,
// @ A B C D E F G
BP_AT, BP_A, BP_B, BP_C, BP_D, BP_E, BP_F, BP_G,
// H I J K L M N O
diff --git a/quantum/keymap_extras/sendstring_fr_ch.h b/quantum/keymap_extras/sendstring_fr_ch.h
new file mode 100644
index 0000000000..2acce5663b
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_fr_ch.h
@@ -0,0 +1,100 @@
+/* Copyright 2020
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Sendstring lookup tables for Swiss French layouts
+
+#pragma once
+
+#include "keymap_fr_ch.h"
+#include "quantum.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 1, 0, 0, 1, 1, 0),
+ KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, CH_DIAE, CH_2, CH_3, CH_DLR, CH_5, CH_6, CH_QUOT,
+ // ( ) * + , - . /
+ CH_8, CH_9, CH_3, CH_0, CH_COMM, CH_MINS, CH_DOT, CH_7,
+ // 0 1 2 3 4 5 6 7
+ CH_0, CH_1, CH_2, CH_3, CH_4, CH_5, CH_6, CH_7,
+ // 8 9 : ; < = > ?
+ CH_8, CH_9, CH_DOT, CH_COMM, CH_LABK, CH_0, CH_LABK, CH_QUOT,
+ // @ A B C D E F G
+ CH_2, CH_A, CH_B, CH_C, CH_D, CH_E, CH_F, CH_G,
+ // H I J K L M N O
+ CH_H, CH_I, CH_J, CH_K, CH_L, CH_M, CH_N, CH_O,
+ // P Q R S T U V W
+ CH_P, CH_Q, CH_R, CH_S, CH_T, CH_U, CH_V, CH_W,
+ // X Y Z [ \ ] ^ _
+ CH_X, CH_Y, CH_Z, CH_EGRV, CH_LABK, CH_DIAE, CH_CIRC, CH_MINS,
+ // ` a b c d e f g
+ CH_CIRC, CH_A, CH_B, CH_C, CH_D, CH_E, CH_F, CH_G,
+ // h i j k l m n o
+ CH_H, CH_I, CH_J, CH_K, CH_L, CH_M, CH_N, CH_O,
+ // p q r s t u v w
+ CH_P, CH_Q, CH_R, CH_S, CH_T, CH_U, CH_V, CH_W,
+ // x y z { | } ~ DEL
+ CH_X, CH_Y, CH_Z, CH_AGRV, CH_7, CH_DLR, CH_CIRC, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_french.h b/quantum/keymap_extras/sendstring_french.h
index a02f114b4e..17ea3ed454 100644
--- a/quantum/keymap_extras/sendstring_french.h
+++ b/quantum/keymap_extras/sendstring_french.h
@@ -74,7 +74,7 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
- KC_SPC, FR_EXLM, FR_QUOT, FR_DQUO, FR_DLR, FR_UGRV, FR_AMP, FR_QUOT,
+ KC_SPC, FR_EXLM, FR_QUOT, FR_DQUO, FR_DLR, FR_UGRV, FR_AMPR, FR_QUOT,
// ( ) * + , - . /
FR_LPRN, FR_RPRN, FR_ASTR, FR_EQL, FR_COMM, FR_MINS, FR_SCLN, FR_COLN,
// 0 1 2 3 4 5 6 7
diff --git a/quantum/keymap_extras/sendstring_french_osx.h b/quantum/keymap_extras/sendstring_french_osx.h
new file mode 100644
index 0000000000..6cadbac153
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_french_osx.h
@@ -0,0 +1,100 @@
+/* Copyright 2020
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Sendstring lookup tables for macOS French (AZERTY) layouts
+
+#pragma once
+
+#include "keymap_french_osx.h"
+#include "quantum.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 0, 0),
+ KCLUT_ENTRY(0, 0, 1, 1, 0, 0, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 0, 0, 0, 0, 1, 1),
+ KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 0, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, FR_EXLM, FR_DQUO, FR_AT, FR_DLR, FR_LUGR, FR_AMPR, FR_QUOT,
+ // ( ) * + , - . /
+ FR_LPRN, FR_RPRN, FR_DLR, FR_EQL, FR_COMM, FR_MINS, FR_SCLN, FR_COLN,
+ // 0 1 2 3 4 5 6 7
+ FR_LAGR, FR_AMPR, FR_LEAC, FR_DQUO, FR_QUOT, FR_LPRN, FR_SECT, FR_LEGR,
+ // 8 9 : ; < = > ?
+ FR_EXLM, FR_LCCE, FR_COLN, FR_SCLN, FR_LABK, FR_EQL, FR_LABK, FR_COMM,
+ // @ A B C D E F G
+ FR_AT, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G,
+ // H I J K L M N O
+ FR_H, FR_I, FR_J, FR_K, FR_L, FR_M, FR_N, FR_O,
+ // P Q R S T U V W
+ FR_P, FR_Q, FR_R, FR_S, FR_T, FR_U, FR_V, FR_W,
+ // X Y Z [ \ ] ^ _
+ FR_X, FR_Y, FR_Z, FR_LPRN, FR_COLN, FR_RPRN, FR_CIRC, FR_MINS,
+ // ` a b c d e f g
+ FR_GRV, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G,
+ // h i j k l m n o
+ FR_H, FR_I, FR_J, FR_K, FR_L, FR_M, FR_N, FR_O,
+ // p q r s t u v w
+ FR_P, FR_Q, FR_R, FR_S, FR_T, FR_U, FR_V, FR_W,
+ // x y z { | } ~ DEL
+ FR_X, FR_Y, FR_Z, FR_LPRN, FR_L, FR_RPRN, FR_N, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_german_ch.h b/quantum/keymap_extras/sendstring_german_ch.h
new file mode 100644
index 0000000000..1e1327c511
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_german_ch.h
@@ -0,0 +1,100 @@
+/* Copyright 2020
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Sendstring lookup tables for Swiss German layouts
+
+#pragma once
+
+#include "keymap_german_ch.h"
+#include "quantum.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 1, 0, 0, 1, 1, 0),
+ KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
+ KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, CH_DIAE, CH_2, CH_3, CH_DLR, CH_5, CH_6, CH_QUOT,
+ // ( ) * + , - . /
+ CH_8, CH_9, CH_3, CH_1, CH_COMM, CH_MINS, CH_DOT, CH_7,
+ // 0 1 2 3 4 5 6 7
+ CH_0, CH_1, CH_2, CH_3, CH_4, CH_5, CH_6, CH_7,
+ // 8 9 : ; < = > ?
+ CH_8, CH_9, CH_DOT, CH_COMM, CH_LABK, CH_0, CH_LABK, CH_QUOT,
+ // @ A B C D E F G
+ CH_2, CH_A, CH_B, CH_C, CH_D, CH_E, CH_F, CH_G,
+ // H I J K L M N O
+ CH_H, CH_I, CH_J, CH_K, CH_L, CH_M, CH_N, CH_O,
+ // P Q R S T U V W
+ CH_P, CH_Q, CH_R, CH_S, CH_T, CH_U, CH_V, CH_W,
+ // X Y Z [ \ ] ^ _
+ CH_X, CH_Y, CH_Z, CH_UDIA, CH_LABK, CH_DIAE, CH_CIRC, CH_MINS,
+ // ` a b c d e f g
+ CH_CIRC, CH_A, CH_B, CH_C, CH_D, CH_E, CH_F, CH_G,
+ // h i j k l m n o
+ CH_H, CH_I, CH_J, CH_K, CH_L, CH_M, CH_N, CH_O,
+ // p q r s t u v w
+ CH_P, CH_Q, CH_R, CH_S, CH_T, CH_U, CH_V, CH_W,
+ // x y z { | } ~ DEL
+ CH_X, CH_Y, CH_Z, CH_ADIA, CH_7, CH_DLR, CH_CIRC, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_german_osx.h b/quantum/keymap_extras/sendstring_german_osx.h
new file mode 100644
index 0000000000..03f54da2af
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_german_osx.h
@@ -0,0 +1,100 @@
+/* Copyright 2020
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Sendstring lookup tables for macOS German layouts
+
+#pragma once
+
+#include "keymap_german_osx.h"
+#include "quantum.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
+ KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 1, 0, 0, 1),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, DE_1, DE_2, DE_HASH, DE_4, DE_5, DE_6, DE_HASH,
+ // ( ) * + , - . /
+ DE_8, DE_9, DE_PLUS, DE_PLUS, DE_COMM, DE_MINS, DE_DOT, DE_7,
+ // 0 1 2 3 4 5 6 7
+ DE_0, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7,
+ // 8 9 : ; < = > ?
+ DE_8, DE_9, DE_DOT, DE_COMM, DE_LABK, DE_0, DE_LABK, DE_SS,
+ // @ A B C D E F G
+ DE_L, DE_A, DE_B, DE_C, DE_D, DE_E, DE_F, DE_G,
+ // H I J K L M N O
+ DE_H, DE_I, DE_J, DE_K, DE_L, DE_M, DE_N, DE_O,
+ // P Q R S T U V W
+ DE_P, DE_Q, DE_R, DE_S, DE_T, DE_U, DE_V, DE_W,
+ // X Y Z [ \ ] ^ _
+ DE_X, DE_Y, DE_Z, DE_5, DE_7, DE_6, DE_CIRC, DE_MINS,
+ // ` a b c d e f g
+ DE_ACUT, DE_A, DE_B, DE_C, DE_D, DE_E, DE_F, DE_G,
+ // h i j k l m n o
+ DE_H, DE_I, DE_J, DE_K, DE_L, DE_M, DE_N, DE_O,
+ // p q r s t u v w
+ DE_P, DE_Q, DE_R, DE_S, DE_T, DE_U, DE_V, DE_W,
+ // x y z { | } ~ DEL
+ DE_X, DE_Y, DE_Z, DE_8, DE_7, DE_9, DE_N, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_italian_osx_ansi.h b/quantum/keymap_extras/sendstring_italian_osx_ansi.h
new file mode 100644
index 0000000000..c61874015f
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_italian_osx_ansi.h
@@ -0,0 +1,100 @@
+/* Copyright 2020
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Sendstring lookup tables for macOS Italian ANSI layouts
+
+#pragma once
+
+#include "keymap_italian_osx_ansi.h"
+#include "quantum.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 0),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
+ KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 1, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, IT_1, IT_2, IT_AGRV, IT_4, IT_5, IT_6, IT_QUOT,
+ // ( ) * + , - . /
+ IT_8, IT_9, IT_PLUS, IT_PLUS, IT_COMM, IT_MINS, IT_DOT, IT_7,
+ // 0 1 2 3 4 5 6 7
+ IT_0, IT_1, IT_2, IT_3, IT_4, IT_5, IT_6, IT_7,
+ // 8 9 : ; < = > ?
+ IT_8, IT_9, IT_DOT, IT_COMM, IT_LABK, IT_0, IT_LABK, IT_QUOT,
+ // @ A B C D E F G
+ IT_OGRV, IT_A, IT_B, IT_C, IT_D, IT_E, IT_F, IT_G,
+ // H I J K L M N O
+ IT_H, IT_I, IT_J, IT_K, IT_L, IT_M, IT_N, IT_O,
+ // P Q R S T U V W
+ IT_P, IT_Q, IT_R, IT_S, IT_T, IT_U, IT_V, IT_W,
+ // X Y Z [ \ ] ^ _
+ IT_X, IT_Y, IT_Z, IT_EGRV, IT_BSLS, IT_PLUS, IT_IGRV, IT_MINS,
+ // ` a b c d e f g
+ IT_BSLS, IT_A, IT_B, IT_C, IT_D, IT_E, IT_F, IT_G,
+ // h i j k l m n o
+ IT_H, IT_I, IT_J, IT_K, IT_L, IT_M, IT_N, IT_O,
+ // p q r s t u v w
+ IT_P, IT_Q, IT_R, IT_S, IT_T, IT_U, IT_V, IT_W,
+ // x y z { | } ~ DEL
+ IT_X, IT_Y, IT_Z, IT_EGRV, IT_BSLS, IT_PLUS, IT_5, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_italian_osx_iso.h b/quantum/keymap_extras/sendstring_italian_osx_iso.h
new file mode 100644
index 0000000000..eb5853b006
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_italian_osx_iso.h
@@ -0,0 +1,100 @@
+/* Copyright 2020
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Sendstring lookup tables for macOS Italian ISO layouts
+
+#pragma once
+
+#include "keymap_italian_osx_iso.h"
+#include "quantum.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 0),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
+ KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 1, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, IT_1, IT_2, IT_AGRV, IT_4, IT_5, IT_6, IT_QUOT,
+ // ( ) * + , - . /
+ IT_8, IT_9, IT_PLUS, IT_PLUS, IT_COMM, IT_MINS, IT_DOT, IT_7,
+ // 0 1 2 3 4 5 6 7
+ IT_0, IT_1, IT_2, IT_3, IT_4, IT_5, IT_6, IT_7,
+ // 8 9 : ; < = > ?
+ IT_8, IT_9, IT_DOT, IT_COMM, IT_LABK, IT_0, IT_LABK, IT_QUOT,
+ // @ A B C D E F G
+ IT_OGRV, IT_A, IT_B, IT_C, IT_D, IT_E, IT_F, IT_G,
+ // H I J K L M N O
+ IT_H, IT_I, IT_J, IT_K, IT_L, IT_M, IT_N, IT_O,
+ // P Q R S T U V W
+ IT_P, IT_Q, IT_R, IT_S, IT_T, IT_U, IT_V, IT_W,
+ // X Y Z [ \ ] ^ _
+ IT_X, IT_Y, IT_Z, IT_EGRV, IT_BSLS, IT_PLUS, IT_IGRV, IT_MINS,
+ // ` a b c d e f g
+ IT_BSLS, IT_A, IT_B, IT_C, IT_D, IT_E, IT_F, IT_G,
+ // h i j k l m n o
+ IT_H, IT_I, IT_J, IT_K, IT_L, IT_M, IT_N, IT_O,
+ // p q r s t u v w
+ IT_P, IT_Q, IT_R, IT_S, IT_T, IT_U, IT_V, IT_W,
+ // x y z { | } ~ DEL
+ IT_X, IT_Y, IT_Z, IT_EGRV, IT_BSLS, IT_PLUS, IT_5, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_spanish.h b/quantum/keymap_extras/sendstring_spanish.h
index 405cf9b0a3..b984a6f463 100644
--- a/quantum/keymap_extras/sendstring_spanish.h
+++ b/quantum/keymap_extras/sendstring_spanish.h
@@ -96,5 +96,5 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// p q r s t u v w
ES_P, ES_Q, ES_R, ES_S, ES_T, ES_U, ES_V, ES_W,
// x y z { | } ~ DEL
- ES_X, ES_Y, ES_Z, ES_ACUT, ES_1, ES_CCED, ES_NTIL, KC_DEL
+ ES_X, ES_Y, ES_Z, ES_ACUT, ES_1, ES_CCED, ES_4, KC_DEL
};
diff --git a/quantum/keymap_extras/sendstring_spanish_dvorak.h b/quantum/keymap_extras/sendstring_spanish_dvorak.h
new file mode 100644
index 0000000000..87d582491c
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_spanish_dvorak.h
@@ -0,0 +1,100 @@
+/* Copyright 2020 José Andrés García
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Sendstring lookup tables for Spanish Dvorak layout
+
+#pragma once
+
+#include "keymap_spanish_dvorak.h"
+#include "quantum.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 0),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
+ KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, DV_1, DV_2, DV_3, DV_4, DV_5, DV_6, DV_QUOT,
+ // ( ) * + , - . /
+ DV_8, DV_9, DV_PLUS, DV_PLUS, DV_COMM, DV_MINS, DV_DOT, DV_7,
+ // 0 1 2 3 4 5 6 7
+ DV_0, DV_1, DV_2, DV_3, DV_4, DV_5, DV_6, DV_7,
+ // 8 9 : ; < = > ?
+ DV_8, DV_9, DV_DOT, DV_COMM, DV_LABK, DV_0, DV_LABK, DV_QUOT,
+ // @ A B C D E F G
+ DV_2, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_G,
+ // H I J K L M N O
+ DV_H, DV_I, DV_J, DV_K, DV_L, DV_M, DV_N, DV_O,
+ // P Q R S T U V W
+ DV_P, DV_Q, DV_R, DV_S, DV_T, DV_U, DV_V, DV_W,
+ // X Y Z [ \ ] ^ _
+ DV_X, DV_Y, DV_Z, DV_GRV, DV_MORD, DV_PLUS, DV_GRV, DV_MINS,
+ // ` a b c d e f g
+ DV_GRV, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_G,
+ // h i j k l m n o
+ DV_H, DV_I, DV_J, DV_K, DV_L, DV_M, DV_N, DV_O,
+ // p q r s t u v w
+ DV_P, DV_Q, DV_R, DV_S, DV_T, DV_U, DV_V, DV_W,
+ // x y z { | } ~ DEL
+ DV_X, DV_Y, DV_Z, DV_ACUT, DV_1, DV_CCED, DV_4, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_workman_zxcvm.h b/quantum/keymap_extras/sendstring_workman_zxcvm.h
new file mode 100644
index 0000000000..e7605d7cce
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_workman_zxcvm.h
@@ -0,0 +1,59 @@
+/* Copyright 2018 Jacob Jerrell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Sendstring lookup tables for Workman ZXCVM layouts
+
+#pragma once
+
+#include "keymap_workman_zxcvm.h"
+
+// clang-format off
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, WK_1, WK_QUOT, WK_3, WK_4, WK_5, WK_7, WK_QUOT,
+ // ( ) * + , - . /
+ WK_9, WK_0, WK_8, WK_EQL, WK_COMM, WK_MINS, WK_DOT, WK_SLSH,
+ // 0 1 2 3 4 5 6 7
+ WK_0, WK_1, WK_2, WK_3, WK_4, WK_5, WK_6, WK_7,
+ // 8 9 : ; < = > ?
+ WK_8, WK_9, WK_SCLN, WK_SCLN, WK_COMM, WK_EQL, WK_DOT, WK_SLSH,
+ // @ A B C D E F G
+ WK_2, WK_A, WK_B, WK_C, WK_D, WK_E, WK_F, WK_G,
+ // H I J K L M N O
+ WK_H, WK_I, WK_J, WK_K, WK_L, WK_M, WK_N, WK_O,
+ // P Q R S T U V W
+ WK_P, WK_Q, WK_R, WK_S, WK_T, WK_U, WK_V, WK_W,
+ // X Y Z [ \ ] ^ _
+ WK_X, WK_Y, WK_Z, WK_LBRC, WK_BSLS, WK_RBRC, WK_6, WK_MINS,
+ // ` a b c d e f g
+ WK_GRV, WK_A, WK_B, WK_C, WK_D, WK_E, WK_F, WK_G,
+ // h i j k l m n o
+ WK_H, WK_I, WK_J, WK_K, WK_L, WK_M, WK_N, WK_O,
+ // p q r s t u v w
+ WK_P, WK_Q, WK_R, WK_S, WK_T, WK_U, WK_V, WK_W,
+ // x y z { | } ~ DEL
+ WK_X, WK_Y, WK_Z, WK_LBRC, WK_BSLS, WK_RBRC, WK_GRV, KC_DEL
+};