Replace right FN with dedicated CK_NOREMAP key to bypass remaps

This commit is contained in:
2026-03-23 19:53:18 -07:00
parent bec64b4291
commit 8a6819effc

View File

@@ -11,6 +11,7 @@ void system76_ec_rgb_eeprom(bool write);
enum custom_keycodes { enum custom_keycodes {
CK_OSMODE = SAFE_RANGE, // cycle OS mode CK_OSMODE = SAFE_RANGE, // cycle OS mode
CK_RGBMOD, // cycle RGB animation CK_RGBMOD, // cycle RGB animation
CK_NOREMAP, // hold to bypass all remaps
}; };
typedef struct { typedef struct {
@@ -36,9 +37,7 @@ static uint8_t normalize_mods(uint8_t mods) {
} }
// Check if current mods exactly match a rule's `from` mods. // Check if current mods exactly match a rule's `from` mods.
// Returns false if FN layer is active (skip rewrites when FN + any modifier is held).
static bool mods_match(uint8_t mods, mod_rewrite_t rule) { static bool mods_match(uint8_t mods, mod_rewrite_t rule) {
if (layer_state_is(1) && get_mods() != 0) return false;
return normalize_mods(mods) == normalize_mods(rule.from); return normalize_mods(mods) == normalize_mods(rule.from);
} }
@@ -89,7 +88,7 @@ ________________________________________________________________________________
| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | | SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP |
|________________|________|________|________|________|________|________|________|________|________|________|____________|________|_________ |________________|________|________|________|________|________|________|________|________|________|________|____________|________|_________
| | | | | | | | | | | | | | | | | | | | | | | | | | | |
| CTRL | FN | LGUI | LALT | SPACE | SPACE | RALT | RCTRL | FN | | LEFT | DOWN | RIGHT | | CTRL | FN | LGUI | LALT | SPACE | SPACE | RALT | RCTRL | NOREMAP | | LEFT | DOWN | RIGHT |
|____________|________|_______|________|_________________|_________________|________|________|_____________| |________|________|________| |____________|________|_______|________|_________________|_________________|________|________|_____________| |________|________|________|
*/ */
@@ -99,7 +98,7 @@ ________________________________________________________________________________
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, MO(1), KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT KC_LCTL, MO(1), KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, CK_NOREMAP, KC_LEFT, KC_DOWN, KC_RGHT
), ),
/* Layer 1, function layer /* Layer 1, function layer
@@ -120,7 +119,7 @@ ________________________________________________________________________________
| x | | | | | | | | | | | | PGUP | | x | | | | | | | | | | | | PGUP |
|________________|________|________|________|________|________|________|________|________|________|________|____________|________|_________ |________________|________|________|________|________|________|________|________|________|________|________|____________|________|_________
| | | | | | | | | | | | | | | | | | | | | | | | | | | |
| x | | x | x | | | x | x | | | HOME | PGDN | END | | x | | x | x | | | x | x | x | | HOME | PGDN | END |
|____________|________|_______|________|_________________|_________________|________|________|_____________| |________|________|________| |____________|________|_______|________|_________________|_________________|________|________|_____________| |________|________|________|
*/ */
@@ -130,7 +129,7 @@ ________________________________________________________________________________
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP,
KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_HOME, KC_PGDN, KC_END KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_END
), ),
[2] = LAYOUT( [2] = LAYOUT(
@@ -152,15 +151,8 @@ ________________________________________________________________________________
), ),
}; };
// Override layer resolution: any modifier forces layer 0 (ignores FN)
uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key) {
if (os_mode != OS_MODE_NONE && get_mods()) {
layer = 0;
}
return keycode_at_keymap_location(layer, key.row, key.col);
}
static bool super_tapped = false; static bool super_tapped = false;
static bool no_remap = false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// Cycle OS mode (FN+Del) // Cycle OS mode (FN+Del)
@@ -193,8 +185,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return false; return false;
} }
// No rewrites in none mode // Hold CK_NOREMAP to bypass all remaps
if (os_mode == OS_MODE_NONE) return true; if (keycode == CK_NOREMAP) {
no_remap = record->event.pressed;
return false;
}
// No rewrites in none mode or when noremap held
if (os_mode == OS_MODE_NONE || no_remap) return true;
// 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) {