summaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/action.c1
-rw-r--r--quantum/action_layer.c7
-rw-r--r--quantum/audio/audio_avr.c812
-rw-r--r--quantum/audio/audio_chibios.c726
-rw-r--r--quantum/audio/voices.c2
-rw-r--r--quantum/audio/voices.h1
-rw-r--r--quantum/dynamic_keymap.c5
-rw-r--r--quantum/keymap_extras/keymap_belgian.h49
-rw-r--r--quantum/keymap_extras/keymap_bepo.h52
-rw-r--r--quantum/keymap_extras/keymap_br_abnt2.h180
-rw-r--r--quantum/keymap_extras/keymap_brazilian_abnt2.h20
-rw-r--r--quantum/keymap_extras/keymap_canadian_multilingual.h181
-rw-r--r--quantum/keymap_extras/keymap_colemak.h52
-rw-r--r--quantum/keymap_extras/keymap_contributions.h375
-rw-r--r--quantum/keymap_extras/keymap_czech.h36
-rw-r--r--quantum/keymap_extras/keymap_danish.h36
-rw-r--r--quantum/keymap_extras/keymap_dvorak.h20
-rw-r--r--quantum/keymap_extras/keymap_dvorak_fr.h24
-rw-r--r--quantum/keymap_extras/keymap_dvp.h125
-rw-r--r--quantum/keymap_extras/keymap_estonian.h36
-rw-r--r--quantum/keymap_extras/keymap_finnish.h36
-rw-r--r--quantum/keymap_extras/keymap_fr_ch.h243
-rw-r--r--quantum/keymap_extras/keymap_french.h47
-rw-r--r--quantum/keymap_extras/keymap_french_osx.h260
-rw-r--r--quantum/keymap_extras/keymap_german.h49
-rw-r--r--quantum/keymap_extras/keymap_german_ch.h182
-rw-r--r--quantum/keymap_extras/keymap_german_osx.h323
-rw-r--r--quantum/keymap_extras/keymap_greek.h36
-rw-r--r--quantum/keymap_extras/keymap_hebrew.h36
-rw-r--r--quantum/keymap_extras/keymap_hungarian.h55
-rw-r--r--quantum/keymap_extras/keymap_icelandic.h36
-rw-r--r--quantum/keymap_extras/keymap_irish.h36
-rw-r--r--quantum/keymap_extras/keymap_italian.h77
-rw-r--r--quantum/keymap_extras/keymap_italian_osx_ansi.h268
-rw-r--r--quantum/keymap_extras/keymap_italian_osx_iso.h269
-rw-r--r--quantum/keymap_extras/keymap_japanese.h9
-rw-r--r--quantum/keymap_extras/keymap_jp.h148
-rw-r--r--quantum/keymap_extras/keymap_korean.h24
-rw-r--r--quantum/keymap_extras/keymap_latvian.h50
-rw-r--r--quantum/keymap_extras/keymap_lithuanian_azerty.h38
-rw-r--r--quantum/keymap_extras/keymap_lithuanian_qwerty.h16
-rw-r--r--quantum/keymap_extras/keymap_neo2.h130
-rw-r--r--quantum/keymap_extras/keymap_nordic.h7
-rw-r--r--quantum/keymap_extras/keymap_norman.h18
-rw-r--r--quantum/keymap_extras/keymap_norwegian.h215
-rw-r--r--quantum/keymap_extras/keymap_plover.h10
-rw-r--r--quantum/keymap_extras/keymap_polish.h30
-rw-r--r--quantum/keymap_extras/keymap_portuguese.h36
-rw-r--r--quantum/keymap_extras/keymap_portuguese_osx_iso.h234
-rw-r--r--quantum/keymap_extras/keymap_romanian.h48
-rw-r--r--quantum/keymap_extras/keymap_russian.h30
-rw-r--r--quantum/keymap_extras/keymap_serbian.h36
-rw-r--r--quantum/keymap_extras/keymap_serbian_latin.h36
-rw-r--r--quantum/keymap_extras/keymap_slovak.h4
-rw-r--r--quantum/keymap_extras/keymap_slovenian.h44
-rw-r--r--quantum/keymap_extras/keymap_spanish.h45
-rw-r--r--quantum/keymap_extras/keymap_spanish_dvorak.h38
-rw-r--r--quantum/keymap_extras/keymap_steno.h2
-rw-r--r--quantum/keymap_extras/keymap_swedish.h59
-rw-r--r--quantum/keymap_extras/keymap_swiss_de.h18
-rw-r--r--quantum/keymap_extras/keymap_swiss_fr.h79
-rw-r--r--quantum/keymap_extras/keymap_turkish_f.h52
-rw-r--r--quantum/keymap_extras/keymap_uk.h111
-rw-r--r--quantum/keymap_extras/keymap_us_international.h56
-rw-r--r--quantum/keymap_extras/keymap_workman.h49
-rw-r--r--quantum/keymap_extras/keymap_workman_zxcvm.h20
-rw-r--r--quantum/keymap_extras/sendstring_belgian.h28
-rw-r--r--quantum/keymap_extras/sendstring_bepo.h30
-rw-r--r--quantum/keymap_extras/sendstring_br_abnt2.h80
-rw-r--r--quantum/keymap_extras/sendstring_colemak.h14
-rw-r--r--quantum/keymap_extras/sendstring_czech.h20
-rw-r--r--quantum/keymap_extras/sendstring_danish.h20
-rw-r--r--quantum/keymap_extras/sendstring_dvorak.h31
-rw-r--r--quantum/keymap_extras/sendstring_dvorak_fr.h19
-rw-r--r--quantum/keymap_extras/sendstring_dvp.h80
-rw-r--r--quantum/keymap_extras/sendstring_estonian.h20
-rw-r--r--quantum/keymap_extras/sendstring_finnish.h20
-rw-r--r--quantum/keymap_extras/sendstring_fr_ch.h100
-rw-r--r--quantum/keymap_extras/sendstring_french.h32
-rw-r--r--quantum/keymap_extras/sendstring_french_osx.h100
-rw-r--r--quantum/keymap_extras/sendstring_german.h46
-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_hungarian.h20
-rw-r--r--quantum/keymap_extras/sendstring_icelandic.h20
-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_jis.h77
-rw-r--r--quantum/keymap_extras/sendstring_latvian.h21
-rw-r--r--quantum/keymap_extras/sendstring_lithuanian_azerty.h4
-rw-r--r--quantum/keymap_extras/sendstring_norman.h14
-rw-r--r--quantum/keymap_extras/sendstring_norwegian.h20
-rw-r--r--quantum/keymap_extras/sendstring_portuguese.h20
-rw-r--r--quantum/keymap_extras/sendstring_portuguese_osx_iso.h100
-rw-r--r--quantum/keymap_extras/sendstring_serbian_latin.h20
-rw-r--r--quantum/keymap_extras/sendstring_slovak.h22
-rw-r--r--quantum/keymap_extras/sendstring_slovenian.h20
-rw-r--r--quantum/keymap_extras/sendstring_spanish.h26
-rw-r--r--quantum/keymap_extras/sendstring_spanish_dvorak.h20
-rw-r--r--quantum/keymap_extras/sendstring_swedish.h20
-rw-r--r--quantum/keymap_extras/sendstring_turkish_f.h20
-rw-r--r--quantum/keymap_extras/sendstring_turkish_q.h20
-rw-r--r--quantum/keymap_extras/sendstring_uk.h29
-rw-r--r--quantum/keymap_extras/sendstring_workman.h14
-rw-r--r--quantum/oryx.c219
-rw-r--r--quantum/oryx.h63
-rw-r--r--quantum/process_keycode/process_auto_shift.c1
-rw-r--r--quantum/process_keycode/process_caps_word.c1
-rwxr-xr-x[-rw-r--r--]quantum/process_keycode/process_grave_esc.h0
-rw-r--r--quantum/quantum.c17
-rw-r--r--quantum/quantum.h17
-rw-r--r--quantum/quantum_keycodes.h2
-rw-r--r--quantum/rgb_matrix/rgb_matrix.c1
113 files changed, 6884 insertions, 1369 deletions
diff --git a/quantum/action.c b/quantum/action.c
index 6b2e9104e0..2cea6caae1 100644
--- a/quantum/action.c
+++ b/quantum/action.c
@@ -1024,6 +1024,7 @@ __attribute__((weak)) void unregister_mods(uint8_t mods) {
}
}
+
/** \brief Adds the given weak modifiers and sends a keyboard report immediately.
*
* \param mods A bitfield of modifiers to register.
diff --git a/quantum/action_layer.c b/quantum/action_layer.c
index 8ef337a690..5cc1ac9b34 100644
--- a/quantum/action_layer.c
+++ b/quantum/action_layer.c
@@ -1,6 +1,8 @@
#include <limits.h>
#include <stdint.h>
-
+#ifdef ORYX_ENABLE
+# include "oryx.h"
+#endif
#ifdef DEBUG_ACTION
# include "debug.h"
#else
@@ -119,6 +121,9 @@ __attribute__((weak)) layer_state_t layer_state_set_kb(layer_state_t state) {
*/
void layer_state_set(layer_state_t state) {
state = layer_state_set_kb(state);
+#ifdef ORYX_ENABLE
+ layer_state_set_oryx(state);
+#endif
dprint("layer_state: ");
layer_debug();
dprint(" to ");
diff --git a/quantum/audio/audio_avr.c b/quantum/audio/audio_avr.c
new file mode 100644
index 0000000000..1bac43bb43
--- /dev/null
+++ b/quantum/audio/audio_avr.c
@@ -0,0 +1,812 @@
+/* Copyright 2016 Jack Humbert
+ *
+ * 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/>.
+ */
+
+#include <stdio.h>
+#include <string.h>
+//#include <math.h>
+#if defined(__AVR__)
+# include <avr/pgmspace.h>
+# include <avr/interrupt.h>
+# include <avr/io.h>
+#endif
+#include "print.h"
+#include "audio.h"
+#include "keymap.h"
+#include "wait.h"
+
+#include "eeconfig.h"
+
+#define CPU_PRESCALER 8
+
+// -----------------------------------------------------------------------------
+// Timer Abstractions
+// -----------------------------------------------------------------------------
+
+// Currently we support timers 1 and 3 used at the sime time, channels A-C,
+// pins PB5, PB6, PB7, PC4, PC5, and PC6
+#if defined(C6_AUDIO)
+# define CPIN_AUDIO
+# define CPIN_SET_DIRECTION DDRC |= _BV(PORTC6);
+# define INIT_AUDIO_COUNTER_3 TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
+# define ENABLE_AUDIO_COUNTER_3_ISR TIMSK3 |= _BV(OCIE3A)
+# define DISABLE_AUDIO_COUNTER_3_ISR TIMSK3 &= ~_BV(OCIE3A)
+# define ENABLE_AUDIO_COUNTER_3_OUTPUT TCCR3A |= _BV(COM3A1);
+# define DISABLE_AUDIO_COUNTER_3_OUTPUT TCCR3A &= ~(_BV(COM3A1) | _BV(COM3A0));
+# define TIMER_3_PERIOD ICR3
+# define TIMER_3_DUTY_CYCLE OCR3A
+# define TIMER3_AUDIO_vect TIMER3_COMPA_vect
+#endif
+#if defined(C5_AUDIO)
+# define CPIN_AUDIO
+# define CPIN_SET_DIRECTION DDRC |= _BV(PORTC5);
+# define INIT_AUDIO_COUNTER_3 TCCR3A = (0 << COM3B1) | (0 << COM3B0) | (1 << WGM31) | (0 << WGM30);
+# define ENABLE_AUDIO_COUNTER_3_ISR TIMSK3 |= _BV(OCIE3B)
+# define DISABLE_AUDIO_COUNTER_3_ISR TIMSK3 &= ~_BV(OCIE3B)
+# define ENABLE_AUDIO_COUNTER_3_OUTPUT TCCR3A |= _BV(COM3B1);
+# define DISABLE_AUDIO_COUNTER_3_OUTPUT TCCR3A &= ~(_BV(COM3B1) | _BV(COM3B0));
+# define TIMER_3_PERIOD ICR3
+# define TIMER_3_DUTY_CYCLE OCR3B
+# define TIMER3_AUDIO_vect TIMER3_COMPB_vect
+#endif
+#if defined(C4_AUDIO)
+# define CPIN_AUDIO
+# define CPIN_SET_DIRECTION DDRC |= _BV(PORTC4);
+# define INIT_AUDIO_COUNTER_3 TCCR3A = (0 << COM3C1) | (0 << COM3C0) | (1 << WGM31) | (0 << WGM30);
+# define ENABLE_AUDIO_COUNTER_3_ISR TIMSK3 |= _BV(OCIE3C)
+# define DISABLE_AUDIO_COUNTER_3_ISR TIMSK3 &= ~_BV(OCIE3C)
+# define ENABLE_AUDIO_COUNTER_3_OUTPUT TCCR3A |= _BV(COM3C1);
+# define DISABLE_AUDIO_COUNTER_3_OUTPUT TCCR3A &= ~(_BV(COM3C1) | _BV(COM3C0));
+# define TIMER_3_PERIOD ICR3
+# define TIMER_3_DUTY_CYCLE OCR3C
+# define TIMER3_AUDIO_vect TIMER3_COMPC_vect
+#endif
+
+#if defined(B5_AUDIO)
+# define BPIN_AUDIO
+# define BPIN_SET_DIRECTION DDRB |= _BV(PORTB5);
+# define INIT_AUDIO_COUNTER_1 TCCR1A = (0 << COM1A1) | (0 << COM1A0) | (1 << WGM11) | (0 << WGM10);
+# define ENABLE_AUDIO_COUNTER_1_ISR TIMSK1 |= _BV(OCIE1A)
+# define DISABLE_AUDIO_COUNTER_1_ISR TIMSK1 &= ~_BV(OCIE1A)
+# define ENABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A |= _BV(COM1A1);
+# define DISABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A &= ~(_BV(COM1A1) | _BV(COM1A0));
+# define TIMER_1_PERIOD ICR1
+# define TIMER_1_DUTY_CYCLE OCR1A
+# define TIMER1_AUDIO_vect TIMER1_COMPA_vect
+#endif
+#if defined(B6_AUDIO)
+# define BPIN_AUDIO
+# define BPIN_SET_DIRECTION DDRB |= _BV(PORTB6);
+# define INIT_AUDIO_COUNTER_1 TCCR1A = (0 << COM1B1) | (0 << COM1B0) | (1 << WGM11) | (0 << WGM10);
+# define ENABLE_AUDIO_COUNTER_1_ISR TIMSK1 |= _BV(OCIE1B)
+# define DISABLE_AUDIO_COUNTER_1_ISR TIMSK1 &= ~_BV(OCIE1B)
+# define ENABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A |= _BV(COM1B1);
+# define DISABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A &= ~(_BV(COM1B1) | _BV(COM1B0));
+# define TIMER_1_PERIOD ICR1
+# define TIMER_1_DUTY_CYCLE OCR1B
+# define TIMER1_AUDIO_vect TIMER1_COMPB_vect
+#endif
+#if defined(B7_AUDIO)
+# define BPIN_AUDIO
+# define BPIN_SET_DIRECTION DDRB |= _BV(PORTB7);
+# define INIT_AUDIO_COUNTER_1 TCCR1A = (0 << COM1C1) | (0 << COM1C0) | (1 << WGM11) | (0 << WGM10);
+# define ENABLE_AUDIO_COUNTER_1_ISR TIMSK1 |= _BV(OCIE1C)
+# define DISABLE_AUDIO_COUNTER_1_ISR TIMSK1 &= ~_BV(OCIE1C)
+# define ENABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A |= _BV(COM1C1);
+# define DISABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A &= ~(_BV(COM1C1) | _BV(COM1C0));
+# define TIMER_1_PERIOD ICR1
+# define TIMER_1_DUTY_CYCLE OCR1C
+# define TIMER1_AUDIO_vect TIMER1_COMPC_vect
+#endif
+
+#if !defined(BPIN_AUDIO) && !defined(CPIN_AUDIO)
+# error "Audio feature enabled, but no suitable pin selected - see docs/feature_audio.md under the AVR settings for available options."
+#endif
+
+// -----------------------------------------------------------------------------
+
+int voices = 0;
+int voice_place = 0;
+float frequency = 0;
+float frequency_alt = 0;
+int volume = 0;
+long position = 0;
+
+float frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+bool sliding = false;
+
+float place = 0;
+
+uint8_t* sample;
+uint16_t sample_length = 0;
+
+bool playing_notes = false;
+bool playing_note = false;
+float note_frequency = 0;
+float note_length = 0;
+uint8_t note_tempo = TEMPO_DEFAULT;
+float note_timbre = TIMBRE_DEFAULT;
+uint16_t note_position = 0;
+float (*notes_pointer)[][2];
+uint16_t notes_count;
+bool notes_repeat;
+bool note_resting = false;
+
+uint16_t current_note = 0;
+uint8_t rest_counter = 0;
+
+#ifdef VIBRATO_ENABLE
+float vibrato_counter = 0;
+float vibrato_strength = .5;
+float vibrato_rate = 0.125;
+#endif
+
+float polyphony_rate = 0;
+
+static bool audio_initialized = false;
+
+audio_config_t audio_config;
+
+uint16_t envelope_index = 0;
+bool glissando = true;
+
+#ifndef STARTUP_SONG
+# define STARTUP_SONG SONG(STARTUP_SOUND)
+#endif
+#ifndef AUDIO_ON_SONG
+# define AUDIO_ON_SONG SONG(AUDIO_ON_SOUND)
+#endif
+#ifndef AUDIO_OFF_SONG
+# define AUDIO_OFF_SONG SONG(AUDIO_OFF_SOUND)
+#endif
+float startup_song[][2] = STARTUP_SONG;
+float audio_on_song[][2] = AUDIO_ON_SONG;
+float audio_off_song[][2] = AUDIO_OFF_SONG;
+
+void audio_init() {
+ // Check EEPROM
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ audio_config.raw = eeconfig_read_audio();
+
+ if (!audio_initialized) {
+// Set audio ports as output
+#ifdef CPIN_AUDIO
+ CPIN_SET_DIRECTION
+ DISABLE_AUDIO_COUNTER_3_ISR;
+#endif
+#ifdef BPIN_AUDIO
+ BPIN_SET_DIRECTION
+ DISABLE_AUDIO_COUNTER_1_ISR;
+#endif
+
+// TCCR3A / TCCR3B: Timer/Counter #3 Control Registers TCCR3A/TCCR3B, TCCR1A/TCCR1B
+// Compare Output Mode (COM3An and COM1An) = 0b00 = Normal port operation
+// OC3A -- PC6
+// OC3B -- PC5
+// OC3C -- PC4
+// OC1A -- PB5
+// OC1B -- PB6
+// OC1C -- PB7
+
+// Waveform Generation Mode (WGM3n) = 0b1110 = Fast PWM Mode 14. Period = ICR3, Duty Cycle OCR3A)
+// OCR3A - PC6
+// OCR3B - PC5
+// OCR3C - PC4
+// OCR1A - PB5
+// OCR1B - PB6
+// OCR1C - PB7
+
+// Clock Select (CS3n) = 0b010 = Clock / 8
+#ifdef CPIN_AUDIO
+ INIT_AUDIO_COUNTER_3
+ TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30);
+ TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (440 * CPU_PRESCALER));
+ TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (440 * CPU_PRESCALER)) * note_timbre);
+#endif
+#ifdef BPIN_AUDIO
+ INIT_AUDIO_COUNTER_1
+ TCCR1B = (1 << WGM13) | (1 << WGM12) | (0 << CS12) | (1 << CS11) | (0 << CS10);
+ TIMER_1_PERIOD = (uint16_t)(((float)F_CPU) / (440 * CPU_PRESCALER));
+ TIMER_1_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (440 * CPU_PRESCALER)) * note_timbre);
+#endif
+
+ audio_initialized = true;
+ }
+}
+
+void audio_startup() {
+ if (audio_config.enable) {
+ PLAY_SONG(startup_song);
+ }
+}
+
+void stop_all_notes() {
+ dprintf("audio stop all notes");
+
+ if (!audio_initialized) {
+ audio_init();
+ }
+ voices = 0;
+
+#ifdef CPIN_AUDIO
+ DISABLE_AUDIO_COUNTER_3_ISR;
+ DISABLE_AUDIO_COUNTER_3_OUTPUT;
+#endif
+
+#ifdef BPIN_AUDIO
+ DISABLE_AUDIO_COUNTER_1_ISR;
+ DISABLE_AUDIO_COUNTER_1_OUTPUT;
+#endif
+
+ playing_notes = false;
+ playing_note = false;
+ frequency = 0;
+ frequency_alt = 0;
+ volume = 0;
+
+ for (uint8_t i = 0; i < 8; i++) {
+ frequencies[i] = 0;
+ volumes[i] = 0;
+ }
+}
+
+void stop_note(float freq) {
+ dprintf("audio stop note freq=%d", (int)freq);
+
+ if (playing_note) {
+ if (!audio_initialized) {
+ audio_init();
+ }
+ for (int i = 7; i >= 0; i--) {
+ if (frequencies[i] == freq) {
+ frequencies[i] = 0;
+ volumes[i] = 0;
+ for (int j = i; (j < 7); j++) {
+ frequencies[j] = frequencies[j + 1];
+ frequencies[j + 1] = 0;
+ volumes[j] = volumes[j + 1];
+ volumes[j + 1] = 0;
+ }
+ break;
+ }
+ }
+ voices--;
+ if (voices < 0) voices = 0;
+ if (voice_place >= voices) {
+ voice_place = 0;
+ }
+ if (voices == 0) {
+#ifdef CPIN_AUDIO
+ DISABLE_AUDIO_COUNTER_3_ISR;
+ DISABLE_AUDIO_COUNTER_3_OUTPUT;
+#endif
+#ifdef BPIN_AUDIO
+ DISABLE_AUDIO_COUNTER_1_ISR;
+ DISABLE_AUDIO_COUNTER_1_OUTPUT;
+#endif
+ frequency = 0;
+ frequency_alt = 0;
+ volume = 0;
+ playing_note = false;
+ }
+ }
+}
+
+#ifdef VIBRATO_ENABLE
+
+float mod(float a, int b) {
+ float r = fmod(a, b);
+ return r < 0 ? r + b : r;
+}
+
+float vibrato(float average_freq) {
+# ifdef VIBRATO_STRENGTH_ENABLE
+ float vibrated_freq = average_freq * pow(vibrato_lut[(int)vibrato_counter], vibrato_strength);
+# else
+ float vibrated_freq = average_freq * vibrato_lut[(int)vibrato_counter];
+# endif
+ vibrato_counter = mod((vibrato_counter + vibrato_rate * (1.0 + 440.0 / average_freq)), VIBRATO_LUT_LENGTH);
+ return vibrated_freq;
+}
+
+#endif
+
+#ifdef CPIN_AUDIO
+ISR(TIMER3_AUDIO_vect) {
+ float freq;
+
+ if (playing_note) {
+ if (voices > 0) {
+# ifdef BPIN_AUDIO
+ float freq_alt = 0;
+ if (voices > 1) {
+ if (polyphony_rate == 0) {
+ if (glissando) {
+ if (frequency_alt != 0 && frequency_alt < frequencies[voices - 2] && frequency_alt < frequencies[voices - 2] * pow(2, -440 / frequencies[voices - 2] / 12 / 2)) {
+ frequency_alt = frequency_alt * pow(2, 440 / frequency_alt / 12 / 2);
+ } else if (frequency_alt != 0 && frequency_alt > frequencies[voices - 2] && frequency_alt > frequencies[voices - 2] * pow(2, 440 / frequencies[voices - 2] / 12 / 2)) {
+ frequency_alt = frequency_alt * pow(2, -440 / frequency_alt / 12 / 2);
+ } else {
+ frequency_alt = frequencies[voices - 2];
+ }
+ } else {
+ frequency_alt = frequencies[voices - 2];
+ }
+
+# ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq_alt = vibrato(frequency_alt);
+ } else {
+ freq_alt = frequency_alt;
+ }
+# else
+ freq_alt = frequency_alt;
+# endif
+ }
+
+ if (envelope_index < 65535) {
+ envelope_index++;
+ }
+
+ freq_alt = voice_envelope(freq_alt);
+
+ if (freq_alt < 30.517578125) {
+ freq_alt = 30.52;
+ }
+
+ TIMER_1_PERIOD = (uint16_t)(((float)F_CPU) / (freq_alt * CPU_PRESCALER));
+ TIMER_1_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq_alt * CPU_PRESCALER)) * note_timbre);
+ }
+# endif
+
+ if (polyphony_rate > 0) {
+ if (voices > 1) {
+ voice_place %= voices;
+ if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) {
+ voice_place = (voice_place + 1) % voices;
+ place = 0.0;
+ }
+ }
+
+# ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq = vibrato(frequencies[voice_place]);
+ } else {
+ freq = frequencies[voice_place];
+ }
+# else
+ freq = frequencies[voice_place];
+# endif
+ } else {
+ if (glissando) {
+ if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440 / frequencies[voices - 1] / 12 / 2)) {
+ frequency = frequency * pow(2, 440 / frequency / 12 / 2);
+ } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440 / frequencies[voices - 1] / 12 / 2)) {
+ frequency = frequency * pow(2, -440 / frequency / 12 / 2);
+ } else {
+ frequency = frequencies[voices - 1];
+ }
+ } else {
+ frequency = frequencies[voices - 1];
+ }
+
+# ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq = vibrato(frequency);
+ } else {
+ freq = frequency;
+ }
+# else
+ freq = frequency;
+# endif
+ }
+
+ if (envelope_index < 65535) {
+ envelope_index++;
+ }
+
+ freq = voice_envelope(freq);
+
+ if (freq < 30.517578125) {
+ freq = 30.52;
+ }
+
+ TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER));
+ TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre);
+ }
+ }
+
+ if (playing_notes) {
+ if (note_frequency > 0) {
+# ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq = vibrato(note_frequency);
+ } else {
+ freq = note_frequency;
+ }
+# else
+ freq = note_frequency;
+# endif
+
+ if (envelope_index < 65535) {
+ envelope_index++;
+ }
+ freq = voice_envelope(freq);
+
+ TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER));
+ TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre);
+ } else {
+ TIMER_3_PERIOD = 0;
+ TIMER_3_DUTY_CYCLE = 0;
+ }
+
+ note_position++;
+ bool end_of_note = false;
+ if (TIMER_3_PERIOD > 0) {
+ if (!note_resting)
+ end_of_note = (note_position >= (note_length / TIMER_3_PERIOD * 0xFFFF - 1));
+ else
+ end_of_note = (note_position >= (note_length));
+ } else {
+ end_of_note = (note_position >= (note_length));
+ }
+
+ if (end_of_note) {
+ current_note++;
+ if (current_note >= notes_count) {
+ if (notes_repeat) {
+ current_note = 0;
+ } else {
+ DISABLE_AUDIO_COUNTER_3_ISR;
+ DISABLE_AUDIO_COUNTER_3_OUTPUT;
+ playing_notes = false;
+ return;
+ }
+ }
+ if (!note_resting) {
+ note_resting = true;
+ current_note--;
+ if ((*notes_pointer)[current_note][0] == (*notes_pointer)[current_note + 1][0]) {
+ note_frequency = 0;
+ note_length = 1;
+ } else {
+ note_frequency = (*notes_pointer)[current_note][0];
+ note_length = 1;
+ }
+ } else {
+ note_resting = false;
+ envelope_index = 0;
+ note_frequency = (*notes_pointer)[current_note][0];
+ note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100);
+ }
+
+ note_position = 0;
+ }
+ }
+
+ if (!audio_config.enable) {
+ playing_notes = false;
+ playing_note = false;
+ }
+}
+#endif
+
+#ifdef BPIN_AUDIO
+ISR(TIMER1_AUDIO_vect) {
+# if defined(BPIN_AUDIO) && !defined(CPIN_AUDIO)
+ float freq = 0;
+
+ if (playing_note) {
+ if (voices > 0) {
+ if (polyphony_rate > 0) {
+ if (voices > 1) {
+ voice_place %= voices;
+ if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) {
+ voice_place = (voice_place + 1) % voices;
+ place = 0.0;
+ }
+ }
+
+# ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq = vibrato(frequencies[voice_place]);
+ } else {
+ freq = frequencies[voice_place];
+ }
+# else
+ freq = frequencies[voice_place];
+# endif
+ } else {
+ if (glissando) {
+ if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440 / frequencies[voices - 1] / 12 / 2)) {
+ frequency = frequency * pow(2, 440 / frequency / 12 / 2);
+ } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440 / frequencies[voices - 1] / 12 / 2)) {
+ frequency = frequency * pow(2, -440 / frequency / 12 / 2);
+ } else {
+ frequency = frequencies[voices - 1];
+ }
+ } else {
+ frequency = frequencies[voices - 1];
+ }
+
+# ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq = vibrato(frequency);
+ } else {
+ freq = frequency;
+ }
+# else
+ freq = frequency;
+# endif
+ }
+
+ if (envelope_index < 65535) {
+ envelope_index++;
+ }
+
+ freq = voice_envelope(freq);
+
+ if (freq < 30.517578125) {
+ freq = 30.52;
+ }
+
+ TIMER_1_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER));
+ TIMER_1_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre);
+ }
+ }
+
+ if (playing_notes) {
+ if (note_frequency > 0) {
+# ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq = vibrato(note_frequency);
+ } else {
+ freq = note_frequency;
+ }
+# else
+ freq = note_frequency;
+# endif
+
+ if (envelope_index < 65535) {
+ envelope_index++;
+ }
+ freq = voice_envelope(freq);
+
+ TIMER_1_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER));
+ TIMER_1_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre);
+ } else {
+ TIMER_1_PERIOD = 0;
+ TIMER_1_DUTY_CYCLE = 0;
+ }
+
+ note_position++;
+ bool end_of_note = false;
+ if (TIMER_1_PERIOD > 0) {
+ if (!note_resting)
+ end_of_note = (note_position >= (note_length / TIMER_1_PERIOD * 0xFFFF - 1));
+ else
+ end_of_note = (note_position >= (note_length));
+ } else {
+ end_of_note = (note_position >= (note_length));
+ }
+
+ if (end_of_note) {
+ current_note++;
+ if (current_note >= notes_count) {
+ if (notes_repeat) {
+ current_note = 0;
+ } else {
+ DISABLE_AUDIO_COUNTER_1_ISR;
+ DISABLE_AUDIO_COUNTER_1_OUTPUT;
+ playing_notes = false;
+ return;
+ }
+ }
+ if (!note_resting) {
+ note_resting = true;
+ current_note--;
+ if ((*notes_pointer)[current_note][0] == (*notes_pointer)[current_note + 1][0]) {
+ note_frequency = 0;
+ note_length = 1;
+ } else {
+ note_frequency = (*notes_pointer)[current_note][0];
+ note_length = 1;
+ }
+ } else {
+ note_resting = false;
+ envelope_index = 0;
+ note_frequency = (*notes_pointer)[current_note][0];
+ note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100);
+ }
+
+ note_position = 0;
+ }
+ }
+
+ if (!audio_config.enable) {
+ playing_notes = false;
+ playing_note = false;
+ }
+# endif
+}
+#endif
+
+void play_note(float freq, int vol) {
+ dprintf("audio play note freq=%d vol=%d", (int)freq, vol);
+
+ if (!audio_initialized) {
+ audio_init();
+ }
+
+ if (audio_config.enable && voices < 8) {
+#ifdef CPIN_AUDIO
+ DISABLE_AUDIO_COUNTER_3_ISR;
+#endif
+#ifdef BPIN_AUDIO
+ DISABLE_AUDIO_COUNTER_1_ISR;
+#endif
+
+ // Cancel notes if notes are playing
+ if (playing_notes) stop_all_notes();
+
+ playing_note = true;
+
+ envelope_index = 0;
+
+ if (freq > 0) {
+ frequencies[voices] = freq;
+ volumes[voices] = vol;
+ voices++;
+ }
+
+#ifdef CPIN_AUDIO
+ ENABLE_AUDIO_COUNTER_3_ISR;
+ ENABLE_AUDIO_COUNTER_3_OUTPUT;
+#endif
+#ifdef BPIN_AUDIO
+# ifdef CPIN_AUDIO
+ if (voices > 1) {
+ ENABLE_AUDIO_COUNTER_1_ISR;
+ ENABLE_AUDIO_COUNTER_1_OUTPUT;
+ }
+# else
+ ENABLE_AUDIO_COUNTER_1_ISR;
+ ENABLE_AUDIO_COUNTER_1_OUTPUT;
+# endif
+#endif
+ }
+}
+
+void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat) {
+ if (!audio_initialized) {
+ audio_init();
+ }
+
+ if (audio_config.enable) {
+#ifdef CPIN_AUDIO
+ DISABLE_AUDIO_COUNTER_3_ISR;
+#endif
+#ifdef BPIN_AUDIO
+ DISABLE_AUDIO_COUNTER_1_ISR;
+#endif
+
+ // Cancel note if a note is playing
+ if (playing_note) stop_all_notes();
+
+ playing_notes = true;
+
+ notes_pointer = np;
+ notes_count = n_count;
+ notes_repeat = n_repeat;
+
+ place = 0;
+ current_note = 0;
+
+ note_frequency = (*notes_pointer)[current_note][0];
+ note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100);
+ note_position = 0;
+
+#ifdef CPIN_AUDIO
+ ENABLE_AUDIO_COUNTER_3_ISR;
+ ENABLE_AUDIO_COUNTER_3_OUTPUT;
+#endif
+#ifdef BPIN_AUDIO
+# ifndef CPIN_AUDIO
+ ENABLE_AUDIO_COUNTER_1_ISR;
+ ENABLE_AUDIO_COUNTER_1_OUTPUT;
+# endif
+#endif
+ }
+}
+
+bool is_playing_notes(void) { return playing_notes; }
+
+bool is_audio_on(void) { return (audio_config.enable != 0); }
+
+void audio_toggle(void) {
+ audio_config.enable ^= 1;
+ eeconfig_update_audio(audio_config.raw);
+ if (audio_config.enable) audio_on_user();
+}
+
+void audio_on(void) {
+ audio_config.enable = 1;
+ eeconfig_update_audio(audio_config.raw);
+ audio_on_user();
+ PLAY_SONG(audio_on_song);
+}
+
+void audio_off(void) {
+ PLAY_SONG(audio_off_song);
+ wait_ms(100);
+ stop_all_notes();
+ audio_config.enable = 0;
+ eeconfig_update_audio(audio_config.raw);
+}
+
+#ifdef VIBRATO_ENABLE
+
+// Vibrato rate functions
+
+void set_vibrato_rate(float rate) { vibrato_rate = rate; }
+
+void increase_vibrato_rate(float change) { vibrato_rate *= change; }
+
+void decrease_vibrato_rate(float change) { vibrato_rate /= change; }
+
+# ifdef VIBRATO_STRENGTH_ENABLE
+
+void set_vibrato_strength(float strength) { vibrato_strength = strength; }
+
+void increase_vibrato_strength(float change) { vibrato_strength *= change; }
+
+void decrease_vibrato_strength(float change) { vibrato_strength /= change; }
+
+# endif /* VIBRATO_STRENGTH_ENABLE */
+
+#endif /* VIBRATO_ENABLE */
+
+// Polyphony functions
+
+void set_polyphony_rate(float rate) { polyphony_rate = rate; }
+
+void enable_polyphony() { polyphony_rate = 5; }
+
+void disable_polyphony() { polyphony_rate = 0; }
+
+void increase_polyphony_rate(float change) { polyphony_rate *= change; }
+
+void decrease_polyphony_rate(float change) { polyphony_rate /= change; }
+
+// Timbre function
+
+void set_timbre(float timbre) { note_timbre = timbre; }
+
+// Tempo functions
+
+void set_tempo(uint8_t tempo) { note_tempo = tempo; }
+
+void decrease_tempo(uint8_t tempo_change) { note_tempo += tempo_change; }
+
+void increase_tempo(uint8_t tempo_change) {
+ if (note_tempo - tempo_change < 10) {
+ note_tempo = 10;
+ } else {
+ note_tempo -= tempo_change;
+ }
+}
diff --git a/quantum/audio/audio_chibios.c b/quantum/audio/audio_chibios.c
new file mode 100644
index 0000000000..377f93de5d
--- /dev/null
+++ b/quantum/audio/audio_chibios.c
@@ -0,0 +1,726 @@
+/* Copyright 2016 Jack Humbert
+ *
+ * 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/>.
+ */
+
+#include "audio.h"
+#include <ch.h>
+#include <hal.h>
+
+#include <string.h>
+#include "print.h"
+#include "keymap.h"
+
+#include "eeconfig.h"
+
+// -----------------------------------------------------------------------------
+
+int voices = 0;
+int voice_place = 0;
+float frequency = 0;
+float frequency_alt = 0;
+int volume = 0;
+long position = 0;
+
+float frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+bool sliding = false;
+
+float place = 0;
+
+uint8_t *sample;
+uint16_t sample_length = 0;
+
+bool playing_notes = false;
+bool playing_note = false;
+float note_frequency = 0;
+float note_length = 0;
+uint8_t note_tempo = TEMPO_DEFAULT;
+float note_timbre = TIMBRE_DEFAULT;
+uint16_t note_position = 0;
+float (*notes_pointer)[][2];
+uint16_t notes_count;
+bool notes_repeat;
+bool note_resting = false;
+
+uint16_t current_note = 0;
+uint8_t rest_counter = 0;
+
+#ifdef VIBRATO_ENABLE
+float vibrato_counter = 0;
+float vibrato_strength = .5;
+float vibrato_rate = 0.125;
+#endif
+
+float polyphony_rate = 0;
+
+static bool audio_initialized = false;
+
+audio_config_t audio_config;
+
+uint16_t envelope_index = 0;
+bool glissando = true;
+
+#ifndef STARTUP_SONG
+# define STARTUP_SONG SONG(STARTUP_SOUND)
+#endif
+float startup_song[][2] = STARTUP_SONG;
+
+static void gpt_cb8(GPTDriver *gptp);
+
+#define DAC_BUFFER_SIZE 100
+#ifndef DAC_SAMPLE_MAX
+# define DAC_SAMPLE_MAX 65535U
+#endif
+
+#define START_CHANNEL_1() \
+ gptStart(&GPTD6, &gpt6cfg1); \
+ gptStartContinuous(&GPTD6, 2U); \
+ palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG)
+
+#define START_CHANNEL_2() \
+ gptStart(&GPTD7, &gpt7cfg1); \
+ gptStartContinuous(&GPTD7, 2U); \
+ palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG)
+
+#define STOP_CHANNEL_1() \
+ gptStopTimer(&GPTD6); \
+ palSetPadMode(GPIOA, 4, PAL_MODE_OUTPUT_PUSHPULL); \
+ palSetPad(GPIOA, 4)
+
+#define STOP_CHANNEL_2() \
+ gptStopTimer(&GPTD7); \
+ palSetPadMode(GPIOA, 5, PAL_MODE_OUTPUT_PUSHPULL); \
+ palSetPad(GPIOA, 5)
+
+
+#define RESTART_CHANNEL_1() \
+ STOP_CHANNEL_1(); \
+ START_CHANNEL_1()
+#define RESTART_CHANNEL_2() \
+ STOP_CHANNEL_2(); \
+ START_CHANNEL_2()
+#define UPDATE_CHANNEL_1_FREQ(freq) \
+ gpt6cfg1.frequency = freq * DAC_BUFFER_SIZE; \
+ RESTART_CHANNEL_1()
+#define UPDATE_CHANNEL_2_FREQ(freq) \
+ gpt7cfg1.frequency = freq * DAC_BUFFER_SIZE; \
+ RESTART_CHANNEL_2()
+#define GET_CHANNEL_1_FREQ (uint16_t)(gpt6cfg1.frequency * DAC_BUFFER_SIZE)
+#define GET_CHANNEL_2_FREQ (uint16_t)(gpt7cfg1.frequency * DAC_BUFFER_SIZE)
+
+/*
+ * GPT6 configuration.
+ */
+// static const GPTConfig gpt6cfg1 = {
+// .frequency = 1000000U,
+// .callback = NULL,
+// .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */
+// .dier = 0U
+// };
+
+GPTConfig gpt6cfg1 = {.frequency = 440U * DAC_BUFFER_SIZE,
+ .callback = NULL,
+ .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */
+ .dier = 0U};
+
+GPTConfig gpt7cfg1 = {.frequency = 440U * DAC_BUFFER_SIZE,
+ .callback = NULL,
+ .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */
+ .dier = 0U};
+
+GPTConfig gpt8cfg1 = {.frequency = 10,
+ .callback = gpt_cb8,
+ .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */
+ .dier = 0U};
+
+/*
+ * DAC test buffer (sine wave).
+ */
+// static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = {
+// 2047, 2082, 2118, 2154, 2189, 2225, 2260, 2296, 2331, 2367, 2402, 2437,
+// 2472, 2507, 2542, 2576, 2611, 2645, 2679, 2713, 2747, 2780, 2813, 2846,
+// 2879, 2912, 2944, 2976, 3008, 3039, 3070, 3101, 3131, 3161, 3191, 3221,
+// 3250, 3278, 3307, 3335, 3362, 3389, 3416, 3443, 3468, 3494, 3519, 3544,
+// 3568, 3591, 3615, 3637, 3660, 3681, 3703, 3723, 3744, 3763, 3782, 3801,
+// 3819, 3837, 3854, 3870, 3886, 3902, 3917, 3931, 3944, 3958, 3970, 3982,
+// 3993, 4004, 4014, 4024, 4033, 4041, 4049, 4056, 4062, 4068, 4074, 4078,
+// 4082, 4086, 4089, 4091, 4092, 4093, 4094, 4093, 4092, 4091, 4089, 4086,
+// 4082, 4078, 4074, 4068, 4062, 4056, 4049, 4041, 4033, 4024, 4014, 4004,
+// 3993, 3982, 3970, 3958, 3944, 3931, 3917, 3902, 3886, 3870, 3854, 3837,
+// 3819, 3801, 3782, 3763, 3744, 3723, 3703, 3681, 3660, 3637, 3615, 3591,
+// 3568, 3544, 3519, 3494, 3468, 3443, 3416, 3389, 3362, 3335, 3307, 3278,
+// 3250, 3221, 3191, 3161, 3131, 3101, 3070, 3039, 3008, 2976, 2944, 2912,
+// 2879, 2846, 2813, 2780, 2747, 2713, 2679, 2645, 2611, 2576, 2542, 2507,
+// 2472, 2437, 2402, 2367, 2331, 2296, 2260, 2225, 2189, 2154, 2118, 2082,
+// 2047, 2012, 1976, 1940, 1905, 1869, 1834, 1798, 1763, 1727, 1692, 1657,
+// 1622, 1587, 1552, 1518, 1483, 1449, 1415, 1381, 1347, 1314, 1281, 1248,
+// 1215, 1182, 1150, 1118, 1086, 1055, 1024, 993, 963, 933, 903, 873,
+// 844, 816, 787, 759, 732, 705, 678, 651, 626, 600, 575, 550,
+// 526, 503, 479, 457, 434, 413, 391, 371, 350, 331, 312, 293,
+// 275, 257, 240, 224, 208, 192, 177, 163, 150, 136, 124, 112,
+// 101, 90, 80, 70, 61, 53, 45, 38, 32, 26, 20, 16,
+// 12, 8, 5, 3, 2, 1, 0, 1, 2, 3, 5, 8,
+// 12, 16, 20, 26, 32, 38, 45, 53, 61, 70, 80, 90,
+// 101, 112, 124, 136, 150, 163, 177, 192, 208, 224, 240, 257,
+// 275, 293, 312, 331, 350, 371, 391, 413, 434, 457, 479, 503,
+// 526, 550, 575, 600, 626, 651, 678, 705, 732, 759, 787, 816,
+// 844, 873, 903, 933, 963, 993, 1024, 1055, 1086, 1118, 1150, 1182,
+// 1215, 1248, 1281, 1314, 1347, 1381, 1415, 1449, 1483, 1518, 1552, 1587,
+// 1622, 1657, 1692, 1727, 1763, 1798, 1834, 1869, 1905, 1940, 1976, 2012
+// };
+
+// static const dacsample_t dac_buffer_2[DAC_BUFFER_SIZE] = {
+// 12, 8, 5, 3, 2, 1, 0, 1, 2, 3, 5, 8,
+// 12, 16, 20, 26, 32, 38, 45, 53, 61, 70, 80, 90,
+// 101, 112, 124, 136, 150, 163, 177, 192, 208, 224, 240, 257,
+// 275, 293, 312, 331, 350, 371, 391, 413, 434, 457, 479, 503,
+// 526, 550, 575, 600, 626, 651, 678, 705, 732, 759, 787, 816,
+// 844, 873, 903, 933, 963, 993, 1024, 1055, 1086, 1118, 1150, 1182,
+// 1215, 1248, 1281, 1314, 1347, 1381, 1415, 1449, 1483, 1518, 1552, 1587,
+// 1622, 1657, 1692, 1727, 1763, 1798, 1834, 1869, 1905, 1940, 1976, 2012,
+// 2047, 2082, 2118, 2154, 2189, 2225, 2260, 2296, 2331, 2367, 2402, 2437,
+// 2472, 2507, 2542, 2576, 2611, 2645, 2679, 2713, 2747, 2780, 2813, 2846,
+// 2879, 2912, 2944, 2976, 3008, 3039, 3070, 3101, 3131, 3161, 3191, 3221,
+// 3250, 3278, 3307, 3335, 3362, 3389, 3416, 3443, 3468, 3494, 3519, 3544,
+// 3568, 3591, 3615, 3637, 3660, 3681, 3703, 3723, 3744, 3763, 3782, 3801,
+// 3819, 3837, 3854, 3870, 3886, 3902, 3917, 3931, 3944, 3958, 3970, 3982,
+// 3993, 4004, 4014, 4024, 4033, 4041, 4049, 4056, 4062, 4068, 4074, 4078,
+// 4082, 4086, 4089, 4091, 4092, 4093, 4094, 4093, 4092, 4091, 4089, 4086,
+// 4082, 4078, 4074, 4068, 4062, 4056, 4049, 4041, 4033, 4024, 4014, 4004,
+// 3993, 3982, 3970, 3958, 3944, 3931, 3917, 3902, 3886, 3870, 3854, 3837,
+// 3819, 3801, 3782, 3763, 3744, 3723, 3703, 3681, 3660, 3637, 3615, 3591,
+// 3568, 3544, 3519, 3494, 3468, 3443, 3416, 3389, 3362, 3335, 3307, 3278,
+// 3250, 3221, 3191, 3161, 3131, 3101, 3070, 3039, 3008, 2976, 2944, 2912,
+// 2879, 2846, 2813, 2780, 2747, 2713, 2679, 2645, 2611, 2576, 2542, 2507,
+// 2472, 2437, 2402, 2367, 2331, 2296, 2260, 2225, 2189, 2154, 2118, 2082,
+// 2047, 2012, 1976, 1940, 1905, 1869, 1834, 1798, 1763, 1727, 1692, 1657,
+// 1622, 1587, 1552, 1518, 1483, 1449, 1415, 1381, 1347, 1314, 1281, 1248,
+// 1215, 1182, 1150, 1118, 1086, 1055, 1024, 993, 963, 933, 903, 873,
+// 844, 816, 787, 759, 732, 705, 678, 651, 626, 600, 575, 550,
+// 526, 503, 479, 457, 434, 413, 391, 371, 350, 331, 312, 293,
+// 275, 257, 240, 224, 208, 192, 177, 163, 150, 136, 124, 112,
+// 101, 90, 80, 70, 61, 53, 45, 38, 32, 26, 20, 16
+// };
+
+// squarewave
+static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = {
+ // First half is max, second half is 0
+ [0 ... DAC_BUFFER_SIZE / 2 - 1] = DAC_SAMPLE_MAX,
+ [DAC_BUFFER_SIZE / 2 ... DAC_BUFFER_SIZE - 1] = 0,
+};
+
+// squarewave
+static const dacsample_t dac_buffer_2[DAC_BUFFER_SIZE] = {
+ // opposite of dac_buffer above
+ [0 ... DAC_BUFFER_SIZE / 2 - 1] = 0,
+ [DAC_BUFFER_SIZE / 2 ... DAC_BUFFER_SIZE - 1] = DAC_SAMPLE_MAX,
+};
+
+/*
+ * DAC streaming callback.
+ */
+size_t nz = 0;
+static void end_cb1(DACDriver *dacp) {
+ (void)dacp;
+
+ nz++;
+ if ((nz % 1000) == 0) {
+ // palTogglePad(GPIOD, GPIOD_LED3);
+ }
+}
+
+/*
+ * DAC error callback.
+ */
+static void error_cb1(DACDriver *dacp, dacerror_t err) {
+ (void)dacp;
+ (void)err;
+
+ chSysHalt("DAC failure");
+}
+
+static const DACConfig dac1cfg1 = {.init = DAC_SAMPLE_MAX, .datamode = DAC_DHRM_12BIT_RIGHT};
+
+static const DACConversionGroup dacgrpcfg1 = {.num_channels = 1U, .end_cb = end_cb1, .error_cb = error_cb1, .trigger = DAC_TRG(0)};
+
+static const DACConfig dac1cfg2 = {.init = DAC_SAMPLE_MAX, .datamode = DAC_DHRM_12BIT_RIGHT};
+
+static const DACConversionGroup dacgrpcfg2 = {.num_channels = 1U, .end_cb = end_cb1, .error_cb = error_cb1, .trigger = DAC_TRG(0)};
+
+void audio_init() {
+ if (audio_initialized) {
+ return;
+ }
+
+// Check EEPROM
+#ifdef EEPROM_ENABLE
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ audio_config.raw = eeconfig_read_audio();
+#else // ARM EEPROM
+ audio_config.enable = true;
+# ifdef AUDIO_CLICKY_ON
+ audio_config.clicky_enable = true;
+# endif
+#endif // ARM EEPROM
+
+ /*
+ * Starting DAC1 driver, setting up the output pin as analog as suggested
+ * by the Reference Manual.
+ */
+ palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
+ palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG);
+ dacStart(&DACD1, &dac1cfg1);
+ dacStart(&DACD2, &dac1cfg2);
+
+ /*
+ * Start the note timer
+ */
+ gptStart(&GPTD8, &gpt8cfg1);
+ gptStartContinuous(&GPTD8, 2U);
+
+ /*
+ * Starting GPT6/7 driver, it is used for triggering the DAC.
+ */
+ START_CHANNEL_1();
+ START_CHANNEL_2();
+
+ /*
+ * Starting a continuous conversion.
+ */
+ dacStartConversion(&DACD1, &dacgrpcfg1, (dacsample_t *)dac_buffer, DAC_BUFFER_SIZE);
+ dacStartConversion(&DACD2, &dacgrpcfg2, (dacsample_t *)dac_buffer_2, DAC_BUFFER_SIZE);
+
+ audio_initialized = true;
+
+ stop_all_notes();
+}
+
+void audio_startup() {
+ if (audio_config.enable) {
+ PLAY_SONG(startup_song);
+ }
+}
+
+void stop_all_notes() {
+ dprintf("audio stop all notes");
+
+ if (!audio_initialized) {
+ audio_init();
+ }
+ voices = 0;
+
+ gptStopTimer(&GPTD6);
+ gptStopTimer(&GPTD7);
+ gptStopTimer(&GPTD8);
+
+ playing_notes = false;
+ playing_note = false;
+ frequency = 0;
+ frequency_alt = 0;
+ volume = 0;
+
+ for (uint8_t i = 0; i < 8; i++) {
+ frequencies[i] = 0;
+ volumes[i] = 0;
+ }
+}
+
+void stop_note(float freq) {
+ dprintf("audio stop note freq=%d", (int)freq);
+
+ if (playing_note) {
+ if (!audio_initialized) {
+ audio_init();
+ }
+ for (int i = 7; i >= 0; i--) {
+ if (frequencies[i] == freq) {
+ frequencies[i] = 0;
+ volumes[i] = 0;
+ for (int j = i; (j < 7); j++) {
+ frequencies[j] = frequencies[j + 1];
+ frequencies[j + 1] = 0;
+ volumes[j] = volumes[j + 1];
+ volumes[j + 1] = 0;
+ }
+ break;
+ }
+ }
+ voices--;
+ if (voices < 0) {
+ voices = 0;
+ }
+ if (voice_place >= voices) {
+ voice_place = 0;
+ }
+ if (voices == 0) {
+ STOP_CHANNEL_1();
+ STOP_CHANNEL_2();
+ gptStopTimer(&GPTD8);
+ frequency = 0;
+ frequency_alt = 0;
+ volume = 0;
+ playing_note = false;
+ }
+ }
+}
+
+#ifdef VIBRATO_ENABLE
+
+float mod(float a, int b) {
+ float r = fmod(a, b);
+ return r < 0 ? r + b : r;
+}
+
+float vibrato(float average_freq) {
+# ifdef VIBRATO_STRENGTH_ENABLE
+ float vibrated_freq = average_freq * pow(vibrato_lut[(int)vibrato_counter], vibrato_strength);
+# else
+ float vibrated_freq = average_freq * vibrato_lut[(int)vibrato_counter];
+# endif
+ vibrato_counter = mod((vibrato_counter + vibrato_rate * (1.0 + 440.0 / average_freq)), VIBRATO_LUT_LENGTH);
+ return vibrated_freq;
+}
+
+#endif
+
+static void gpt_cb8(GPTDriver *gptp) {
+ float freq;
+
+ if (playing_note) {
+ if (voices > 0) {
+ float freq_alt = 0;
+ if (voices > 1) {
+ if (polyphony_rate == 0) {
+ if (glissando) {
+ if (frequency_alt != 0 && frequency_alt < frequencies[voices - 2] && frequency_alt < frequencies[voices - 2] * pow(2, -440 / frequencies[voices - 2] / 12 / 2)) {
+ frequency_alt = frequency_alt * pow(2, 440 / frequency_alt / 12 / 2);
+ } else if (frequency_alt != 0 && frequency_alt > frequencies[voices - 2] && frequency_alt > frequencies[voices - 2] * pow(2, 440 / frequencies[voices - 2] / 12 / 2)) {
+ frequency_alt = frequency_alt * pow(2, -440 / frequency_alt / 12 / 2);
+ } else {
+ frequency_alt = frequencies[voices - 2];
+ }
+ } else {
+ frequency_alt = frequencies[voices - 2];
+ }
+
+#ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq_alt = vibrato(frequency_alt);
+ } else {
+ freq_alt = frequency_alt;
+ }
+#else
+ freq_alt = frequency_alt;
+#endif
+ }
+
+ if (envelope_index < 65535) {
+ envelope_index++;
+ }
+
+ freq_alt = voice_envelope(freq_alt);
+
+ if (freq_alt < 30.517578125) {
+ freq_alt = 30.52;
+ }
+
+ if (GET_CHANNEL_2_FREQ != (uint16_t)freq_alt) {
+ UPDATE_CHANNEL_2_FREQ(freq_alt);
+ } else {
+ RESTART_CHANNEL_2();
+ }
+ // note_timbre;
+ }
+
+ if (polyphony_rate > 0) {
+ if (voices > 1) {
+ voice_place %= voices;
+ if (place++ > (frequencies[voice_place] / polyphony_rate)) {
+ voice_place = (voice_place + 1) % voices;
+ place = 0.0;
+ }
+ }
+
+#ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq = vibrato(frequencies[voice_place]);
+ } else {
+ freq = frequencies[voice_place];
+ }
+#else
+ freq = frequencies[voice_place];
+#endif
+ } else {
+ if (glissando) {
+ if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440 / frequencies[voices - 1] / 12 / 2)) {
+ frequency = frequency * pow(2, 440 / frequency / 12 / 2);
+ } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440 / frequencies[voices - 1] / 12 / 2)) {
+ frequency = frequency * pow(2, -440 / frequency / 12 / 2);
+ } else {
+ frequency = frequencies[voices - 1];
+ }
+ } else {
+ frequency = frequencies[voices - 1];
+ }
+
+#ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq = vibrato(frequency);
+ } else {
+ freq = frequency;
+ }
+#else
+ freq = frequency;
+#endif
+ }
+
+ if (envelope_index < 65535) {
+ envelope_index++;
+ }
+
+ freq = voice_envelope(freq);
+
+ if (freq < 30.517578125) {
+ freq = 30.52;
+ }
+
+ if (GET_CHANNEL_1_FREQ != (uint16_t)freq) {
+ UPDATE_CHANNEL_1_FREQ(freq);
+ } else {
+ RESTART_CHANNEL_1();
+ }
+ // note_timbre;
+ }
+ }
+
+ if (playing_notes) {
+ if (note_frequency > 0) {
+#ifdef VIBRATO_ENABLE
+ if (vibrato_strength > 0) {
+ freq = vibrato(note_frequency);
+ } else {
+ freq = note_frequency;
+ }
+#else
+ freq = note_frequency;
+#endif
+
+ if (envelope_index < 65535) {
+ envelope_index++;
+ }
+ freq = voice_envelope(freq);
+
+ if (GET_CHANNEL_1_FREQ != (uint16_t)freq) {
+ UPDATE_CHANNEL_1_FREQ(freq);
+ UPDATE_CHANNEL_2_FREQ(freq);
+ }
+ // note_timbre;
+ } else {
+ // gptStopTimer(&GPTD6);
+ // gptStopTimer(&GPTD7);
+ }
+
+ note_position++;
+ bool end_of_note = false;
+ if (GET_CHANNEL_1_FREQ > 0) {
+ if (!note_resting)
+ end_of_note = (note_position >= (note_length * 8 - 1));
+ else
+ end_of_note = (note_position >= (note_length * 8));
+ } else {
+ end_of_note = (note_position >= (note_length * 8));
+ }
+
+ if (end_of_note) {
+ current_note++;
+ if (current_note >= notes_count) {
+ if (notes_repeat) {
+ current_note = 0;
+ } else {
+ STOP_CHANNEL_1();
+ STOP_CHANNEL_2();
+ // gptStopTimer(&GPTD8);
+ playing_notes = false;
+ return;
+ }
+ }
+ if (!note_resting) {
+ note_resting = true;
+ current_note--;
+ if ((*notes_pointer)[current_note][0] == (*notes_pointer)[current_note + 1][0]) {
+ note_frequency = 0;
+ note_length = 1;
+ } else {
+ note_frequency = (*notes_pointer)[current_note][0];
+ note_length = 1;
+ }
+ } else {
+ note_resting = false;
+ envelope_index = 0;
+ note_frequency = (*notes_pointer)[current_note][0];
+ note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100);
+ }
+
+ note_position = 0;
+ }
+ }
+
+ if (!audio_config.enable) {
+ playing_notes = false;
+ playing_note = false;
+ }
+}
+
+void play_note(float freq, int vol) {
+ dprintf("audio play note freq=%d vol=%d", (int)freq, vol);
+
+ if (!audio_initialized) {
+ audio_init();
+ }
+
+ if (audio_config.enable && voices < 8) {
+ // Cancel notes if notes are playing
+ if (playing_notes) {
+ stop_all_notes();
+ }
+
+ playing_note = true;
+
+ envelope_index = 0;
+
+ if (freq > 0) {
+ frequencies[voices] = freq;
+ volumes[voices] = vol;
+ voices++;
+ }
+
+ gptStart(&GPTD8, &gpt8cfg1);
+ gptStartContinuous(&GPTD8, 2U);
+ RESTART_CHANNEL_1();
+ RESTART_CHANNEL_2();
+ }
+}
+
+void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat) {
+ if (!audio_initialized) {
+ audio_init();
+ }
+
+ if (audio_config.enable) {
+ // Cancel note if a note is playing
+ if (playing_note) {
+ stop_all_notes();
+ }
+
+ playing_notes = true;
+
+ notes_pointer = np;
+ notes_count = n_count;
+ notes_repeat = n_repeat;
+
+ place = 0;
+ current_note = 0;
+
+ note_frequency = (*notes_pointer)[current_note][0];
+ note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100);
+ note_position = 0;
+
+ gptStart(&GPTD8, &gpt8cfg1);
+ gptStartContinuous(&GPTD8, 2U);
+ RESTART_CHANNEL_1();
+ RESTART_CHANNEL_2();
+ }
+}
+
+bool is_playing_notes(void) { return playing_notes; }
+
+bool is_audio_on(void) { return (audio_config.enable != 0); }
+
+void audio_toggle(void) {
+ if (audio_config.enable) {
+ stop_all_notes();
+ }
+ audio_config.enable ^= 1;
+ eeconfig_update_audio(audio_config.raw);
+ if (audio_config.enable) {
+ audio_on_user();
+ }
+}
+
+void audio_on(void) {
+ audio_config.enable = 1;
+ eeconfig_update_audio(audio_config.raw);
+ audio_on_user();
+}
+
+void audio_off(void) {
+ stop_all_notes();
+ audio_config.enable = 0;
+ eeconfig_update_audio(audio_config.raw);
+}
+
+#ifdef VIBRATO_ENABLE
+
+// Vibrato rate functions
+
+void set_vibrato_rate(float rate) { vibrato_rate = rate; }
+
+void increase_vibrato_rate(float change) { vibrato_rate *= change; }
+
+void decrease_vibrato_rate(float change) { vibrato_rate /= change; }
+
+# ifdef VIBRATO_STRENGTH_ENABLE
+
+void set_vibrato_strength(float strength) { vibrato_strength = strength; }
+
+void increase_vibrato_strength(float change) { vibrato_strength *= change; }
+
+void decrease_vibrato_strength(float change) { vibrato_strength /= change; }
+
+# endif /* VIBRATO_STRENGTH_ENABLE */
+
+#endif /* VIBRATO_ENABLE */
+
+// Polyphony functions
+
+void set_polyphony_rate(float rate) { polyphony_rate = rate; }
+
+void enable_polyphony() { polyphony_rate = 5; }
+
+void disable_polyphony() { polyphony_rate = 0; }
+
+void increase_polyphony_rate(float change) { polyphony_rate *= change; }
+
+void decrease_polyphony_rate(float change) { polyphony_rate /= change; }
+
+// Timbre function
+
+void set_timbre(float timbre) { note_timbre = timbre; }
+
+// Tempo functions
+
+void set_tempo(uint8_t tempo) { note_tempo = tempo; }
+
+void decrease_tempo(uint8_t tempo_change) { note_tempo += tempo_change; }
+
+void increase_tempo(uint8_t tempo_change) {
+ if (note_tempo - tempo_change < 10) {
+ note_tempo = 10;
+ } else {
+ note_tempo -= tempo_change;
+ }
+}
diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c
index 1c08a3af36..eb860a7ef4 100644
--- a/quantum/audio/voices.c
+++ b/quantum/audio/voices.c
@@ -263,7 +263,7 @@ float voice_envelope(float frequency) {
case 0 ... VOICE_VIBRATO_DELAY:
break;
default:
- // TODO: merge/replace with voice_add_vibrato above
+
frequency = frequency * vibrato_lut[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1)) / 1000 * VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)];
break;
}
diff --git a/quantum/audio/voices.h b/quantum/audio/voices.h
index fcab9db556..de3c6db21e 100644
--- a/quantum/audio/voices.h
+++ b/quantum/audio/voices.h
@@ -14,6 +14,7 @@
* 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 <stdint.h>
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c
index 01be9806e4..6a33d14374 100644
--- a/quantum/dynamic_keymap.c
+++ b/quantum/dynamic_keymap.c
@@ -16,8 +16,9 @@
#include "keymap.h" // to get keymaps[][][]
#include "eeprom.h"
-#include "progmem.h" // to read default from flash
-#include "quantum.h" // for send_string()
+#include "progmem.h" // to read default from flash
+#include "quantum.h" // for send_string()
+#include "eeconfig.h"
#include "dynamic_keymap.h"
#ifdef VIA_ENABLE
diff --git a/quantum/keymap_extras/keymap_belgian.h b/quantum/keymap_extras/keymap_belgian.h
index 207905b291..b65db0532b 100644
--- a/quantum/keymap_extras/keymap_belgian.h
+++ b/quantum/keymap_extras/keymap_belgian.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ² │ & │ é │ " │ ' │ ( │ § │ è │ ! │ ç │ à │ ) │ - │ │
+ * │ ² │ & │ é │ " │ ' │ ( │ § │ è │ ! │ ç │ à │ ) │ - │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ $ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ ù │ µ │ │
+ * │     │ 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 │ , │ ; │ : │ = │ │
+ * │    │ < │ W │ X │ C │ V │ B │ N │ , │ ; │ : │ = │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ³ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ _ │ │
+ * │ ³ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ _ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ * │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ % │ £ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ ¨ │ * │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ % │ £ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ ? │ . │ / │ + │ │
+ * │    │ > │   │   │   │   │   │   │ ? │ . │ / │ + │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -128,15 +128,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ | │ @ │ # │ │ │ ^ │ │ │ { │ } │ │ │ │
+ * │   │ | │ @ │ # │   │   │ ^ │   │   │ { │ } │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ € │ │ │ │ │ │ │ │ [ │ ] │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ ´ │ ` │ │
+ * │     │   │   │ € │   │   │   │   │   │   │   │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ ´ │ ` │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ \ │ │ │ │ │ │ │ │ │ │ ~ │ │
+ * │    │ \ │   │   │   │   │   │   │   │   │   │ ~ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -156,3 +156,16 @@
// Row 4
#define BE_BSLS ALGR(BE_LABK) // (backslash)
#define BE_TILD ALGR(BE_EQL) // ~
+
+// DEPRECATED
+#define BE_AMP BE_AMPR
+#define BE_APOS BE_QUOT
+#define BE_PARA BE_SECT
+#define BE_MU BE_MICR
+#define BE_LESS BE_LABK
+#define BE_OVRR BE_DEG
+#define BE_UMLT BE_DIAE
+#define BE_GRTR BE_RABK
+#define BE_LSBR BE_LBRC
+#define BE_RSBR BE_RBRC
+#define BE_TILT BE_TILD
diff --git a/quantum/keymap_extras/keymap_bepo.h b/quantum/keymap_extras/keymap_bepo.h
index 6361823242..dc3bcda5a2 100644
--- a/quantum/keymap_extras/keymap_bepo.h
+++ b/quantum/keymap_extras/keymap_bepo.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ $ │ " │ « │ » │ ( │ ) │ @ │ + │ - │ / │ * │ = │ % │ │
+ * │ $ │ " │ « │ » │ ( │ ) │ @ │ + │ - │ / │ * │ = │ % │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ B │ É │ P │ O │ È │ ^ │ V │ D │ L │ J │ Z │ W │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ A │ U │ I │ E │ , │ C │ T │ S │ R │ N │ M │ Ç │ │
+ * │     │ 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 │ │
+ * │    │ Ê │ À │ Y │ X │ . │ K │ ' │ Q │ G │ H │ F │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ ` │ │
+ * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ ` │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ ! │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ ; │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │ ! │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │ ; │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ : │ │ ? │ │ │ │ │ │
+ * │    │   │   │   │   │ : │   │ ? │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -121,19 +121,19 @@
#define BP_COLN S(BP_DOT) // :
#define BP_QUES S(BP_QUOT) // ?
// Row 5
-#define BP_NBSP S(KC_SPC) //   (non-breaking space)
+#define BP_NBSP S(KC_SPC) // (non-breaking space)
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ – │ — │ < │ > │ [ │ ] │ ^ │ ± │ − │ ÷ │ × │ ≠ │ ‰ │ │
+ * │ – │ — │ < │ > │ [ │ ] │ ^ │ ± │ − │ ÷ │ × │ ≠ │ ‰ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ | │ ´ │ & │ Œ │ ` │ ¡ │ ˇ │ Ð │ / │ IJ │ Ə │ ˘ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ Æ │ Ù │ ¨ │ € │ │ © │ Þ │ ẞ │ ® │ ~ │ ¯ │ ¸ │ │
+ * │     │ | │ ´ │ & │ Œ │ ` │ ¡ │ ˇ │ Ð │ / │ IJ │ Ə │ ˘ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ Æ │ Ù │ ¨ │ € │   │ © │ Þ │ ẞ │ ® │ ~ │ ¯ │ ¸ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ \ │ { │ } │ … │ ~ │ ¿ │ ° │ │ † │ ˛ │ │
+ * │    │   │ \ │ { │ } │ … │ ~ │ ¿ │ ° │   │ † │ ˛ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ _ │ │ │ │ │
+ * │    │    │    │           _            │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -181,7 +181,7 @@
#define BP_RCBR ALGR(BP_X) // }
#define BP_ELLP ALGR(BP_DOT) // …
#define BP_TILD ALGR(BP_K) // ~
-#define BP_IQUE ALGR(BP_QUES) // ¿
+#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) // †
@@ -191,15 +191,15 @@
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ¶ │ „ │ “ │ ” │ ≤ │ ≥ │ │ ¬ │ ¼ │ ½ │ ¾ │ ′ │ ″ │ │
+ * │ ¶ │ „ │ “ │ ” │ ≤ │ ≥ │   │ ¬ │ ¼ │ ½ │ ¾ │ ′ │ ″ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ ¦ │ ˝ │ § │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ ˙ │ ¤ │ ̛ │ ſ │ │ │ ™ │ │ º │ , │ │
+ * │     │ ¦ │ ˝ │ § │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │ ˙ │ ¤ │ ̛  │ ſ │   │   │ ™ │   │ º │ , │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ ‘ │ ’ │ · │ ⌨ │ ̉ │ ̣ │ │ ‡ │ ª │ │
+ * │    │   │   │ ‘ │ ’ │ · │ ⌨ │ ̉  │ ̣  │   │ ‡ │ ª │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_br_abnt2.h b/quantum/keymap_extras/keymap_br_abnt2.h
new file mode 100644
index 0000000000..9d83fdf4e3
--- /dev/null
+++ b/quantum/keymap_extras/keymap_br_abnt2.h
@@ -0,0 +1,180 @@
+/* Copyright 2017 Potiguar Faga
+ *
+ * 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 │ 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 BR_QUOT KC_GRV // '
+#define BR_1 KC_1 // 1
+#define BR_2 KC_2 // 2
+#define BR_3 KC_3 // 3
+#define BR_4 KC_4 // 4
+#define BR_5 KC_5 // 5
+#define BR_6 KC_6 // 6
+#define BR_7 KC_7 // 7
+#define BR_8 KC_8 // 8
+#define BR_9 KC_9 // 9
+#define BR_0 KC_0 // 0
+#define BR_MINS KC_MINS // -
+#define BR_EQL KC_EQL // =
+// Row 2
+#define BR_Q KC_Q // Q
+#define BR_W KC_W // W
+#define BR_E KC_E // E
+#define BR_R KC_R // R
+#define BR_T KC_T // T
+#define BR_Y KC_Y // Y
+#define BR_U KC_U // U
+#define BR_I KC_I // I
+#define BR_O KC_O // O
+#define BR_P KC_P // P
+#define BR_ACUT KC_LBRC // ´ (dead)
+#define BR_LBRC KC_RBRC // [
+// Row 3
+#define BR_A KC_A // A
+#define BR_S KC_S // S
+#define BR_D KC_D // D
+#define BR_F KC_F // F
+#define BR_G KC_G // G
+#define BR_H KC_H // H
+#define BR_J KC_J // J
+#define BR_K KC_K // K
+#define BR_L KC_L // L
+#define BR_CCED KC_SCLN // Ç
+#define BR_TILD KC_QUOT // ~ (dead)
+#define BR_RBRC KC_BSLS // ]
+// Row 4
+#define BR_BSLS KC_NUBS // (backslash)
+#define BR_Z KC_Z // Z
+#define BR_X KC_X // X
+#define BR_C KC_C // C
+#define BR_V KC_V // V
+#define BR_B KC_B // B
+#define BR_N KC_N // N
+#define BR_M KC_M // M
+#define BR_COMM KC_COMM // ,
+#define BR_DOT KC_DOT // .
+#define BR_SCLN KC_SLSH // ;
+#define BR_SLSH KC_INT1 // /
+// Numpad
+#define BR_PDOT KC_PCMM // .
+#define BR_PCMM KC_PDOT // ,
+
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ " │ ! │ @ │ # │ $ │ % │ ¨ │ & │ * │ ( │ ) │ _ │ + │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │   │   │   │   │   │   │   │   │   │   │ ` │ { │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ ^ │ } │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+ * │    │ | │   │   │   │   │   │   │   │ < │ > │ : │ ? │      │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define BR_DQUO S(BR_QUOT) // "
+#define BR_EXLM S(BR_1) // !
+#define BR_AT S(BR_2) // @
+#define BR_HASH S(BR_3) // #
+#define BR_DLR S(BR_4) // $
+#define BR_PERC S(BR_5) // %
+#define BR_DIAE S(BR_6) // ¨ (dead)
+#define BR_AMPR S(BR_7) // &
+#define BR_ASTR S(BR_8) // *
+#define BR_LPRN S(BR_9) // (
+#define BR_RPRN S(BR_0) // )
+#define BR_UNDS S(BR_MINS) // _
+#define BR_PLUS S(BR_EQL) // +
+// Row 2
+#define BR_GRV S(BR_ACUT) // ` (dead)
+#define BR_LCBR S(BR_LBRC) // {
+// Row 3
+#define BR_CIRC S(BR_TILD) // ^ (dead)
+#define BR_RCBR S(BR_RBRC) // }
+// Row 4
+#define BR_PIPE S(BR_BSLS) // |
+#define BR_LABK S(BR_COMM) // <
+#define BR_RABK S(BR_DOT) // >
+#define BR_COLN S(BR_SCLN) // :
+#define BR_QUES S(BR_SLSH) // ?
+
+/* AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │   │ ¹ │ ² │ ³ │ £ │ ¢ │ ¬ │   │   │   │   │   │ § │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │   │   │ ° │   │   │   │   │   │   │   │   │ ª │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ º │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+ * │    │   │   │   │ ₢ │   │   │   │   │   │   │   │   │      │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define BR_SUP1 ALGR(BR_1) // ¹
+#define BR_SUP2 ALGR(BR_2) // ²
+#define BR_SUP3 ALGR(BR_3) // ³
+#define BR_PND ALGR(BR_4) // £
+#define BR_CENT ALGR(BR_5) // ¢
+#define BR_NOT ALGR(BR_6) // ¬
+#define BR_SECT ALGR(BR_EQL) // §
+// Row 2
+#define BR_DEG ALGR(BR_E) // °
+#define BR_FORD ALGR(BR_LBRC) // ª
+// Row 3
+#define BR_MORD ALGR(BR_RBRC) // º
+// Row 4
+#define BR_CRUZ ALGR(BR_C) // ₢
+
+// DEPRECATED
+#define BR_CCDL BR_CCED
+#define BR_DQT BR_DQUO
+#define BR_TRMA BR_DIAE
+#define BR_GRAV BR_GRV
+#define BR_KPDT BR_PDOT
+#define BR_KPCM BR_PCMM
+#define BR_1UP BR_SUP1
+#define BR_2UP BR_SUP2
+#define BR_3UP BR_SUP3
+#define BR_ASLS BR_SLSH
+#define BR_AQST BR_QUES
+
+// Not present on Windows 10?
+#define BR_NDTD ALGR(BR_TILD) // ~
+#define BR_NDAC ALGR(BR_ACUT) // ´
+#define BR_NDGV ALGR(BR_QUOT) // `
+#define BR_NDCR ALGR(BR_CIRC) // ^
+#define BR_NDTR ALGR(BR_DIAE) // ¨
diff --git a/quantum/keymap_extras/keymap_brazilian_abnt2.h b/quantum/keymap_extras/keymap_brazilian_abnt2.h
index b5892183be..24bfdd1de4 100644
--- a/quantum/keymap_extras/keymap_brazilian_abnt2.h
+++ b/quantum/keymap_extras/keymap_brazilian_abnt2.h
@@ -158,3 +158,23 @@
#define BR_MORD ALGR(BR_RBRC) // º
// Row 4
#define BR_CRUZ ALGR(BR_C) // ₢
+
+// DEPRECATED
+#define BR_CCDL BR_CCED
+#define BR_DQT BR_DQUO
+#define BR_TRMA BR_DIAE
+#define BR_GRAV BR_GRV
+#define BR_KPDT BR_PDOT
+#define BR_KPCM BR_PCMM
+#define BR_1UP BR_SUP1
+#define BR_2UP BR_SUP2
+#define BR_3UP BR_SUP3
+#define BR_ASLS BR_SLSH
+#define BR_AQST BR_QUES
+
+// Not present on Windows 10?
+#define BR_NDTD ALGR(BR_TILD) // ~
+#define BR_NDAC ALGR(BR_ACUT) // ´
+#define BR_NDGV ALGR(BR_QUOT) // `
+#define BR_NDCR ALGR(BR_CIRC) // ^
+#define BR_NDTR ALGR(BR_DIAE) // ¨
diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h
index e328cf65e6..d86a96086c 100644
--- a/quantum/keymap_extras/keymap_canadian_multilingual.h
+++ b/quantum/keymap_extras/keymap_canadian_multilingual.h
@@ -220,7 +220,7 @@
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
-#define CA_SHYP RCTL(S(CA_SLSH)) // ­ (soft hyphen)
+#define CA_SHYP RCTL(S(CA_SLSH)) // (soft hyphen)
#define CA_IEXL RCTL(S(CA_1)) // ¡
#define CA_PND RCTL(S(CA_3)) // £
#define CA_TEIG RCTL(S(CA_5)) // ⅜
@@ -252,3 +252,182 @@
#define CA_MORD RCTL(S(CA_M)) // º
#define CA_MUL RCTL(S(CA_COMM)) // ×
#define CA_DIV RCTL(S(CA_DOT)) // ÷
+
+// DEPRECATED
+#define GR2A(kc) RCTL(kc)
+#define CSA_SLASH CA_SLSH
+#define CSA_SLSH CA_SLSH
+#define CSA_DEAD_CIRCUMFLEX CA_CIRC
+#define CSA_DCRC CA_CIRC
+#define CSA_C_CEDILLA CA_CCED
+#define CSA_CCED CA_CCED
+#define CSA_E_GRAVE CA_EGRV
+#define CSA_EGRV CA_EGRV
+#define CSA_A_GRAVE CA_AGRV
+#define CSA_AGRV CA_AGRV
+#define CSA_U_GRAVE CA_UGRV
+#define CSA_UGRV CA_UGRV
+#define CSA_E_ACUTE CA_EACU
+#define CSA_ECUT CA_EACU
+#define CSA_BACKSLASH CA_BSLS
+#define CSA_BSLS CA_BSLS
+#define CSA_QUESTION CA_QUES
+#define CSA_QEST CA_QUES
+#define CSA_DEAD_TREMA CA_DIAE
+#define CSA_DTRM CA_DIAE
+#define CSA_APOSTROPHE CA_QUOT
+#define CSA_APOS CA_QUOT
+#define CSA_DOUBLE_QUOTE CA_DQUO
+#define CSA_DQOT CA_DQUO
+#define CSA_PIPE CA_PIPE
+#define CSA_CURRENCY CA_CURR
+#define CSA_CURR CA_CURR
+#define CSA_LEFT_CURLY_BRACE CA_LCBR
+#define CSA_LCBR CA_LCBR
+#define CSA_RIGHT_CURLY_BRACE CA_RCBR
+#define CSA_RCBR CA_RCBR
+#define CSA_LBRACKET CA_LBRC
+#define CSA_LBRC CA_LBRC
+#define CSA_RBRACKET CA_RBRC
+#define CSA_RBRC CA_RBRC
+#define CSA_NEGATION CA_NOT
+#define CSA_NEGT CA_NOT
+#define CSA_EURO CA_EURO
+#define CSA_DEAD_GRAVE CA_GRV
+#define CSA_DGRV CA_GRV
+#define CSA_DEAD_TILDE CA_DTIL
+#define CSA_DTLD CA_DTIL
+#define CSA_DEGREE CA_DEG
+#define CSA_DEGR CA_DEG
+#define CSA_LEFT_GUILLEMET CA_LDAQ
+#define CSA_LGIL CA_LDAQ
+#define CSA_RIGHT_GUILLEMET CA_RDAQ
+#define CSA_RGIL CA_RDAQ
+#define CSA_LESS CA_LABK
+#define CSA_GREATER CA_RABK
+#define CSA_GRTR CA_RABK
+#define CSA_NON_BREAKING_SPACE ALGR(KC_SPC)
+#define CSA_NBSP ALGR(KC_SPC)
+#define CSA_SUPERSCRIPT_ONE CA_SUP1
+#define CSA_SUP1 CA_SUP1
+#define CSA_SUPERSCRIPT_TWO CA_SUP2
+#define CSA_SUP2 CA_SUP2
+#define CSA_SUPERSCRIPT_THREE CA_SUP3
+#define CSA_SUP3 CA_SUP3
+#define CSA_ONE_QUARTER CA_QRTR
+#define CSA_1QRT CA_QRTR
+#define CSA_ONE_HALF CA_HALF
+#define CSA_1HLF CA_HALF
+#define CSA_THREE_QUARTERS CA_TQTR
+#define CSA_3QRT CA_TQTR
+#define CSA_DEAD_CEDILLA CA_CEDL
+#define CSA_DCED CA_CEDL
+#define CSA_OMEGA CA_OMEG
+#define CSA_OMEG CA_OMEG
+#define CSA_L_STROKE CA_LSTR
+#define CSA_LSTK CA_LSTR
+#define CSA_OE_LIGATURE CA_OE
+#define CSA_OE CA_OE
+#define CSA_PARAGRAPH CA_PARA
+#define CSA_PARG CA_PARA
+#define CSA_T_STROKE CA_TSTR
+#define CSA_LEFT_ARROW CA_LARR
+#define CSA_LARW CA_LARR
+#define CSA_DOWN_ARROW CA_DARR
+#define CSA_DARW CA_DARR
+#define CSA_RIGHT_ARROW CA_RARR
+#define CSA_RARW CA_RARR
+#define CSA_O_STROKE CA_OSTR
+#define CSA_OSTK CA_OSTR
+#define CSA_THORN CA_THRN
+#define CSA_THRN CA_THRN
+#define CSA_TILDE CA_TILD
+#define CSA_TILD CA_TILD
+#define CSA_AE_LIGATURE CA_AE
+#define CSA_AE CA_AE
+#define CSA_SHARP_S CA_SS
+#define CSA_SRPS CA_SS
+#define CSA_ETH CA_ETH
+#define CSA_ENG CA_ENG
+#define CSA_H_SRTOKE CA_HSTR
+#define CSA_HSTK CA_HSTR
+#define CSA_IJ_LIGATURE CA_IJ
+#define CSA_IJ CA_IJ
+#define CSA_KRA CA_KRA
+#define CSA_L_FLOWN_DOT CA_LMDT
+#define CSA_LFLD CA_LMDT
+#define CSA_DEAD_ACUTE CA_ACUT
+#define CSA_DACT CA_ACUT
+#define CSA_CENT CA_CENT
+#define CSA_LEFT_DOUBLE_QUOTE CA_LDQU
+#define CSA_LDQT CA_LDQU
+#define CSA_RIGHT_DOUBLE_QUOTE CA_RDQU
+#define CSA_RDQT CA_RDQU
+#define CSA_N_APOSTROPHE CA_APSN
+#define CSA_NAPO CA_APSN
+#define CSA_MU CA_MICR
+#define CSA_HORIZONTAL_BAR CA_HRZB
+#define CSA_HZBR CA_HRZB
+#define CSA_DEAD_DOT_ABOVE CA_DOTA
+#define CSA_DDTA CA_DOTA
+#define CSA_SOFT_HYPHEN CA_SHYP
+#define CSA_SHYP CA_SHYP
+#define CSA_INVERTED_EXCLAIM CA_IEXL
+#define CSA_IXLM CA_IEXL
+#define CSA_POUND CA_PND
+#define CSA_GBP CA_PND
+#define CSA_EURO_BIS CA_EURO
+#define CSA_EURB CA_EURO
+#define CSA_THREE_EIGHTHS CA_TEIG
+#define CSA_3ON8 CA_TEIG
+#define CSA_FIVE_EIGHTHS CA_FEIG
+#define CSA_5ON8 CA_FEIG
+#define CSA_SEVEN_EIGHTHS CA_SEIG
+#define CSA_7ON8 CA_SEIG
+#define CSA_TRADEMARK CA_TM
+#define CSA_TM CA_TM
+#define CSA_PLUS_MINUS CA_PLMN
+#define CSA_PSMS CA_PLMN
+#define CSA_INVERTED_QUESTION CA_IQUE
+#define CSA_IQST CA_IQUE
+#define CSA_DEAD_OGONEK CA_OGON
+#define CSA_DOGO CA_OGON
+#define CSA_REGISTERED_TRADEMARK CA_REGD
+#define CSA_RTM CA_REGD
+#define CSA_YEN CA_YEN
+#define CSA_YUAN CA_YEN
+#define CSA_UP_ARROW CA_UARR
+#define CSA_DOTLESS_I CA_DLSI
+#define CSA_DLSI CA_DLSI
+#define CSA_DEAD_RING CA_RNGA
+#define CSA_DRNG CA_RNGA
+#define CSA_DEAD_MACRON CA_MACR
+#define CSA_DMCR CA_MACR
+#define CSA_SECTION CA_SECT
+#define CSA_SECT CA_SECT
+#define CSA_ORDINAL_INDICATOR_A CA_FORD
+#define CSA_ORDA CA_FORD
+#define CSA_DEAD_DOUBLE_ACUTE CA_DACU
+#define CSA_DDCT CA_DACU
+#define CSA_DEAD_CARON CA_CARN
+#define CSA_DCAR CA_CARN
+#define CSA_DEAD_BREVE CA_BREV
+#define CSA_DBRV CA_BREV
+#define CSA_BROKEN_PIPE CA_BRKP
+#define CSA_BPIP CA_BRKP
+#define CSA_COPYRIGHT CA_COPY
+#define CSA_CPRT CA_COPY
+#define CSA_LEFT_QUOTE CA_LSQU
+#define CSA_LQOT CA_LSQU
+#define CSA_RIGHT_QUOTE CA_RSQU
+#define CSA_RQOT CA_RSQU
+#define CSA_EIGHTH_NOTE CA_ENOT
+#define CSA_8NOT CA_ENOT
+#define CSA_ORDINAL_INDICATOR_O CA_MORD
+#define CSA_ORDO CA_MORD
+#define CSA_TIMES CA_MUL
+#define CSA_TIMS CA_MUL
+#define CSA_OBELUS CA_DIV
+#define CSA_OBEL CA_DIV
+#define CSA_DIVISION_SIGN CA_DIV
+#define CSA_DVSN CA_DIV
diff --git a/quantum/keymap_extras/keymap_colemak.h b/quantum/keymap_extras/keymap_colemak.h
index 6658cc1301..a080f03b3d 100644
--- a/quantum/keymap_extras/keymap_colemak.h
+++ b/quantum/keymap_extras/keymap_colemak.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Q │ W │ F │ P │ G │ J │ L │ U │ Y │ ; │ [ │ ] │ \ │
+ * │     │ Q │ W │ F │ P │ G │ J │ L │ U │ Y │ ; │ [ │ ] │  \  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ A │ R │ S │ T │ D │ H │ N │ E │ I │ O │ ' │ │
+ * │      │ A │ R │ S │ T │ D │ H │ N │ E │ I │ O │ ' │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ Z │ X │ C │ V │ B │ K │ M │ , │ . │ / │ │
+ * │        │ Z │ X │ C │ V │ B │ K │ M │ , │ . │ / │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -87,15 +87,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ : │ { │ } │ | │
+ * │     │   │   │   │   │   │   │   │   │   │ : │ { │ } │  |  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ " │ │
+ * │      │   │   │   │   │   │   │   │   │   │   │ " │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │        │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -123,3 +123,35 @@
#define CM_LABK S(CM_COMM) // <
#define CM_RABK S(CM_DOT) // >
#define CM_QUES S(CM_SLSH) // /
+
+// DEPRECATED
+#define KC_CM_Q CM_Q
+#define KC_CM_W CM_W
+#define KC_CM_F CM_F
+#define KC_CM_P CM_P
+#define KC_CM_G CM_G
+#define KC_CM_J CM_J
+#define KC_CM_L CM_L
+#define KC_CM_U CM_U
+#define KC_CM_Y CM_Y
+#define KC_CM_SCLN CM_SCLN
+#define KC_CM_A CM_A
+#define KC_CM_R CM_R
+#define KC_CM_S CM_S
+#define KC_CM_T CM_T
+#define KC_CM_D CM_D
+#define KC_CM_H CM_H
+#define KC_CM_N CM_N
+#define KC_CM_E CM_E
+#define KC_CM_I CM_I
+#define KC_CM_O CM_O
+#define KC_CM_Z CM_Z
+#define KC_CM_X CM_X
+#define KC_CM_C CM_C
+#define KC_CM_V CM_V
+#define KC_CM_B CM_B
+#define KC_CM_K CM_K
+#define KC_CM_M CM_M
+#define KC_CM_COMM CM_COMM
+#define KC_CM_DOT CM_DOT
+#define KC_CM_SLSH CM_SLSH
diff --git a/quantum/keymap_extras/keymap_contributions.h b/quantum/keymap_extras/keymap_contributions.h
new file mode 100644
index 0000000000..5fff00b0bc
--- /dev/null
+++ b/quantum/keymap_extras/keymap_contributions.h
@@ -0,0 +1,375 @@
+/* If you’d like to contribute a locale, we've created a google sheet:
+ * https://docs.google.com/spreadsheets/d/1gSB063BTHLTNLSGalzkhqz82RdBRVQytXKlabhX5Zcg/edit?usp=sharing
+ * Get in touch with us over email <contact@zsa.io> and we can help you get started!
+ */
+
+//Polish programmer, contributed by Krzysztof Bogacz.
+#define PL_01 ALGR(KC_Z) // ż
+#define PL_02 ALGR(KC_X) // ź
+#define PL_03 ALGR(KC_S) // ś
+#define PL_04 ALGR(KC_O) // ó
+#define PL_05 ALGR(KC_N) // ń
+#define PL_06 ALGR(KC_L) // ł
+#define PL_07 ALGR(KC_E) // ę
+#define PL_08 ALGR(KC_C) // ć
+#define PL_09 ALGR(KC_A) // ą
+
+//Kazakh, contributed by Zhanibek Adilbekov
+#define KK_01 KC_SLASH // №
+#define KK_02 KC_DOT // ю
+#define KK_03 KC_COMMA // б
+#define KK_04 KC_M // ь
+#define KK_05 KC_N // т
+#define KK_06 KC_B // и
+#define KK_07 KC_V // м
+#define KK_08 KC_X // ч
+#define KK_09 KC_Z // я
+#define KK_10 KC_QUOTE // э
+#define KK_11 KC_SCOLON // ж
+#define KK_12 KC_L // д
+#define KK_13 KC_K // л
+#define KK_14 KC_J // о
+#define KK_15 KC_H // р
+#define KK_16 KC_G // п
+#define KK_17 KC_F // а
+#define KK_18 KC_D // в
+#define KK_19 KC_S // ы
+#define KK_20 KC_A // ф
+#define KK_21 KC_RBRACKET // ъ
+#define KK_22 KC_LBRACKET // х
+#define KK_23 KC_P // з
+#define KK_24 KC_O // щ
+#define KK_25 KC_I // ш
+#define KK_26 KC_U // г
+#define KK_27 KC_Y // н
+#define KK_28 KC_T // е
+#define KK_29 KC_R // к
+#define KK_30 KC_E // у
+#define KK_31 KC_W // ц
+#define KK_32 KC_Q // й
+#define KK_33 KC_EQUAL // һ
+#define KK_34 KC_MINUS // ө
+#define KK_35 KC_0 // қ
+#define KK_36 KC_9 // ұ
+#define KK_37 KC_8 // ү
+#define KK_38 KC_7 // .
+#define KK_39 KC_6 // ,
+#define KK_40 KC_5 // ғ
+#define KK_41 KC_4 // ң
+#define KK_42 KC_3 // і
+#define KK_43 KC_2 // ә
+#define KK_44 KC_1 // "
+
+//Portuguese OSX, contributed by André Cruz (@edevil)
+#define PT_OSX_SECT KC_GRV // §
+#define PT_OSX_QUOT KC_MINS // '
+#define PT_OSX_PLUS KC_EQL // +
+#define PT_OSX_MORD KC_LBRC // º
+#define PT_OSX_ACUT KC_RBRC // ´ (dead)
+#define PT_OSX_CCED KC_SCLN // Ç
+#define PT_OSX_TILD KC_QUOT // ~ (dead)
+#define PT_OSX_BSLS KC_NUHS // (backslash)
+#define PT_OSX_LABK KC_NUBS // <
+#define PT_OSX_MINS KC_SLSH // -
+#define PT_OSX_PLMN S(PT_OSX_SECT) // ±
+#define PT_OSX_EXLM S(KC_1) // !
+#define PT_OSX_DQUO S(KC_2) // "
+#define PT_OSX_HASH S(KC_3) // #
+#define PT_OSX_DLR S(KC_4) // $
+#define PT_OSX_PERC S(KC_5) // %
+#define PT_OSX_AMPR S(KC_6) // &
+#define PT_OSX_SLSH S(KC_7) // /
+#define PT_OSX_LPRN S(KC_8) // (
+#define PT_OSX_RPRN S(KC_9) // )
+#define PT_OSX_EQL S(KC_0) // =
+#define PT_OSX_QUES S(PT_OSX_QUOT) // ?
+#define PT_OSX_ASTR S(PT_OSX_PLUS) // *
+#define PT_OSX_FORD S(PT_OSX_MORD) // ª
+#define PT_OSX_GRV S(PT_OSX_ACUT) // ` (dead)
+#define PT_OSX_CIRC S(PT_OSX_TILD) // ^ (dead)
+#define PT_OSX_PIPE S(PT_OSX_BSLS) // |
+#define PT_OSX_RABK S(PT_OSX_LABK) // >
+#define PT_OSX_SCLN S(KC_COMM) // ;
+#define PT_OSX_COLN S(KC_DOT) // :
+#define PT_OSX_UNDS S(PT_OSX_MINS) // _
+#define PT_OSX_APPL A(KC_1) //  (Apple logo)
+#define PT_OSX_AT A(KC_2) // @
+#define PT_OSX_EURO A(KC_3) // €
+#define PT_OSX_PND A(KC_4) // £
+#define PT_OSX_PERM A(KC_5) // ‰
+#define PT_OSX_PILC A(KC_6) // ¶
+#define PT_OSX_DIV A(KC_7) // ÷
+#define PT_OSX_LBRC A(KC_8) // [
+#define PT_OSX_RBRC A(KC_9) // ]
+#define PT_OSX_NEQL A(KC_0) // ≠
+#define PT_OSX_OE A(KC_Q) // Œ
+#define PT_OSX_NARS A(KC_W) // ∑
+#define PT_OSX_AE A(KC_E) // Æ
+#define PT_OSX_REGD A(KC_R) // ®
+#define PT_OSX_TM A(KC_T) // ™
+#define PT_OSX_YEN A(KC_Y) // ¥
+#define PT_OSX_DAGG A(KC_U) // †
+#define PT_OSX_DLSI A(KC_I) // ı
+#define PT_OSX_OSTR A(KC_O) // Ø
+#define PT_OSX_PI A(KC_P) // π
+#define PT_OSX_DEG A(PT_OSX_MORD) // °
+#define PT_OSX_DIAE A(PT_OSX_ACUT) // ¨ (dead)
+#define PT_OSX_ARNG A(KC_A) // å
+#define PT_OSX_SS A(KC_S) // ß
+#define PT_OSX_PDIF A(KC_D) // ∂
+#define PT_OSX_FHK A(KC_F) // ƒ
+#define PT_OSX_DOTA A(KC_G) // ˙
+#define PT_OSX_CARN A(KC_H) // ˇ
+#define PT_OSX_MACR A(KC_J) // ¯
+#define PT_OSX_DLQU A(KC_K) // „
+#define PT_OSX_LSQU A(KC_L) // ‘
+#define PT_OSX_CEDL A(PT_OSX_CCED) // ¸
+#define PT_OSX_STIL A(PT_OSX_TILD) // ˜ (dead)
+#define PT_OSX_LSAQ A(PT_OSX_BSLS) // ‹
+#define PT_OSX_LTEQ A(PT_OSX_LABK) // ≤
+#define PT_OSX_OMEG A(KC_Z) // Ω
+#define PT_OSX_LDAQ A(KC_X) // «
+#define PT_OSX_COPY A(KC_C) // ©
+#define PT_OSX_SQRT A(KC_V) // √
+#define PT_OSX_INTG A(KC_B) // ∫
+#define PT_OSX_NOT A(KC_N) // ¬
+#define PT_OSX_MICR A(KC_M) // µ
+#define PT_OSX_LDQU A(KC_COMM) // “
+#define PT_OSX_ELLP A(KC_DOT) // …
+#define PT_OSX_MDSH A(PT_OSX_MINS) // —
+#define PT_OSX_IEXL S(A(KC_1)) // ¡
+#define PT_OSX_FI S(A(KC_2)) // fi
+#define PT_OSX_FL S(A(KC_3)) // fl
+#define PT_OSX_CENT S(A(KC_4)) // ¢
+#define PT_OSX_INFN S(A(KC_5)) // ∞
+#define PT_OSX_BULT S(A(KC_6)) // •
+#define PT_OSX_FRSL S(A(KC_7)) // ⁄
+#define PT_OSX_LCBR S(A(KC_8)) // {
+#define PT_OSX_RCBR S(A(KC_9)) // }
+#define PT_OSX_AEQL S(A(KC_0)) // ≈
+#define PT_OSX_IQUE S(A(PT_OSX_QUOT)) // ¿
+#define PT_OSX_LOZN S(A(PT_OSX_PLUS)) // ◊
+#define PT_OSX_DDAG S(A(KC_U)) // ‡
+#define PT_OSX_RNGA S(A(KC_I)) // ˚
+#define PT_OSX_NARP S(A(KC_P)) // ∏
+#define PT_OSX_DACU S(A(PT_OSX_ACUT)) // ˝
+#define PT_OSX_INCR S(A(KC_D)) // ∆
+#define PT_OSX_SLQU S(A(KC_K)) // ‚
+#define PT_OSX_RSQU S(A(KC_L)) // ’
+#define PT_OSX_OGON S(A(PT_OSX_CCED)) // ˛
+#define PT_OSX_DCIR S(A(PT_OSX_TILD)) // ˆ (dead)
+#define PT_OSX_RSAQ S(A(PT_OSX_BSLS)) // ›
+#define PT_OSX_GTEQ S(A(PT_OSX_LABK)) // ≥
+#define PT_OSX_RDAQ S(A(KC_X)) // »
+#define PT_OSX_RDQU S(A(KC_COMM)) // ”
+#define PT_OSX_MDDT S(A(KC_DOT)) // ·
+#define PT_OSX_NDSH S(A(PT_OSX_MINS)) // –
+
+// Swiss French aliases to avoid collisions with Swiss german ones
+#define FRCH_Y KC_Z
+#define FRCH_Z KC_Y
+#define FRCH_SECT KC_GRV
+#define FRCH_QUOT KC_MINS
+#define FRCH_CIRC KC_EQL
+#define FRCH_EGRV KC_LBRC
+#define FRCH_DIAE KC_RBRC
+#define FRCH_EACU KC_SCLN
+#define FRCH_AGRV KC_QUOT
+#define FRCH_DLR KC_NUHS
+#define FRCH_LABK KC_NUBS
+#define FRCH_MINS KC_SLSH
+#define FRCH_DEG S(FRCH_SECT)
+#define FRCH_PLUS S(KC_1)
+#define FRCH_DQUO S(KC_2)
+#define FRCH_ASTR S(KC_3)
+#define FRCH_CCED S(KC_4)
+#define FRCH_PERC S(KC_5)
+#define FRCH_AMPR S(KC_6)
+#define FRCH_SLSH S(KC_7)
+#define FRCH_LPRN S(KC_8)
+#define FRCH_RPRN S(KC_9)
+#define FRCH_EQL S(KC_0)
+#define FRCH_QUES S(FRCH_QUOT)
+#define FRCH_GRV S(FRCH_CIRC)
+#define FRCH_UDIA S(FRCH_EGRV)
+#define FRCH_EXLM S(FRCH_DIAE)
+#define FRCH_ODIA S(FRCH_EACU)
+#define FRCH_ADIA S(FRCH_AGRV)
+#define FRCH_PND S(FRCH_DLR)
+#define FRCH_RABK S(FRCH_LABK)
+#define FRCH_SCLN S(KC_COMM)
+#define FRCH_COLN S(KC_DOT)
+#define FRCH_UNDS S(KC_MINS)
+#define FRCH_BRKP ALGR(CH_1)
+#define FRCH_AT ALGR(KC_2)
+#define FRCH_HASH ALGR(KC_3)
+#define FRCH_NOT ALGR(KC_6)
+#define FRCH_PIPE ALGR(KC_7)
+#define FRCH_CENT ALGR(KC_8)
+#define FRCH_ACUT ALGR(FRCH_QUOT)
+#define FRCH_TILD ALGR(FRCH_CIRC)
+#define FRCH_EURO ALGR(KC_E)
+#define FRCH_LBRC ALGR(FRCH_EGRV)
+#define FRCH_RBRC ALGR(FRCH_DIAE)
+#define FRCH_LCBR ALGR(FRCH_AGRV)
+#define FRCH_RCBR ALGR(FRCH_DLR)
+#define FRCH_BSLS ALGR(FRCH_LABK)
+
+// Ukrainian
+#define UA_01 S(A(KC_EQUAL))
+#define UA_02 A(KC_EQUAL)
+#define UA_03 S(KC_7)
+#define UA_04 S(KC_6)
+#define UA_05 S(KC_4)
+#define UA_06 S(KC_3)
+#define UA_07 S(KC_2)
+#define UA_08 A(S(KC_GRAVE))
+#define UA_09 A(KC_GRAVE)
+#define UA_10 KC_GRAVE
+#define UA_11 KC_SLASH
+#define UA_12 KC_DOT
+#define UA_13 KC_COMMA
+#define UA_14 KC_M
+#define UA_15 KC_N
+#define UA_16 KC_B
+#define UA_17 KC_V
+#define UA_18 KC_C
+#define UA_19 KC_X
+#define UA_20 KC_Z
+#define UA_21 KC_QUOTE
+#define UA_22 KC_SCOLON
+#define UA_23 KC_L
+#define UA_24 KC_K
+#define UA_25 KC_J
+#define UA_26 KC_H
+#define UA_27 KC_G
+#define UA_28 KC_F
+#define UA_29 KC_D
+#define UA_30 KC_S
+#define UA_31 KC_A
+#define UA_32 KC_RBRACKET
+#define UA_33 KC_LBRACKET
+#define UA_34 KC_P
+#define UA_35 KC_O
+#define UA_36 KC_I
+#define UA_37 KC_GRAVE
+#define UA_38 KC_U
+#define UA_39 KC_Y
+#define UA_40 KC_T
+#define UA_41 KC_R
+#define UA_42 KC_E
+#define UA_43 KC_W
+#define UA_44 KC_Q
+#define UA_45 S(KC_SLASH)
+
+// French Canadian
+#define FRCA_01 ALGR(KC_COMMA)
+#define FRCA_02 ALGR(KC_M)
+#define FRCA_03 ALGR(KC_RBRACKET)
+#define FRCA_04 ALGR(KC_LBRACKET)
+#define FRCA_05 ALGR(KC_QUOTE)
+#define FRCA_06 ALGR(KC_BSLASH)
+#define FRCA_07 KC_GRAVE
+#define FRCA_08 A(KC_GRAVE)
+#define FRCA_09 S(KC_GRAVE)
+#define FRCA_10 S(KC_BSLASH)
+#define FRCA_11 KC_BSLASH
+#define FRCA_12 KC_RBRACKET
+#define FRCA_13 KC_QUOTE
+#define FRCA_14 S(KC_RBRACKET)
+#define FRCA_15 KC_LBRACKET
+#define FRCA_16 KC_SLASH
+#define FRCA_17 ALGR(KC_SCOLON)
+#define FRCA_18 ALGR(KC_P)
+#define FRCA_19 ALGR(KC_O)
+#define FRCA_20 ALGR(KC_MINUS)
+#define FRCA_21 ALGR(KC_0)
+#define FRCA_22 ALGR(KC_9)
+#define FRCA_23 ALGR(KC_8)
+#define FRCA_24 ALGR(KC_7)
+#define FRCA_25 ALGR(KC_6)
+#define FRCA_26 ALGR(KC_5)
+#define FRCA_27 ALGR(KC_4)
+#define FRCA_28 ALGR(KC_3)
+#define FRCA_29 ALGR(KC_2)
+#define FRCA_30 ALGR(KC_1)
+#define FRCA_31 S(KC_6)
+#define FRCA_32 S(KC_3)
+#define FRCA_33 S(KC_2)
+
+// Icelandic
+#define IS_01 S(KC_DOT) //:
+#define IS_02 S(KC_COMMA) //;
+#define IS_03 ALGR(KC_NONUS_BSLASH) //|
+#define IS_04 S(KC_NONUS_BSLASH) //>
+#define IS_05 KC_NONUS_BSLASH //<
+#define IS_06 S(KC_BSLASH)// *
+#define IS_07 S(KC_QUOTE) //´
+#define IS_08 S(KC_RBRACKET) //?
+#define IS_09 S(KC_EQUAL) //_
+#define IS_10 S(KC_GRAVE) //¨
+#define IS_11 S(KC_0) //=
+#define IS_12 S(KC_8) //(
+#define IS_13 S(KC_7) //°
+#define IS_14 S(KC_6) //&
+#define IS_15 KC_BSLASH //+
+#define IS_16 KC_QUOTE //´
+#define IS_17 KC_RBRACKET //'
+#define IS_18 KC_EQUAL //-
+#define IS_19 KC_GRAVE //°
+#define IS_20 KC_MINUS //ö
+#define IS_21 KC_SCOLON //æ
+#define IS_22 KC_LBRACKET //ð
+#define IS_23 S(KC_9) //)
+#define IS_24 S(KC_2) //"
+#define IS_25 S(KC_MINUS) //Ö
+#define IS_26 S(KC_SLASH) //Þ
+#define IS_27 S(KC_SCOLON) //Æ
+#define IS_28 S(KC_LBRACKET) //Ð
+
+// Spanish LATAM
+#define ES_LA_01 ALGR(KC_MINUS)
+#define ES_LA_02 ALGR(KC_GRAVE) //¬
+#define ES_LA_03 ALGR(KC_Q) //@
+#define ES_LA_04 ALGR(KC_BSLASH) //`
+#define ES_LA_05 ALGR(KC_QUOTE) //^
+#define ES_LA_06 ALGR(KC_RBRACKET) //~
+#define ES_LA_07 S(KC_SCOLON) //Ñ
+#define ES_LA_08 KC_SCOLON //ñ
+#define ES_LA_09 S(KC_SLASH) //_
+#define ES_LA_10 KC_SLASH //-
+#define ES_LA_11 S(KC_DOT) //:
+#define ES_LA_12 KC_DOT //.
+#define ES_LA_13 S(KC_COMMA) //;
+#define ES_LA_14 KC_COMMA //,
+#define ES_LA_15 S(KC_NONUS_BSLASH) //>
+#define ES_LA_16 KC_NONUS_BSLASH //<
+#define ES_LA_17 S(KC_BSLASH) //]
+#define ES_LA_18 KC_BSLASH //}
+#define ES_LA_19 S(KC_QUOTE) //[
+#define ES_LA_20 KC_QUOTE //{
+#define ES_LA_21 S(KC_RBRACKET) //*
+#define ES_LA_22 KC_RBRACKET //+
+#define ES_LA_23 S(KC_LBRACKET) //¨
+#define ES_LA_24 KC_LBRACKET //´
+#define ES_LA_25 S(KC_EQUAL) //¡
+#define ES_LA_26 KC_EQUAL //¿
+#define ES_LA_27 S(KC_MINUS) //?
+#define ES_LA_28 KC_MINUS //'
+#define ES_LA_29 S(KC_0) //=
+#define ES_LA_30 S(KC_9) //(
+#define ES_LA_31 S(KC_8) //(
+#define ES_LA_32 S(KC_7) ///
+#define ES_LA_33 S(KC_6) //&
+#define ES_LA_34 S(KC_5) //%
+#define ES_LA_35 S(KC_4) //$
+#define ES_LA_36 S(KC_3) //#
+#define ES_LA_37 S(KC_2) //"
+#define ES_LA_38 S(KC_1) //!
+#define ES_LA_39 S(KC_GRAVE) //°
+#define ES_LA_40 KC_GRAVE //|
+#define ES_LA_41 ALGR(KC_COMMA) //< for macOS
+#define ES_LA_42 ALGR(KC_DOT) //> for macOS
+
+// Extra CMS codes
+#define CSA_MOMEG RCTL(RSFT(KC_Q)) //Ω
diff --git a/quantum/keymap_extras/keymap_czech.h b/quantum/keymap_extras/keymap_czech.h
index a8f522d31c..21ebf79686 100644
--- a/quantum/keymap_extras/keymap_czech.h
+++ b/quantum/keymap_extras/keymap_czech.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ; │ + │ ě │ š │ č │ ř │ ž │ ý │ á │ í │ é │ = │ ´ │ │
+ * │ ; │ + │ ě │ š │ č │ ř │ ž │ ý │ á │ í │ é │ = │ ´ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ ú │ ) │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ů │ § │ ¨ │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ \ │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ° │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ % │ ˇ │ │
+ * │ ° │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ % │ ˇ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ / │ ( │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ " │ ! │ ' │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ / │ ( │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │ " │ ! │ ' │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ | │ │ │ │ │ │ │ │ ? │ : │ _ │ │
+ * │    │ | │   │   │   │   │   │   │   │ ? │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -128,15 +128,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ ~ │ │ ^ │ ˘ │ │ ˛ │ ` │ ˙ │ │ ˝ │ │ ¸ │ │
+ * │   │ ~ │   │ ^ │ ˘ │   │ ˛ │ ` │ ˙ │   │ ˝ │   │ ¸ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ € │ │ │ │ │ │ │ │ ÷ │ × │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ đ │ Đ │ [ │ ] │ │ │ ł │ Ł │ $ │ ß │ ¤ │ │
+ * │     │   │   │ € │   │   │   │   │   │   │   │ ÷ │ × │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │ đ │ Đ │ [ │ ] │   │   │ ł │ Ł │ $ │ ß │ ¤ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ # │ & │ @ │ { │ } │ │ < │ > │ * │ │
+ * │    │   │   │ # │ & │ @ │ { │ } │   │ < │ > │ * │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_danish.h b/quantum/keymap_extras/keymap_danish.h
index 9cf688d6f5..618e42ccf1 100644
--- a/quantum/keymap_extras/keymap_danish.h
+++ b/quantum/keymap_extras/keymap_danish.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ½ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ ´ │ │
+ * │ ½ │ 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 │ Æ │ Ø │ ' │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ § │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │ │
+ * │ § │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ^ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ * │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ ^ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ * │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -125,15 +125,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ @ │ £ │ $ │ € │ │ { │ [ │ ] │ } │ │ | │ │
+ * │   │   │ @ │ £ │ $ │ € │   │ { │ [ │ ] │ } │   │ | │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ~ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ ~ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ \ │ │ │ │ │ │ │ µ │ │ │ │ │
+ * │    │ \ │   │   │   │   │   │   │ µ │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h
index 7aa112ebcc..43dea0ce4f 100644
--- a/quantum/keymap_extras/keymap_dvorak.h
+++ b/quantum/keymap_extras/keymap_dvorak.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ [ │ ] │ │
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ [ │ ] │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │ \ │
+ * │     │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │  \  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │ │
+ * │      │ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ ; │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │ │
+ * │        │ ; │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -87,15 +87,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ { │ } │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ { │ } │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ " │ < │ > │ │ │ │ │ │ │ │ ? │ + │ | │
+ * │     │ " │ < │ > │   │   │   │   │   │   │   │ ? │ + │  |  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ _ │ │
+ * │      │   │   │   │   │   │   │   │   │   │   │ _ │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ : │ │ │ │ │ │ │ │ │ │ │
+ * │        │ : │   │   │   │   │   │   │   │   │   │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_dvorak_fr.h b/quantum/keymap_extras/keymap_dvorak_fr.h
index 2dee8e32e7..7bb5893d37 100644
--- a/quantum/keymap_extras/keymap_dvorak_fr.h
+++ b/quantum/keymap_extras/keymap_dvorak_fr.h
@@ -30,15 +30,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ « │ » │ / │ - │ è │ \ │ ^ │ ( │ ` │ ) │ _ │ [ │ ] │ │
+ * │ « │ » │ / │ - │ è │ \ │ ^ │ ( │ ` │ ) │ _ │ [ │ ] │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ : │ ' │ é │ G │ . │ H │ V │ C │ M │ K │ Z │ ¨ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ O │ A │ U │ E │ B │ F │ S │ T │ N │ D │ W │ ~ │ │
+ * │     │ : │ ' │ é │ G │ . │ H │ V │ C │ M │ K │ Z │ ¨ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ O │ A │ U │ E │ B │ F │ S │ T │ N │ D │ W │ ~ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ à │ ; │ Q │ , │ I │ Y │ X │ R │ L │ P │ J │ │
+ * │    │ à │ ; │ Q │ , │ I │ Y │ X │ R │ L │ P │ J │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -96,15 +96,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ * │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 0 │ 0 │ + │ % │ │
+ * │ * │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 0 │ 0 │ + │ % │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ ? │ < │ > │ │ ! │ │ │ │ │ │ │ = │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ # │ │
+ * │     │ ? │ < │ > │   │ ! │   │   │   │   │   │   │ = │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ # │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ ç │ | │ │ @ │ │ │ │ │ │ │ │ │
+ * │    │ ç │ | │   │ @ │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_dvp.h b/quantum/keymap_extras/keymap_dvp.h
new file mode 100644
index 0000000000..99c69a4af5
--- /dev/null
+++ b/quantum/keymap_extras/keymap_dvp.h
@@ -0,0 +1,125 @@
+/* Copyright 2016 Artyom Mironov
+ *
+ * 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
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ $ │ & │ [ │ { │ } │ ( │ = │ * │ ) │ + │ ] │ ! │ # │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │ ; │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ @ │  \  │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │      │ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │        │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │        │ ' │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │          │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define DP_DLR KC_GRV // $
+#define DP_AMPR KC_1 // &
+#define DP_LBRC KC_2 // [
+#define DP_LCBR KC_3 // {
+#define DP_RCBR KC_4 // }
+#define DP_LPRN KC_5 // (
+#define DP_EQL KC_6 // =
+#define DP_ASTR KC_7 // *
+#define DP_RPRN KC_8 // )
+#define DP_PLUS KC_9 // +
+#define DP_RBRC KC_0 // ]
+#define DP_EXLM KC_MINS // !
+#define DP_HASH KC_EQL // #
+// Row 2
+#define DP_SCLN KC_Q // ;
+#define DP_COMM KC_W // ,
+#define DP_DOT KC_E // .
+#define DP_P KC_R // P
+#define DP_Y KC_T // Y
+#define DP_F KC_Y // F
+#define DP_G KC_U // G
+#define DP_C KC_I // C
+#define DP_R KC_O // R
+#define DP_L KC_P // L
+#define DP_SLSH KC_LBRC // /
+#define DP_AT KC_RBRC // @
+#define DP_BSLS KC_BSLS // (backslash)
+// Row 3
+#define DP_A KC_A // A
+#define DP_O KC_S // O
+#define DP_E KC_D // E
+#define DP_U KC_F // U
+#define DP_I KC_G // I
+#define DP_D KC_H // D
+#define DP_H KC_J // H
+#define DP_T KC_K // T
+#define DP_N KC_L // N
+#define DP_S KC_SCLN // S
+#define DP_MINS KC_QUOT // -
+// Row 4
+#define DP_QUOT KC_Z // '
+#define DP_Q KC_X // Q
+#define DP_J KC_C // J
+#define DP_K KC_V // K
+#define DP_X KC_B // X
+#define DP_B KC_N // B
+#define DP_M KC_M // M
+#define DP_W KC_COMM // W
+#define DP_V KC_DOT // V
+#define DP_Z KC_SLSH // Z
+
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ~ │ % │ 7 │ 5 │ 3 │ 1 │ 9 │ 0 │ 2 │ 4 │ 6 │ 8 │ ` │       │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │     │ : │ < │ > │   │   │   │   │   │   │   │ ? │ ^ │  |  │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │      │   │   │   │   │   │   │   │   │   │   │ _ │        │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │        │ " │   │   │   │   │   │   │   │   │   │          │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │    │    │    │                        │    │    │    │    │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define DP_TILD S(DP_DLR) // ~
+#define DP_PERC S(DP_AMPR) // %
+#define DP_7 S(DP_LBRC) // 7
+#define DP_5 S(DP_LCBR) // 5
+#define DP_3 S(DP_RCBR) // 3
+#define DP_1 S(DP_LPRN) // 1
+#define DP_9 S(DP_EQL) // 9
+#define DP_0 S(DP_ASTR) // 0
+#define DP_2 S(DP_RPRN) // 2
+#define DP_4 S(DP_PLUS) // 4
+#define DP_6 S(DP_RBRC) // 6
+#define DP_8 S(DP_EXLM) // 8
+#define DP_GRV S(DP_HASH) // `
+// Row 2
+#define DP_COLN S(DP_SCLN) // :
+#define DP_LABK S(DP_COMM) // <
+#define DP_RABK S(DP_DOT) // >
+#define DP_QUES S(DP_SLSH) // ?
+#define DP_CIRC S(DP_AT) // ^
+#define DP_PIPE S(DP_BSLS) // |
+// Row 3
+#define DP_UNDS S(DP_MINS) // _
+// Row 4
+#define DP_DQUO S(DP_QUOT) // "
diff --git a/quantum/keymap_extras/keymap_estonian.h b/quantum/keymap_extras/keymap_estonian.h
index 6951baed5a..e806c51fed 100644
--- a/quantum/keymap_extras/keymap_estonian.h
+++ b/quantum/keymap_extras/keymap_estonian.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ˇ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ ´ │ │
+ * │ ˇ │ 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 │ Ö │ Ä │ ' │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │ │
+ * │ ~ │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ * │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ * │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -123,15 +123,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ @ │ £ │ $ │ € │ │ { │ [ │ ] │ } │ \ │ │ │
+ * │   │   │ @ │ £ │ $ │ € │   │ { │ [ │ ] │ } │ \ │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ § │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ š │ │ │ │ │ │ │ │ │ ^ │ ½ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ § │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │ š │   │   │   │   │   │   │   │   │ ^ │ ½ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ | │ ž │ │ │ │ │ │ │ │ │ │ │
+ * │    │ | │ ž │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_finnish.h b/quantum/keymap_extras/keymap_finnish.h
index faca4e01d4..81a8027ff4 100644
--- a/quantum/keymap_extras/keymap_finnish.h
+++ b/quantum/keymap_extras/keymap_finnish.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ § │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ ´ │ │
+ * │ § │ 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 │ Ö │ Ä │ ' │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ½ │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │ │
+ * │ ½ │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ^ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ * │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ ^ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ * │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -125,15 +125,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ @ │ £ │ $ │ € │ │ { │ [ │ ] │ } │ \ │ │ │
+ * │   │   │ @ │ £ │ $ │ € │   │ { │ [ │ ] │ } │ \ │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ~ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ ~ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ | │ │ │ │ │ │ │ µ │ │ │ │ │
+ * │    │ | │   │   │   │   │   │   │ µ │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_fr_ch.h b/quantum/keymap_extras/keymap_fr_ch.h
new file mode 100644
index 0000000000..783880c113
--- /dev/null
+++ b/quantum/keymap_extras/keymap_fr_ch.h
@@ -0,0 +1,243 @@
+/* Copyright 2016 Vincent Pochet
+ *
+ * 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
+
+#ifdef CH_H
+// The ChibiOS ch.h file defines this...
+# undef CH_H
+#endif
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ § │ 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 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) // _
+
+/* 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)
+
+// 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.h b/quantum/keymap_extras/keymap_french.h
index 0be53f0a9c..7256c50022 100644
--- a/quantum/keymap_extras/keymap_french.h
+++ b/quantum/keymap_extras/keymap_french.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ² │ & │ é │ " │ ' │ ( │ - │ è │ _ │ ç │ à │ ) │ = │ │
+ * │ ² │ & │ é │ " │ ' │ ( │ - │ è │ _ │ ç │ à │ ) │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ $ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ ù │ * │ │
+ * │     │ 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 │ , │ ; │ : │ ! │ │
+ * │    │ < │ W │ X │ C │ V │ B │ N │ , │ ; │ : │ ! │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ + │ │
+ * │   │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ £ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ % │ µ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ ¨ │ £ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ % │ µ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ ? │ . │ / │ § │ │
+ * │    │ > │   │   │   │   │   │   │ ? │ . │ / │ § │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -127,15 +127,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ ~ │ # │ { │ [ │ | │ ` │ \ │ │ @ │ ] │ } │ │
+ * │   │   │ ~ │ # │ { │ [ │ | │ ` │ \ │   │ @ │ ] │ } │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ € │ │ │ │ │ │ │ │ │ ¤ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │ € │   │   │   │   │   │   │   │   │ ¤ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -152,3 +152,14 @@
// Row 2
#define FR_EURO ALGR(KC_E) // €
#define FR_CURR ALGR(FR_DLR) // ¤
+
+// DEPRECATED
+#define FR_AMP FR_AMPR
+#define FR_APOS FR_QUOT
+#define FR_LESS FR_LABK
+#define FR_OVRR FR_DEG
+#define FR_UMLT FR_DIAE
+#define FR_MU FR_MICR
+#define FR_GRTR FR_RABK
+#define FR_CCIRC FR_CIRC
+#define FR_BULT FR_CURR
diff --git a/quantum/keymap_extras/keymap_french_osx.h b/quantum/keymap_extras/keymap_french_osx.h
new file mode 100644
index 0000000000..de8dd756a1
--- /dev/null
+++ b/quantum/keymap_extras/keymap_french_osx.h
@@ -0,0 +1,260 @@
+/* Copyright 2016 Sébastien Pérochon
+ *
+ * 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
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ @ │ & │ é │ " │ ' │ ( │ § │ è │ ! │ ç │ à │ ) │ - │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ 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 // =
+
+/* 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 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+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_RSAQ 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)) // ±
+
+// 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.h b/quantum/keymap_extras/keymap_german.h
index 085995b0c6..59198dd1be 100644
--- a/quantum/keymap_extras/keymap_german.h
+++ b/quantum/keymap_extras/keymap_german.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ß │ ´ │ │
+ * │ ^ │ 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 │ Ö │ Ä │ # │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ° │ ! │ " │ § │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │ │
+ * │ ° │ ! │ " │ § │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ * │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ' │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ * │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ ' │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -125,15 +125,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ ² │ ³ │ │ │ │ { │ [ │ ] │ } │ \ │ │ │
+ * │   │   │ ² │ ³ │   │   │   │ { │ [ │ ] │ } │ \ │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ @ │ │ € │ │ │ │ │ │ │ │ │ ~ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │ @ │   │ € │   │   │   │   │   │   │   │   │ ~ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ | │ │ │ │ │ │ │ µ │ │ │ │ │
+ * │    │ | │   │   │   │   │   │   │ µ │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -151,3 +151,16 @@
// Row 4
#define DE_PIPE ALGR(DE_LABK) // |
#define DE_MICR ALGR(DE_M) // µ
+
+// DEPRECATED
+#define DE_UE DE_UDIA
+#define DE_OE DE_ODIA
+#define DE_AE DE_ADIA
+#define DE_LESS DE_LABK
+#define DE_RING DE_DEG
+#define DE_DQOT DE_DQUO
+#define DE_PARA DE_SECT
+#define DE_QST DE_QUES
+#define DE_MORE DE_RABK
+#define DE_SQ2 DE_SUP2
+#define DE_SQ3 DE_SUP3
diff --git a/quantum/keymap_extras/keymap_german_ch.h b/quantum/keymap_extras/keymap_german_ch.h
new file mode 100644
index 0000000000..07f4503a14
--- /dev/null
+++ b/quantum/keymap_extras/keymap_german_ch.h
@@ -0,0 +1,182 @@
+/* Copyright 2016 heartsekai
+ *
+ * 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
+
+#ifdef CH_H
+// The ChibiOS ch.h file defines this...
+# undef CH_H
+#endif
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ § │ 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 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) // _
+
+/* 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)
+
+// 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
new file mode 100644
index 0000000000..0d15532e40
--- /dev/null
+++ b/quantum/keymap_extras/keymap_german_osx.h
@@ -0,0 +1,323 @@
+/* Copyright 2016 Stephen Bösebeck
+ *
+ * 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 │ 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 // -
+
+/* 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) // _
+
+/* 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) // –
+
+/* 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)) // —
+
+// 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
+
+#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
+
+#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_greek.h b/quantum/keymap_extras/keymap_greek.h
index 8c23381204..a2525959bc 100644
--- a/quantum/keymap_extras/keymap_greek.h
+++ b/quantum/keymap_extras/keymap_greek.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ ; │ ς │ Ε │ Ρ │ Τ │ Υ │ Θ │ Ι │ Ο │ Π │ [ │ ] │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ Α │ Σ │ Δ │ Φ │ Γ │ Η │ Ξ │ Κ │ Λ │ ΄ │ ' │ \ │ │
+ * │     │ ; │ ς │ Ε │ Ρ │ Τ │ Υ │ Θ │ Ι │ Ο │ Π │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ Α │ Σ │ Δ │ Φ │ Γ │ Η │ Ξ │ Κ │ Λ │ ΄ │ ' │ \ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ Ζ │ Χ │ Ψ │ Ω │ Β │ Ν │ Μ │ , │ . │ / │ │
+ * │    │   │ Ζ │ Χ │ Ψ │ Ω │ Β │ Ν │ Μ │ , │ . │ / │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -87,15 +87,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ : │ ΅ │ │ │ │ │ │ │ │ │ { │ } │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ ¨ │ " │ | │ │
+ * │     │ : │ ΅ │   │   │   │   │   │   │   │   │ { │ } │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │ ¨ │ " │ | │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │    │   │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -128,15 +128,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ ² │ ³ │ £ │ § │ ¶ │ │ ¤ │ ¦ │ ° │ ± │ ½ │ │
+ * │   │   │ ² │ ³ │ £ │ § │ ¶ │   │ ¤ │ ¦ │ ° │ ± │ ½ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ € │ ® │ │ ¥ │ │ │ │ │ « │ » │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ¬ │ │
+ * │     │   │   │ € │ ® │   │ ¥ │   │   │   │   │ « │ » │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ ¬ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ © │ │ │ │ │ │ │ │ │
+ * │    │   │   │   │ © │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_hebrew.h b/quantum/keymap_extras/keymap_hebrew.h
index 87b488f04d..ea9ac5ed4c 100644
--- a/quantum/keymap_extras/keymap_hebrew.h
+++ b/quantum/keymap_extras/keymap_hebrew.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ; │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ; │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ / │ ' │ פ │ ם │ ן │ ו │ ט │ א │ ר │ ק │ ] │ [ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ ף │ ך │ ל │ ח │ י │ ע │ כ │ ג │ ד │ ש │ , │ \ │ │
+ * │     │ / │ ' │ פ │ ם │ ן │ ו │ ט │ א │ ר │ ק │ ] │ [ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ ף │ ך │ ל │ ח │ י │ ע │ כ │ ג │ ד │ ש │ , │ \ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ ץ │ ת │ צ │ מ │ נ │ ה │ ב │ ס │ ז │ . │ │
+ * │    │   │ ץ │ ת │ צ │ מ │ נ │ ה │ ב │ ס │ ז │ . │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -87,15 +87,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ) │ ( │ _ │ + │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ) │ ( │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ } │ { │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ : │ " │ | │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ } │ { │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │ : │ " │ | │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ > │ < │ ? │ │
+ * │    │   │   │   │   │   │   │   │   │ > │ < │ ? │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -126,15 +126,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ │ € │ ₪ │ ° │ │ │ × │ │ │ │ │ │
+ * │   │   │   │ € │ ₪ │ ° │   │   │ × │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ װ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ ײ │ ױ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │ װ │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │ ײ │ ױ │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ ÷ │ │
+ * │    │   │   │   │   │   │   │   │   │   │   │ ÷ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_hungarian.h b/quantum/keymap_extras/keymap_hungarian.h
index a4e4b1a522..d5c915d158 100644
--- a/quantum/keymap_extras/keymap_hungarian.h
+++ b/quantum/keymap_extras/keymap_hungarian.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ Ö │ Ü │ Ó │ │
+ * │ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ Ö │ Ü │ Ó │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ Ő │ Ú │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ É │ Á │ Ű │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ Í │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ § │ ' │ " │ + │ ! │ % │ / │ = │ ( │ ) │ │ │ │ │
+ * │ § │ ' │ " │ + │ ! │ % │ / │ = │ ( │ ) │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ ? │ : │ _ │ │
+ * │    │   │   │   │   │   │   │   │   │ ? │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -117,15 +117,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ ~ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │ ¨ │ ¸ │ │
+ * │   │ ~ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │ ¨ │ ¸ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ \ │ | │ Ä │ │ │ │ € │ │ │ │ ÷ │ × │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ ä │ đ │ Đ │ [ │ ] │ │ │ ł │ Ł │ $ │ ß │ ¤ │ │
+ * │     │ \ │ | │ Ä │   │   │   │ € │   │   │   │ ÷ │ × │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ ä │ đ │ Đ │ [ │ ] │   │   │ ł │ Ł │ $ │ ß │ ¤ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ < │ > │ # │ & │ @ │ { │ } │ │ ; │ │ * │ │
+ * │    │ < │ > │ # │ & │ @ │ { │ } │   │ ; │   │ * │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -169,3 +169,22 @@
#define HU_RCBR ALGR(HU_N) // }
#define HU_SCLN ALGR(HU_COMM) // ;
#define HU_ASTR ALGR(HU_MINS) // *
+
+// DEPRECATED
+#define HU_OE HU_ODIA
+#define HU_UE HU_UDIA
+#define HU_OO HU_OACU
+#define HU_OEE HU_ODAC
+#define HU_UU HU_UACU
+#define HU_EE HU_EACU
+#define HU_AA HU_AACU
+#define HU_UEE HU_UDAC
+#define HU_II HU_IACU
+#define HU_PARA HU_SECT
+#define HU_DQOT HU_DQUO
+#define HU_QST HU_QUES
+#define HU_BRV HU_BREV
+#define HU_RING HU_RNGA
+#define HU_CRSS HU_MUL
+#define HU_LESS HU_LABK
+#define HU_MORE HU_RABK
diff --git a/quantum/keymap_extras/keymap_icelandic.h b/quantum/keymap_extras/keymap_icelandic.h
index 43e4a6e872..2ccb4b543c 100644
--- a/quantum/keymap_extras/keymap_icelandic.h
+++ b/quantum/keymap_extras/keymap_icelandic.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ° │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ Ö │ - │ │
+ * │ ° │ 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 │ Æ │ ´ │ + │ │
+ * │     │ 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 │ , │ . │ Þ │ │
+ * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ Þ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ¨ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ │ _ │ │
+ * │ ¨ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │   │ _ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ? │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ * │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ ? │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ * │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -123,15 +123,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ° │ │ │ │ │ │ │ { │ [ │ ] │ } │ \ │ │ │
+ * │ ° │   │   │   │   │   │   │ { │ [ │ ] │ } │ \ │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ @ │ │ € │ │ │ │ │ │ │ │ │ ~ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ ^ │ ` │ │
+ * │     │ @ │   │ € │   │   │   │   │   │   │   │   │ ~ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ ^ │ ` │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ | │ │ │ │ │ │ │ µ │ │ │ │ │
+ * │    │ | │   │   │   │   │   │   │ µ │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_irish.h b/quantum/keymap_extras/keymap_irish.h
index 73a4c8028d..6825d4311f 100644
--- a/quantum/keymap_extras/keymap_irish.h
+++ b/quantum/keymap_extras/keymap_irish.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 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 │ ; │ ' │ # │ │
+ * │     │ 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 │ , │ . │ / │ │
+ * │    │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ¬ │ ! │ " │ £ │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ¬ │ ! │ " │ £ │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ : │ @ │ ~ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │ : │ @ │ ~ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ | │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │    │ | │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -128,15 +128,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ¦ │ │ │ │ € │ │ │ │ │ │ │ │ │ │
+ * │ ¦ │   │   │   │ € │   │   │   │   │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ É │ │ │ │ Ú │ Í │ Ó │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ Á │ │ │ │ │ │ │ │ │ │ ´ │ │ │
+ * │     │   │   │ É │   │   │   │ Ú │ Í │ Ó │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ Á │   │   │   │   │   │   │   │   │   │ ´ │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_italian.h b/quantum/keymap_extras/keymap_italian.h
index ece60d06b7..616b6dfce9 100644
--- a/quantum/keymap_extras/keymap_italian.h
+++ b/quantum/keymap_extras/keymap_italian.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ \ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ì │ │
+ * │ \ │ 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 │ ò │ à │ ù │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ | │ ! │ " │ £ │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ^ │ │
+ * │ | │ ! │ " │ £ │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ^ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ é │ * │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ ç │ ° │ § │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ é │ * │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │ ç │ ° │ § │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -128,38 +128,57 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │   │   │   │   │   │   │   │   │   │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ € │ │ │ │ │ │ │ │ [ │ ] │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ @ │ # │ │ │
+ * │     │   │   │ € │   │   │   │   │   │   │   │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │ @ │ # │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 2
-#define IT_EURO ALGR(IT_E) // €
-#define IT_LBRC ALGR(IT_EGRV) // [
-#define IT_RBRC ALGR(IT_PLUS) // ]
+#define IT_EURO ALGR(IT_E) // €
+#define IT_LBRC ALGR(IT_EGRV) // [
+#define IT_RBRC ALGR(IT_PLUS) // ]
// Row 3
-#define IT_AT ALGR(IT_OGRV) // @
-#define IT_HASH ALGR(IT_AGRV) // #
+#define IT_AT ALGR(IT_OGRV) // @
+#define IT_HASH ALGR(IT_AGRV) // #
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │   │   │   │   │   │   │   │   │   │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 2
#define IT_LCBR S(ALGR(IT_EGRV)) // {
#define IT_RCBR S(ALGR(IT_PLUS)) // }
+
+// DEPRECATED
+#define IT_BKSL IT_BSLS
+#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_MORE IT_RABK
+#define IT_SHRP IT_HASH
+
+#define IT_X_PLUS X_RBRACKET
+#define IT_ACUT
diff --git a/quantum/keymap_extras/keymap_italian_osx_ansi.h b/quantum/keymap_extras/keymap_italian_osx_ansi.h
new file mode 100644
index 0000000000..1f7fe8afc9
--- /dev/null
+++ b/quantum/keymap_extras/keymap_italian_osx_ansi.h
@@ -0,0 +1,268 @@
+/* Copyright 2015-2016 Matthias Schmidtt
+ *
+ * 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 │ 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 // -
+
+/* 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) // _
+
+/* 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) // –
+
+/* 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)) // —
+
+// 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
new file mode 100644
index 0000000000..5ed1e3abd4
--- /dev/null
+++ b/quantum/keymap_extras/keymap_italian_osx_iso.h
@@ -0,0 +1,269 @@
+/* Copyright 2015-2016 Matthias Schmidtt
+ *
+ * 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 │ 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 // -
+
+/* 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) // _
+
+/* 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) // –
+
+/* 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)) // —
+
+// 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_japanese.h b/quantum/keymap_extras/keymap_japanese.h
index df78af8399..6ad2c4da47 100644
--- a/quantum/keymap_extras/keymap_japanese.h
+++ b/quantum/keymap_extras/keymap_japanese.h
@@ -137,3 +137,12 @@
#define JP_RABK S(JP_DOT) // >
#define JP_QUES S(JP_SLSH) // ?
#define JP_UNDS S(JP_BSLS) // _
+
+/// DEPRECATED
+#define JP_ZHTG JP_ZKHK
+#define JP_DQT JP_DQUO
+#define JP_LT JP_LABK
+#define JP_GT JP_RABK
+
+#define JP_MEISU KC_LANG2 // Eisū (英数) on macOS
+#define JP_MKANA KC_LANG1 // Kana (かな) on macOS
diff --git a/quantum/keymap_extras/keymap_jp.h b/quantum/keymap_extras/keymap_jp.h
new file mode 100644
index 0000000000..e608481d87
--- /dev/null
+++ b/quantum/keymap_extras/keymap_jp.h
@@ -0,0 +1,148 @@
+/* Copyright 2016 h-youhei
+ *
+ * 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/>.
+ *
+ * JP106-layout (Japanese Standard)
+ *
+ * For more information, see
+ * http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html
+ * note: This website is written in Japanese.
+ */
+
+#pragma once
+
+#include "keymap.h"
+
+// clang-format off
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Z↔︎H│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │   │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │ Eisū │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │    │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+ * │        │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │      │
+ * ├─────┬──┴┬──┴──┬┴───┴┬──┴───┴──┬┴───┴┬──┴┬──┴┬──┴┬──┴┬─────┤
+ * │     │   │     │Muhen│         │ Hen │K↔H│   │   │   │     │
+ * └─────┴───┴─────┴─────┴─────────┴─────┴───┴───┴───┴───┴─────┘
+ */
+// Row 1
+#define JP_ZKHK KC_GRV // Zenkaku ↔︎ Hankaku ↔ Kanji (半角 ↔ 全角 ↔ 漢字)
+#define JP_1 KC_1 // 1
+#define JP_2 KC_2 // 2
+#define JP_3 KC_3 // 3
+#define JP_4 KC_4 // 4
+#define JP_5 KC_5 // 5
+#define JP_6 KC_6 // 6
+#define JP_7 KC_7 // 7
+#define JP_8 KC_8 // 8
+#define JP_9 KC_9 // 9
+#define JP_0 KC_0 // 0
+#define JP_MINS KC_MINS // -
+#define JP_CIRC KC_EQL // ^
+#define JP_YEN KC_INT3 // ¥
+// Row 2
+#define JP_Q KC_Q // Q
+#define JP_W KC_W // W
+#define JP_E KC_E // E
+#define JP_R KC_R // R
+#define JP_T KC_T // T
+#define JP_Y KC_Y // Y
+#define JP_U KC_U // U
+#define JP_I KC_I // I
+#define JP_O KC_O // O
+#define JP_P KC_P // P
+#define JP_AT KC_LBRC // @
+#define JP_LBRC KC_RBRC // [
+// Row 3
+#define JP_EISU KC_CAPS // Eisū (英数)
+#define JP_A KC_A // A
+#define JP_S KC_S // S
+#define JP_D KC_D // D
+#define JP_F KC_F // F
+#define JP_G KC_G // G
+#define JP_H KC_H // H
+#define JP_J KC_J // J
+#define JP_K KC_K // K
+#define JP_L KC_L // L
+#define JP_SCLN KC_SCLN // ;
+#define JP_COLN KC_QUOT // :
+#define JP_RBRC KC_NUHS // ]
+// Row 4
+#define JP_Z KC_Z // Z
+#define JP_X KC_X // X
+#define JP_C KC_C // C
+#define JP_V KC_V // V
+#define JP_B KC_B // B
+#define JP_N KC_N // N
+#define JP_M KC_M // M
+#define JP_COMM KC_COMM // ,
+#define JP_DOT KC_DOT // .
+#define JP_SLSH KC_SLSH // /
+#define JP_BSLS KC_INT1 // (backslash)
+// Row 5
+#define JP_MHEN KC_INT5 // Muhenkan (無変換)
+#define JP_HENK KC_INT4 // Henkan (変換)
+#define JP_KANA KC_INT2 // Katakana ↔ Hiragana ↔ Rōmaji (カタカナ ↔ ひらがな ↔ ローマ字)
+
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │   │ ! │ " │ # │ $ │ % │ & │ ' │ ( │ ) │   │ = │ ~ │ | │   │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │     │   │   │   │   │   │   │   │   │   │   │ ` │ { │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │ Caps │   │   │   │   │   │   │   │   │   │ + │ * │ } │    │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+ * │        │   │   │   │   │   │   │   │ < │ > │ ? │ _ │      │
+ * ├─────┬──┴┬──┴──┬┴───┴┬──┴───┴──┬┴───┴┬──┴┬──┴┬──┴┬──┴┬─────┤
+ * │     │   │     │     │         │     │   │   │   │   │     │
+ * └─────┴───┴─────┴─────┴─────────┴─────┴───┴───┴───┴───┴─────┘
+ */
+// Row 1
+#define JP_EXLM S(JP_1) // !
+#define JP_DQUO S(JP_2) // "
+#define JP_HASH S(JP_3) // #
+#define JP_DLR S(JP_4) // $
+#define JP_PERC S(JP_5) // %
+#define JP_AMPR S(JP_6) // &
+#define JP_QUOT S(JP_7) // '
+#define JP_LPRN S(JP_8) // (
+#define JP_RPRN S(JP_9) // )
+#define JP_EQL S(JP_MINS) // =
+#define JP_TILD S(JP_CIRC) // ~
+#define JP_PIPE S(JP_YEN) // |
+// Row 2
+#define JP_GRV S(JP_AT) // `
+#define JP_LCBR S(JP_LBRC) // {
+// Row 3
+#define JP_CAPS S(JP_EISU) // Caps Lock
+#define JP_PLUS S(JP_SCLN) // +
+#define JP_ASTR S(JP_COLN) // *
+#define JP_RCBR S(JP_RBRC) // }
+// Row 4
+#define JP_LABK S(JP_COMM) // <
+#define JP_RABK S(JP_DOT) // >
+#define JP_QUES S(JP_SLSH) // ?
+#define JP_UNDS S(JP_BSLS) // _
+
+// DEPRECATED
+#define JP_ZHTG JP_ZKHK
+#define JP_DQT JP_DQUO
+#define JP_LT JP_LABK
+#define JP_GT JP_RABK
+
+#define JP_MEISU KC_LANG2 // Eisū (英数) on macOS
+#define JP_MKANA KC_LANG1 // Kana (かな) on macOS
diff --git a/quantum/keymap_extras/keymap_korean.h b/quantum/keymap_extras/keymap_korean.h
index 3d41a98b88..edfa356e89 100644
--- a/quantum/keymap_extras/keymap_korean.h
+++ b/quantum/keymap_extras/keymap_korean.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ ₩ │
+ * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  ₩  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ │
+ * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │
+ * │        │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │          │
* ├─────┬──┴┬──┴──┬┴──┬┴───┴───┴───┴──┬┴──┬┴───┴┬──┴┬───┬─────┤
- * │ │ │ │Hnj│ │H↔Y│ │ │ │ │
+ * │     │   │     │Hnj│               │H↔Y│     │   │   │     │
* └─────┴───┴─────┴───┴───────────────┴───┴─────┴───┴───┴─────┘
*/
// Row 1
@@ -85,20 +85,20 @@
#define KR_DOT KC_DOT // .
#define KR_SLSH KC_SLSH // /
// Row 5
-#define KR_HANJ KC_LNG2 // Hanja (한자)
-#define KR_HAEN KC_LNG1 // Han ↔ Yeong (한 ↔ 영)
+#define KR_HANJ KC_LANG2 // Hanja (한자)
+#define KR_HAEN KC_LANG1 // Han ↔ Yeong (한 ↔ 영)
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │
+ * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │  |  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ │ │ │ │ │ │ │ │ : │ " │ │
+ * │      │   │   │   │   │   │   │   │   │   │ : │ " │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │        │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├─────┬──┴┬──┴──┬┴──┬┴───┴───┴───┴──┬┴──┬┴───┴┬──┴┬───┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │     │   │               │   │     │   │   │     │
* └─────┴───┴─────┴───┴───────────────┴───┴─────┴───┴───┴─────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_latvian.h b/quantum/keymap_extras/keymap_latvian.h
index 087138cb72..025adf4fe0 100644
--- a/quantum/keymap_extras/keymap_latvian.h
+++ b/quantum/keymap_extras/keymap_latvian.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 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 │ ; │ ' │ \ │ │
+ * │     │ 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 │ , │ . │ / │ │
+ * │    │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ : │ " │ | │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │ : │ " │ | │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │    │   │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -127,19 +127,19 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ - │ │ « │ » │ € │ │ ’ │ │ │ │ │ – │ │ │
+ * │ - │   │ « │ » │ € │   │ ’ │   │   │   │   │ – │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ Ē │ Ŗ │ │ │ Ū │ Ī │ Ō │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ Ā │ Š │ │ │ Ģ │ │ │ Ķ │ Ļ │ │ ´ │ │ │
+ * │     │   │   │ Ē │ Ŗ │   │   │ Ū │ Ī │ Ō │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ Ā │ Š │   │   │ Ģ │   │   │ Ķ │ Ļ │   │ ´ │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ Ž │ │ Č │ │ │ Ņ │ │ │ │ │ │
+ * │    │   │ Ž │   │ Č │   │   │ Ņ │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
-#define LV_SHYP ALGR(LV_GRV) // ­ (soft hyphen)
+#define LV_SHYP ALGR(LV_GRV) // - (soft hyphen)
#define LV_NBSP ALGR(LV_1) //   (non-breaking space)
#define LV_LDAQ ALGR(LV_2) // «
#define LV_RDAQ ALGR(LV_3) // »
@@ -166,15 +166,15 @@
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ │ │ § │ ° │ │ ± │ × │ │ │ — │ │ │
+ * │   │   │   │   │ § │ ° │   │ ± │ × │   │   │ — │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ ¨ │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_lithuanian_azerty.h b/quantum/keymap_extras/keymap_lithuanian_azerty.h
index 6f47b16702..68bcd6dc1e 100644
--- a/quantum/keymap_extras/keymap_lithuanian_azerty.h
+++ b/quantum/keymap_extras/keymap_lithuanian_azerty.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ ! │ - │ / │ ; │ : │ , │ . │ = │ ( │ ) │ ? │ X │ │
+ * │ ` │ ! │ - │ / │ ; │ : │ , │ . │ = │ ( │ ) │ ? │ X │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Ą │ Ž │ E │ R │ T │ Y │ U │ I │ O │ P │ Į │ W │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ A │ S │ D │ Š │ G │ H │ J │ K │ L │ Ų │ Ė │ Q │ │
+ * │     │ Ą │ Ž │ E │ R │ T │ Y │ U │ I │ O │ P │ Į │ W │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ A │ S │ D │ Š │ G │ H │ J │ K │ L │ Ų │ Ė │ Q │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ < │ Z │ Ū │ C │ V │ B │ N │ M │ Č │ F │ Ę │ │
+ * │    │ < │ Z │ Ū │ C │ V │ B │ N │ M │ Č │ F │ Ę │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ │ │
+ * │ ~ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ │ │ │ │
+ * │    │ > │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -117,15 +117,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ´ │ @ │ _ │ # │ $ │ § │ ^ │ & │ * │ [ │ ] │ ' │ % │ │
+ * │ ´ │ @ │ _ │ # │ $ │ § │ ^ │ & │ * │ [ │ ] │ ' │ % │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ € │ │ │ │ │ │ │ │ { │ } │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ " │ | │ │
+ * │     │   │   │ € │   │   │   │   │   │   │   │ { │ } │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ " │ | │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ – │ │ │ │ │ │ │ │ „ │ “ │ \ │ │
+ * │    │ – │   │   │   │   │   │   │   │ „ │ “ │ \ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -138,7 +138,7 @@
#define LT_CIRC ALGR(LT_COMM) // ^
#define LT_AMPR ALGR(LT_DOT) // &
#define LT_ASTR ALGR(LT_EQL) // *
-#define LT_LBRC ALGR(LT_LPRN) // [
+#define LT_LBRC ALGR(LT_LRPN) // [
#define LT_RBRC ALGR(LT_RPRN) // ]
#define LT_QUOT ALGR(LT_QUES) // '
#define LT_PERC ALGR(LT_X) // %
diff --git a/quantum/keymap_extras/keymap_lithuanian_qwerty.h b/quantum/keymap_extras/keymap_lithuanian_qwerty.h
index afca2dc750..cbd56f1a67 100644
--- a/quantum/keymap_extras/keymap_lithuanian_qwerty.h
+++ b/quantum/keymap_extras/keymap_lithuanian_qwerty.h
@@ -22,7 +22,7 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ Ą │ Č │ Ę │ Ė │ Į │ Š │ Ų │ Ū │ 9 │ 0 │ - │ Ž │ │
+ * │ ` │ Ą │ Č │ Ę │ Ė │ Į │ Š │ Ų │ Ū │ 9 │ 0 │ - │ Ž │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
@@ -30,7 +30,7 @@
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
* │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -87,7 +87,7 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ │ │ │ │ │ │ │ │ ( │ ) │ _ │ │ │
+ * │ ~ │   │   │   │   │   │   │   │   │ ( │ ) │ _ │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
@@ -95,7 +95,7 @@
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
* │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -117,7 +117,7 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ │ │ │ = │ │
+ * │   │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │   │   │   │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ │ │ │ € │ │ │ │ │ │ │ │ │ │ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
@@ -125,7 +125,7 @@
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
* │ │ │ │ │ │ │ │ │ │ │ │ │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -143,7 +143,7 @@
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ │ │ │ + │ │
+ * │   │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │   │   │   │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
@@ -151,7 +151,7 @@
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
* │ │ │ │ │ │ │ │ │ │ │ │ │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_neo2.h b/quantum/keymap_extras/keymap_neo2.h
index f9fc00d794..818a739c76 100644
--- a/quantum/keymap_extras/keymap_neo2.h
+++ b/quantum/keymap_extras/keymap_neo2.h
@@ -13,78 +13,66 @@
* 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
+#ifndef KEYMAP_NEO2
+#define KEYMAP_NEO2
#include "keymap.h"
+#include "keymap_german.h"
-// clang-format off
+#define NEO_A KC_D
+#define NEO_B KC_N
+#define NEO_C KC_R
+#define NEO_D DE_OE
+#define NEO_E KC_F
+#define NEO_F KC_O
+#define NEO_G KC_I
+#define NEO_H KC_U
+#define NEO_I KC_S
+#define NEO_J DE_MINS
+#define NEO_K DE_Z
+#define NEO_L KC_E
+#define NEO_M KC_M
+#define NEO_N KC_J
+#define NEO_O KC_G
+#define NEO_P KC_V
+#define NEO_Q KC_P
+#define NEO_R KC_K
+#define NEO_S KC_H
+#define NEO_T KC_L
+#define NEO_U KC_A
+#define NEO_V KC_W
+#define NEO_W KC_T
+#define NEO_X KC_Q
+#define NEO_Y DE_AE
+#define NEO_Z KC_B
+#define NEO_AE KC_C
+#define NEO_OE KC_X
+#define NEO_UE DE_Y
+#define NEO_SS DE_UE
-/*
- * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ` │ │
- * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ X │ V │ L │ C │ W │ K │ H │ G │ F │ Q │ ß │ ´ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ L3 │ U │ I │ A │ E │ O │ S │ N │ R │ T │ D │ Y │ L3│ │
- * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │L4 │ Ü │ Ö │ Ä │ P │ Z │ B │ M │ , │ . │ J │ │
- * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ L4 │ │ │
- * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
- */
-// Row 1
-#define NE_CIRC KC_GRV // ^ (dead)
-#define NE_1 KC_1 // 1
-#define NE_2 KC_2 // 2
-#define NE_3 KC_3 // 3
-#define NE_4 KC_4 // 4
-#define NE_5 KC_5 // 5
-#define NE_6 KC_6 // 6
-#define NE_7 KC_7 // 7
-#define NE_8 KC_8 // 8
-#define NE_9 KC_9 // 9
-#define NE_0 KC_0 // 0
-#define NE_MINS KC_MINS // -
-#define NE_GRV KC_EQL // ` (dead)
-// Row 2
-#define NE_X KC_Q // X
-#define NE_V KC_W // V
-#define NE_L KC_E // L
-#define NE_C KC_R // C
-#define NE_W KC_T // W
-#define NE_K KC_Y // K
-#define NE_H KC_U // H
-#define NE_G KC_I // G
-#define NE_F KC_O // F
-#define NE_Q KC_P // Q
-#define NE_SS KC_LBRC // ß
-#define NE_ACUT KC_RBRC // ´ (dead)
-// Row 3
-#define NE_L3L KC_CAPS // (layer 3)
-#define NE_U KC_A // U
-#define NE_I KC_S // I
-#define NE_A KC_D // A
-#define NE_E KC_F // E
-#define NE_O KC_G // O
-#define NE_S KC_H // S
-#define NE_N KC_J // N
-#define NE_R KC_K // R
-#define NE_T KC_L // T
-#define NE_D KC_SCLN // D
-#define NE_Y KC_QUOT // Y
-#define NE_L3R KC_NUHS // (layer 3)
-// Row 4
-#define NE_L4L KC_NUBS // (layer 4)
-#define NE_UDIA KC_Z // Ü
-#define NE_ODIA KC_X // Ö
-#define NE_ADIA KC_C // Ä
-#define NE_P KC_V // P
-#define NE_Z KC_B // Z
-#define NE_B KC_N // B
-#define NE_M KC_M // M
-#define NE_COMM KC_COMM // ,
-#define NE_DOT KC_DOT // .
-#define NE_J KC_SLSH // J
-// Row 5
-#define NE_L4R KC_ALGR // (layer 4)
+#define NEO_DOT DE_DOT
+#define NEO_COMM DE_COMM
+
+#define NEO_1 DE_1
+#define NEO_2 DE_2
+#define NEO_3 DE_3
+#define NEO_4 DE_4
+#define NEO_5 DE_5
+#define NEO_6 DE_6
+#define NEO_7 DE_7
+#define NEO_8 DE_8
+#define NEO_9 DE_9
+#define NEO_0 DE_0
+#define NEO_MINS DE_SS
+
+#define NEO_ACUT DE_PLUS
+#define NEO_GRV DE_ACUT
+#define NEO_CIRC DE_CIRC
+
+#define NEO_L1_L KC_CAPS
+#define NEO_L1_R DE_HASH
+
+#define NEO_L2_L DE_LESS
+#define NEO_L2_R KC_ALGR
+
+#endif
diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h
index 55a58a25b0..7942533b31 100644
--- a/quantum/keymap_extras/keymap_nordic.h
+++ b/quantum/keymap_extras/keymap_nordic.h
@@ -24,7 +24,7 @@
#define NO_ACUT KC_EQL
#define NO_AM KC_LBRC
-#define NO_QUOT KC_RBRC // this is the "umlaut" char on Nordic keyboards, Apple layout
+#define NO_QUOT KC_RBRC // this is the "umlaut" char on Nordic keyboards, Apple layout
#define NO_AE KC_SCLN
#define NO_OSLH KC_QUOT
#define NO_APOS KC_NUHS
@@ -66,3 +66,8 @@
#define NO_BSLS ALGR(KC_MINS)
#define NO_MU ALGR(KC_M)
+
+// Icelandic characters
+#define NO_TH KC_SLSH //Þ
+#define NO_ETH KC_LBRC //Ð
+#define NO_UMLT KC_MINS //Ö
diff --git a/quantum/keymap_extras/keymap_norman.h b/quantum/keymap_extras/keymap_norman.h
index 9f20f66873..3da80e0401 100644
--- a/quantum/keymap_extras/keymap_norman.h
+++ b/quantum/keymap_extras/keymap_norman.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Q │ W │ D │ F │ K │ J │ U │ R │ L │ ; │ [ │ ] │ \ │
+ * │     │ Q │ W │ D │ F │ K │ J │ U │ R │ L │ ; │ [ │ ] │  \  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ A │ S │ E │ T │ G │ Y │ N │ I │ O │ H │ ' │ │
+ * │      │ A │ S │ E │ T │ G │ Y │ N │ I │ O │ H │ ' │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ Z │ X │ C │ V │ B │ P │ M │ , │ . │ / │ │
+ * │        │ Z │ X │ C │ V │ B │ P │ M │ , │ . │ / │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -87,15 +87,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ │ │ │ │ │ │ │ │ │ │ : │ { │ } │ | │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ " │ │
+ * │      │   │   │   │   │   │   │   │   │   │   │ " │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │        │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_norwegian.h b/quantum/keymap_extras/keymap_norwegian.h
index b2499f4fda..b16339c8b3 100644
--- a/quantum/keymap_extras/keymap_norwegian.h
+++ b/quantum/keymap_extras/keymap_norwegian.h
@@ -22,131 +22,154 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ | │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ \ │ │
+ * │ | │ 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 │ Ø │ Æ │ ' │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
-#define NO_PIPE KC_GRV // |
-#define NO_1 KC_1 // 1
-#define NO_2 KC_2 // 2
-#define NO_3 KC_3 // 3
-#define NO_4 KC_4 // 4
-#define NO_5 KC_5 // 5
-#define NO_6 KC_6 // 6
-#define NO_7 KC_7 // 7
-#define NO_8 KC_8 // 8
-#define NO_9 KC_9 // 9
-#define NO_0 KC_0 // 0
-#define NO_PLUS KC_MINS // +
-#define NO_BSLS KC_EQL // (backslash)
+#define NRW_PIPE KC_GRV // |
+#define NRW_1 KC_1 // 1
+#define NRW_2 KC_2 // 2
+#define NRW_3 KC_3 // 3
+#define NRW_4 KC_4 // 4
+#define NRW_5 KC_5 // 5
+#define NRW_6 KC_6 // 6
+#define NRW_7 KC_7 // 7
+#define NRW_8 KC_8 // 8
+#define NRW_9 KC_9 // 9
+#define NRW_0 KC_0 // 0
+#define NRW_PLUS KC_MINS // +
+#define NRW_BSLS KC_EQL // (backslash)
// Row 2
-#define NO_Q KC_Q // Q
-#define NO_W KC_W // W
-#define NO_E KC_E // E
-#define NO_R KC_R // R
-#define NO_T KC_T // T
-#define NO_Y KC_Y // Y
-#define NO_U KC_U // U
-#define NO_I KC_I // I
-#define NO_O KC_O // O
-#define NO_P KC_P // P
-#define NO_ARNG KC_LBRC // Å
-#define NO_DIAE KC_RBRC // ¨ (dead)
+#define NRW_Q KC_Q // Q
+#define NRW_W KC_W // W
+#define NRW_E KC_E // E
+#define NRW_R KC_R // R
+#define NRW_T KC_T // T
+#define NRW_Y KC_Y // Y
+#define NRW_U KC_U // U
+#define NRW_I KC_I // I
+#define NRW_O KC_O // O
+#define NRW_P KC_P // P
+#define NRW_ARNG KC_LBRC // Å
+#define NRW_DIAE KC_RBRC // ¨ (dead)
// Row 3
-#define NO_A KC_A // A
-#define NO_S KC_S // S
-#define NO_D KC_D // D
-#define NO_F KC_F // F
-#define NO_G KC_G // G
-#define NO_H KC_H // H
-#define NO_J KC_J // J
-#define NO_K KC_K // K
-#define NO_L KC_L // L
-#define NO_OSTR KC_SCLN // Ø
-#define NO_AE KC_QUOT // Æ
-#define NO_QUOT KC_NUHS // '
+#define NRW_A KC_A // A
+#define NRW_S KC_S // S
+#define NRW_D KC_D // D
+#define NRW_F KC_F // F
+#define NRW_G KC_G // G
+#define NRW_H KC_H // H
+#define NRW_J KC_J // J
+#define NRW_K KC_K // K
+#define NRW_L KC_L // L
+#define NRW_OSTR KC_SCLN // Ø
+#define NRW_AE KC_QUOT // Æ
+#define NRW_QUOT KC_NUHS // '
// Row 4
-#define NO_LABK KC_NUBS // <
-#define NO_Z KC_Z // Z
-#define NO_X KC_X // X
-#define NO_C KC_C // C
-#define NO_V KC_V // V
-#define NO_B KC_B // B
-#define NO_N KC_N // N
-#define NO_M KC_M // M
-#define NO_COMM KC_COMM // ,
-#define NO_DOT KC_DOT // .
-#define NO_MINS KC_SLSH // -
+#define NRW_LABK KC_NUBS // <
+#define NRW_Z KC_Z // Z
+#define NRW_X KC_X // X
+#define NRW_C KC_C // C
+#define NRW_V KC_V // V
+#define NRW_B KC_B // B
+#define NRW_N KC_N // N
+#define NRW_M KC_M // M
+#define NRW_COMM KC_COMM // ,
+#define NRW_DOT KC_DOT // .
+#define NRW_MINS KC_SLSH // -
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ § │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │ │
+ * │ § │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ^ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ * │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ ^ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ * │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
-#define NO_SECT S(NO_PIPE) // §
-#define NO_EXLM S(NO_1) // !
-#define NO_DQUO S(NO_2) // "
-#define NO_HASH S(NO_3) // #
-#define NO_CURR S(NO_4) // ¤
-#define NO_PERC S(NO_5) // %
-#define NO_AMPR S(NO_6) // &
-#define NO_SLSH S(NO_7) // /
-#define NO_LPRN S(NO_8) // (
-#define NO_RPRN S(NO_9) // )
-#define NO_EQL S(NO_0) // =
-#define NO_QUES S(NO_PLUS) // ?
-#define NO_GRV S(NO_BSLS) // ` (dead)
+#define NRW_SECT S(NRW_PIPE) // §
+#define NRW_EXLM S(NRW_1) // !
+#define NRW_DQUO S(NRW_2) // "
+#define NRW_HASH S(NRW_3) // #
+#define NRW_CURR S(NRW_4) // ¤
+#define NRW_PERC S(NRW_5) // %
+#define NRW_AMPR S(NRW_6) // &
+#define NRW_SLSH S(NRW_7) // /
+#define NRW_LPRN S(NRW_8) // (
+#define NRW_RPRN S(NRW_9) // )
+#define NRW_EQL S(NRW_0) // =
+#define NRW_QUES S(NRW_PLUS) // ?
+#define NRW_GRV S(NRW_BSLS) // ` (dead)
// Row 2
-#define NO_CIRC S(NO_DIAE) // ^ (dead)
+#define NRW_CIRC S(NRW_DIAE) // ^ (dead)
// Row 3
-#define NO_ASTR S(NO_QUOT) // *
+#define NRW_ASTR S(NRW_QUOT) // *
// Row 4
-#define NO_RABK S(NO_LABK) // >
-#define NO_SCLN S(NO_COMM) // ;
-#define NO_COLN S(NO_DOT) // :
-#define NO_UNDS S(NO_MINS) // _
+#define NRW_RABK S(NRW_LABK) // >
+#define NRW_SCLN S(NRW_COMM) // ;
+#define NRW_COLN S(NRW_DOT) // :
+#define NRW_UNDS S(NRW_MINS) // _
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ @ │ £ │ $ │ € │ │ { │ [ │ ] │ } │ │ ´ │ │
+ * │   │   │ @ │ £ │ $ │ € │   │ { │ [ │ ] │ } │   │ ´ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ~ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ ~ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ µ │ │ │ │ │
+ * │    │   │   │   │   │   │   │   │ µ │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
-#define NO_AT ALGR(NO_2) // @
-#define NO_PND ALGR(NO_3) // £
-#define NO_DLR ALGR(NO_4) // $
-#define NO_EURO ALGR(NO_5) // €
-#define NO_LCBR ALGR(NO_7) // {
-#define NO_LBRC ALGR(NO_8) // [
-#define NO_RBRC ALGR(NO_9) // ]
-#define NO_RCBR ALGR(NO_0) // }
-#define NO_ACUT ALGR(NO_BSLS) // ´ (dead)
+#define NRW_AT ALGR(NRW_2) // @
+#define NRW_PND ALGR(NRW_3) // £
+#define NRW_DLR ALGR(NRW_4) // $
+#define NRW_EURO ALGR(NRW_5) // €
+#define NRW_LCBR ALGR(NRW_7) // {
+#define NRW_LBRC ALGR(NRW_8) // [
+#define NRW_RBRC ALGR(NRW_9) // ]
+#define NRW_RCBR ALGR(NRW_0) // }
+#define NRW_ACUT ALGR(NRW_BSLS) // ´ (dead)
// Row 2
-#define NO_TILD ALGR(NO_DIAE) // ~ (dead)
+#define NRW_TILD ALGR(NRW_DIAE) // ~ (dead)
// Row 4
-#define NO_MICR ALGR(NO_M) // µ
+#define NRW_MICR ALGR(NRW_M) // µ
+
+// DEPRECATED
+#define NRW_AM NRW_ARNG
+#define NRW_AA NRW_ARNG
+#define NRW_OSLH NRW_OSTR
+#define NRW_APOS NRW_QUOT
+#define NRW_LESS NRW_LABK
+#define NRW_QUO2 NRW_DQUO
+#define NRW_BULT NRW_CURR
+#define NRW_GRTR NRW_RABK
+#define NRW_MU NRW_MICR
+// Norwegian macOS symbols
+#define NRW_ACUT_MAC NRW_BSLS // ´
+#define NRW_APOS_MAC NRW_LABK // '
+#define NRW_AT_MAC NRW_QUOT // @
+#define NRW_BSLS_MAC S(ALGR(NRW_7)) // (backslash)
+#define NRW_DLR_MAC S(NRW_4) // $
+#define NRW_GRV_MAC ALGR(NRW_BSLS) // `
+#define NRW_GRTR_MAC S(NRW_PIPE) // >
+#define NRW_LCBR_MAC S(ALGR(NRW_8)) // {
+#define NRW_LESS_MAC NRW_PIPE // <
+#define NRW_PIPE_MAC ALGR(NRW_7) // |
+#define NRW_RCBR_MAC S(ALGR(NRW_9)) // }
diff --git a/quantum/keymap_extras/keymap_plover.h b/quantum/keymap_extras/keymap_plover.h
index cd07211bca..f27d2ba77a 100644
--- a/quantum/keymap_extras/keymap_plover.h
+++ b/quantum/keymap_extras/keymap_plover.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │Num│ │ │ │ │ │ │ │ │ │ │ │ │
+ * │   │Num│   │   │   │   │   │   │   │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ S │ T │ P │ H │ │ * │ F │ P │ L │ T │ D │ │ │
+ * │     │ S │ T │ P │ H │   │ * │ F │ P │ L │ T │ D │   │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ K │ W │ R │ │ │ R │ B │ G │ S │ Z │ │
+ * │      │   │ K │ W │ R │   │   │ R │ B │ G │ S │ Z │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ A │ O │ │ E │ U │ │ │ │ │
+ * │        │   │   │ A │ O │   │ E │ U │   │   │   │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_polish.h b/quantum/keymap_extras/keymap_polish.h
index e5a32f22db..a5c5cec543 100644
--- a/quantum/keymap_extras/keymap_polish.h
+++ b/quantum/keymap_extras/keymap_polish.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
+ * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ │
+ * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │
+ * │        │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -87,15 +87,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │
+ * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │  |  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ │ │ │ │ │ │ │ │ : │ " │ │
+ * │      │   │   │   │   │   │   │   │   │   │ : │ " │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │        │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -126,15 +126,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │   │   │   │   │   │   │   │   │   │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ Ę │ │ │ │ € │ │ Ó │ │ │ │ │
+ * │     │   │   │ Ę │   │   │   │ € │   │ Ó │   │   │   │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ Ą │ Ś │ │ │ │ │ │ │ Ł │ │ │ │
+ * │      │ Ą │ Ś │   │   │   │   │   │   │ Ł │   │   │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ Ż │ Ź │ Ć │ │ │ Ń │ │ │ │ │ │
+ * │        │ Ż │ Ź │ Ć │   │   │ Ń │   │   │   │   │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 2
diff --git a/quantum/keymap_extras/keymap_portuguese.h b/quantum/keymap_extras/keymap_portuguese.h
index 19d7dcd817..84851b334a 100644
--- a/quantum/keymap_extras/keymap_portuguese.h
+++ b/quantum/keymap_extras/keymap_portuguese.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ \ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ « │ │
+ * │ \ │ 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 │ Ç │ º │ ~ │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ | │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ » │ │
+ * │ | │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ » │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ * │ ` │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ ª │ ^ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ * │ ` │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ ª │ ^ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -127,15 +127,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ @ │ £ │ § │ │ │ { │ [ │ ] │ } │ │ │ │
+ * │   │   │ @ │ £ │ § │   │   │ { │ [ │ ] │ } │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ € │ │ │ │ │ │ │ │ ¨ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │ € │   │   │   │   │   │   │   │ ¨ │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_portuguese_osx_iso.h b/quantum/keymap_extras/keymap_portuguese_osx_iso.h
new file mode 100644
index 0000000000..b2e52063a9
--- /dev/null
+++ b/quantum/keymap_extras/keymap_portuguese_osx_iso.h
@@ -0,0 +1,234 @@
+/* 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/>.
+ */
+
+#pragma once
+
+#include "keymap.h"
+
+// clang-format off
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ § │ 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 PT_SECT KC_GRV // §
+#define PT_1 KC_1 // 1
+#define PT_2 KC_2 // 2
+#define PT_3 KC_3 // 3
+#define PT_4 KC_4 // 4
+#define PT_5 KC_5 // 5
+#define PT_6 KC_6 // 6
+#define PT_7 KC_7 // 7
+#define PT_8 KC_8 // 8
+#define PT_9 KC_9 // 9
+#define PT_0 KC_0 // 0
+#define PT_QUOT KC_MINS // '
+#define PT_PLUS KC_EQL // +
+// Row 2
+#define PT_Q KC_Q // Q
+#define PT_W KC_W // W
+#define PT_E KC_E // E
+#define PT_R KC_R // R
+#define PT_T KC_T // T
+#define PT_Y KC_Y // Y
+#define PT_U KC_U // U
+#define PT_I KC_I // I
+#define PT_O KC_O // O
+#define PT_P KC_P // P
+#define PT_MORD KC_LBRC // º
+#define PT_ACUT KC_RBRC // ´ (dead)
+// Row 3
+#define PT_A KC_A // A
+#define PT_S KC_S // S
+#define PT_D KC_D // D
+#define PT_F KC_F // F
+#define PT_G KC_G // G
+#define PT_H KC_H // H
+#define PT_J KC_J // J
+#define PT_K KC_K // K
+#define PT_L KC_L // L
+#define PT_CCED KC_SCLN // Ç
+#define PT_TILD KC_QUOT // ~ (dead)
+#define PT_BSLS KC_NUHS // (backslash)
+// Row 4
+#define PT_LABK KC_NUBS // <
+#define PT_Z KC_Z // Z
+#define PT_X KC_X // X
+#define PT_C KC_C // C
+#define PT_V KC_V // V
+#define PT_B KC_B // B
+#define PT_N KC_N // N
+#define PT_M KC_M // M
+#define PT_COMM KC_COMM // ,
+#define PT_DOT KC_DOT // .
+#define PT_MINS KC_SLSH // -
+
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ ± │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ * │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │   │   │   │   │   │   │   │   │   │   │ ª │ ` │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │   │   │   │   │   │   │   │   │   │   │ ^ │ | │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define PT_PLMN S(PT_SECT) // ±
+#define PT_EXLM S(PT_1) // !
+#define PT_DQUO S(PT_2) // "
+#define PT_HASH S(PT_3) // #
+#define PT_DLR S(PT_4) // $
+#define PT_PERC S(PT_5) // %
+#define PT_AMPR S(PT_6) // &
+#define PT_SLSH S(PT_7) // /
+#define PT_LPRN S(PT_8) // (
+#define PT_RPRN S(PT_9) // )
+#define PT_EQL S(PT_0) // =
+#define PT_QUES S(PT_QUOT) // ?
+#define PT_ASTR S(PT_PLUS) // *
+// Row 2
+#define PT_FORD S(PT_MORD) // ª
+#define PT_GRV S(PT_ACUT) // ` (dead)
+// Row 3
+#define PT_CIRC S(PT_TILD) // ^ (dead)
+#define PT_PIPE S(PT_BSLS) // |
+// Row 4
+#define PT_RABK S(PT_LABK) // >
+#define PT_SCLN S(PT_COMM) // ;
+#define PT_COLN S(PT_DOT) // :
+#define PT_UNDS S(PT_MINS) // _
+
+/* Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │   │  │ @ │ € │ £ │ ‰ │ ¶ │ ÷ │ [ │ ] │ ≠ │   │   │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │ Œ │ ∑ │ Æ │ ® │ ™ │ ¥ │ † │ ı │ Ø │ π │ ° │ ¨ │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │ Å │ ß │ ∂ │ ƒ │ ˙ │ ˇ │ ¯ │ „ │ ‘ │ ¸ │ ˜ │ ‹ │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ ≤ │ Ω │ « │ © │ √ │ ∫ │ ¬ │ µ │ “ │ … │ — │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define PT_APPL A(PT_1) //  (Apple logo)
+#define PT_AT A(PT_2) // @
+#define PT_EURO A(PT_3) // €
+#define PT_PND A(PT_4) // £
+#define PT_PERM A(PT_5) // ‰
+#define PT_PILC A(PT_6) // ¶
+#define PT_DIV A(PT_7) // ÷
+#define PT_LBRC A(PT_8) // [
+#define PT_RBRC A(PT_9) // ]
+#define PT_NEQL A(PT_0) // ≠
+// Row 2
+#define PT_OE A(PT_Q) // Œ
+#define PT_NARS A(PT_W) // ∑
+#define PT_AE A(PT_E) // Æ
+#define PT_REGD A(PT_R) // ®
+#define PT_TM A(PT_T) // ™
+#define PT_YEN A(PT_Y) // ¥
+#define PT_DAGG A(PT_U) // †
+#define PT_DLSI A(PT_I) // ı
+#define PT_OSTR A(PT_O) // Ø
+#define PT_PI A(PT_P) // π
+#define PT_DEG A(PT_MORD) // °
+#define PT_DIAE A(PT_ACUT) // ¨ (dead)
+// Row 3
+#define PT_ARNG A(PT_A) // å
+#define PT_SS A(PT_S) // ß
+#define PT_PDIF A(PT_D) // ∂
+#define PT_FHK A(PT_F) // ƒ
+#define PT_DOTA A(PT_G) // ˙
+#define PT_CARN A(PT_H) // ˇ
+#define PT_MACR A(PT_J) // ¯
+#define PT_DLQU A(PT_K) // „
+#define PT_LSQU A(PT_L) // ‘
+#define PT_CEDL A(PT_CCED) // ¸
+#define PT_STIL A(PT_TILD) // ˜ (dead)
+#define PT_LSAQ A(PT_BSLS) // ‹
+// Row 4
+#define PT_LTEQ A(PT_LABK) // ≤
+#define PT_OMEG A(PT_Z) // Ω
+#define PT_LDAQ A(PT_X) // «
+#define PT_COPY A(PT_C) // ©
+#define PT_SQRT A(PT_V) // √
+#define PT_INTG A(PT_B) // ∫
+#define PT_NOT A(PT_N) // ¬
+#define PT_MICR A(PT_M) // µ
+#define PT_LDQU A(PT_COMM) // “
+#define PT_ELLP A(PT_DOT) // …
+#define PT_MDSH A(PT_MINS) // —
+
+/* Shift+Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │   │ ¡ │ fi │ fl │ ¢ │ ∞ │ • │ ⁄ │ { │ } │ ≈ │ ¿ │ ◊ │     │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │     │   │   │   │   │   │   │ ‡ │ ˚ │   │ ∏ │   │ ˝ │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐  │
+ * │      │   │   │ ∆ │   │   │   │   │ ‚ │ ’ │ ˛ │ ˆ │ › │  │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │    │ ≥ │   │ » │   │   │   │   │   │ ” │ · │ – │        │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │     │    │     │                       │     │    │     │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+// Row 1
+#define PT_IEXL S(A(PT_1)) // ¡
+#define PT_FI S(A(PT_2)) // fi
+#define PT_FL S(A(PT_3)) // fl
+#define PT_CENT S(A(PT_4)) // ¢
+#define PT_INFN S(A(PT_5)) // ∞
+#define PT_BULT S(A(PT_6)) // •
+#define PT_FRSL S(A(PT_7)) // ⁄
+#define PT_LCBR S(A(PT_8)) // {
+#define PT_RCBR S(A(PT_9)) // }
+#define PT_AEQL S(A(PT_0)) // ≈
+#define PT_IQUE S(A(PT_QUOT)) // ¿
+#define PT_LOZN S(A(PT_PLUS)) // ◊
+// Row 2
+#define PT_DDAG S(A(PT_U)) // ‡
+#define PT_RNGA S(A(PT_I)) // ˚
+#define PT_NARP S(A(PT_P)) // ∏
+#define PT_DACU S(A(PT_ACUT)) // ˝
+// Row 3
+#define PT_INCR S(A(PT_D)) // ∆
+#define PT_SLQU S(A(PT_K)) // ‚
+#define PT_RSQU S(A(PT_L)) // ’
+#define PT_OGON S(A(PT_CCED)) // ˛
+#define PT_DCIR S(A(PT_TILD)) // ˆ (dead)
+#define PT_RSAQ S(A(PT_BSLS)) // ›
+// Row 4
+#define PT_GTEQ S(A(PT_LABK)) // ≥
+#define PT_RDAQ S(A(PT_X)) // »
+#define PT_RDQU S(A(PT_COMM)) // ”
+#define PT_MDDT S(A(PT_DOT)) // ·
+#define PT_NDSH S(A(PT_MINS)) // –
diff --git a/quantum/keymap_extras/keymap_romanian.h b/quantum/keymap_extras/keymap_romanian.h
index 27086d684c..e2b8483dfd 100644
--- a/quantum/keymap_extras/keymap_romanian.h
+++ b/quantum/keymap_extras/keymap_romanian.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ „ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ „ │ 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 │ Ș │ Ț │ Â │ │
+ * │     │ 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 │ , │ . │ / │ │
+ * │    │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ” │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ” │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ | │ │ │ │ │ │ │ │ ; │ : │ ? │ │
+ * │    │ | │   │   │   │   │   │   │   │ ; │ : │ ? │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -121,15 +121,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ ~ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │ ¨ │ ¸ │ │
+ * │ ` │ ~ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │ ¨ │ ¸ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ € │ │ │ │ │ │ │ § │ [ │ ] │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ ß │ Đ │ │ │ │ │ │ Ł │ │ ' │ │ │
+ * │     │   │   │ € │   │   │   │   │   │   │ § │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │ ß │ Đ │   │   │   │   │   │ Ł │   │ ' │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ © │ │ │ │ │ < │ > │ │ │
+ * │    │   │   │   │ © │   │   │   │   │ < │ > │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -163,15 +163,15 @@
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ │ │ │ │ │ │ │ │ │ │ – │ ± │ │
+ * │ ~ │   │   │   │   │   │   │   │   │   │   │ – │ ± │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ " │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ " │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ « │ » │ │ │
+ * │    │   │   │   │   │   │   │   │   │ « │ » │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_russian.h b/quantum/keymap_extras/keymap_russian.h
index 71aece677d..eb0581147c 100644
--- a/quantum/keymap_extras/keymap_russian.h
+++ b/quantum/keymap_extras/keymap_russian.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ Ё │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ Ё │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Й │ Ц │ У │ К │ Е │ Н │ Г │ Ш │ Щ │ З │ Х │ Ъ │ \ │
+ * │     │ Й │ Ц │ У │ К │ Е │ Н │ Г │ Ш │ Щ │ З │ Х │ Ъ │  \  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ Ф │ Ы │ В │ А │ П │ Р │ О │ Л │ Д │ Ж │ Э │ │
+ * │      │ Ф │ Ы │ В │ А │ П │ Р │ О │ Л │ Д │ Ж │ Э │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ Я │ Ч │ С │ М │ И │ Т │ Ь │ Б │ Ю │ . │ │
+ * │        │ Я │ Ч │ С │ М │ И │ Т │ Ь │ Б │ Ю │ . │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -87,15 +87,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ ! │ " │ № │ ; │ % │ : │ ? │ * │ ( │ ) │ _ │ + │ │
+ * │   │ ! │ " │ № │ ; │ % │ : │ ? │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ / │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │  /  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ │ │ │ │ │ │ │ , │ │
+ * │        │   │   │   │   │   │   │   │   │   │ , │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -118,15 +118,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ │ │ │ │ │ │ ₽ │ │ │ │ │ │
+ * │   │   │   │   │   │   │   │   │ ₽ │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │        │   │   │   │   │   │   │   │   │   │   │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_serbian.h b/quantum/keymap_extras/keymap_serbian.h
index a17dcc5f34..738a2d4afb 100644
--- a/quantum/keymap_extras/keymap_serbian.h
+++ b/quantum/keymap_extras/keymap_serbian.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ + │ │
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Љ │ Њ │ Е │ Р │ Т │ З │ У │ И │ О │ П │ Ш │ Ђ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ А │ С │ Д │ Ф │ Г │ Х │ Ј │ К │ Л │ Ч │ Ћ │ Ж │ │
+ * │     │ Љ │ Њ │ Е │ Р │ Т │ З │ У │ И │ О │ П │ Ш │ Ђ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ А │ С │ Д │ Ф │ Г │ Х │ Ј │ К │ Л │ Ч │ Ћ │ Ж │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ < │ Ѕ │ Џ │ Ц │ В │ Б │ Н │ М │ , │ . │ - │ │
+ * │    │ < │ Ѕ │ Џ │ Ц │ В │ Б │ Н │ М │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ * │ │
+ * │ ~ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ * │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -121,15 +121,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │   │   │   │   │   │   │   │   │   │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ € │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │ € │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 2
diff --git a/quantum/keymap_extras/keymap_serbian_latin.h b/quantum/keymap_extras/keymap_serbian_latin.h
index 13c82eb405..b514102c02 100644
--- a/quantum/keymap_extras/keymap_serbian_latin.h
+++ b/quantum/keymap_extras/keymap_serbian_latin.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ‚ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ + │ │
+ * │ ‚ │ 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 │ Č │ Ć │ Ž │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ * │ │
+ * │ ~ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ * │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -121,15 +121,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │ ¨ │ ¸ │ │
+ * │   │   │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │ ¨ │ ¸ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ \ │ | │ € │ │ │ │ │ │ │ │ ÷ │ × │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ [ │ ] │ │ │ ł │ Ł │ │ ß │ ¤ │ │
+ * │     │ \ │ | │ € │   │   │   │   │   │   │   │ ÷ │ × │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │ [ │ ] │   │   │ ł │ Ł │   │ ß │ ¤ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ @ │ { │ } │ § │ │ │ │ │
+ * │    │   │   │   │   │ @ │ { │ } │ § │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_slovak.h b/quantum/keymap_extras/keymap_slovak.h
index bf0b7275ce..f7c1a1b80b 100644
--- a/quantum/keymap_extras/keymap_slovak.h
+++ b/quantum/keymap_extras/keymap_slovak.h
@@ -141,8 +141,8 @@
*/
// Row 1
#define SK_TILD ALGR(SK_PLUS) // ~
-#define SK_CIRC ALGR(SK_SCAR) // ^ (dead)
-#define SK_BREV ALGR(SK_CCAR) // ˘ (dead)
+#define SK_CIRC ALGR(SK_LCAR) // ^ (dead)
+#define SK_BREV ALGR(SK_SCAR) // ˘ (dead)
#define SK_OGON ALGR(SK_TCAR) // ˛ (dead)
#define SK_GRV ALGR(SK_ZCAR) // `
#define SK_DOTA ALGR(SK_YACU) // ˙ (dead)
diff --git a/quantum/keymap_extras/keymap_slovenian.h b/quantum/keymap_extras/keymap_slovenian.h
index 827fa06c25..d24c9c6355 100644
--- a/quantum/keymap_extras/keymap_slovenian.h
+++ b/quantum/keymap_extras/keymap_slovenian.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ¸ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ + │ │
+ * │ ¸ │ 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 │ Č │ Ć │ Ž │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ¨ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ * │ │
+ * │ ¨ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ * │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -121,15 +121,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ ~ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │ │ │ │
+ * │   │ ~ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ \ │ | │ € │ │ │ │ │ │ │ │ ÷ │ × │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ [ │ ] │ │ │ ł │ Ł │ │ ß │ ¤ │ │
+ * │     │ \ │ | │ € │   │   │   │   │   │   │   │ ÷ │ × │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │ [ │ ] │   │   │ ł │ Ł │   │ ß │ ¤ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ @ │ { │ } │ § │ │ │ │ │
+ * │    │   │   │   │   │ @ │ { │ } │ § │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -161,3 +161,11 @@
#define SI_LCBR ALGR(SI_B) // {
#define SI_RCBR ALGR(SI_N) // }
#define SI_SECT ALGR(SI_M) // §
+
+// DEPRECATED
+#define SI_QOT SI_QUOT
+#define SI_SV SI_SCAR
+#define SI_CV SI_CCAR
+#define SI_ZV SI_ZCAR
+#define SI_DQOT SI_DQUO
+#define SI_QST SI_QUES
diff --git a/quantum/keymap_extras/keymap_spanish.h b/quantum/keymap_extras/keymap_spanish.h
index 8432c56e99..1465ecc81b 100644
--- a/quantum/keymap_extras/keymap_spanish.h
+++ b/quantum/keymap_extras/keymap_spanish.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ º │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ¡ │ │
+ * │ º │ 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 │ Ñ │ ´ │ Ç │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ª │ ! │ " │ · │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ¿ │ │
+ * │ ª │ ! │ " │ · │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ¿ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ ^ │ * │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ ^ │ * │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ ¨ │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -126,15 +126,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ \ │ | │ @ │ # │ ~ │ € │ ¬ │ │ │ │ │ │ │ │
+ * │ \ │ | │ @ │ # │ ~ │ € │ ¬ │   │   │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ [ │ ] │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ { │ } │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -151,3 +151,12 @@
// Row 3
#define ES_LCBR ALGR(ES_ACUT) // {
#define ES_RCBR ALGR(ES_CCED) // }
+
+// DEPRECATED
+#define ES_OVRR ES_MORD
+#define ES_APOS ES_QUOT
+#define ES_LESS ES_LABK
+#define ES_ASML ES_FORD
+#define ES_OVDT ES_BULT
+#define ES_UMLT ES_DIAE
+#define ES_GRTR ES_RABK
diff --git a/quantum/keymap_extras/keymap_spanish_dvorak.h b/quantum/keymap_extras/keymap_spanish_dvorak.h
index ea0c93f86a..9f18bdea56 100644
--- a/quantum/keymap_extras/keymap_spanish_dvorak.h
+++ b/quantum/keymap_extras/keymap_spanish_dvorak.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ º │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ¡ │ │
+ * │ º │ 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 │ ´ │ Ç │ │
+ * │     │ . │ , │ Ñ │ 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 │ │
+ * │    │ < │ - │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ª │ ! │ " │ · │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ¿ │ │
+ * │ ª │ ! │ " │ · │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ¿ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ : │ ; │ │ │ │ │ │ │ │ │ ^ │ * │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ │ │
+ * │     │ : │ ; │   │   │   │   │   │   │   │   │ ^ │ * │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │ ¨ │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ _ │ │ │ │ │ │ │ │ │ │ │
+ * │    │ > │ _ │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -119,22 +119,22 @@
#define DV_CIRC S(DV_GRV) // ^ (dead)
#define DV_ASTR S(DV_PLUS) // *
// Row 3
-#define DV_DIAE S(DV_ACUT) // ¨ (dead)
+#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
diff --git a/quantum/keymap_extras/keymap_steno.h b/quantum/keymap_extras/keymap_steno.h
index 07d96b7465..a8173d5293 100644
--- a/quantum/keymap_extras/keymap_steno.h
+++ b/quantum/keymap_extras/keymap_steno.h
@@ -70,7 +70,7 @@ enum steno_keycodes {
STN_NB,
STN_NC,
STN_ZR,
- STN__MAX = STN_ZR, // must be less than QK_STENO_BOLT
+ STN__MAX = STN_ZR, // must be less than QK_STENO_BOLT
};
#ifdef STENO_COMBINEDMAP
diff --git a/quantum/keymap_extras/keymap_swedish.h b/quantum/keymap_extras/keymap_swedish.h
index cadb66d3bd..4d2eaa9783 100644
--- a/quantum/keymap_extras/keymap_swedish.h
+++ b/quantum/keymap_extras/keymap_swedish.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ § │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ ´ │ │
+ * │ § │ 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 │ Ö │ Ä │ ' │ │
+ * │     │ 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 │ , │ . │ - │ │
+ * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ½ │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │ │
+ * │ ½ │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ^ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ * │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ ^ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │ * │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * │    │ > │   │   │   │   │   │   │   │ ; │ : │ _ │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -125,15 +125,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ @ │ £ │ $ │ € │ │ { │ [ │ ] │ } │ \ │ │ │
+ * │   │   │ @ │ £ │ $ │ € │   │ { │ [ │ ] │ } │ \ │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ ~ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │ ~ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ | │ │ │ │ │ │ │ µ │ │ │ │ │
+ * │    │ | │   │   │   │   │   │   │ µ │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -154,3 +154,26 @@
// DEPRECATED
#include "keymap_nordic.h"
+
+#define SE_OSLH SE_ODIA
+#define SE_APOS SE_QUOT
+#define SE_LESS SE_LABK
+#define SE_QUO2 SE_DQUO
+#define SE_BULT SE_CURR
+#define SE_GRTR SE_RABK
+#define SE_AA SE_ARNG
+#define SE_AE SE_ADIA
+#define SE_AM SE_ARNG
+#define SE_MU SE_MICR
+// Swedish macOS symbols (not vetted)
+#define SE_ACUT_MAC SE_ACUT
+#define SE_APOS_MAC SE_LABK
+#define SE_AT_MAC SE_ADIA
+#define SE_BSLS_MAC S(SE_LCBR)
+#define SE_DLR_MAC SE_CURR
+#define SE_GRV_MAC SE_BSLS
+#define SE_GRTR_MAC SE_HALF
+#define SE_LCBR_MAC S(SE_LBRC)
+#define SE_LESS_MAC SE_SECT
+#define SE_PIPE_MAC SE_LCBR
+#define SE_RCBR_MAC S(SE_RBRC)
diff --git a/quantum/keymap_extras/keymap_swiss_de.h b/quantum/keymap_extras/keymap_swiss_de.h
index 6723836870..fee37eabb8 100644
--- a/quantum/keymap_extras/keymap_swiss_de.h
+++ b/quantum/keymap_extras/keymap_swiss_de.h
@@ -162,3 +162,21 @@
#define CH_RCBR ALGR(CH_DLR) // }
// Row 4
#define CH_BSLS ALGR(CH_LABK) // (backslash)
+
+// 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_swiss_fr.h b/quantum/keymap_extras/keymap_swiss_fr.h
index b1f2455a68..528c77440f 100644
--- a/quantum/keymap_extras/keymap_swiss_fr.h
+++ b/quantum/keymap_extras/keymap_swiss_fr.h
@@ -162,3 +162,82 @@
#define CH_RCBR ALGR(CH_DLR) // }
// Row 4
#define CH_BSLS ALGR(CH_LABK) // (backslash)
+//
+// 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_turkish_f.h b/quantum/keymap_extras/keymap_turkish_f.h
index aaee2aa480..aac27413c9 100644
--- a/quantum/keymap_extras/keymap_turkish_f.h
+++ b/quantum/keymap_extras/keymap_turkish_f.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ + │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ / │ - │ │
+ * │ + │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ / │ - │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ F │ G │ Ğ │ I │ O │ D │ R │ N │ H │ P │ Q │ W │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ U │ İ │ E │ A │ Ü │ T │ K │ M │ L │ Y │ Ş │ X │ │
+ * │     │ F │ G │ Ğ │ I │ O │ D │ R │ N │ H │ P │ Q │ W │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ U │ İ │ E │ A │ Ü │ T │ K │ M │ L │ Y │ Ş │ X │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ < │ J │ Ö │ V │ C │ Ç │ Z │ S │ B │ . │ , │ │
+ * │    │ < │ J │ Ö │ V │ C │ Ç │ Z │ S │ B │ . │ , │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ * │ ! │ " │ ^ │ $ │ % │ & │ ' │ ( │ ) │ = │ ? │ _ │ │
+ * │ * │ ! │ " │ ^ │ $ │ % │ & │ ' │ ( │ ) │ = │ ? │ _ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ > │ │ │ │ │ │ │ │ │ : │ ; │ │
+ * │    │ > │   │   │   │   │   │   │   │   │ : │ ; │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -111,7 +111,7 @@
#define TR_LPRN S(TR_8) // (
#define TR_RPRN S(TR_9) // )
#define TR_EQL S(TR_0) // =
-#define TR_QUES S(TR_SLSH) // ?
+#define TR_QUES S(TR_ASTR) // ?
#define TR_UNDS S(TR_MINS) // _
// Row 4
#define TR_RABK S(TR_LABK) // >
@@ -120,15 +120,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ¬ │ ¹ │ ² │ # │ ¼ │ ½ │ ¾ │ { │ [ │ ] │ } │ \ │ | │ │
+ * │ ¬ │ ¹ │ ² │ # │ ¼ │ ½ │ ¾ │ { │ [ │ ] │ } │ \ │ | │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ @ │ │ │ ¶ │ │ ¥ │ │ │ Ø │ £ │ ¨ │ ~ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ Æ │ ß │ € │ │ │ ₺ │ │ │ │ ´ │ │ ` │ │
+ * │     │ @ │   │   │ ¶ │   │ ¥ │   │   │ Ø │ £ │ ¨ │ ~ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ Æ │ ß │ € │   │   │ ₺ │   │   │   │ ´ │   │ ` │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ « │ » │ ¢ │ │ │ │ µ │ × │ ÷ │ - │ │
+ * │    │   │ « │ » │ ¢ │   │   │   │ µ │ × │ ÷ │ - │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -167,19 +167,19 @@
#define TR_MICR ALGR(TR_S) // µ
#define TR_MUL ALGR(TR_B) // ×
#define TR_DIV ALGR(TR_DOT) // ÷
-#define TR_SHYP ALGR(TR_COMM) // ­ (soft hyphen)
+#define TR_SHYP ALGR(TR_COMM) // (soft hyphen)
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ │ │ ³ │ ¤ │ │ │ │ │ │ │ ¿ │ │ │
+ * │   │   │   │ ³ │ ¤ │   │   │   │   │   │   │ ¿ │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ ® │ │ │ │ │ │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ § │ │ ª │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │   │ ® │   │   │   │   │   │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │ § │   │ ª │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ ¦ │ │ │ © │ │ │ │ º │ │ │ │ │
+ * │    │ ¦ │   │   │ © │   │   │   │ º │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h
index 03fe8149f0..d790179ab3 100644
--- a/quantum/keymap_extras/keymap_uk.h
+++ b/quantum/keymap_extras/keymap_uk.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 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 │ ; │ ' │ # │ │
+ * │     │ 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 │ , │ . │ / │ │
+ * │    │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -88,15 +88,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ¬ │ ! │ " │ £ │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ¬ │ ! │ " │ £ │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ │ │ │ │ │ │ │ │ │ : │ @ │ ~ │ │
+ * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │   │   │   │   │   │   │   │   │   │ : │ @ │ ~ │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ | │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │    │ | │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -128,15 +128,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ¦ │ │ │ │ € │ │ │ │ │ │ │ │ │ │
+ * │ ¦ │   │   │   │ € │   │   │   │   │   │   │   │   │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ É │ │ │ │ Ú │ Í │ Ó │ │ │ │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
- * │ │ Á │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │     │   │   │ É │   │   │   │ Ú │ Í │ Ó │   │   │   │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
+ * │      │ Á │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │    │   │   │   │   │   │   │   │   │   │   │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -149,3 +149,78 @@
#define UK_OACU ALGR(KC_O) // Ó
// Row 3
#define UK_AACU ALGR(KC_A) // Á
+
+// DEPRECATED
+#define UK_ESC KC_ESC
+#define UK_F1 KC_F1
+#define UK_F2 KC_F2
+#define UK_F3 KC_F3
+#define UK_F4 KC_F4
+#define UK_F5 KC_F5
+#define UK_F6 KC_F6
+#define UK_F7 KC_F7
+#define UK_F8 KC_F8
+#define UK_F9 KC_F9
+#define UK_F10 KC_F10
+#define UK_F11 KC_F11
+#define UK_F12 KC_F12
+#define UK_PSCR KC_PSCR
+#define UK_SLCK KC_SLCK
+#define UK_PAUS KC_PAUS
+#define UK_BSPC KC_BSPC
+#define UK_TAB KC_TAB
+#define UK_ENT KC_ENT
+#define UK_LSFT KC_LSFT
+#define UK_RSFT KC_RSFT
+#define UK_LCTL KC_LCTL
+#define UK_LGUI KC_LGUI
+#define UK_LALT KC_LALT
+#define UK_SPC KC_SPC
+#define UK_RALT KC_RALT
+#define UK_RGUI KC_RGUI
+#define UK_RCTL KC_RCTL
+#define UK_INS KC_INS
+#define UK_DEL KC_DEL
+#define UK_HOME KC_HOME
+#define UK_END KC_END
+#define UK_PGUP KC_PGUP
+#define UK_PGDN KC_PGDN
+#define UK_UP KC_UP
+#define UK_LEFT KC_LEFT
+#define UK_DOWN KC_DOWN
+#define UK_RGHT KC_RGHT
+#define UK_PSLS KC_PSLS
+#define UK_PAST KC_PAST
+#define UK_PMNS KC_PMNS
+#define UK_PPLS KC_PPLS
+#define UK_PENT KC_PENT
+#define UK_P1 KC_P1
+#define UK_P2 KC_P2
+#define UK_P3 KC_P3
+#define UK_P4 KC_P4
+#define UK_P5 KC_P5
+#define UK_P6 KC_P6
+#define UK_P7 KC_P7
+#define UK_P8 KC_P8
+#define UK_P9 KC_P9
+#define UK_P0 KC_P0
+#define UK_PDOT KC_PDOT
+#define UK_PEQL KC_PEQL
+#define UK_PCMM KC_PCMM
+#define UK_F13 KC_F13
+#define UK_F14 KC_F14
+#define UK_F15 KC_F15
+#define UK_F16 KC_F16
+#define UK_F17 KC_F17
+#define UK_F18 KC_F18
+#define UK_F19 KC_F19
+#define UK_F20 KC_F20
+#define UK_F21 KC_F21
+#define UK_F22 KC_F22
+#define UK_F23 KC_F23
+#define UK_F24 KC_F24
+#define UK_EACT UK_EACU
+#define UK_UACT UK_UACU
+#define UK_IACT UK_IACU
+#define UK_OACT UK_OACU
+#define UK_AACT UK_OACU
diff --git a/quantum/keymap_extras/keymap_us_international.h b/quantum/keymap_extras/keymap_us_international.h
index d491a38f52..a3bc465971 100644
--- a/quantum/keymap_extras/keymap_us_international.h
+++ b/quantum/keymap_extras/keymap_us_international.h
@@ -22,19 +22,19 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
+ * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ´ │ │
+ * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │
+ * │        │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
-#define US_DGRV KC_GRV // ` (dead)
+#define US_GRV KC_GRV // ` (dead)
#define US_1 KC_1 // 1
#define US_2 KC_2 // 2
#define US_3 KC_3 // 3
@@ -72,7 +72,7 @@
#define US_K KC_K // K
#define US_L KC_L // L
#define US_SCLN KC_SCLN // ;
-#define US_ACUT KC_QUOT // ´ (dead)
+#define US_QUOT KC_QUOT // ' (dead)
// Row 4
#define US_Z KC_Z // Z
#define US_X KC_X // X
@@ -87,25 +87,25 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │
+ * │     │   │   │   │   │   │   │   │   │   │   │ { │ } │  |  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ │ │ │ │ │ │ │ │ : │ ¨ │ │
+ * │      │   │   │   │   │   │   │   │   │   │ : │ " │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │        │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
-#define US_DTIL S(US_DGRV) // ~ (dead)
+#define US_TILD S(US_GRV) // ~ (dead)
#define US_EXLM S(US_1) // !
-#define US_AT S(US_2) // @
+#define US_AT S(US_2) // "
#define US_HASH S(US_3) // #
#define US_DLR S(US_4) // $
#define US_PERC S(US_5) // %
-#define US_DCIR S(US_6) // ^ (dead)
+#define US_CIRC S(US_6) // ^
#define US_AMPR S(US_7) // &
#define US_ASTR S(US_8) // *
#define US_LPRN S(US_9) // (
@@ -118,7 +118,7 @@
#define US_PIPE S(US_BSLS) // |
// Row 3
#define US_COLN S(US_SCLN) // :
-#define US_DIAE S(US_ACUT) // ¨ (dead)
+#define US_DQUO S(US_QUOT) // " (dead)
// Row 4
#define US_LABK S(US_COMM) // <
#define US_RABK S(US_DOT) // >
@@ -126,15 +126,15 @@
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ ¡ │ ² │ ³ │ ¤ │ € │ ¼ │ ½ │ ¾ │ ‘ │ ’ │ ¥ │ × │ │
+ * │   │ ¡ │ ² │ ³ │ ¤ │ € │ ¼ │ ½ │ ¾ │ ‘ │ ’ │ ¥ │ × │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Ä │ Å │ É │ ® │ Þ │ Ü │ Ú │ Í │ Ó │ Ö │ « │ » │ ¬ │
+ * │     │ Ä │ Å │ É │ ® │ Þ │ Ü │ Ú │ Í │ Ó │ Ö │ « │ » │  ¬  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ Á │ ß │ Ð │ │ │ │ │ │ Ø │ ¶ │ ´ │ │
+ * │      │ Á │ ß │ Ð │   │   │   │   │   │ Ø │ ¶ │ ´ │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ Æ │ │ © │ │ │ Ñ │ µ │ Ç │ │ ¿ │ │
+ * │        │ Æ │   │ © │   │   │ Ñ │ µ │ Ç │   │ ¿ │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -170,7 +170,7 @@
#define US_ETH ALGR(US_D) // Ð
#define US_OSTR ALGR(US_L) // Ø
#define US_PILC ALGR(US_SCLN) // ¶
-#define US_NDAC ALGR(US_ACUT) // ´
+#define US_ACUT ALGR(US_QUOT) // ´
// Row 4
#define US_AE ALGR(US_Z) // Æ
#define US_COPY ALGR(US_C) // ©
@@ -181,15 +181,15 @@
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ │ ¹ │ │ │ £ │ │ │ │ │ │ │ │ ÷ │ │
+ * │   │ ¹ │   │   │ £ │   │   │   │   │   │   │   │ ÷ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ ¦ │
+ * │     │   │   │   │   │   │   │   │   │   │   │   │   │  ¦  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ § │ │ │ │ │ │ │ │ ° │ ¨ │ │
+ * │      │   │ § │   │   │   │   │   │   │   │ ° │ ¨ │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ ¢ │ │ │ │ │ │ │ │ │
+ * │        │   │   │ ¢ │   │   │   │   │   │   │   │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -201,6 +201,6 @@
// Row 3
#define US_SECT S(ALGR(US_S)) // §
#define US_DEG S(ALGR(US_SCLN)) // °
-#define US_NDDR S(ALGR(US_ACUT)) // ¨
+#define US_DIAE S(ALGR(US_QUOT)) // ¨
// Row 4
#define US_CENT S(ALGR(US_C)) // ¢
diff --git a/quantum/keymap_extras/keymap_workman.h b/quantum/keymap_extras/keymap_workman.h
index 6367d68351..bab1ea1797 100644
--- a/quantum/keymap_extras/keymap_workman.h
+++ b/quantum/keymap_extras/keymap_workman.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Q │ D │ R │ W │ B │ J │ F │ U │ P │ ; │ [ │ ] │ \ │
+ * │     │ Q │ D │ R │ W │ B │ J │ F │ U │ P │ ; │ [ │ ] │  \  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ A │ S │ H │ T │ G │ Y │ N │ E │ O │ I │ ' │ │
+ * │      │ A │ S │ H │ T │ G │ Y │ N │ E │ O │ I │ ' │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ Z │ X │ M │ C │ V │ K │ L │ , │ . │ / │ │
+ * │        │ Z │ X │ M │ C │ V │ K │ L │ , │ . │ / │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -87,15 +87,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ : │ { │ } │ | │
+ * │     │   │   │   │   │   │   │   │   │   │ : │ { │ } │  |  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ " │ │
+ * │      │   │   │   │   │   │   │   │   │   │   │ " │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │        │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -123,3 +123,32 @@
#define WK_LABK S(WK_COMM) // <
#define WK_RABK S(WK_DOT) // >
#define WK_QUES S(WK_SLSH) // ?
+
+// DEPRECATED
+#define KC_WK_Q WK_Q
+#define KC_WK_D WK_D
+#define KC_WK_R WK_R
+#define KC_WK_W WK_W
+#define KC_WK_B WK_B
+#define KC_WK_J WK_J
+#define KC_WK_F WK_F
+#define KC_WK_U WK_U
+#define KC_WK_P WK_P
+#define KC_WK_SCLN WK_SCLN
+#define KC_WK_A WK_A
+#define KC_WK_S WK_S
+#define KC_WK_H WK_H
+#define KC_WK_T WK_T
+#define KC_WK_G WK_G
+#define KC_WK_Y WK_Y
+#define KC_WK_N WK_N
+#define KC_WK_E WK_E
+#define KC_WK_O WK_O
+#define KC_WK_I WK_I
+#define KC_WK_Z WK_Z
+#define KC_WK_X WK_X
+#define KC_WK_M WK_M
+#define KC_WK_C WK_C
+#define KC_WK_V WK_V
+#define KC_WK_K WK_K
+#define KC_WK_L WK_L
diff --git a/quantum/keymap_extras/keymap_workman_zxcvm.h b/quantum/keymap_extras/keymap_workman_zxcvm.h
index 01eb83c397..4ba2ada9e7 100644
--- a/quantum/keymap_extras/keymap_workman_zxcvm.h
+++ b/quantum/keymap_extras/keymap_workman_zxcvm.h
@@ -22,15 +22,15 @@
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ Q │ D │ R │ W │ B │ J │ F │ U │ P │ ; │ [ │ ] │ \ │
+ * │     │ Q │ D │ R │ W │ B │ J │ F │ U │ P │ ; │ [ │ ] │  \  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ A │ S │ H │ T │ G │ Y │ N │ E │ O │ I │ ' │ │
+ * │      │ A │ S │ H │ T │ G │ Y │ N │ E │ O │ I │ ' │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ Z │ X │ C │ V │ M │ K │ L │ , │ . │ / │ │
+ * │        │ Z │ X │ C │ V │ M │ K │ L │ , │ . │ / │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
@@ -87,15 +87,15 @@
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │ │ │ │ │ │ │ │ │ │ │ : │ { │ } │ | │
+ * │     │   │   │   │   │   │   │   │   │   │ : │ { │ } │  |  │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ " │ │
+ * │      │   │   │   │   │   │   │   │   │   │   │ " │        │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
- * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * │        │   │   │   │   │   │   │   │ < │ > │ ? │          │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
- * │ │ │ │ │ │ │ │ │
+ * │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
diff --git a/quantum/keymap_extras/sendstring_belgian.h b/quantum/keymap_extras/sendstring_belgian.h
index 34ca9514c8..9ff92f010d 100644
--- a/quantum/keymap_extras/sendstring_belgian.h
+++ b/quantum/keymap_extras/sendstring_belgian.h
@@ -21,8 +21,6 @@
#include "keymap_belgian.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),
@@ -63,40 +61,20 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 0, 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,
+ 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,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
KC_SPC, BE_EXLM, BE_DQUO, BE_DQUO, BE_DLR, BE_UGRV, BE_AMPR, BE_QUOT,
// ( ) * + , - . /
- BE_LPRN, BE_RPRN, BE_DLR, BE_EQL, BE_COMM, BE_MINS, BE_SCLN, BE_COLN,
+ BE_LPRN, BE_RPRN, BE_DLR, BE_EQL, BE_COMM, BE_MINS, BE_SCLN, BE_COLN,
// 0 1 2 3 4 5 6 7
BE_AGRV, BE_AMPR, BE_EACU, BE_DQUO, BE_QUOT, BE_LPRN, BE_SECT, BE_EGRV,
// 8 9 : ; < = > ?
diff --git a/quantum/keymap_extras/sendstring_bepo.h b/quantum/keymap_extras/sendstring_bepo.h
index 0f0d5a2111..be442070dc 100644
--- a/quantum/keymap_extras/sendstring_bepo.h
+++ b/quantum/keymap_extras/sendstring_bepo.h
@@ -21,7 +21,6 @@
#include "keymap_bepo.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),
@@ -63,40 +62,20 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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)
-};
-
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,
+ 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,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
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,
+ 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_DQUO, BP_LDAQ, BP_RDAQ, BP_LPRN, BP_RPRN, BP_AT, BP_PLUS,
// 8 9 : ; < = > ?
@@ -116,5 +95,4 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// p q r s t u v w
BP_P, BP_Q, BP_R, BP_S, BP_T, BP_U, BP_V, BP_W,
// x y z { | } ~ DEL
- BP_X, BP_Y, BP_Z, BP_Y, BP_B, BP_X, BP_K, KC_DEL
-};
+ BP_X, BP_Y, BP_Z, BP_Y, BP_B, BP_X, BP_K, KC_DEL};
diff --git a/quantum/keymap_extras/sendstring_br_abnt2.h b/quantum/keymap_extras/sendstring_br_abnt2.h
new file mode 100644
index 0000000000..f2946e54b8
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_br_abnt2.h
@@ -0,0 +1,80 @@
+/* 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 Brazilian (ABNT2) layouts
+
+#pragma once
+
+#include "keymap_br_abnt2.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, 1, 1, 1, 1, 0),
+ KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 1, 0, 1, 0, 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, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 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, 1, 1, 1, 0, 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, BR_1, BR_QUOT, BR_3, BR_4, BR_5, BR_7, BR_QUOT,
+ // ( ) * + , - . /
+ BR_9, BR_0, BR_8, BR_EQL, BR_COMM, BR_MINS, BR_DOT, BR_SLSH,
+ // 0 1 2 3 4 5 6 7
+ BR_0, BR_1, BR_2, BR_3, BR_4, BR_5, BR_6, BR_7,
+ // 8 9 : ; < = > ?
+ BR_8, BR_9, BR_SCLN, BR_SCLN, BR_COMM, BR_EQL, BR_DOT, BR_SLSH,
+ // @ A B C D E F G
+ BR_2, BR_A, BR_B, BR_C, BR_D, BR_E, BR_F, BR_G,
+ // H I J K L M N O
+ BR_H, BR_I, BR_J, BR_K, BR_L, BR_M, BR_N, BR_O,
+ // P Q R S T U V W
+ BR_P, BR_Q, BR_R, BR_S, BR_T, BR_U, BR_V, BR_W,
+ // X Y Z [ \ ] ^ _
+ BR_X, BR_Y, BR_Z, BR_LBRC, BR_BSLS, BR_RBRC, BR_TILD, BR_MINS,
+ // ` a b c d e f g
+ BR_ACUT, BR_A, BR_B, BR_C, BR_D, BR_E, BR_F, BR_G,
+ // h i j k l m n o
+ BR_H, BR_I, BR_J, BR_K, BR_L, BR_M, BR_N, BR_O,
+ // p q r s t u v w
+ BR_P, BR_Q, BR_R, BR_S, BR_T, BR_U, BR_V, BR_W,
+ // x y z { | } ~ DEL
+ BR_X, BR_Y, BR_Z, BR_LBRC, BR_BSLS, BR_RBRC, BR_TILD, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_colemak.h b/quantum/keymap_extras/sendstring_colemak.h
index 3aef96b24a..8564ec1dea 100644
--- a/quantum/keymap_extras/sendstring_colemak.h
+++ b/quantum/keymap_extras/sendstring_colemak.h
@@ -20,17 +20,15 @@
#include "keymap_colemak.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,
+ 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,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
KC_SPC, CM_1, CM_QUOT, CM_3, CM_4, CM_5, CM_7, CM_QUOT,
@@ -43,17 +41,17 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// @ A B C D E F G
CM_2, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
// H I J K L M N O
- CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
+ CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
// P Q R S T U V W
- CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
+ CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
// X Y Z [ \ ] ^ _
CM_X, CM_Y, CM_Z, CM_LBRC, CM_BSLS, CM_RBRC, CM_6, CM_MINS,
// ` a b c d e f g
CM_GRV, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
// h i j k l m n o
- CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
+ CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
// p q r s t u v w
- CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
+ CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
// x y z { | } ~ DEL
CM_X, CM_Y, CM_Z, CM_LBRC, CM_BSLS, CM_RBRC, CM_GRV, KC_DEL
};
diff --git a/quantum/keymap_extras/sendstring_czech.h b/quantum/keymap_extras/sendstring_czech.h
index 6693999f51..94879dfd4e 100644
--- a/quantum/keymap_extras/sendstring_czech.h
+++ b/quantum/keymap_extras/sendstring_czech.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 1, 0),
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 0, 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,
diff --git a/quantum/keymap_extras/sendstring_danish.h b/quantum/keymap_extras/sendstring_danish.h
index 6923063ce2..0ec5b108a5 100644
--- a/quantum/keymap_extras/sendstring_danish.h
+++ b/quantum/keymap_extras/sendstring_danish.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 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,
diff --git a/quantum/keymap_extras/sendstring_dvorak.h b/quantum/keymap_extras/sendstring_dvorak.h
index 25e1d31423..3ddb00b112 100644
--- a/quantum/keymap_extras/sendstring_dvorak.h
+++ b/quantum/keymap_extras/sendstring_dvorak.h
@@ -20,40 +20,37 @@
#include "keymap_dvorak.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,
+ 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,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
- KC_SPC, DV_1, DV_QUOT, DV_3, DV_4, DV_5, DV_7, DV_QUOT,
+ KC_SPC, DV_1, DV_QUOT, DV_3, DV_4, DV_5, DV_7, DV_QUOT,
// ( ) * + , - . /
- DV_9, DV_0, DV_8, DV_EQL, DV_COMM, DV_MINS, DV_DOT, DV_SLSH,
+ DV_9, DV_0, DV_8, DV_EQL, DV_COMM, DV_MINS, DV_DOT, DV_SLSH,
// 0 1 2 3 4 5 6 7
- DV_0, DV_1, DV_2, DV_3, DV_4, DV_5, DV_6, DV_7,
+ DV_0, DV_1, DV_2, DV_3, DV_4, DV_5, DV_6, DV_7,
// 8 9 : ; < = > ?
- DV_8, DV_9, DV_SCLN, DV_SCLN, DV_COMM, DV_EQL, DV_DOT, DV_SLSH,
+ DV_8, DV_9, DV_SCLN, DV_SCLN, DV_COMM, DV_EQL, DV_DOT, DV_SLSH,
// @ A B C D E F G
- DV_2, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_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,
+ 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,
+ 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_LBRC, DV_BSLS, DV_RBRC, DV_6, DV_MINS,
+ DV_X, DV_Y, DV_Z, DV_LBRC, DV_BSLS, DV_RBRC, DV_6, 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,
+ 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,
+ 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,
+ 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_LBRC, DV_BSLS, DV_RBRC, DV_GRV, KC_DEL
-};
+ DV_X, DV_Y, DV_Z, DV_LBRC, DV_BSLS, DV_RBRC, DV_GRV, KC_DEL};
diff --git a/quantum/keymap_extras/sendstring_dvorak_fr.h b/quantum/keymap_extras/sendstring_dvorak_fr.h
index 2f4f281794..98d0577afa 100644
--- a/quantum/keymap_extras/sendstring_dvorak_fr.h
+++ b/quantum/keymap_extras/sendstring_dvorak_fr.h
@@ -42,25 +42,6 @@ const uint8_t ascii_to_shift_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 0, 0),
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 1, 0)
-};
const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// NUL SOH STX ETX EOT ENQ ACK BEL
diff --git a/quantum/keymap_extras/sendstring_dvp.h b/quantum/keymap_extras/sendstring_dvp.h
new file mode 100644
index 0000000000..74b595524d
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_dvp.h
@@ -0,0 +1,80 @@
+/* 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 Programmer Dvorak layouts
+
+#pragma once
+
+#include "keymap_dvp.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, 1, 0, 0, 1, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 1, 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, 0, 0, 0, 1, 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, 1, 0, 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, DP_EXLM, DP_QUOT, DP_HASH, DP_DLR, DP_AMPR, DP_AMPR, DP_QUOT,
+ // ( ) * + , - . /
+ DP_LPRN, DP_RPRN, DP_ASTR, DP_PLUS, DP_COMM, DP_MINS, DP_DOT, DP_SLSH,
+ // 0 1 2 3 4 5 6 7
+ DP_ASTR, DP_LPRN, DP_RPRN, DP_RCBR, DP_PLUS, DP_LCBR, DP_RBRC, DP_LBRC,
+ // 8 9 : ; < = > ?
+ DP_EXLM, DP_EQL, DP_SCLN, DP_SCLN, DP_COMM, DP_EQL, DP_DOT, DP_SLSH,
+ // @ A B C D E F G
+ DP_AT, DP_A, DP_B, DP_C, DP_D, DP_E, DP_F, DP_G,
+ // H I J K L M N O
+ DP_H, DP_I, DP_J, DP_K, DP_L, DP_M, DP_N, DP_O,
+ // P Q R S T U V W
+ DP_P, DP_Q, DP_R, DP_S, DP_T, DP_U, DP_V, DP_W,
+ // X Y Z [ \ ] ^ _
+ DP_X, DP_Y, DP_Z, DP_LBRC, DP_BSLS, DP_RBRC, DP_AT, DP_MINS,
+ // ` a b c d e f g
+ DP_HASH, DP_A, DP_B, DP_C, DP_D, DP_E, DP_F, DP_G,
+ // h i j k l m n o
+ DP_H, DP_I, DP_J, DP_K, DP_L, DP_M, DP_N, DP_O,
+ // p q r s t u v w
+ DP_P, DP_Q, DP_R, DP_S, DP_T, DP_U, DP_V, DP_W,
+ // x y z { | } ~ DEL
+ DP_X, DP_Y, DP_Z, DP_LCBR, DP_BSLS, DP_RCBR, DP_DLR, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_estonian.h b/quantum/keymap_extras/sendstring_estonian.h
index 9ea2ab3f8f..24d853fb59 100644
--- a/quantum/keymap_extras/sendstring_estonian.h
+++ b/quantum/keymap_extras/sendstring_estonian.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 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,
diff --git a/quantum/keymap_extras/sendstring_finnish.h b/quantum/keymap_extras/sendstring_finnish.h
index 197836ba83..cf23483843 100644
--- a/quantum/keymap_extras/sendstring_finnish.h
+++ b/quantum/keymap_extras/sendstring_finnish.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 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,
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 a37a5d314b..9b7f5e8ed7 100644
--- a/quantum/keymap_extras/sendstring_french.h
+++ b/quantum/keymap_extras/sendstring_french.h
@@ -21,8 +21,6 @@
#include "keymap_french.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),
@@ -63,44 +61,24 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 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,
+ 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,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
- KC_SPC, FR_EXLM, FR_DQUO, FR_DQUO, FR_DLR, FR_UGRV, FR_AMPR, 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,
+ FR_LPRN, FR_RPRN, FR_ASTR, FR_EQL, FR_COMM, FR_MINS, FR_SCLN, FR_COLN,
// 0 1 2 3 4 5 6 7
FR_AGRV, FR_AMPR, FR_EACU, FR_DQUO, FR_QUOT, FR_LPRN, FR_MINS, FR_EGRV,
// 8 9 : ; < = > ?
- FR_UNDS, FR_CCED, FR_COLN, FR_SCLN, FR_LABK, FR_EQL, FR_LABK, FR_COMM,
+ FR_CCED, FR_AGRV, FR_COLN, FR_SCLN, FR_LABK, FR_EQL, FR_LABK, FR_COMM,
// @ A B C D E F G
FR_AGRV, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G,
// H I J K L M N O
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.h b/quantum/keymap_extras/sendstring_german.h
index 69c7dd996e..639c22b3a7 100644
--- a/quantum/keymap_extras/sendstring_german.h
+++ b/quantum/keymap_extras/sendstring_german.h
@@ -21,8 +21,6 @@
#include "keymap_german.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),
@@ -63,58 +61,38 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 0, 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,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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_Q, DE_A, DE_B, DE_C, DE_D, DE_E, DE_F, DE_G,
+ DE_Q, 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,
+ 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,
+ 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_8, DE_SS, DE_9, DE_CIRC, DE_MINS,
+ DE_X, DE_Y, DE_Z, DE_8, DE_SS, DE_9, 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,
+ 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,
+ 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,
+ 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_7, DE_LABK, DE_0, DE_PLUS, 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_hungarian.h b/quantum/keymap_extras/sendstring_hungarian.h
index 9169ba2557..29dc3ccb8c 100644
--- a/quantum/keymap_extras/sendstring_hungarian.h
+++ b/quantum/keymap_extras/sendstring_hungarian.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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)
-};
-
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,
diff --git a/quantum/keymap_extras/sendstring_icelandic.h b/quantum/keymap_extras/sendstring_icelandic.h
index b25a4e76e7..867eb8743c 100644
--- a/quantum/keymap_extras/sendstring_icelandic.h
+++ b/quantum/keymap_extras/sendstring_icelandic.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 0, 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,
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_jis.h b/quantum/keymap_extras/sendstring_jis.h
new file mode 100644
index 0000000000..f9c574560b
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_jis.h
@@ -0,0 +1,77 @@
+/* Copyright 2016 Jack Humbert
+ *
+ * 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 JIS layouts
+
+#pragma once
+
+#include "keymap_jp.h"
+#include "quantum.h"
+
+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, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 1, 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, 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, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ // ( ) * + , - . /
+ KC_8, KC_9, JP_COLN, JP_SCLN, JP_COMM, JP_MINS, JP_DOT, JP_SLSH,
+ // 0 1 2 3 4 5 6 7
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ // 8 9 : ; < = > ?
+ KC_8, KC_9, JP_COLN, JP_SCLN, JP_COMM, JP_MINS, JP_DOT, JP_SLSH,
+ // @ A B C D E F G
+ JP_AT, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
+ // H I J K L M N O
+ KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
+ // P Q R S T U V W
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
+ // X Y Z [ \ ] ^ _
+ KC_X, KC_Y, KC_Z, JP_LBRC, JP_BSLS, JP_RBRC, JP_CIRC, JP_BSLS,
+ // ` a b c d e f g
+ JP_AT, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
+ // h i j k l m n o
+ KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
+ // p q r s t u v w
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
+ // x y z { | } ~ DEL
+ KC_X, KC_Y, KC_Z, JP_LBRC, JP_YEN, JP_RBRC, JP_CIRC, KC_DEL};
diff --git a/quantum/keymap_extras/sendstring_latvian.h b/quantum/keymap_extras/sendstring_latvian.h
index bd73a01e48..61f788693c 100644
--- a/quantum/keymap_extras/sendstring_latvian.h
+++ b/quantum/keymap_extras/sendstring_latvian.h
@@ -19,30 +19,9 @@
#pragma once
#include "keymap_latvian.h"
-#include "quantum.h"
// clang-format off
-const uint8_t ascii_to_dead_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, 1, 0, 0, 0, 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, 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)
-};
-
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,
diff --git a/quantum/keymap_extras/sendstring_lithuanian_azerty.h b/quantum/keymap_extras/sendstring_lithuanian_azerty.h
index a886411143..7498a3dc4d 100644
--- a/quantum/keymap_extras/sendstring_lithuanian_azerty.h
+++ b/quantum/keymap_extras/sendstring_lithuanian_azerty.h
@@ -76,9 +76,9 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// ! " # $ % & '
KC_SPC, LT_EXLM, LT_EDOT, LT_SLSH, LT_SCLN, LT_X, LT_DOT, LT_QUES,
// ( ) * + , - . /
- LT_LPRN, LT_RPRN, LT_EQL, LT_QUES, LT_COMM, LT_MINS, LT_DOT, LT_SLSH,
+ LT_LRPN, LT_RPRN, LT_EQL, LT_QUES, LT_COMM, LT_MINS, LT_DOT, LT_SLSH,
// 0 1 2 3 4 5 6 7
- LT_RPRN, LT_EXLM, LT_MINS, LT_SLSH, LT_SCLN, LT_COLN, LT_COMM, LT_DOT,
+ LT_RPRN, LT_EXLM, LT_MINS, LT_SLSH, LT_SLCN, LT_COLN, LT_COMM, LT_DOT,
// 8 9 : ; < = > ?
LT_EQL, LT_LPRN, LT_COLN, LT_SCLN, LT_LABK, LT_EQL, LT_LABK, LT_QUES,
// @ A B C D E F G
diff --git a/quantum/keymap_extras/sendstring_norman.h b/quantum/keymap_extras/sendstring_norman.h
index 21dbbdd705..e52afc2a6a 100644
--- a/quantum/keymap_extras/sendstring_norman.h
+++ b/quantum/keymap_extras/sendstring_norman.h
@@ -20,17 +20,15 @@
#include "keymap_norman.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,
+ 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,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
KC_SPC, NM_1, NM_QUOT, NM_3, NM_4, NM_5, NM_7, NM_QUOT,
@@ -43,17 +41,17 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// @ A B C D E F G
NM_2, NM_A, NM_B, NM_C, NM_D, NM_E, NM_F, NM_G,
// H I J K L M N O
- NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O,
+ NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O,
// P Q R S T U V W
- NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W,
+ NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W,
// X Y Z [ \ ] ^ _
NM_X, NM_Y, NM_Z, NM_LBRC, NM_BSLS, NM_RBRC, NM_6, NM_MINS,
// ` a b c d e f g
NM_GRV, NM_A, NM_B, NM_C, NM_D, NM_E, NM_F, NM_G,
// h i j k l m n o
- NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O,
+ NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O,
// p q r s t u v w
- NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W,
+ NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W,
// x y z { | } ~ DEL
NM_X, NM_Y, NM_Z, NM_LBRC, NM_BSLS, NM_RBRC, NM_GRV, KC_DEL
};
diff --git a/quantum/keymap_extras/sendstring_norwegian.h b/quantum/keymap_extras/sendstring_norwegian.h
index 28813da51f..d3478f8301 100644
--- a/quantum/keymap_extras/sendstring_norwegian.h
+++ b/quantum/keymap_extras/sendstring_norwegian.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 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,
diff --git a/quantum/keymap_extras/sendstring_portuguese.h b/quantum/keymap_extras/sendstring_portuguese.h
index 37db5f97aa..bec9b2c680 100644
--- a/quantum/keymap_extras/sendstring_portuguese.h
+++ b/quantum/keymap_extras/sendstring_portuguese.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 0, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 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,
diff --git a/quantum/keymap_extras/sendstring_portuguese_osx_iso.h b/quantum/keymap_extras/sendstring_portuguese_osx_iso.h
new file mode 100644
index 0000000000..1799347f30
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_portuguese_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 Portuguese layouts
+
+#pragma once
+
+#include "keymap_portuguese_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, 1, 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(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)
+};
+
+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, 0, 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, 0, 1, 0, 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, PT_1, PT_2, PT_3, PT_4, PT_5, PT_6, PT_QUOT,
+ // ( ) * + , - . /
+ PT_8, PT_9, PT_PLUS, PT_PLUS, PT_COMM, PT_MINS, PT_DOT, PT_7,
+ // 0 1 2 3 4 5 6 7
+ PT_0, PT_1, PT_2, PT_3, PT_4, PT_5, PT_6, PT_7,
+ // 8 9 : ; < = > ?
+ PT_8, PT_9, PT_DOT, PT_COMM, PT_LABK, PT_0, PT_LABK, PT_QUOT,
+ // @ A B C D E F G
+ PT_2, PT_A, PT_B, PT_C, PT_D, PT_E, PT_F, PT_G,
+ // H I J K L M N O
+ PT_H, PT_I, PT_J, PT_K, PT_L, PT_M, PT_N, PT_O,
+ // P Q R S T U V W
+ PT_P, PT_Q, PT_R, PT_S, PT_T, PT_U, PT_V, PT_W,
+ // X Y Z [ \ ] ^ _
+ PT_X, PT_Y, PT_Z, PT_8, PT_BSLS, PT_9, PT_TILD, PT_MINS,
+ // ` a b c d e f g
+ PT_ACUT, PT_A, PT_B, PT_C, PT_D, PT_E, PT_F, PT_G,
+ // h i j k l m n o
+ PT_H, PT_I, PT_J, PT_K, PT_L, PT_M, PT_N, PT_O,
+ // p q r s t u v w
+ PT_P, PT_Q, PT_R, PT_S, PT_T, PT_U, PT_V, PT_W,
+ // x y z { | } ~ DEL
+ PT_X, PT_Y, PT_Z, PT_8, PT_BSLS, PT_9, PT_TILD, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_serbian_latin.h b/quantum/keymap_extras/sendstring_serbian_latin.h
index 7e19a62595..40e2a9ea0c 100644
--- a/quantum/keymap_extras/sendstring_serbian_latin.h
+++ b/quantum/keymap_extras/sendstring_serbian_latin.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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)
-};
-
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,
diff --git a/quantum/keymap_extras/sendstring_slovak.h b/quantum/keymap_extras/sendstring_slovak.h
index c94cca1379..72eeb86a53 100644
--- a/quantum/keymap_extras/sendstring_slovak.h
+++ b/quantum/keymap_extras/sendstring_slovak.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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)
-};
-
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,
@@ -98,7 +78,7 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// ( ) * + , - . /
SK_ADIA, SK_NCAR, SK_AMPR, SK_PLUS, SK_COMM, SK_MINS, SK_DOT, SK_UACU,
// 0 1 2 3 4 5 6 7
- SK_EACU, SK_PLUS, SK_LCAR, SK_SCAR, SK_CCAR, SK_TCAR, SK_ZCAR, SK_YACU,
+ SK_EACU, SK_PLUS, SK_LACU, SK_SCAR, SK_CCAR, SK_TACU, SK_ZCAR, SK_YACU,
// 8 9 : ; < = > ?
SK_AACU, SK_IACU, SK_DOT, SK_SCLN, SK_AMPR, SK_EQL, SK_Y, SK_COMM,
// @ A B C D E F G
diff --git a/quantum/keymap_extras/sendstring_slovenian.h b/quantum/keymap_extras/sendstring_slovenian.h
index 117af7e76d..adf7ea47db 100644
--- a/quantum/keymap_extras/sendstring_slovenian.h
+++ b/quantum/keymap_extras/sendstring_slovenian.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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)
-};
-
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,
diff --git a/quantum/keymap_extras/sendstring_spanish.h b/quantum/keymap_extras/sendstring_spanish.h
index 680e99ef4e..03c8fe7483 100644
--- a/quantum/keymap_extras/sendstring_spanish.h
+++ b/quantum/keymap_extras/sendstring_spanish.h
@@ -21,8 +21,6 @@
#include "keymap_spanish.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),
@@ -63,35 +61,15 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 0, 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,
+ 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,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
KC_SPC, ES_1, ES_2, ES_3, ES_4, ES_5, ES_6, ES_QUOT,
diff --git a/quantum/keymap_extras/sendstring_spanish_dvorak.h b/quantum/keymap_extras/sendstring_spanish_dvorak.h
index ccf9458247..87d582491c 100644
--- a/quantum/keymap_extras/sendstring_spanish_dvorak.h
+++ b/quantum/keymap_extras/sendstring_spanish_dvorak.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 0, 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,
diff --git a/quantum/keymap_extras/sendstring_swedish.h b/quantum/keymap_extras/sendstring_swedish.h
index d451342992..8b07d42301 100644
--- a/quantum/keymap_extras/sendstring_swedish.h
+++ b/quantum/keymap_extras/sendstring_swedish.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 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,
diff --git a/quantum/keymap_extras/sendstring_turkish_f.h b/quantum/keymap_extras/sendstring_turkish_f.h
index cabd5c5dc5..8d6dc778fd 100644
--- a/quantum/keymap_extras/sendstring_turkish_f.h
+++ b/quantum/keymap_extras/sendstring_turkish_f.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 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,
diff --git a/quantum/keymap_extras/sendstring_turkish_q.h b/quantum/keymap_extras/sendstring_turkish_q.h
index 986f022333..1a409c1e03 100644
--- a/quantum/keymap_extras/sendstring_turkish_q.h
+++ b/quantum/keymap_extras/sendstring_turkish_q.h
@@ -63,26 +63,6 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
};
-const uint8_t ascii_to_dead_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, 0, 0, 0, 1, 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, 0, 0, 0, 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,
diff --git a/quantum/keymap_extras/sendstring_uk.h b/quantum/keymap_extras/sendstring_uk.h
index bbd30769b0..1319c8164d 100644
--- a/quantum/keymap_extras/sendstring_uk.h
+++ b/quantum/keymap_extras/sendstring_uk.h
@@ -21,8 +21,6 @@
#include "keymap_uk.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),
@@ -47,34 +45,33 @@ 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,
+ 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,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
KC_SPC, UK_1, UK_2, UK_HASH, UK_4, UK_5, UK_7, UK_QUOT,
// ( ) * + , - . /
- UK_9, UK_0, UK_8, UK_EQL, UK_COMM, UK_MINS, UK_DOT, UK_SLSH,
+ UK_9, UK_0, UK_8, UK_EQL, UK_COMM, UK_MINS, UK_DOT, UK_SLSH,
// 0 1 2 3 4 5 6 7
- UK_0, UK_1, UK_2, UK_3, UK_4, UK_5, UK_6, UK_7,
+ UK_0, UK_1, UK_2, UK_3, UK_4, UK_5, UK_6, UK_7,
// 8 9 : ; < = > ?
- UK_8, UK_9, UK_SCLN, UK_SCLN, UK_COMM, UK_EQL, UK_DOT, UK_SLSH,
+ UK_8, UK_9, UK_SCLN, UK_SCLN, UK_COMM, UK_EQL, UK_DOT, UK_SLSH,
// @ A B C D E F G
- UK_QUOT, UK_A, UK_B, UK_C, UK_D, UK_E, UK_F, UK_G,
+ UK_QUOT, UK_A, UK_B, UK_C, UK_D, UK_E, UK_F, UK_G,
// H I J K L M N O
- UK_H, UK_I, UK_J, UK_K, UK_L, UK_M, UK_N, UK_O,
+ UK_H, UK_I, UK_J, UK_K, UK_L, UK_M, UK_N, UK_O,
// P Q R S T U V W
- UK_P, UK_Q, UK_R, UK_S, UK_T, UK_U, UK_V, UK_W,
+ UK_P, UK_Q, UK_R, UK_S, UK_T, UK_U, UK_V, UK_W,
// X Y Z [ \ ] ^ _
- UK_X, UK_Y, UK_Z, UK_LBRC, UK_BSLS, UK_RBRC, UK_6, UK_MINS,
+ UK_X, UK_Y, UK_Z, UK_LBRC, UK_BSLS, UK_RBRC, UK_6, UK_MINS,
// ` a b c d e f g
- UK_GRV, UK_A, UK_B, UK_C, UK_D, UK_E, UK_F, UK_G,
+ UK_GRV, UK_A, UK_B, UK_C, UK_D, UK_E, UK_F, UK_G,
// h i j k l m n o
- UK_H, UK_I, UK_J, UK_K, UK_L, UK_M, UK_N, UK_O,
+ UK_H, UK_I, UK_J, UK_K, UK_L, UK_M, UK_N, UK_O,
// p q r s t u v w
- UK_P, UK_Q, UK_R, UK_S, UK_T, UK_U, UK_V, UK_W,
+ UK_P, UK_Q, UK_R, UK_S, UK_T, UK_U, UK_V, UK_W,
// x y z { | } ~ DEL
- UK_X, UK_Y, UK_Z, UK_LBRC, UK_BSLS, UK_RBRC, UK_HASH, KC_DEL
-};
+ UK_X, UK_Y, UK_Z, UK_LBRC, UK_BSLS, UK_RBRC, UK_HASH, KC_DEL};
diff --git a/quantum/keymap_extras/sendstring_workman.h b/quantum/keymap_extras/sendstring_workman.h
index 04f8e3908a..6e7f17b965 100644
--- a/quantum/keymap_extras/sendstring_workman.h
+++ b/quantum/keymap_extras/sendstring_workman.h
@@ -20,17 +20,15 @@
#include "keymap_workman.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,
+ 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,
+ 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,
@@ -43,17 +41,17 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// @ 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,
+ 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,
+ 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,
+ 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,
+ 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
};
diff --git a/quantum/oryx.c b/quantum/oryx.c
new file mode 100644
index 0000000000..a408cff3ce
--- /dev/null
+++ b/quantum/oryx.c
@@ -0,0 +1,219 @@
+#include "oryx.h"
+#include "eeprom.h"
+
+rawhid_state_t rawhid_state = {.pairing = false, .paired = false};
+
+keypos_t keyboard_pairing_sequence[PAIRING_SEQUENCE_SIZE];
+keypos_t host_pairing_sequence[PAIRING_SEQUENCE_SIZE];
+uint8_t pairing_input_index = 0;
+
+void raw_hid_receive(uint8_t *data, uint8_t length) {
+ uint8_t command = data[0];
+ uint8_t *param = &data[1];
+ uint8_t cmd_index = 0;
+
+ switch (command) {
+ case ORYX_CMD_GET_FW_VERSION: {
+ uint8_t event[RAW_EPSIZE];
+ uint8_t fw_version_size = sizeof(FIRMWARE_VERSION);
+ uint8_t stop[1];
+
+ event[0] = ORYX_EVT_GET_FW_VERSION;
+ stop[0] = ORYX_STOP_BIT;
+
+ memcpy(event + 1, FIRMWARE_VERSION, fw_version_size);
+ memcpy(event + fw_version_size, stop, 1);
+
+ raw_hid_send(event, RAW_EPSIZE);
+ break;
+ }
+
+ case ORYX_CMD_PAIRING_INIT:
+ pairing_init_handler();
+ store_pairing_sequence(&keyboard_pairing_sequence[0]);
+ break;
+
+ case ORYX_CMD_PAIRING_VALIDATE:
+ for (uint8_t i = 0; i < PAIRING_SEQUENCE_SIZE; i++) {
+ keypos_t pos;
+ pos.col = param[cmd_index++];
+ pos.row = param[cmd_index++];
+ host_pairing_sequence[i] = pos;
+ }
+ pairing_validate_eeprom_handler();
+ break;
+
+ case ORYX_SET_LAYER:
+ if(rawhid_state.paired == true) {
+ layer_clear();
+ layer_on(param[0]);
+ }
+ break;
+ }
+}
+
+void pairing_validate_eeprom_handler(void) {
+ bool match = false;
+ uint8_t event[RAW_EPSIZE];
+ uint8_t stored_sequences[sizeof(uint16_t) * PAIRING_SEQUENCE_SIZE * PAIRING_SEQUENCE_NUM_STORED];
+
+ eeprom_read_block(&stored_sequences, (uint8_t *)EECONFIG_SIZE, PAIRING_STORAGE_SIZE);
+ match = true;
+
+ if (match == true) {
+ event[0] = ORYX_EVT_PAIRING_SUCCESS;
+ rawhid_state.paired = true;
+
+ } else {
+ event[0] = ORYX_EVT_PAIRING_FAILED;
+ rawhid_state.paired = false;
+ }
+ event[1] = ORYX_STOP_BIT;
+ rawhid_state.pairing = false;
+ raw_hid_send(event, sizeof(event));
+}
+
+bool store_pairing_sequence(keypos_t *pairing_sequence) {
+ uint8_t stored_sequences[sizeof(uint16_t) * PAIRING_SEQUENCE_SIZE * PAIRING_SEQUENCE_NUM_STORED];
+
+ eeprom_read_block(&stored_sequences, (uint8_t *)EECONFIG_SIZE, PAIRING_STORAGE_SIZE);
+
+ uint8_t shiftLen = sizeof(&pairing_sequence);
+
+ for (int8_t i = PAIRING_STORAGE_SIZE; i >= 0; i--) {
+ if (i > shiftLen) {
+ stored_sequences[i] = stored_sequences[i - 1];
+ } else {
+ stored_sequences[i] = 0;
+ }
+ }
+ eeprom_update_block(stored_sequences, (uint8_t *)EECONFIG_SIZE, PAIRING_STORAGE_SIZE);
+ return true;
+}
+
+void pairing_init_handler(void) {
+ create_pairing_code();
+ uint8_t event[RAW_EPSIZE];
+ uint8_t event_index = 0;
+ event[event_index++] = ORYX_EVT_PAIRING_INPUT;
+ for (uint8_t i = 0; i < PAIRING_SEQUENCE_SIZE; i++) {
+ event[event_index++] = keyboard_pairing_sequence[i].col;
+ event[event_index++] = keyboard_pairing_sequence[i].row;
+ }
+ event[event_index++] = ORYX_STOP_BIT;
+ rawhid_state.pairing = true;
+ raw_hid_send(event, RAW_EPSIZE);
+}
+
+bool compare_sequences(keypos_t a[PAIRING_SEQUENCE_SIZE], keypos_t b[PAIRING_SEQUENCE_SIZE]) {
+ bool valid = true;
+ for (uint8_t i = 0; i < PAIRING_SEQUENCE_SIZE; i++) {
+ if (a[i].row != b[i].row) {
+ valid = false;
+ break;
+ }
+ if (a[i].col != b[i].col) {
+ valid = false;
+ break;
+ }
+ }
+ return valid;
+}
+
+void pairing_validate_handler() {
+
+ uint8_t event[RAW_EPSIZE];
+ bool valid = compare_sequences(keyboard_pairing_sequence, host_pairing_sequence);
+
+ if (valid == true) {
+ event[0] = ORYX_EVT_PAIRING_SUCCESS;
+ rawhid_state.paired = true;
+
+ } else {
+ event[0] = ORYX_EVT_PAIRING_FAILED;
+ rawhid_state.paired = false;
+ }
+
+ event[1] = ORYX_STOP_BIT;
+ rawhid_state.pairing = false;
+ raw_hid_send(event, sizeof(event));
+}
+
+keypos_t get_random_keypos(void) {
+ uint8_t col = rand() % MATRIX_COLS;
+ uint8_t row = rand() % MATRIX_ROWS;
+ keypos_t pos = {.col = col, .row = row};
+
+ uint16_t keycode = keymap_key_to_keycode(0, pos);
+ if (keycode >= KC_A && keycode <= KC_SLASH) {
+ return pos;
+ } else {
+ return get_random_keypos();
+ }
+}
+
+void create_pairing_code(void) {
+ for (uint8_t i = 0; i < PAIRING_SEQUENCE_SIZE; i++) {
+ keypos_t pos = get_random_keypos();
+ keyboard_pairing_sequence[i] = pos;
+ }
+}
+
+void pairing_key_input_event(void) {
+ uint8_t event[RAW_EPSIZE];
+ event[0] = ORYX_EVT_PAIRING_KEY_INPUT;
+ raw_hid_send(event, sizeof(event));
+}
+
+void oryx_layer_event(void) {
+ uint8_t layer;
+ uint8_t event[RAW_EPSIZE];
+ layer = get_highest_layer(layer_state);
+ event[0] = ORYX_EVT_LAYER;
+ event[1] = layer;
+ event[2] = ORYX_STOP_BIT;
+ raw_hid_send(event, sizeof(event));
+}
+
+bool process_record_oryx(uint16_t keycode, keyrecord_t *record) {
+ // In pairing mode, key events are absorbed, and the host pairing sequence is filled.
+ // Once filled, the keyboard and host sequence are compaired, pairing state set to false
+ // and the proper pairing validation event is sent to the host
+ if (rawhid_state.pairing == true) {
+ // The host pairing sequence is filled on key up only
+ if (!record->event.pressed) {
+ if (pairing_input_index < PAIRING_SEQUENCE_SIZE) {
+ host_pairing_sequence[pairing_input_index++] = record->event.key;
+ pairing_key_input_event();
+ }
+ wait_ms(1000);
+ if (pairing_input_index == PAIRING_SEQUENCE_SIZE) {
+ rawhid_state.pairing = false;
+ pairing_input_index = 0;
+ pairing_validate_handler();
+ }
+ }
+ return false;
+ }
+ // While paired, the keyboard sends keystrokes positions to the host
+ if (rawhid_state.paired == true) {
+ uint8_t event[RAW_EPSIZE];
+ event[0] = record->event.pressed ? ORYX_EVT_KEYDOWN : ORYX_EVT_KEYUP;
+ event[1] = record->event.key.col;
+ event[2] = record->event.key.row;
+ event[3] = ORYX_STOP_BIT;
+ raw_hid_send(event, sizeof(event));
+ }
+ return true;
+}
+
+void layer_state_set_oryx(layer_state_t state) {
+ if (rawhid_state.paired) {
+ wait_ms(50);
+ uint8_t event[RAW_EPSIZE];
+ event[0] = ORYX_EVT_LAYER;
+ event[1] = get_highest_layer(state);
+ event[2] = ORYX_STOP_BIT;
+ raw_hid_send(event, sizeof(event));
+ }
+}
diff --git a/quantum/oryx.h b/quantum/oryx.h
new file mode 100644
index 0000000000..526299b4aa
--- /dev/null
+++ b/quantum/oryx.h
@@ -0,0 +1,63 @@
+#pragma once
+
+#include "quantum.h"
+#include "raw_hid.h"
+
+#ifndef RAW_ENABLE
+# error "Raw hid needs to be enabled, please enable it!"
+#endif
+#ifndef RAW_EPSIZE
+# define RAW_EPSIZE 32
+#endif
+
+#define ORYX_STOP_BIT -2
+#define PAIRING_BLINK_STEPS 512
+#define PAIRING_BLINK_END PAIRING_BLINK_STEPS * 60
+#define PAIRING_SEQUENCE_SIZE 3
+#define PAIRING_SEQUENCE_NUM_STORED 3
+#define PAIRING_STORAGE_SIZE PAIRING_SEQUENCE_SIZE* PAIRING_SEQUENCE_NUM_STORED * sizeof(uint16_t)
+
+enum Oryx_Command_Code {
+ ORYX_CMD_GET_FW_VERSION,
+ ORYX_CMD_PAIRING_INIT,
+ ORYX_CMD_PAIRING_VALIDATE,
+ ORYX_CMD_DISCONNECT,
+ ORYX_SET_LAYER
+};
+
+enum Oryx_Event_Code {
+ ORYX_EVT_GET_FW_VERSION,
+ ORYX_EVT_PAIRING_INPUT,
+ ORYX_EVT_PAIRING_KEY_INPUT,
+ ORYX_EVT_PAIRING_FAILED,
+ ORYX_EVT_PAIRING_SUCCESS,
+ ORYX_EVT_LAYER,
+ ORYX_EVT_KEYDOWN,
+ ORYX_EVT_KEYUP,
+};
+
+extern bool oryx_state_live_training_enabled;
+
+typedef struct {
+ bool pairing;
+ bool paired;
+} rawhid_state_t;
+
+extern rawhid_state_t rawhid_state;
+
+void create_pairing_code(void);
+bool store_pairing_sequence(keypos_t* pairing_sequence);
+keypos_t get_random_keypos(void);
+void pairing_init_handler(void);
+void pairing_validate_handler(void);
+void pairing_validate_eeprom_handler(void);
+void pairing_init_event(void);
+bool compare_sequences(keypos_t a[PAIRING_SEQUENCE_SIZE], keypos_t b[PAIRING_SEQUENCE_SIZE]);
+void pairing_key_input_event(void);
+void pairing_failed_event(void);
+void pairing_succesful_event(void);
+
+void oryx_layer_event(void);
+bool is_oryx_live_training_enabled(void);
+bool process_record_oryx(uint16_t keycode, keyrecord_t* record);
+void layer_state_set_oryx(layer_state_t state);
diff --git a/quantum/process_keycode/process_auto_shift.c b/quantum/process_keycode/process_auto_shift.c
index 3ff188ba7e..c990595597 100644
--- a/quantum/process_keycode/process_auto_shift.c
+++ b/quantum/process_keycode/process_auto_shift.c
@@ -95,6 +95,7 @@ __attribute__((weak)) bool get_auto_shift_no_auto_repeat(uint16_t keycode, keyre
__attribute__((weak)) void autoshift_press_user(uint16_t keycode, bool shifted, keyrecord_t *record) {
if (shifted) {
add_weak_mods(MOD_BIT(KC_LSFT));
+ send_keyboard_report();
}
register_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode);
}
diff --git a/quantum/process_keycode/process_caps_word.c b/quantum/process_keycode/process_caps_word.c
index 1b9583196d..fb33ffebb7 100644
--- a/quantum/process_keycode/process_caps_word.c
+++ b/quantum/process_keycode/process_caps_word.c
@@ -172,6 +172,7 @@ __attribute__((weak)) bool caps_word_press_user(uint16_t keycode) {
case KC_A ... KC_Z:
case KC_MINS:
add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
+ send_keyboard_report();
return true;
// Keycodes that continue Caps Word, without shifting.
diff --git a/quantum/process_keycode/process_grave_esc.h b/quantum/process_keycode/process_grave_esc.h
index bbf4483763..bbf4483763 100644..100755
--- a/quantum/process_keycode/process_grave_esc.h
+++ b/quantum/process_keycode/process_grave_esc.h
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 9a0016b150..4a0cf31592 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -14,6 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <ctype.h>
#include "quantum.h"
#ifdef BLUETOOTH_ENABLE
@@ -268,6 +269,9 @@ bool process_record_quantum(keyrecord_t *record) {
#endif
#ifdef HAPTIC_ENABLE
process_haptic(keycode, record) &&
+#endif // HAPTIC_ENABLE
+#ifdef ORYX_ENABLE
+ process_record_oryx(keycode, record) &&
#endif
#if defined(VIA_ENABLE)
process_record_via(keycode, record) &&
@@ -448,6 +452,19 @@ void matrix_scan_quantum() {
matrix_scan_kb();
}
+#ifdef WEBUSB_ENABLE
+__attribute__((weak)) bool webusb_receive_user(uint8_t *data, uint8_t length) {
+ return false;
+}
+__attribute__((weak)) bool webusb_receive_kb(uint8_t *data, uint8_t length) {
+ return webusb_receive_user(data, length);
+}
+
+bool webusb_receive_quantum(uint8_t *data, uint8_t length) {
+ return webusb_receive_kb(data, length);
+}
+#endif
+
//------------------------------------------------------------------------------
// Override these functions in your keymap file to play different tunes on
// different events such as startup and bootloader jump
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 8d74f2be38..91134c1128 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -190,11 +190,20 @@ extern layer_state_t layer_state;
#endif
#ifdef DIP_SWITCH_ENABLE
-# include "dip_switch.h"
+ #include "dip_switch.h"
+#endif
+
+
+#ifdef WEBUSB_ENABLE
+# include "webusb.h"
+#endif
+
+#ifdef ORYX_ENABLE
+# include "oryx.h"
#endif
#ifdef DYNAMIC_MACRO_ENABLE
-# include "process_dynamic_macro.h"
+ #include "process_dynamic_macro.h"
#endif
#ifdef SECURE_ENABLE
@@ -218,6 +227,7 @@ extern layer_state_t layer_state;
# include "wpm.h"
#endif
+
#ifdef USBPD_ENABLE
# include "usbpd.h"
#endif
@@ -266,6 +276,9 @@ void unregister_code16(uint16_t code);
void tap_code16(uint16_t code);
void tap_code16_delay(uint16_t code, uint16_t delay);
+bool webusb_receive_kb(uint8_t *data, uint8_t length);
+bool webusb_receive_user(uint8_t *data, uint8_t length);
+
const char *get_numeric_str(char *buf, size_t buf_len, uint32_t curr_num, char curr_pad);
const char *get_u8_str(uint8_t curr_num, char curr_pad);
const char *get_u16_str(uint16_t curr_num, char curr_pad);
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index c8f03fa1ce..a08e5277a3 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -430,6 +430,8 @@ enum quantum_keycodes {
DYN_MACRO_PLAY1, // 5D07
DYN_MACRO_PLAY2, // 5D08
+ WEBUSB_PAIR,
+
// Joystick
JS_BUTTON0, // 5D09
JS_BUTTON1, // 5D0A
diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c
index 2730686839..d2f8827319 100644
--- a/quantum/rgb_matrix/rgb_matrix.c
+++ b/quantum/rgb_matrix/rgb_matrix.c
@@ -736,7 +736,6 @@ void rgb_matrix_set_flags_eeprom_helper(led_flags_t flags, bool write_to_eeprom)
eeconfig_flag_rgb_matrix(write_to_eeprom);
dprintf("rgb matrix set speed [%s]: %u\n", (write_to_eeprom) ? "EEPROM" : "NOEEPROM", rgb_matrix_config.flags);
}
-
led_flags_t rgb_matrix_get_flags(void) {
return rgb_matrix_config.flags;
}