Fix RULE_CANCEL_ON_KEYPRESS to restore original modifier before

applying per-key rules, so Ctrl+key combos still remap correctly

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-24 19:32:15 -07:00
parent 061baa1cf0
commit 61b29ad1d9

View File

@@ -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;
}