From 711584e208d18cbbc1c23bd305f835e1e1f5de1e Mon Sep 17 00:00:00 2001 From: Kawamashi Date: Thu, 25 Sep 2025 18:22:29 +0200 Subject: [PATCH 1/6] Progression --- .../Kawamashi/features/clever_keys_utilities.c | 16 ---------------- .../base/keymaps/Kawamashi/features/odk_layer.c | 10 +++++++--- 2 files changed, 7 insertions(+), 19 deletions(-) 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 57f2cd98..08cae9bd 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 @@ -76,22 +76,6 @@ uint16_t get_ongoing_keycode(uint16_t keycode, keyrecord_t* record) { uint16_t custom_keycode = get_ongoing_keycode_user(keycode); if (custom_keycode != KC_TRNS) { return custom_keycode; } -/* if (is_send_string_macro(keycode)) { return keycode; } - - if (IS_LAYER_ON(_ODK)) { - switch (keycode) { - case PG_K: - case PG_B: - case PG_AROB: - case PG_3PTS: - case KC_SPC: // In order to uppercase J after '?' for ex. - return keycode; - - default: - clear_recent_keys(); - return KC_NO; - } - } */ uint8_t basic_keycode = keycode; // Handle keys carrying a modifier, for ex on layers(! and ?). diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c index 4ded06f6..204e2192 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c @@ -41,6 +41,9 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { del_weak_mods(MOD_MASK_SHIFT); del_oneshot_mods(MOD_MASK_SHIFT); unregister_mods(MOD_MASK_SHIFT); + tap_code(PG_ODK); + add_weak_mods(MOD_BIT(KC_LSFT)); + return false; } } else { @@ -58,14 +61,15 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { break; default: - tap_code(PG_ODK); + //tap_code(PG_ODK); + invoke_key(PG_ODK, record); } } - if (is_shifted) { +/* if (is_shifted) { is_shifted = false; //set_mods(mods); add_weak_mods(MOD_BIT(KC_LSFT)); - } + } */ } } return true; From af19532ac69a84cf7a0c5316f843d5034ff5ee62 Mon Sep 17 00:00:00 2001 From: Kawamashi Date: Thu, 25 Sep 2025 21:24:07 +0200 Subject: [PATCH 2/6] Shifted PG_ODK --- .../rev1/base/keymaps/Kawamashi/clever_keys.c | 67 ++++++------------- .../features/clever_keys_utilities.c | 8 ++- .../features/clever_keys_utilities.h | 1 + .../base/keymaps/Kawamashi/features/macros.c | 15 +---- .../keymaps/Kawamashi/features/odk_layer.c | 25 ++----- .../keymaps/Kawamashi/features/odk_layer.h | 3 - .../base/keymaps/Kawamashi/features_conf.c | 1 - 7 files changed, 32 insertions(+), 88 deletions(-) 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 bdb93565..91a80dd0 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c @@ -22,25 +22,11 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { uint16_t prev_keycode = recent[RECENT_SIZE - 1]; - //static bool is_shifted = false; // Apostrophe if (is_followed_by_apos(*next_keycode, prev_keycode)) { set_last_keycode(PG_APOS); - //apostrophe = true; } - - //if (is_caps_lock_on()) { -/* if (is_letter(*next_keycode) || is_send_string_macro(*next_keycode)) { - if (recent[RECENT_SIZE - 3] == PG_E && recent[RECENT_SIZE - 2] == PG_T && prev_keycode == KC_SPC) { - caps_word_on(); - } - if (recent[RECENT_SIZE - 2] == PG_VIRG && prev_keycode == KC_SPC && is_letter(*next_keycode)) { - caps_word_on(); - } - } */ - //} - switch (prev_keycode) { @@ -48,7 +34,9 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { switch (*next_keycode) { // Shift auto de la ponctuation après une espace fine insécable case PG_POIN: - process_word((uint16_t[]) {KC_BSPC, SAGR(KC_SPC)}, 2, record); + // uses less space than process_word + tap_code(KC_BSPC); + process_key(SAGR(KC_SPC), record); case PG_TIRE: case PG_VIRG: return replace_ongoing_key(S(*next_keycode), next_keycode, record); @@ -64,7 +52,7 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { // Shift the letter at the beginning of sentences. if (is_letter(*next_keycode) || is_send_string_macro(*next_keycode)) { //if (!is_caps_lock_on()) { add_weak_mods(MOD_BIT(KC_LSFT)); } - add_weak_mods(MOD_BIT(KC_LSFT)); + set_oneshot_mods(MOD_BIT(KC_LSFT)); // Don't use weak mods ! } break; } @@ -119,15 +107,11 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { switch (prev_keycode) { case PG_O: // oui - invoke_key(PG_U, record); + process_key(PG_U, record); case PG_U: // ui SFB return replace_ongoing_key(PG_I, next_keycode, record); -/* case PG_L: - // là - return finish_word((uint16_t[]) {PG_ODK, PG_A}, 2, next_keycode, record); */ - case PG_EACU: // éa SFB return replace_ongoing_key(PG_A, next_keycode, record); @@ -154,19 +138,27 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { case PG_Q: // qué scissor - return finish_word((uint16_t[]) {PG_U, PG_EACU}, 2, next_keycode, record); + //return finish_word((uint16_t[]) {PG_U, PG_EACU}, 2, next_keycode, record); + process_key(PG_U,record); + return replace_ongoing_key(PG_EACU, next_keycode, record); case PG_Y: // you bad redirection - return finish_word((uint16_t[]) {PG_O, PG_U}, 2, next_keycode, record); + //return finish_word((uint16_t[]) {PG_O, PG_U}, 2, next_keycode, record); + process_key(PG_O,record); + return replace_ongoing_key(PG_U, next_keycode, record); case PG_T: // "the" - return finish_word((uint16_t[]) {PG_H, PG_E}, 2, next_keycode, record); - + //return finish_word((uint16_t[]) {PG_H, PG_E}, 2, next_keycode, record); + process_key(PG_H,record); + return replace_ongoing_key(PG_E, next_keycode, record); + case PG_I: - return finish_word((uint16_t[]) {PG_O, PG_N}, 2, next_keycode, record); - + //return finish_word((uint16_t[]) {PG_O, PG_N}, 2, next_keycode, record); + process_key(PG_O,record); + return replace_ongoing_key(PG_N, next_keycode, record); + case PG_M: if (is_letter(recent[RECENT_SIZE - 2])) { // "ment" @@ -187,11 +179,6 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { default: // "à" process_key(PG_ODK,record); - - if (is_shifted) { - is_shifted = false; - add_weak_mods(MOD_BIT(KC_LSFT)); - } return replace_ongoing_key(PG_A, next_keycode, record); } @@ -231,26 +218,10 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { } break; -/* case PG_R: - if (prev_keycode == PG_L) { - // "lr" -> "l" + 1DK - //bkspc_countdown = 0; - return replace_ongoing_key(OS_ODK, next_keycode, record); - } - break; */ - case OU_GRV: layer_off(_ODK); return finish_word((uint16_t[]) {PG_O, PG_ODK, PG_N}, 3, next_keycode, record); -/* case PG_BL: - layer_off(_ODK); - return finish_word((uint16_t[]) {PG_B, PG_L}, 2, next_keycode, record); */ - -/* case J_APOS: - layer_off(_ODK); - return finish_word((uint16_t[]) {PG_J, PG_APOS}, 2, next_keycode, record); */ - case PG_APOS: if (is_apos_dr) { return replace_ongoing_key(PG_APOD, next_keycode, record); } break; 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 08cae9bd..ca1004cd 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 @@ -133,7 +133,6 @@ void process_key(uint16_t keycode, keyrecord_t* record) { void invoke_key(uint16_t keycode, keyrecord_t* record) { process_key(keycode, record); // tap_code doesn't work with caps word. - //record->keycode = keycode; bkspc_countdown = 1; } @@ -148,10 +147,15 @@ void process_word(uint16_t keycodes[], uint8_t num_keycodes, keyrecord_t* record for (int i = 0; i < num_keycodes; ++i) { process_key(keycodes[i], record); // tap_code doesn't work with caps word. } - bkspc_countdown = num_keycodes; } void finish_word(uint16_t keycodes[], uint8_t num_keycodes, uint16_t* ongoing_keycode, keyrecord_t* record) { + process_word(keycodes, num_keycodes - 1, record); + bkspc_countdown = num_keycodes - 1; + replace_ongoing_key(keycodes[num_keycodes - 1], ongoing_keycode, record); +} + +void finish_magic(uint16_t keycodes[], uint8_t num_keycodes, uint16_t* ongoing_keycode, keyrecord_t* record) { process_word(keycodes, num_keycodes - 1, record); replace_ongoing_key(keycodes[num_keycodes - 1], ongoing_keycode, record); } 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 76bdb1b5..e003b184 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 @@ -40,6 +40,7 @@ void invoke_key(uint16_t keycode, keyrecord_t* record); void replace_ongoing_key(uint16_t clever_keycode, uint16_t* ongoing_keycode, keyrecord_t* record); void process_word(uint16_t keycodes[], uint8_t num_keycodes, keyrecord_t* record); void finish_word(uint16_t keycodes[], uint8_t num_keycodes, uint16_t* ongoing_keycode, keyrecord_t* record); +void finish_magic(uint16_t keycodes[], uint8_t num_keycodes, uint16_t* ongoing_keycode, keyrecord_t* record); bool process_clever_keys(uint16_t keycode, keyrecord_t* record); void end_CK(keyrecord_t* record); diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/macros.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/macros.c index f5060ae1..73f12bae 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/macros.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/macros.c @@ -19,8 +19,6 @@ bool is_apos_dr = false; bool process_macros(uint16_t keycode, keyrecord_t *record) { - //const uint8_t mods = get_mods(); - //static bool is_shifted = false; if (record->event.pressed) { // Handling of other macros (on press). switch (keycode) { @@ -52,7 +50,7 @@ bool process_macros(uint16_t keycode, keyrecord_t *record) { layer_clear(); clear_oneshot_mods(); - clear_weak_mods(); + //clear_weak_mods(); caps_word_off(); disable_num_word(); clear_recent_keys(); @@ -74,18 +72,7 @@ bool process_macros(uint16_t keycode, keyrecord_t *record) { return false; case NUM_ODK: - bool is_shifted = (get_mods() | get_weak_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT; - if (is_shifted) { - del_weak_mods(MOD_MASK_SHIFT); - del_oneshot_mods(MOD_MASK_SHIFT); - unregister_mods(MOD_MASK_SHIFT); - } tap_code(PG_ODK); - - if (is_shifted) { - is_shifted = false; - set_oneshot_mods(MOD_BIT(KC_LSFT)); - } return true; case PG_DEG: diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c index 204e2192..a1af45e6 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c @@ -16,15 +16,12 @@ #include "odk_layer.h" -bool is_shifted = false; - bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { // On press const uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods(); //const uint8_t mods = get_mods() | get_oneshot_mods(); - //static bool is_shifted = false; if (keycode == OS_ODK) { // Custom behaviour when alt-gr @@ -36,13 +33,12 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { } else if (keycode == PG_ODK) { // Special behaviour of PG_ODK when shifted // Shift must apply to the next keycode - is_shifted = mods & MOD_MASK_SHIFT; - if (is_shifted) { + if (mods & MOD_MASK_SHIFT) { del_weak_mods(MOD_MASK_SHIFT); del_oneshot_mods(MOD_MASK_SHIFT); unregister_mods(MOD_MASK_SHIFT); tap_code(PG_ODK); - add_weak_mods(MOD_BIT(KC_LSFT)); + set_oneshot_mods(MOD_BIT(KC_LSFT)); // Don't use weak mods ! return false; } @@ -61,23 +57,12 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { break; default: - //tap_code(PG_ODK); + // Don't use tap_code, it doesn't go through process_record. + // therefore it doesn't trigger the special behaviour of PG_ODK described above invoke_key(PG_ODK, record); } } -/* if (is_shifted) { - is_shifted = false; - //set_mods(mods); - add_weak_mods(MOD_BIT(KC_LSFT)); - } */ } } return true; -} - -/* void odk_layer_exit_check(uint16_t keycode) { - if (keycode == odk_keycode) { - layer_off(_ODK); - odk_keycode = KC_NO; - } -} */ \ No newline at end of file +} \ No newline at end of file diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h index 66775f2f..dad5bf25 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h @@ -24,10 +24,7 @@ extern "C" { #endif -extern bool is_shifted; - bool process_odk_layer(uint16_t keycode, keyrecord_t *record); -//void odk_layer_exit_check(uint16_t keycode); #ifdef __cplusplus } diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c index 21f43ab3..48310542 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c @@ -299,6 +299,5 @@ uint16_t get_alt_repeat_key_keycode_user(uint16_t keycode, uint8_t mods) { if (recent[RECENT_SIZE - 1] != KC_NO) { return MAGIC; } if (get_last_keycode() == KC_NO) { return MAGIC; } - return KC_TRNS; // Defer to default definitions. } \ No newline at end of file From fd3b08829d3d79b74a7dbad11df92256a594cba0 Mon Sep 17 00:00:00 2001 From: Kawamashi Date: Fri, 26 Sep 2025 23:13:17 +0200 Subject: [PATCH 3/6] Finalisation --- .../keymaps/Kawamashi/features/odk_layer.c | 38 +++++++++---------- .../base/keymaps/Kawamashi/features_conf.c | 13 ++++--- .../rev1/base/keymaps/Kawamashi/keymap.c | 9 +++-- 3 files changed, 31 insertions(+), 29 deletions(-) diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c index a1af45e6..ced9df6a 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c @@ -37,30 +37,30 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { del_weak_mods(MOD_MASK_SHIFT); del_oneshot_mods(MOD_MASK_SHIFT); unregister_mods(MOD_MASK_SHIFT); + tap_code(PG_ODK); + set_oneshot_mods(MOD_BIT(KC_LSFT)); // Don't use weak mods ! return false; } - - } else { - if (IS_LAYER_ON(_ODK)) { - switch (keycode) { - //case PG_3PTS: // For Clever Keys - case PG_PVIR: - case PG_AROB: - case PG_K: - case PG_B: - case PG_APOS: - case OU_GRV: - case KC_SPC: // When space is added by Clever Keys - case CNL_ODK: - break; - default: - // Don't use tap_code, it doesn't go through process_record. - // therefore it doesn't trigger the special behaviour of PG_ODK described above - invoke_key(PG_ODK, record); - } + } else if (IS_LAYER_ON(_ODK)) { + switch (keycode) { + //case PG_3PTS: // For Clever Keys + case PG_PVIR: + case PG_AROB: + case PG_K: + case PG_B: + case PG_APOS: + case OU_GRV: + case KC_SPC: // When space is added by Clever Keys + case CNL_ODK: + break; + + default: + // Don't use tap_code, it doesn't go through process_record. + // therefore it doesn't trigger the special behaviour of PG_ODK described above + invoke_key(PG_ODK, record); } } } diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c index 48310542..4759c9d2 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c @@ -252,9 +252,10 @@ bool is_oneshot_ignored_key(uint16_t keycode) { uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods(); //if (keycode == OS_ODK && (mods & ~(MOD_MASK_SHIFT | MOD_BIT(KC_ALGR)))) { return true; } - if (keycode == OS_ODK && (mods & ~MOD_BIT(KC_ALGR))) { return true; } - switch (keycode) { + case OS_ODK: + if (mods & ~MOD_BIT(KC_ALGR)) { return true; } + break; //case OS_ODK: /!\ A ne pas remettre, sous peine de ne pas pouvoir faire shift + typo + touche de l'autre côté case L_OS4A: case R_OS4A: @@ -267,11 +268,11 @@ bool is_oneshot_ignored_key(uint16_t keycode) { case NUMWORD: case TG_FA: //case OS_WMNT: - //case NUM_ODK: // Ne sert à rien, car NUM_ODK est un vrai one-shot : les mods sont transmis même sans paramétrage. - return true; - default: - return false; + return true; +/* default: + return false; */ } + return false; } diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c index 653a8935..1fa16b6b 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c @@ -228,10 +228,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `----------------------------------' `----------------------------------' */ [_NUMBERS] = LAYOUT( - _______, PG_DLR, PG_MOIN, PG_PLUS, PG_EURO, PG_PERC, PG_EXP, _______, PG_EGAL, PG_ASTX, _______, _______, - _______, KC_4, KC_3, KC_2, MT_1, PG_2PTS, PG_IND, MT_SLSH, KC_6, KC_7, KC_8, _______, - _______, _______, _______, PG_H, KC_5, _______, _______, _______, _______, _______, _______, KC_9, PG_DEG, _______, PG_ODK, _______, - _______, _______, KC_PDOT, KC_0 , LT_NBSPC, _______, KC_SPC, _______, _______, _______ + // S(KC_4), S(KC_3) and S(PG_EGAL) are here to give easy access to ⅔, ¾ and ≠. + _______, PG_DLR, PG_MOIN, PG_PLUS, PG_EURO, PG_PERC, PG_EXP, S(PG_EGAL), PG_EGAL, PG_ASTX, _______, _______, + _______, KC_4, KC_3, KC_2, MT_1, PG_2PTS, PG_IND, MT_SLSH, KC_6, KC_7, KC_8, _______, + _______, S(KC_4), S(KC_3), PG_H, KC_5, _______, _______, _______, _______, _______, _______, KC_9, PG_DEG, _______, PG_ODK, _______, + _______, _______, KC_PDOT, KC_0 , LT_NBSPC, _______, KC_SPC, _______, _______, _______ ), From 98abb13bd0dda170cef25163e6d82453e91772c7 Mon Sep 17 00:00:00 2001 From: Kawamashi Date: Sat, 27 Sep 2025 16:29:35 +0200 Subject: [PATCH 4/6] mod_odk --- .../rev1/base/keymaps/Kawamashi/clever_keys.c | 2 +- .../keymaps/Kawamashi/features/odk_layer.c | 44 ++++++++++++------- .../rev1/base/keymaps/Kawamashi/keymap.h | 1 + 3 files changed, 31 insertions(+), 16 deletions(-) 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 91a80dd0..806259ec 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c @@ -178,7 +178,7 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { default: // "à" - process_key(PG_ODK,record); + process_key(MOD_ODK, record); return replace_ongoing_key(PG_A, next_keycode, record); } diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c index ced9df6a..ccb39c81 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c @@ -21,6 +21,7 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { // On press const uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods(); + bool mod_odk = false; //const uint8_t mods = get_mods() | get_oneshot_mods(); if (keycode == OS_ODK) { @@ -29,21 +30,11 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { tap_code16(ALGR(PG_ODK)); return false; } + return true; - } else if (keycode == PG_ODK) { - // Special behaviour of PG_ODK when shifted - // Shift must apply to the next keycode - if (mods & MOD_MASK_SHIFT) { - del_weak_mods(MOD_MASK_SHIFT); - del_oneshot_mods(MOD_MASK_SHIFT); - unregister_mods(MOD_MASK_SHIFT); + } else if (keycode == MOD_ODK) { + mod_odk = true; - tap_code(PG_ODK); - - set_oneshot_mods(MOD_BIT(KC_LSFT)); // Don't use weak mods ! - return false; - } - } else if (IS_LAYER_ON(_ODK)) { switch (keycode) { //case PG_3PTS: // For Clever Keys @@ -55,14 +46,37 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { case OU_GRV: case KC_SPC: // When space is added by Clever Keys case CNL_ODK: - break; + return true; default: + mod_odk = true; + //process_odk_layer(MOD_ODK, record); // Don't use tap_code, it doesn't go through process_record. // therefore it doesn't trigger the special behaviour of PG_ODK described above - invoke_key(PG_ODK, record); + //invoke_key(PG_ODK, record); } } + + if (mod_odk) { + // Special behaviour of PG_ODK when shifted + // Shift must apply to the next keycode + mod_odk = false; + bool is_shifted = false; + + if (mods & MOD_MASK_SHIFT) { + del_weak_mods(MOD_MASK_SHIFT); + del_oneshot_mods(MOD_MASK_SHIFT); + unregister_mods(MOD_MASK_SHIFT); + is_shifted = true; + } + + tap_code(PG_ODK); + + if (is_shifted) { + set_oneshot_mods(MOD_BIT(KC_LSFT)); // Don't use weak mods ! + } + if (keycode == MOD_ODK) { return false; } + } } return true; } \ No newline at end of file diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.h b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.h index 4ff6636c..7bdf6d19 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.h +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.h @@ -52,6 +52,7 @@ enum custom_keycodes { OS4A, RAZ, CAPSWORD, + MOD_ODK, OU_GRV, MAGIC, OS_SHFT, From 11022b0023c57efc72287d8f4e3e925aafe77c82 Mon Sep 17 00:00:00 2001 From: Kawamashi Date: Sun, 28 Sep 2025 05:56:55 +0200 Subject: [PATCH 5/6] essai fonction --- .../keymaps/Kawamashi/features/odk_layer.c | 38 +++++++++++++++---- .../keymaps/Kawamashi/features/odk_layer.h | 1 + .../base/keymaps/Kawamashi/features/os4a.c | 2 +- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c index ccb39c81..22e7310a 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c @@ -21,7 +21,7 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { // On press const uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods(); - bool mod_odk = false; + //bool mod_odk = false; //const uint8_t mods = get_mods() | get_oneshot_mods(); if (keycode == OS_ODK) { @@ -32,12 +32,12 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { } return true; - } else if (keycode == MOD_ODK) { - mod_odk = true; + } else if (keycode == PG_ODK) { + //mod_odk = true; + return true; } else if (IS_LAYER_ON(_ODK)) { switch (keycode) { - //case PG_3PTS: // For Clever Keys case PG_PVIR: case PG_AROB: case PG_K: @@ -46,10 +46,12 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { case OU_GRV: case KC_SPC: // When space is added by Clever Keys case CNL_ODK: + case PG_ODK: return true; default: - mod_odk = true; + mod_odk(); + //mod_odk = true; //process_odk_layer(MOD_ODK, record); // Don't use tap_code, it doesn't go through process_record. // therefore it doesn't trigger the special behaviour of PG_ODK described above @@ -57,7 +59,7 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { } } - if (mod_odk) { +/* if (mod_odk) { // Special behaviour of PG_ODK when shifted // Shift must apply to the next keycode mod_odk = false; @@ -74,9 +76,31 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { if (is_shifted) { set_oneshot_mods(MOD_BIT(KC_LSFT)); // Don't use weak mods ! + is_shifted = false; } if (keycode == MOD_ODK) { return false; } - } + } */ } return true; +} + +void mod_odk(void) { + // Special behaviour of PG_ODK when shifted + // Shift must apply to the next keycode + bool is_shifted = false; + const uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods(); + + if (mods & MOD_MASK_SHIFT) { + del_weak_mods(MOD_MASK_SHIFT); + del_oneshot_mods(MOD_MASK_SHIFT); + unregister_mods(MOD_MASK_SHIFT); + is_shifted = true; + } + + tap_code(PG_ODK); + + if (is_shifted) { + set_oneshot_mods(MOD_BIT(KC_LSFT)); // Don't use weak mods ! + is_shifted = false; + } } \ No newline at end of file diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h index dad5bf25..e18ee343 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h @@ -25,6 +25,7 @@ extern "C" { #endif bool process_odk_layer(uint16_t keycode, keyrecord_t *record); +void mod_odk(void); #ifdef __cplusplus } diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/os4a.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/os4a.c index 33948a18..16a25edd 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/os4a.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/os4a.c @@ -66,7 +66,7 @@ bool process_os4a_layers(uint16_t keycode, keyrecord_t *record) { // Add OS Shift when no other mods are active. // Testing exit_os4a_layer is necessary to prevent OS shift to be added when other features create keyrecords // to be processed (ex: custom altgr, clever keys). - uint8_t mods = get_mods() | get_oneshot_mods(); + const uint8_t mods = get_mods() | get_oneshot_mods(); if (!exit_os4a_layer && to_be_shifted(keycode, record) && mods == 0) { // Don't use weak mods, it interferes with Capsword. set_oneshot_mods(MOD_BIT(KC_LSFT)); From 23da95ecb55b2b3d4d827f3228cfe139f058988f Mon Sep 17 00:00:00 2001 From: Kawamashi Date: Sun, 28 Sep 2025 16:39:07 +0200 Subject: [PATCH 6/6] =?UTF-8?q?=C3=A7a=20marche=E2=80=AF!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rev1/base/keymaps/Kawamashi/clever_keys.c | 2 +- .../features/clever_keys_utilities.c | 2 +- .../keymaps/Kawamashi/features/odk_layer.c | 43 ++++--------------- .../keymaps/Kawamashi/features/odk_layer.h | 1 - .../base/keymaps/Kawamashi/features/os4a.c | 10 ++--- .../base/keymaps/Kawamashi/features_conf.c | 15 ++++--- .../rev1/base/keymaps/Kawamashi/keymap.c | 9 +--- .../rev1/base/keymaps/Kawamashi/keymap.h | 1 - 8 files changed, 25 insertions(+), 58 deletions(-) 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 806259ec..f6e683d7 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c @@ -178,7 +178,7 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { default: // "à" - process_key(MOD_ODK, record); + process_key(PG_ODK, record); return replace_ongoing_key(PG_A, next_keycode, record); } 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 ca1004cd..e3e572f5 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 @@ -42,7 +42,7 @@ uint16_t get_ongoing_keycode(uint16_t keycode, keyrecord_t* record) { //if (mods & ~(MOD_MASK_SHIFT | MOD_BIT(KC_ALGR))) { if (mods & ~MOD_MASK_SHIFT) { - clear_recent_keys(); // Avoid interfering with ctrl, left alt, alt-gr and gui. + clear_recent_keys(); // Avoid interfering with ctrl, alt, alt-gr and gui. return KC_NO; } diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c index 22e7310a..914d7fe7 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.c @@ -21,7 +21,7 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { // On press const uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods(); - //bool mod_odk = false; + bool invoke_odk = false; //const uint8_t mods = get_mods() | get_oneshot_mods(); if (keycode == OS_ODK) { @@ -33,8 +33,7 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { return true; } else if (keycode == PG_ODK) { - //mod_odk = true; - return true; + invoke_odk = true; } else if (IS_LAYER_ON(_ODK)) { switch (keycode) { @@ -50,19 +49,14 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { return true; default: - mod_odk(); - //mod_odk = true; - //process_odk_layer(MOD_ODK, record); - // Don't use tap_code, it doesn't go through process_record. - // therefore it doesn't trigger the special behaviour of PG_ODK described above - //invoke_key(PG_ODK, record); + invoke_odk = true; } } -/* if (mod_odk) { + if (invoke_odk) { // Special behaviour of PG_ODK when shifted // Shift must apply to the next keycode - mod_odk = false; + //invoke_odk = false; bool is_shifted = false; if (mods & MOD_MASK_SHIFT) { @@ -76,31 +70,10 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { if (is_shifted) { set_oneshot_mods(MOD_BIT(KC_LSFT)); // Don't use weak mods ! - is_shifted = false; + //is_shifted = false; } - if (keycode == MOD_ODK) { return false; } - } */ + if (keycode == PG_ODK) { return false; } + } } return true; -} - -void mod_odk(void) { - // Special behaviour of PG_ODK when shifted - // Shift must apply to the next keycode - bool is_shifted = false; - const uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods(); - - if (mods & MOD_MASK_SHIFT) { - del_weak_mods(MOD_MASK_SHIFT); - del_oneshot_mods(MOD_MASK_SHIFT); - unregister_mods(MOD_MASK_SHIFT); - is_shifted = true; - } - - tap_code(PG_ODK); - - if (is_shifted) { - set_oneshot_mods(MOD_BIT(KC_LSFT)); // Don't use weak mods ! - is_shifted = false; - } } \ No newline at end of file diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h index e18ee343..dad5bf25 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/odk_layer.h @@ -25,7 +25,6 @@ extern "C" { #endif bool process_odk_layer(uint16_t keycode, keyrecord_t *record); -void mod_odk(void); #ifdef __cplusplus } diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/os4a.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/os4a.c index 16a25edd..671ca35a 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/os4a.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/os4a.c @@ -99,12 +99,12 @@ bool process_mods(uint16_t keycode, keyrecord_t *record) { if (IS_OS4A_KEY(keycode)) { return process_os4a_keys(keycode, record); } // Behaviour of the OS4A layers - if (os4a_layer != 0) { exit_os4a_layer = process_os4a_layers(keycode, record); } + if (record->event.pressed) { + if (os4a_layer != 0) { exit_os4a_layer = process_os4a_layers(keycode, record); } - // When Ctrl or Shift are released, for mouse use. - //if (mods_for_mouse(keycode)) { mouse_mods_key_up(keycode, record); } - - if (!record->event.pressed) { + } else { + // When Ctrl or Shift are released, for mouse use. + //if (mods_for_mouse(keycode)) { mouse_mods_key_up(keycode, record); } if (os4a_layer != 0 && exit_os4a_layer) { os4a_layer_off(os4a_layer); } } return true; diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c index 4759c9d2..e8f6b9f1 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c @@ -205,7 +205,6 @@ uint8_t get_os4a_layer(uint16_t keycode) { bool os4a_layer_changer(uint16_t keycode) { switch (keycode) { case OS_FA: - //case OS_WMNT: case NUMWORD: case TG_FA: case OS_RSA: @@ -246,17 +245,20 @@ bool is_oneshot_cancel_key(uint16_t keycode) { } bool is_oneshot_ignored_key(uint16_t keycode) { - // On veut que la touche typo soit ignorée par tous les Callum mods sauf Alt-gr. - // Ça permet de transmettre les mods à la touche suivante, par ex pour faire Ctrl + K. - // Alt-gr et shift s'appliquent à la touche typo, pour permettre de faire les majuscules plus facilement ainsi que ] avec. - uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods(); + + const uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods(); //if (keycode == OS_ODK && (mods & ~(MOD_MASK_SHIFT | MOD_BIT(KC_ALGR)))) { return true; } + //if (keycode == OS_ODK && (mods & ~MOD_BIT(KC_ALGR))) { return true; } switch (keycode) { case OS_ODK: + // On veut que la touche typo soit ignorée par tous les Callum mods sauf Alt-gr. + // Ça permet de transmettre les mods à la touche suivante, par ex pour faire Ctrl + K. + // Alt-gr doit pouvoir s’appliquer à la touche typo, pour permettre de faire la touche morte "~" avec. + // OS_ODK ne doit être ignored_key que lorsqu’elle est employée avec Alt-gr + // sous peine de ne pas pouvoir faire shift + typo + touche de l'autre côté if (mods & ~MOD_BIT(KC_ALGR)) { return true; } break; - //case OS_ODK: /!\ A ne pas remettre, sous peine de ne pas pouvoir faire shift + typo + touche de l'autre côté case L_OS4A: case R_OS4A: case OS_SHFT: @@ -267,7 +269,6 @@ bool is_oneshot_ignored_key(uint16_t keycode) { case OS_FA: case NUMWORD: case TG_FA: - //case OS_WMNT: return true; /* default: return false; */ diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c index 1fa16b6b..1372feca 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.c @@ -40,8 +40,8 @@ bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { if (record->event.key.col != next_record.event.key.col) { - // La ligne suivante n'est nécessaire que si on a besoin de doubler rapidement un caractère présent sur la moitié droite du clavier. - // Ce n'est pas nécessaire pour l'instant, vu que les guillemets sont passés à gauche. + // Permet de doubler rapidement un caractère présent sur la moitié droite du clavier. + // Fait également gagner pas mal de place sur le FW. if (keycode == OS_ODK) { return true; } if (forbidden_chord(keycode, record, next_keycode, &next_record)) { @@ -55,16 +55,11 @@ bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { return false; } -/* bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) { - return !forbidden_chord(keycode, record, next_keycode, &next_record); -} */ - // Matrix scan void matrix_scan_user(void) { recent_keys_task(); - //swapper_task(); } diff --git a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.h b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.h index 7bdf6d19..4ff6636c 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.h +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/keymap.h @@ -52,7 +52,6 @@ enum custom_keycodes { OS4A, RAZ, CAPSWORD, - MOD_ODK, OU_GRV, MAGIC, OS_SHFT,