diff options
Diffstat (limited to 'users/pcoves/rainbowUnicorn.c')
| -rw-r--r-- | users/pcoves/rainbowUnicorn.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/users/pcoves/rainbowUnicorn.c b/users/pcoves/rainbowUnicorn.c new file mode 100644 index 000000000..952041505 --- /dev/null +++ b/users/pcoves/rainbowUnicorn.c | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | #include "rainbowUnicorn.h" | ||
| 2 | #include "pcoves.h" | ||
| 3 | |||
| 4 | static struct { | ||
| 5 | bool enabled; | ||
| 6 | uint8_t color; | ||
| 7 | char string[2]; | ||
| 8 | uint8_t mods; | ||
| 9 | } state = {false, 0}; | ||
| 10 | |||
| 11 | bool process_record_rainbowUnicorn(uint16_t keycode, keyrecord_t* record) { | ||
| 12 | if (keycode == RAINBOW_UNICORN_TOGGLE) { | ||
| 13 | state.enabled ^= true; | ||
| 14 | return false; | ||
| 15 | } | ||
| 16 | |||
| 17 | if (!state.enabled) return true; | ||
| 18 | |||
| 19 | switch (keycode) { | ||
| 20 | case KC_A ... KC_Z: | ||
| 21 | case KC_1 ... KC_0: | ||
| 22 | case ALT_T(KC_A)... ALT_T(KC_Z): | ||
| 23 | case CTL_T(KC_A)... CTL_T(KC_Z): | ||
| 24 | case GUI_T(KC_A)... GUI_T(KC_Z): | ||
| 25 | case SFT_T(KC_A)... SFT_T(KC_Z): | ||
| 26 | if (record->event.pressed) { | ||
| 27 | state.mods = get_mods(); | ||
| 28 | clear_mods(); | ||
| 29 | |||
| 30 | tap_code16(C(KC_C)); | ||
| 31 | |||
| 32 | itoa(state.color + 3, state.string, 10); | ||
| 33 | send_string(state.string); | ||
| 34 | |||
| 35 | set_mods(state.mods); | ||
| 36 | } else { | ||
| 37 | state.color = (state.color + 1) % 11; | ||
| 38 | } | ||
| 39 | } | ||
| 40 | |||
| 41 | return true; | ||
| 42 | } | ||
