diff --git a/keymaps/custom/keymap.c b/keymaps/custom/keymap.c index 3c931dd..4fdcc2f 100644 --- a/keymaps/custom/keymap.c +++ b/keymaps/custom/keymap.c @@ -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) {