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 03429e49..a0cae66c 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/clever_keys.c @@ -52,8 +52,8 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { case PG_QUES: case PG_3PTS: case PG_POIN: - // Add OS shift at the beginning of sentences. - if (!is_caps_lock_on()) { set_oneshot_mods(MOD_BIT(KC_LSFT)); } + // Shift the letter at the beginning of sentences. + if (!is_caps_lock_on()) { add_weak_mods(MOD_BIT(KC_LSFT)); } break; } } @@ -131,17 +131,11 @@ void get_clever_keycode(uint16_t* next_keycode, keyrecord_t* record) { case MAGIC: if (!is_letter(prev_keycode)) { // "à" - 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); - } process_key(PG_ODK,record); if (is_shifted) { - //is_shifted = false; - set_oneshot_mods(MOD_BIT(KC_LSFT)); + is_shifted = false; + add_weak_mods(MOD_BIT(KC_LSFT)); } 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 fdeefb37..a0539ebc 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 @@ -39,7 +39,7 @@ void recent_keys_task(void) { // Handles one event. Returns false if the key was appended to `recent`. uint16_t get_ongoing_keycode(uint16_t keycode, keyrecord_t* record) { - uint8_t mods = get_mods() | get_oneshot_mods(); + uint8_t mods = get_mods() | get_weak_mods() | get_oneshot_mods(); if (mods & ~(MOD_MASK_SHIFT | MOD_BIT(KC_ALGR))) { clear_recent_keys(); // Avoid interfering with ctrl, left alt and gui. 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 7a39d782..c7e725c7 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/macros.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/macros.c @@ -82,7 +82,7 @@ bool process_macros(uint16_t keycode, keyrecord_t *record) { tap_code(PG_ODK); if (is_shifted) { - //is_shifted = false; + is_shifted = false; set_oneshot_mods(MOD_BIT(KC_LSFT)); } return true; 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 fe7c8ad9..3d07f9f2 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,23 +16,26 @@ #include "odk_layer.h" -//static uint16_t odk_keycode = KC_NO; +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(); - static bool is_shifted = false; + //const uint8_t mods = get_mods() | get_oneshot_mods(); + //static bool is_shifted = false; if (keycode == OS_ODK) { - // Handle the custom OSL that go with this feature - // It's timerless, to avoid problems when rolling with an other key, when shift is on. // Custom behaviour when alt-gr -/* if (mods & MOD_BIT(KC_ALGR)) { + if (mods & MOD_BIT(KC_ALGR)) { tap_code16(ALGR(PG_ODK)); return false; - } */ + } + + } 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) { del_weak_mods(MOD_MASK_SHIFT); @@ -40,31 +43,27 @@ bool process_odk_layer(uint16_t keycode, keyrecord_t *record) { unregister_mods(MOD_MASK_SHIFT); } - } else if (keycode == PG_ODK) { - // Special behaviour of FR_ODK when shifted - // Shift must apply to the next keycode - return true; - - } else if (IS_LAYER_ON(_ODK)) { - switch (keycode) { - case PG_3PTS: // For Clever Keys - 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: - tap_code(PG_ODK); + } else { + if (IS_LAYER_ON(_ODK)) { + switch (keycode) { + case PG_3PTS: // For Clever Keys + 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: + tap_code(PG_ODK); + } } - if (is_shifted) { is_shifted = false; //set_mods(mods); - set_oneshot_mods(MOD_BIT(KC_LSFT)); + add_weak_mods(MOD_BIT(KC_LSFT)); } } } 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 e20064af..66775f2f 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,6 +24,8 @@ 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); 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 720fa5fa..04ef170b 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/os4a.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features/os4a.c @@ -68,7 +68,7 @@ bool process_os4a_layers(uint16_t keycode, keyrecord_t *record) { // to be processed (ex: custom altgr, clever keys). uint8_t mods = get_mods() | get_oneshot_mods(); if (!exit_os4a_layer && !pending_OSL && to_be_shifted(keycode, record) && mods == 0) { - set_oneshot_mods(MOD_BIT(KC_LSFT)); + add_weak_mods(MOD_BIT(KC_LSFT)); } 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 a5b388c1..3c98d346 100644 --- a/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c +++ b/keyboards/splitkb/kyria/rev1/base/keymaps/Kawamashi/features_conf.c @@ -190,6 +190,8 @@ bool to_be_shifted(uint16_t keycode, keyrecord_t *record) { if (!IS_KEYEVENT(record->event)) { return true; } switch (keycode) { + case OS_ODK: + is_shifted = true; case KC_CAPS: case CAPSWORD: return false; @@ -232,7 +234,7 @@ bool is_oneshot_ignored_key(uint16_t keycode) { case OS_FA: case NUMWORD: case TT_FA: - case NUM_ODK: + //case NUM_ODK: //case PG_ODK: return true; default: