From dcadece8ed122d001c88230d545dacc954eff7fd Mon Sep 17 00:00:00 2001 From: Matt Skalecki Date: Thu, 22 Feb 2024 15:57:30 -0500 Subject: [PATCH] Test repeat and one-shot callback functionality --- .gitignore | 2 + .../moonlander/keymaps/ikcelaks/trie2.cpp | 53 +++++++++++++++---- .../moonlander/keymaps/ikcelaks/util.cpp | 9 ++-- keyboards/moonlander/keymaps/ikcelaks/util.h | 4 +- 4 files changed, 52 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 800a4e2c..47c870e8 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ compile_commands.json .clangd/ .cache/ + +a.out diff --git a/keyboards/moonlander/keymaps/ikcelaks/trie2.cpp b/keyboards/moonlander/keymaps/ikcelaks/trie2.cpp index 8bdcf352..d579891d 100644 --- a/keyboards/moonlander/keymaps/ikcelaks/trie2.cpp +++ b/keyboards/moonlander/keymaps/ikcelaks/trie2.cpp @@ -135,11 +135,45 @@ bool search_trie2(const trie2_t *trie, int offset, trie2_visitor_t *v) } ////////////////////////////////////////////////////////////////////////////////// -void print_cb2(trie2_visitor_t *v, int bspaces, int func, const char *completion) +void print_traverse_cb2(trie2_visitor_t *v, int bspaces, int func, const char *completion) +{ + printf(" depth %d: ", v->stack.size); + printf(" -> %s (bspc: %d, func: %d)\n", completion, bspaces, func); + + if (v->cb_data) { + int entries = *(int*)v->cb_data; + *(int*)v->cb_data = entries + 1; + } +} + +////////////////////////////////////////////////////////////////////////////////// +void print_search_cb2(trie2_visitor_t *v, int bspaces, int func, const char *completion) { printf(" depth %d: ", v->stack.size); stack_print(&v->stack); - printf(" -> %s (bspc: %d, func: %d)\n", completion, bspaces, func); + search_buffer_t *search = (search_buffer_t*)v->cb_data; + char last_char; + int i; + switch (func) { + case 1: // repeat + i = search->size - 1; + last_char = search->data[i]; + while ((last_char == '*' || last_char == '@') && i >= 0) { + last_char = search->data[--i]; + } + search->data[search->size-1] = last_char; + printf(" -> %s%c (bspc: %d, func: %d)\n", completion, last_char, bspaces, func); + printf(" new buffer: %s", search->data); + printf("\n"); + break; + case 2: // one-shot-shift + printf(" -> %s (bspc: %d, func: %d)\n", completion, bspaces, func); + printf(" Activating One-Shot-Shift\n"); + break; + default: + printf(" -> %s (bspc: %d, func: %d)\n", completion, bspaces, func); + } + if (v->cb_data) { int entries = *(int*)v->cb_data; *(int*)v->cb_data = entries + 1; @@ -153,7 +187,7 @@ void test_traverse2(trie2_t *trie) trie2_visitor_t visitor; visitor.stack.size = 0; visitor.cb_data = (void*)&entries; - visitor.cb_func = print_cb2; + visitor.cb_func = print_traverse_cb2; traverse_trie2(trie, 0, &visitor); printf("Found %d entries.\n\n", entries); } @@ -167,7 +201,7 @@ void test_search2(const trie2_t *trie, const char *buffer) trie2_visitor_t visitor; visitor.stack.size = 0; visitor.cb_data = (void*)&search; - visitor.cb_func = print_cb2; + visitor.cb_func = print_search_cb2; search_trie2(trie, 0, &visitor); } ////////////////////////////////////////////////////////////////////////////////// @@ -192,12 +226,11 @@ void test_trie2() test_search2(&trie2, "cat*"); test_search2(&trie2, ":ex@"); test_search2(&trie2, "j*"); - test_search2(&trie2, "i@"); - test_search2(&trie2, "i@m"); - test_search2(&trie2, "i@d"); - test_search2(&trie2, "i@l"); - test_search2(&trie2, "@"); - test_search2(&trie2, "*"); + test_search2(&trie2, ":i@"); + test_search2(&trie2, ":i@m"); + test_search2(&trie2, ":i@d"); + test_search2(&trie2, ":i@l"); + test_search2(&trie2, "o@"); test_search2(&trie2, ".@"); } diff --git a/keyboards/moonlander/keymaps/ikcelaks/util.cpp b/keyboards/moonlander/keymaps/ikcelaks/util.cpp index df16bf06..84420e54 100644 --- a/keyboards/moonlander/keymaps/ikcelaks/util.cpp +++ b/keyboards/moonlander/keymaps/ikcelaks/util.cpp @@ -3,8 +3,7 @@ #define QK_LSFT 0x0200 #define pgm_read_byte(address_short) *((uint8_t*)(address_short)) -#define PROGMEM -#define KC_MAGIC_0 0x0100 +#define PROGMEM static const char magic_chars[] = { '*', '@' }; @@ -23,7 +22,7 @@ const char unshifted_keycode_to_ascii_lut[53] PROGMEM = { ' ', ' ', ' ', ' ', ' ', '-', '=', '[', // KC_RBRC KC_BSLS KC_NUHS KC_SCLN KC_QUOT KC_GRV KC_COMM KC_DOT ']', '\\', ' ', ';', '\'', '`', ',', '.', -// KC_SLSH +// KC_SLSH '/' }; const char shifted_keycode_to_ascii_lut[53] PROGMEM = { @@ -41,7 +40,7 @@ const char shifted_keycode_to_ascii_lut[53] PROGMEM = { ' ', ' ', ' ', ' ', ' ', '_', '+', '{', // KC_RCBR KC_PIPE KC_NUHS KC_COLN KC_DQUO KC_GRV KC_LABK KC_RABK '}', '|', ' ', ':', '"', '~', '<', '>', -// KC_QUES +// KC_QUES '?' }; @@ -60,4 +59,4 @@ char keycode_to_char(uint16_t keycode) pgm_read_byte(&unshifted_keycode_to_ascii_lut[keycode]); } return ' '; -} \ No newline at end of file +} diff --git a/keyboards/moonlander/keymaps/ikcelaks/util.h b/keyboards/moonlander/keymaps/ikcelaks/util.h index 0c934b6b..0f696f19 100644 --- a/keyboards/moonlander/keymaps/ikcelaks/util.h +++ b/keyboards/moonlander/keymaps/ikcelaks/util.h @@ -1,4 +1,6 @@ #pragma once #include -char keycode_to_char(uint16_t code); \ No newline at end of file +#define KC_MAGIC_0 0x0100 + +char keycode_to_char(uint16_t code);