diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c index d7a5a272..1e0552bf 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c @@ -23,7 +23,7 @@ bool clever_key_finder(uint16_t next_keycode, keyrecord_t* record) { uint16_t prev_keycode = recent[RECENT_SIZE - 1]; - if (isLetter(next_keycode) || isSendStringMacro(next_keycode)) { +/* if (isLetter(next_keycode) || isSendStringMacro(next_keycode)) { switch (prev_keycode) { case FG_EXLM: case FG_QUES: @@ -49,12 +49,6 @@ bool clever_key_finder(uint16_t next_keycode, keyrecord_t* record) { switch (prev_keycode) { -/* case FG_C: - if (next_keycode == FG_A) { - invoke_key(FG_U,record); - break; - } */ - case FG_Q: switch (next_keycode) { @@ -252,6 +246,14 @@ bool clever_key_finder(uint16_t next_keycode, keyrecord_t* record) { case AGRV_SPC: layer_off(_ODK); return finish_word((uint16_t[]) {FG_AGR, KC_SPC}, 2, record); + } */ + switch (next_keycode) { + case FG_O: + if (prev_keycode == FG_U && recent[RECENT_SIZE - 2] != FG_Q) { + // "uo" -> "un" + return replace_next_key(FG_N, record); + } + break; } return false; // Process next keycode normally diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/clever_keys_utilities.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/clever_keys_utilities.c index 4497bdb9..6b585e30 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/clever_keys_utilities.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/clever_keys_utilities.c @@ -22,6 +22,7 @@ unsigned short int bkspc_countdown = RECENT_SIZE + 1; // Copy of the record argument for the clever key. static keyrecord_t mod_record; +static bool processingCK = false; void clear_recent_keys(void) { memset(recent, 0, sizeof(recent)); // Set all zeros (KC_NO). @@ -36,7 +37,7 @@ void recent_keys_task(void) { // Handles one event. Returns false if the key was appended to `recent`. uint16_t get_next_keycode(uint16_t keycode, keyrecord_t* record) { - if (!record->event.pressed) { return KC_NO; } + //if (!record->event.pressed) { return KC_NO; } uint8_t mods = get_mods() | get_oneshot_mods(); @@ -150,11 +151,17 @@ void invoke_key(uint16_t keycode, keyrecord_t* record) { bkspc_countdown = 1; } -bool replace_next_key(uint16_t keycode, keyrecord_t* record) { - invoke_key(keycode, record); +bool replace_next_key(uint16_t new_keycode, keyrecord_t* record) { + //store_keycode(new_keycode, record); + record->keycode = new_keycode; return true; } +/* bool replace_next_key(uint16_t keycode, keyrecord_t* record) { + invoke_key(keycode, record); + return true; +} */ + void process_word(uint16_t keycodes[], uint8_t num_keycodes, keyrecord_t* record) { for (int i = 0; i < num_keycodes; ++i) { invoke_key(keycodes[i], record); @@ -173,14 +180,44 @@ bool finish_magic(uint16_t keycodes[], uint8_t num_keycodes, keyrecord_t* record return finish_word(keycodes, num_keycodes, record); } + bool process_clever_keys(uint16_t keycode, keyrecord_t* record) { - uint16_t next_keycode = get_next_keycode(keycode, record); + //if (record->event.pressed && !processingCK) { + if (record->event.pressed) { + uint16_t next_keycode = get_next_keycode(keycode, record); - if (next_keycode != KC_NO) { + if (next_keycode != KC_NO) { + if (clever_key_finder(next_keycode, record)) { + processingCK = true; + //return false; + } + store_keycode(next_keycode, record); + } + //return true; // If no clever key was found, process keycode normally. + } + return true; +} - if (clever_key_finder(next_keycode, record)) { return false; } - store_keycode(next_keycode, record); + +/* bool process_clever_keys(uint16_t keycode, keyrecord_t* record) { + + if (record->event.pressed) { + uint16_t next_keycode = get_next_keycode(keycode, record); + + if (next_keycode != KC_NO) { + + if (clever_key_finder(next_keycode, record)) { return false; } + store_keycode(next_keycode, record); + } } return true; // If no clever key was found, process keycode normally. +} */ + +void end_CK(keyrecord_t* record) { + if (processingCK) { + processingCK = false; + record->event.pressed = false; + process_record(record); + } } \ No newline at end of file diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/clever_keys_utilities.h b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/clever_keys_utilities.h index 8641a4db..0cc78702 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/clever_keys_utilities.h +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/clever_keys_utilities.h @@ -43,6 +43,7 @@ bool finish_word(uint16_t keycodes[], uint8_t num_keycodes, keyrecord_t* record) bool finish_magic(uint16_t keycodes[], uint8_t num_keycodes, keyrecord_t* record); bool process_clever_keys(uint16_t keycode, keyrecord_t* record); +void end_CK(keyrecord_t* record); //bool process_accent(uint16_t accent, uint16_t letter, keyrecord_t* record); diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c index 79c8acdc..c0c5dfd4 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c @@ -116,6 +116,7 @@ void post_process_record_user(uint16_t keycode, keyrecord_t* record) { os4a_layer_exit_check(); numword_exit_check(); odk_layer_exit_check(keycode); + end_CK(record); }