diff options
Diffstat (limited to 'users/spidey3/spidey3.c')
| -rw-r--r-- | users/spidey3/spidey3.c | 91 | 
1 files changed, 60 insertions, 31 deletions
| diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c index df73c903d0..e993f4828e 100644 --- a/users/spidey3/spidey3.c +++ b/users/spidey3/spidey3.c @@ -1,3 +1,6 @@ +// Copyright 2022 Joshua Diamond josh@windowoffire.com (@spidey3) +// SPDX-License-Identifier: GPL-2.0-or-later +  #include QMK_KEYBOARD_H  #include "spidey3.h" @@ -18,7 +21,7 @@ static uint32_t matrix_timer = 0;  #    endif  void report_version(void) { -    uprintln(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE); +    uprintln(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION " - " QMK_BUILDDATE);      reported_version = true;  }  #endif @@ -51,8 +54,41 @@ void matrix_scan_user(void) {  #endif  } -bool process_record_glyph_replacement(uint16_t keycode, keyrecord_t *record, uint32_t baseAlphaLower, uint32_t baseAlphaUpper, uint32_t zeroGlyph, uint32_t baseNumberOne, uint32_t spaceGlyph, uint8_t temp_mod, uint8_t temp_osm) { +static uint32_t math_glyph_exceptions(const uint16_t keycode, const bool shifted) { +    if (shifted) { +        switch (keycode) { +            // clang-format off +            case KC_C: return 0x2102; +            case KC_H: return 0x210D; +            case KC_N: return 0x2115; +            case KC_P: return 0x2119; +            case KC_Q: return 0x211A; +            case KC_R: return 0x211D; +            case KC_Z: return 0x2124; +                // clang-format on +        } +    } +    return 0; +} + +bool process_record_glyph_replacement(uint16_t keycode, keyrecord_t *record, uint32_t baseAlphaLower, uint32_t baseAlphaUpper, uint32_t zeroGlyph, uint32_t baseNumberOne, uint32_t spaceGlyph, uint32_t (*exceptions)(const uint16_t keycode, const bool shifted), uint8_t temp_mod, uint8_t temp_osm) { +    void _register(uint32_t codepoint) { +        unicode_input_start(); +        register_hex32(codepoint); +        unicode_input_finish(); +    } +      if ((((temp_mod | temp_osm) & (MOD_MASK_CTRL | MOD_MASK_ALT | MOD_MASK_GUI))) == 0) { +        bool shifted = ((temp_mod | temp_osm) & MOD_MASK_SHIFT); +        if (exceptions) { +            uint32_t res = exceptions(keycode, shifted); +            if (res) { +                if (record->event.pressed) { +                    _register(res); +                } +                return false; +            } +        }          switch (keycode) {              case KC_A ... KC_Z:                  if (record->event.pressed) { @@ -61,39 +97,30 @@ bool process_record_glyph_replacement(uint16_t keycode, keyrecord_t *record, uin                      clear_oneshot_mods();  #endif -                    unicode_input_start(); -                    uint32_t base = ((temp_mod | temp_osm) & MOD_MASK_SHIFT) ? baseAlphaUpper : baseAlphaLower; -                    register_hex32(base + (keycode - KC_A)); -                    unicode_input_finish(); - +                    uint32_t base = shifted ? baseAlphaUpper : baseAlphaLower; +                    _register(base + (keycode - KC_A));                      set_mods(temp_mod);                  }                  return false;              case KC_0: -                if ((temp_mod | temp_osm) & MOD_MASK_SHIFT) {  // skip shifted numbers, so that we can still use symbols etc. +                if (shifted) {  // skip shifted numbers, so that we can still use symbols etc.                      return true;                  }                  if (record->event.pressed) { -                    unicode_input_start(); -                    register_hex32(zeroGlyph); -                    unicode_input_finish(); +                    _register(zeroGlyph);                  }                  return false;              case KC_1 ... KC_9: -                if ((temp_mod | temp_osm) & MOD_MASK_SHIFT) {  // skip shifted numbers, so that we can still use symbols etc. +                if (shifted) {  // skip shifted numbers, so that we can still use symbols etc.                      return true;                  }                  if (record->event.pressed) { -                    unicode_input_start(); -                    register_hex32(baseNumberOne + (keycode - KC_1)); -                    unicode_input_finish(); +                    _register(baseNumberOne + (keycode - KC_1));                  }                  return false;              case KC_SPACE:                  if (record->event.pressed) { -                    unicode_input_start(); -                    register_hex32(spaceGlyph);  // em space -                    unicode_input_finish(); +                    _register(spaceGlyph);  // em space                  }                  return false;          } @@ -163,7 +190,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {                      debug_keyboard = 0;                      debug_matrix   = 0;                  } -                uprintf("DEBUG: enable=%u, keyboard=%u, matrix=%u\n", debug_enable, debug_keyboard, debug_matrix); +                uprintf("DEBUG: enable=%u, kb=%u, matrix=%u\n", debug_enable, debug_keyboard, debug_matrix);                  eeconfig_update_debug(debug_config.raw);                  return false;  #endif @@ -181,14 +208,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {  #endif                  // clang-format on -            case SPI_NORMAL ... SPI_FRAKTR: +            case SPI_NORMAL ... SPI_MATH:                  spi_replace_mode = (spi_replace_mode == keycode) ? SPI_NORMAL : keycode; -                dprintf("spi_replace_mode = %u\n", spi_replace_mode);                  break;              case SPI_GFLOCK:                  spi_gflock = !spi_gflock; -                dprintf("spi_gflock = %u\n", spi_gflock);                  break;              case SPI_KP_00: @@ -279,19 +304,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {          case KC_SPACE:              switch (spi_replace_mode) {                  case SPI_WIDE: -                    return process_record_glyph_replacement(keycode, record, 0xFF41, 0xFF21, 0xFF10, 0xFF11, 0x2003, mods, osm); +                    return process_record_glyph_replacement(keycode, record, 0xFF41, 0xFF21, 0xFF10, 0xFF11, 0x2003, NULL, mods, osm);                  case SPI_SCRIPT: -                    return process_record_glyph_replacement(keycode, record, 0x1D4EA, 0x1D4D0, 0x1D7CE, 0x1D7CF, 0x2002, mods, osm); +                    return process_record_glyph_replacement(keycode, record, 0x1D4EA, 0x1D4D0, 0x1D7CE, 0x1D7CF, 0x2002, NULL, mods, osm);                  case SPI_BLOCKS: -                    return process_record_glyph_replacement(keycode, record, 0x1F170, 0x1F170, '0', '1', 0x2002, mods, osm); +                    return process_record_glyph_replacement(keycode, record, 0x1F170, 0x1F170, '0', '1', 0x2002, NULL, mods, osm);                  case SPI_CIRCLE: -                    return process_record_glyph_replacement(keycode, record, 0x1F150, 0x1F150, '0', '1', 0x2002, mods, osm); +                    return process_record_glyph_replacement(keycode, record, 0x1F150, 0x1F150, '0', '1', 0x2002, NULL, mods, osm);                  case SPI_SQUARE: -                    return process_record_glyph_replacement(keycode, record, 0x1F130, 0x1F130, '0', '1', 0x2002, mods, osm); +                    return process_record_glyph_replacement(keycode, record, 0x1F130, 0x1F130, '0', '1', 0x2002, NULL, mods, osm);                  case SPI_PARENS: -                    return process_record_glyph_replacement(keycode, record, 0x1F110, 0x1F110, '0', '1', 0x2002, mods, osm); +                    return process_record_glyph_replacement(keycode, record, 0x1F110, 0x1F110, '0', '1', 0x2002, NULL, mods, osm);                  case SPI_FRAKTR: -                    return process_record_glyph_replacement(keycode, record, 0x1D586, 0x1D56C, '0', '1', 0x2002, mods, osm); +                    return process_record_glyph_replacement(keycode, record, 0x1D586, 0x1D56C, '0', '1', 0x2002, NULL, mods, osm); +                case SPI_BOLD: +                    return process_record_glyph_replacement(keycode, record, 0x1D41A, 0x1D400, '0', '1', 0x2002, NULL, mods, osm); +                case SPI_MATH: +                    return process_record_glyph_replacement(keycode, record, 0x1D552, 0x1D538, '0', '1', 0x2002, &math_glyph_exceptions, mods, osm);              }              break; @@ -304,9 +333,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {              if (record->event.pressed) {                  if ((mods | osm) & MOD_MASK_SHIFT) {                      del_mods(MOD_MASK_SHIFT); -#ifndef NO_ACTION_ONESHOT +#    ifndef NO_ACTION_ONESHOT                      clear_oneshot_mods(); -#endif +#    endif                      register_code(KC_DEL);                      delkey_registered = true;                      set_mods(mods); | 
