diff --git a/keymaps/custom/keymap.c b/keymaps/custom/keymap.c index 914ff20..48c3e1d 100644 --- a/keymaps/custom/keymap.c +++ b/keymaps/custom/keymap.c @@ -324,16 +324,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // No rewrites when noremap held if (no_remap) return true; - // Handle release events for active modifier rewrites (key repeat support) + // Handle release events for active modifier rewrites if (!process_rewrite_release(keycode, record)) return false; - // Cancel modifier-only rewrites (e.g. Ctrl->Cmd) when any other key is pressed - if (record->event.pressed && active_rw.trigger_keycode && - (active_rw.flags & RULE_CANCEL_ON_KEYPRESS) && - keycode != active_rw.trigger_keycode) { - teardown_active_rewrite(); - } - // Any other key pressed while GUI held means it's being used as a modifier if (record->event.pressed && keycode != KC_LGUI) { super_tapped = false; @@ -356,6 +349,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // Apply remap rules on key press if (record->event.pressed) { + // Cancel modifier-only rewrites (e.g. Ctrl->Cmd) and restore the + // original modifier so per-key rules see the correct mod state. + if (active_rw.trigger_keycode && + (active_rw.flags & RULE_CANCEL_ON_KEYPRESS) && + keycode != active_rw.trigger_keycode) { + uint16_t original_key = active_rw.trigger_keycode; + teardown_active_rewrite(); + register_code(original_key); + } if (apply_remap_rules(keycode)) return false; }