diff options
Diffstat (limited to 'quantum')
-rw-r--r-- | quantum/quantum.c | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c index a4ccccd00d..0fe918b365 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -851,6 +851,26 @@ const bool ascii_to_shift_lut[0x80] PROGMEM = { }; __attribute__ ((weak)) +const bool ascii_to_alt_lut[0x80] PROGMEM = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 +}; + +__attribute__ ((weak)) const uint8_t ascii_to_keycode_lut[0x80] PROGMEM = { 0, 0, 0, 0, 0, 0, 0, 0, KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0, @@ -932,16 +952,21 @@ void send_string_with_delay_P(const char *str, uint8_t interval) { void send_char(char ascii_code) { uint8_t keycode; + bool is_shifted; + bool is_alted; + keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]); - if (pgm_read_byte(&ascii_to_shift_lut[(uint8_t)ascii_code])) { - register_code(KC_LSFT); - register_code(keycode); - unregister_code(keycode); - unregister_code(KC_LSFT); - } else { - register_code(keycode); - unregister_code(keycode); - } + if (pgm_read_byte(&ascii_to_shift_lut[(uint8_t)ascii_code])) { is_shifted = true; } else { is_shifted = false; } + if (pgm_read_byte(&ascii_to_alt_lut[(uint8_t)ascii_code])) { is_alted = true; } else { is_alted = false; } + + if (is_shifted) { register_code(KC_LSFT); } + if (is_alted) { register_code(KC_RALT); } + + register_code(keycode); + unregister_code(keycode); + + if (is_alted) { unregister_code(KC_RALT); } + if (is_shifted) { unregister_code(KC_LSFT); } } void set_single_persistent_default_layer(uint8_t default_layer) { |