ça marche

This commit is contained in:
Kawamashi 2025-04-07 11:46:46 +02:00
commit 152251c6c0
4 changed files with 55 additions and 14 deletions

View file

@ -23,7 +23,7 @@ bool clever_key_finder(uint16_t next_keycode, keyrecord_t* record) {
uint16_t prev_keycode = recent[RECENT_SIZE - 1]; 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) { switch (prev_keycode) {
case FG_EXLM: case FG_EXLM:
case FG_QUES: case FG_QUES:
@ -49,12 +49,6 @@ bool clever_key_finder(uint16_t next_keycode, keyrecord_t* record) {
switch (prev_keycode) { switch (prev_keycode) {
/* case FG_C:
if (next_keycode == FG_A) {
invoke_key(FG_U,record);
break;
} */
case FG_Q: case FG_Q:
switch (next_keycode) { switch (next_keycode) {
@ -252,6 +246,14 @@ bool clever_key_finder(uint16_t next_keycode, keyrecord_t* record) {
case AGRV_SPC: case AGRV_SPC:
layer_off(_ODK); layer_off(_ODK);
return finish_word((uint16_t[]) {FG_AGR, KC_SPC}, 2, record); 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 return false; // Process next keycode normally

View file

@ -22,6 +22,7 @@ unsigned short int bkspc_countdown = RECENT_SIZE + 1;
// Copy of the record argument for the clever key. // Copy of the record argument for the clever key.
static keyrecord_t mod_record; static keyrecord_t mod_record;
static bool processingCK = false;
void clear_recent_keys(void) { void clear_recent_keys(void) {
memset(recent, 0, sizeof(recent)); // Set all zeros (KC_NO). 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`. // Handles one event. Returns false if the key was appended to `recent`.
uint16_t get_next_keycode(uint16_t keycode, keyrecord_t* record) { 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(); uint8_t mods = get_mods() | get_oneshot_mods();
@ -150,11 +151,17 @@ void invoke_key(uint16_t keycode, keyrecord_t* record) {
bkspc_countdown = 1; bkspc_countdown = 1;
} }
bool replace_next_key(uint16_t keycode, keyrecord_t* record) { bool replace_next_key(uint16_t new_keycode, keyrecord_t* record) {
invoke_key(keycode, record); //store_keycode(new_keycode, record);
record->keycode = new_keycode;
return true; 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) { void process_word(uint16_t keycodes[], uint8_t num_keycodes, keyrecord_t* record) {
for (int i = 0; i < num_keycodes; ++i) { for (int i = 0; i < num_keycodes; ++i) {
invoke_key(keycodes[i], record); 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); return finish_word(keycodes, num_keycodes, record);
} }
bool process_clever_keys(uint16_t keycode, keyrecord_t* 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. 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);
}
} }

View file

@ -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 finish_magic(uint16_t keycodes[], uint8_t num_keycodes, keyrecord_t* record);
bool process_clever_keys(uint16_t keycode, 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); //bool process_accent(uint16_t accent, uint16_t letter, keyrecord_t* record);

View file

@ -116,6 +116,7 @@ void post_process_record_user(uint16_t keycode, keyrecord_t* record) {
os4a_layer_exit_check(); os4a_layer_exit_check();
numword_exit_check(); numword_exit_check();
odk_layer_exit_check(keycode); odk_layer_exit_check(keycode);
end_CK(record);
} }