summaryrefslogtreecommitdiff
path: root/users/pcoves/rainbowUnicorn.c
blob: 9520415051e18b2040f0f90a8588408a7f79db47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "rainbowUnicorn.h"
#include "pcoves.h"

static struct {
    bool    enabled;
    uint8_t color;
    char    string[2];
    uint8_t mods;
} state = {false, 0};

bool process_record_rainbowUnicorn(uint16_t keycode, keyrecord_t* record) {
    if (keycode == RAINBOW_UNICORN_TOGGLE) {
        state.enabled ^= true;
        return false;
    }

    if (!state.enabled) return true;

    switch (keycode) {
        case KC_A ... KC_Z:
        case KC_1 ... KC_0:
        case ALT_T(KC_A)... ALT_T(KC_Z):
        case CTL_T(KC_A)... CTL_T(KC_Z):
        case GUI_T(KC_A)... GUI_T(KC_Z):
        case SFT_T(KC_A)... SFT_T(KC_Z):
            if (record->event.pressed) {
                state.mods = get_mods();
                clear_mods();

                tap_code16(C(KC_C));

                itoa(state.color + 3, state.string, 10);
                send_string(state.string);

                set_mods(state.mods);
            } else {
                state.color = (state.color + 1) % 11;
            }
    }

    return true;
}