summaryrefslogtreecommitdiff
path: root/users/anderson/seq.c
blob: 8e6edb35d3454ddfe3d0b5f1cfa692987226d81a (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
#include "seq.h"

static char buffer[32];
static uint8_t buffer_size = 0;

void seq_start(void) {
    buffer_size = 0;
    SEND_STRING(":");
}

bool seq_feed(uint16_t keycode) {
    if (keycode == KC_ENTER) {
        for (int i = 0; i < buffer_size + 1; i++) {
            tap_code(KC_BACKSPACE);
        }
        for (int i = 0; i < seq_config_size; i++) {
            seq_t item = seq_config[i];
            if (strncmp(item.sequence, buffer, buffer_size) == 0) {
                send_unicode_string(item.result);
            }
        }
        buffer_size = 0;
        return false;
    } else if (keycode == KC_BACKSPACE) {
        if (buffer_size) {
            buffer_size--;
            tap_code(keycode);
        }
        return true;
    } else {
        if (keycode >= KC_A && keycode <= KC_Z) {
            buffer[buffer_size++] = keycode - KC_A + 'a';
            tap_code(keycode);
        }
        return true;
    }
}