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:
@@ -324,16 +324,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
// No rewrites when noremap held
|
// No rewrites when noremap held
|
||||||
if (no_remap) return true;
|
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;
|
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
|
// Any other key pressed while GUI held means it's being used as a modifier
|
||||||
if (record->event.pressed && keycode != KC_LGUI) {
|
if (record->event.pressed && keycode != KC_LGUI) {
|
||||||
super_tapped = false;
|
super_tapped = false;
|
||||||
@@ -356,6 +349,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
|
|
||||||
// Apply remap rules on key press
|
// Apply remap rules on key press
|
||||||
if (record->event.pressed) {
|
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;
|
if (apply_remap_rules(keycode)) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user