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 {
|
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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user