Replace right FN with dedicated CK_NOREMAP key to bypass remaps
This commit is contained in:
@@ -11,6 +11,7 @@ void system76_ec_rgb_eeprom(bool write);
|
||||
enum custom_keycodes {
|
||||
CK_OSMODE = SAFE_RANGE, // cycle OS mode
|
||||
CK_RGBMOD, // cycle RGB animation
|
||||
CK_NOREMAP, // hold to bypass all remaps
|
||||
};
|
||||
|
||||
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.
|
||||
// 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) {
|
||||
if (layer_state_is(1) && get_mods() != 0) return false;
|
||||
return normalize_mods(mods) == normalize_mods(rule.from);
|
||||
}
|
||||
|
||||
@@ -89,7 +88,7 @@ ________________________________________________________________________________
|
||||
| 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_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_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
|
||||
@@ -120,7 +119,7 @@ ________________________________________________________________________________
|
||||
| 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_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(
|
||||
@@ -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 no_remap = false;
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
// Cycle OS mode (FN+Del)
|
||||
@@ -193,8 +185,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// No rewrites in none mode
|
||||
if (os_mode == OS_MODE_NONE) return true;
|
||||
// Hold CK_NOREMAP to bypass all remaps
|
||||
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
|
||||
if (record->event.pressed && keycode != KC_LGUI) {
|
||||
|
||||
Reference in New Issue
Block a user