diff options
Diffstat (limited to 'users/ridingqwerty/process_records.c')
-rw-r--r-- | users/ridingqwerty/process_records.c | 467 |
1 files changed, 461 insertions, 6 deletions
diff --git a/users/ridingqwerty/process_records.c b/users/ridingqwerty/process_records.c index be72883ecb..b0b0b48a22 100644 --- a/users/ridingqwerty/process_records.c +++ b/users/ridingqwerty/process_records.c @@ -1,4 +1,7 @@ +#include <stdio.h> +#include <time.h> #include "ridingqwerty.h" +#include "dict.h" __attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { @@ -10,23 +13,475 @@ bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { return true; } -uint16_t user_key_timer; +/* +typedef union { + struct { + uint8_t aesthetic : 1, + spongebob : 1, + uppercase : 1, + australia : 1, + unusued : 4; + }; + uint8_t all; +} mode_config_t; +*/ +mode_config_t mode = {.all = 0U}; + +bool randword_seed = false; +uint8_t user_mod_state; +uint16_t rand_key; +uint16_t temp_keycode; +uint32_t user_key_timer; + bool process_record_user(uint16_t keycode, keyrecord_t *record) { +#ifdef CONSOLE_ENABLE + uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed); +#endif + + temp_keycode = keycode; + if ((mode.all != 0U) && ((keycode != DB(TAB) || keycode != ED(ESC)) && ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)))) { + temp_keycode &= 0xFF; + } + + if (mode.spongebob) { + switch(temp_keycode) { + case KC_A ... KC_Z: + if (record->event.pressed) { + (mode.uppercase ^= 1) == 0 ? tap_code16(S(temp_keycode)) : tap_code(temp_keycode); + } + return false; + } + } + + if (mode.aesthetic) { + switch(temp_keycode) { +#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) + case KC_A: + if (record->event.pressed) { + send_unicode_hex_string("039B"); + tap_code(KC_SPC); + } + return false; + case KC_E: + if (record->event.pressed) { + send_unicode_hex_string("039E"); + tap_code(KC_SPC); + } + return false; +#else + case A: + case E: + if (record->event.pressed) { + tap_code16(S(temp_keycode)); + tap_code(KC_SPC); + } + return false; +#endif + case KC_B ... KC_D: + case KC_F ... KC_Z: + if (record->event.pressed) { + tap_code16(S(temp_keycode)); + tap_code(KC_SPC); + } + return false; + case KC_1 ... KC_0: + if (record->event.pressed) { + tap_code(temp_keycode); + tap_code(KC_SPC); + } + return false; + + case KC_BSPC: + if (record->event.pressed) { + tap_code(KC_BSPC); + tap_code(KC_BSPC); + } + return false; + case KC_SPC: + if (record->event.pressed) { + tap_code(KC_SPC); + tap_code(KC_SPC); + tap_code(KC_SPC); + } + return false; + } + } + + if (mode.australia) { + switch(temp_keycode) { + // IDEMPOTENT + case KC_L: + case KC_O: + case KC_S: + case KC_Z: + case KC_8: + case KC_0: + if (record->event.pressed) { + tap_code(temp_keycode); + tap_code(KC_LEFT); + } + return false; + + // INVERSE + case KC_B: + if (record->event.pressed) { + tap_code(KC_Q); + tap_code(KC_LEFT); + } + return false; + case KC_Q: + if (record->event.pressed) { + tap_code(KC_B); + tap_code(KC_LEFT); + } + return false; + case KC_D: + if (record->event.pressed) { + tap_code(KC_P); + tap_code(KC_LEFT); + } + return false; + case KC_P: + if (record->event.pressed) { + tap_code(KC_D); + tap_code(KC_LEFT); + } + return false; + case KC_N: + if (record->event.pressed) { + tap_code(KC_U); + tap_code(KC_LEFT); + } + return false; + case KC_U: + if (record->event.pressed) { + tap_code(KC_N); + tap_code(KC_LEFT); + } + return false; + case KC_6: + if (record->event.pressed) { + tap_code(KC_9); + tap_code(KC_LEFT); + } + return false; + case KC_9: + if (record->event.pressed) { + tap_code(KC_6); + tap_code(KC_LEFT); + } + return false; + + // TRANSLATE + case KC_A: + if (record->event.pressed) { + send_unicode_hex_string("0250"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_C: + if (record->event.pressed) { + send_unicode_hex_string("0254"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_E: + if (record->event.pressed) { + send_unicode_hex_string("01DD"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_F: + if (record->event.pressed) { + send_unicode_hex_string("025F"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_G: + if (record->event.pressed) { + send_unicode_hex_string("0183"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_H: + if (record->event.pressed) { + send_unicode_hex_string("0265"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_I: + if (record->event.pressed) { + send_unicode_hex_string("1D09"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_J: + if (record->event.pressed) { + send_unicode_hex_string("027E"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_K: + if (record->event.pressed) { + send_unicode_hex_string("029E"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_M: + if (record->event.pressed) { + send_unicode_hex_string("026F"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_R: + if (record->event.pressed) { + send_unicode_hex_string("0279"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_T: + if (record->event.pressed) { + send_unicode_hex_string("0287"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_V: + if (record->event.pressed) { + send_unicode_hex_string("028C"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_W: + if (record->event.pressed) { + send_unicode_hex_string("028D"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_X: + if (record->event.pressed) { + send_unicode_hex_string("2717"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_Y: + if (record->event.pressed) { + send_unicode_hex_string("028E"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_1: + if (record->event.pressed) { + send_unicode_hex_string("0269"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_2: + if (record->event.pressed) { + send_unicode_hex_string("3139"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_3: + if (record->event.pressed) { + send_unicode_hex_string("0190"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_4: + if (record->event.pressed) { + send_unicode_hex_string("3123"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_5: + if (record->event.pressed) { + send_unicode_hex_string("03DB"); + tap_code(KC_LEFT); + return false; + } + break; + case KC_7: + if (record->event.pressed) { + send_unicode_hex_string("3125"); + tap_code(KC_LEFT); + } + return false; + + // CONTROLS + case KC_ENT: + if (record->event.pressed) { + tap_code(KC_END); + tap_code(KC_ENTER); + } + return false; + case KC_BSPC: + if (record->event.pressed) { + tap_code(KC_DELT); + } + return false; + case KC_SPC: + if (record->event.pressed) { + tap_code(KC_SPC); + tap_code(KC_LEFT); + } + return false; + } + } + switch(keycode) { + + case VERSION: + if (!record->event.pressed) { + send_string_with_delay_P(PSTR(QMK_KEYBOARD ":" QMK_KEYMAP "\nVersion:" QMK_VERSION ", built: " QMK_BUILDDATE "\n"), MACRO_TIMER); + } + break; + + case QWERTY ... COLEMAK: +#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) + case GREEK ... HIRAGAN: +#endif + if (record->event.pressed) { + //set_single_persistent_default_layer(keycode - QWERTY); + default_layer_set(1U << (keycode - QWERTY)); + } + break; + + case MAKE: + if (record->event.pressed) { + user_mod_state = get_mods() & MOD_MASK_CTRL; + if (user_mod_state) { + clear_mods(); + send_string_with_delay_P(PSTR("sleep 1 && "), MACRO_TIMER); + } + send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), MACRO_TIMER); + if (user_mod_state) { + send_string_with_delay_P(PSTR(":flash\n"), MACRO_TIMER); + reset_keyboard(); + } else { + send_string_with_delay_P(PSTR("\n"), MACRO_TIMER); + } + } + break; + + case RNGWORD: + if (randword_seed == false) { + randword_seed = true; + srand(timer_read32()); + } + rand_key = rand() % NUMBER_OF_WORDS; + if (record->event.pressed) { + send_string(dict[rand_key]); + tap_code(KC_SPC); + } + break; + case RG_QUOT: if (record->event.pressed) { - user_key_timer = timer_read(); +#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) + user_mod_state = get_mods() & MOD_MASK_ALT; + if (user_mod_state) { + unregister_mods(MOD_BIT(KC_RALT)); + send_unicode_hex_string("00B0"); + set_mods(user_mod_state); + return false; + } +#endif + user_key_timer = timer_read32(); layer_on(_NUMBER); register_mods(MOD_BIT(KC_RGUI)); } else { unregister_mods(MOD_BIT(KC_RGUI)); layer_off(_NUMBER); - if (timer_elapsed(user_key_timer) < TAPPING_TERM) { - register_code(KC_QUOT); - unregister_code(KC_QUOT); - } + if (timer_elapsed32(user_key_timer) < TAPPING_TERM) { + tap_code(KC_QUOT); + } } return false; break; + + case TESTING: + /* + if (record->event.pressed) { + int length = snprintf( NULL, 0, "%lu", test_number ); + char* str = malloc( length + 1 ); + snprintf( str, length + 1, "%lu", test_number ); + send_string(str); + free(str); + // make CFLAGS+="-lc -specs=nosys.specs" board:keymap + } + */ + break; + + case CCCV: // One key copy/paste + if (record->event.pressed) { + user_key_timer = timer_read32(); + } else { + if (timer_elapsed32(user_key_timer) > TAPPING_TERM) { // Hold, copy + register_code(KC_LCTL); + tap_code(KC_C); + unregister_code(KC_LCTL); + } else { // Tap, paste + register_code(KC_LCTL); + tap_code(KC_V); + unregister_code(KC_LCTL); + } + } + break; + + case SEED: + if (record->event.pressed) { + srand(timer_read32()); + } + break; + + case SARCASM: + if (record->event.pressed) { + if (!(mode.spongebob ^= 1)) { mode.all = 0U; }; + } + break; + + case VPRWAVE: + if (record->event.pressed) { + if (!(mode.aesthetic ^= 1)) { mode.all = 0U; }; + } + break; + + case STRAYA: + if (record->event.pressed) { + if (!(mode.australia ^= 1)) { mode.all = 0U; }; + } + break; + default: + if (record->event.pressed && record->event.key.col == 4 && record->event.key.row == 1) { + if (get_mods() & MOD_BIT(KC_RALT)) { + unregister_mods(MOD_BIT(KC_RALT)); + //send_unicode_hex_string("262D"); + tap_code(KC_BSPC); + set_mods(MOD_BIT(KC_RALT)); + return false; + } + } + break; + } return process_record_keymap(keycode, record) && process_record_secrets(keycode, record); |