diff options
Diffstat (limited to 'users/anderson/seq.c')
-rw-r--r-- | users/anderson/seq.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/users/anderson/seq.c b/users/anderson/seq.c new file mode 100644 index 000000000..ff5064859 --- /dev/null +++ b/users/anderson/seq.c @@ -0,0 +1,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_BSPACE); + } + 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_BSPACE) { + 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; + } +} + |