Now using left and right mods to prevent accidental release while switching hands

This commit is contained in:
Drew Whitney 2025-11-07 16:54:13 -07:00
commit 16443e9837
3 changed files with 77 additions and 77 deletions

View file

@ -41,34 +41,34 @@ enum CustomKeycodes {
// home row mods // home row mods
// base layer // base layer
#define ALT_A ALT_T(KC_A) #define GUI_A GUI_T(KC_A)
#define GUI_S GUI_T(KC_S) #define ALT_S ALT_T(KC_S)
#define CTL_D CTL_T(KC_D) #define CTL_D CTL_T(KC_D)
#define SFT_F SFT_T(KC_F) #define SFT_F SFT_T(KC_F)
#define ALT_SCLN ALT_T(KC_SCLN) #define GUI_SCLN RGUI_T(KC_SCLN)
#define GUI_L GUI_T(KC_L) #define ALT_L RALT_T(KC_L)
#define CTL_K CTL_T(KC_K) #define CTL_K RCTL_T(KC_K)
#define SFT_J RSFT_T(KC_J) #define SFT_J RSFT_T(KC_J)
// nav layer // nav layer
#define ALT_BSLS ALT_T(KC_BSLS) #define GUI_BSLS GUI_T(KC_BSLS)
#define GUI_LBRC GUI_T(KC_LBRC) #define ALT_LBRC ALT_T(KC_LBRC)
#define CTL_RBRC CTL_T(KC_RBRC) #define CTL_RBRC CTL_T(KC_RBRC)
#define SFT_MINS SFT_T(KC_MINS) #define SFT_MINS SFT_T(KC_MINS)
#define ALT_RGHT ALT_T(KC_RGHT) #define GUI_RGHT RGUI_T(KC_RGHT)
#define GUI_UP GUI_T(KC_UP) #define ALT_UP RALT_T(KC_UP)
#define CTL_DOWN CTL_T(KC_DOWN) #define CTL_DOWN RCTL_T(KC_DOWN)
#define SFT_LEFT RSFT_T(KC_LEFT) #define SFT_LEFT RSFT_T(KC_LEFT)
// num layer // num layer
#define ALT_1 ALT_T(KC_1) #define GUI_1 GUI_T(KC_1)
#define GUI_2 GUI_T(KC_2) #define ALT_2 ALT_T(KC_2)
#define CTL_3 CTL_T(KC_3) #define CTL_3 CTL_T(KC_3)
#define SFT_4 SFT_T(KC_4) #define SFT_4 SFT_T(KC_4)
#define ALT_0 ALT_T(KC_0) #define GUI_0 RGUI_T(KC_0)
#define GUI_9 GUI_T(KC_9) #define ALT_9 RALT_T(KC_9)
#define CTL_8 CTL_T(KC_8) #define CTL_8 RCTL_T(KC_8)
#define SFT_7 RSFT_T(KC_7) #define SFT_7 RSFT_T(KC_7)

View file

@ -24,9 +24,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// base // base
[_BASE] = LAYOUT_ortho_4x12( [_BASE] = LAYOUT_ortho_4x12(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, ALT_A, GUI_S, CTL_D, SFT_F, KC_G, KC_H, SFT_J, CTL_K, GUI_L, ALT_SCLN, KC_QUOT, KC_TAB, GUI_A, ALT_S, CTL_D, SFT_F, KC_G, KC_H, SFT_J, CTL_K, ALT_L, GUI_SCLN, KC_QUOT,
TD(TD_CW_CL), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_DEL, TD(TD_CW_CL), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_DEL,
KC_NO, FUNC_PLAY, KC_LALT, TD(TD_CAD_LOCK_SLEEP), GUI_LAUNCH, NUM_SPC, NAV_ENT, KC_RALT, KC_LEFT, DOWN, UP, KC_RGHT KC_NO, FUNC_PLAY, KC_LALT, TD(TD_CAD_LOCK_SLEEP), GUI_LAUNCH, NUM_SPC, NAV_ENT, KC_SCRL, KC_LEFT, DOWN, UP, KC_RGHT
), ),
// gamer // gamer
[_GAME] = LAYOUT_ortho_4x12( [_GAME] = LAYOUT_ortho_4x12(
@ -38,14 +38,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// numbers // numbers
[_NUM] = LAYOUT_ortho_4x12( [_NUM] = LAYOUT_ortho_4x12(
KC_TRNS, KC_SLSH, KC_AT, MULT, KC_MINS, KC_PLUS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS, KC_SLSH, KC_AT, MULT, KC_MINS, KC_PLUS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS,
KC_DOT, ALT_1, GUI_2, CTL_3, SFT_4, KC_5, KC_6, SFT_7, CTL_8, GUI_9, ALT_0, KC_TRNS, KC_DOT, GUI_1, ALT_2, CTL_3, SFT_4, KC_5, KC_6, SFT_7, CTL_8, ALT_9, GUI_0, KC_TRNS,
KC_COMM, LOW_6, LOW_7, LOW_8, LOW_9, LOW_0, KC_SCLN, KC_COLN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_COMM, LOW_6, LOW_7, LOW_8, LOW_9, LOW_0, KC_SCLN, KC_COLN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_COLN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_COLN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
), ),
// navigation and special characters // navigation and special characters
[_NAV] = LAYOUT_ortho_4x12( [_NAV] = LAYOUT_ortho_4x12(
KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS,
KC_TRNS, ALT_BSLS, GUI_LBRC, CTL_RBRC, SFT_MINS, KC_EQL, KC_HOME, SFT_LEFT, CTL_DOWN, GUI_UP, ALT_RGHT, KC_END, KC_TRNS, GUI_BSLS, ALT_LBRC, CTL_RBRC, SFT_MINS, KC_EQL, KC_HOME, SFT_LEFT, CTL_DOWN, ALT_UP, GUI_RGHT, KC_END,
KC_TILDE, KC_PIPE, KC_LCBR, KC_RCBR, KC_UNDS, KC_PLUS, KC_NO, KC_F2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TILDE, KC_PIPE, KC_LCBR, KC_RCBR, KC_UNDS, KC_PLUS, KC_NO, KC_F2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
), ),
@ -96,10 +96,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
break; break;
// noshift homerow mods with control overrides // noshift homerow mods with control overrides
case ALT_1: case GUI_1:
return unshift_register_or_ctrl_fallthrough(keycode, KC_A, record); return unshift_register_or_ctrl_fallthrough(keycode, KC_A, record);
break; break;
case GUI_2: case ALT_2:
return unshift_register_or_ctrl_fallthrough(keycode, KC_S, record); return unshift_register_or_ctrl_fallthrough(keycode, KC_S, record);
break; break;
case SFT_4: case SFT_4:
@ -108,10 +108,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
case SFT_7: case SFT_7:
return unshift_register_or_ctrl_fallthrough(keycode, KC_J, record); return unshift_register_or_ctrl_fallthrough(keycode, KC_J, record);
break; break;
case ALT_BSLS: case GUI_BSLS:
return unshift_register_or_ctrl_fallthrough(keycode, KC_A, record); return unshift_register_or_ctrl_fallthrough(keycode, KC_A, record);
break; break;
case GUI_LBRC: case ALT_LBRC:
return unshift_register_or_ctrl_fallthrough(keycode, KC_S, record); return unshift_register_or_ctrl_fallthrough(keycode, KC_S, record);
break; break;
case SFT_MINS: case SFT_MINS:
@ -119,15 +119,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
break; break;
case CTL_3: case CTL_3:
case ALT_0: case GUI_0:
case CTL_8: case CTL_8:
case GUI_9: case ALT_9:
case CTL_RBRC: // no control override, just unshift case CTL_RBRC: // no control override, just unshift
return unshift_register(keycode, record); return unshift_register(keycode, record);
break; break;
// make arrow key homerow mods trigger the tap action when held and the hold time expires // make arrow key homerow mods trigger the tap action when held and the hold time expires
case GUI_UP: case ALT_UP:
case CTL_DOWN: case CTL_DOWN:
if (!record->tap.count && !record->tap.interrupted) { if (!record->tap.count && !record->tap.interrupted) {
if (record->event.pressed) { if (record->event.pressed) {
@ -148,7 +148,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
} }
} }
case SFT_LEFT: case SFT_LEFT:
case ALT_RGHT: case GUI_RGHT:
// if this is a hold action and it occurred naturally // if this is a hold action and it occurred naturally
if (!record->tap.count && !record->tap.interrupted) { if (!record->tap.count && !record->tap.interrupted) {
if (record->event.pressed) { if (record->event.pressed) {
@ -177,8 +177,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
} }
break; break;
case ALT_A: case GUI_A:
case GUI_S: case ALT_S:
case CTL_D: case CTL_D:
case SFT_F: case SFT_F:
if (record->event.pressed && record->tap.count && get_mods() == MOD_BIT(KC_LSFT)) { if (record->event.pressed && record->tap.count && get_mods() == MOD_BIT(KC_LSFT)) {
@ -202,8 +202,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
return false; // do nothing return false; // do nothing
} }
break; break;
case ALT_SCLN: case GUI_SCLN:
case GUI_L: case ALT_L:
case CTL_K: case CTL_K:
case SFT_J: case SFT_J:
if (IS_LAYER_ON(_BASE) && record->event.pressed && record->tap.count && if (IS_LAYER_ON(_BASE) && record->event.pressed && record->tap.count &&

View file

@ -10,27 +10,27 @@ uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t* record) {
case NAV_ENT: case NAV_ENT:
case FUNC_PLAY: // no repeat tapping for these keys case FUNC_PLAY: // no repeat tapping for these keys
case ALT_A: case GUI_A:
case GUI_S: case ALT_S:
case CTL_D: case CTL_D:
case SFT_F: case SFT_F:
case ALT_SCLN: case GUI_SCLN:
case GUI_L: case ALT_L:
case CTL_K: case CTL_K:
case SFT_J: case SFT_J:
case ALT_BSLS: case GUI_BSLS:
case GUI_LBRC: case ALT_LBRC:
case CTL_RBRC: case CTL_RBRC:
case SFT_MINS: case SFT_MINS:
// intentionally omitting arrow keys // intentionally omitting arrow keys
case ALT_1: case GUI_1:
case GUI_2: case ALT_2:
case CTL_3: case CTL_3:
case SFT_4: case SFT_4:
case ALT_0: case GUI_0:
case GUI_9: case ALT_9:
case CTL_8: case CTL_8:
case SFT_7: // no repeat tapping for homerow mods case SFT_7: // no repeat tapping for homerow mods
return 0; return 0;
@ -45,30 +45,30 @@ bool get_permissive_hold(uint16_t keycode, keyrecord_t* record) {
return true; return true;
break; break;
case ALT_A: case GUI_A:
case GUI_S: case ALT_S:
case CTL_D: case CTL_D:
case SFT_F: case SFT_F:
case ALT_SCLN: case GUI_SCLN:
case GUI_L: case ALT_L:
case CTL_K: case CTL_K:
case SFT_J: case SFT_J:
case ALT_BSLS: case GUI_BSLS:
case GUI_LBRC: case ALT_LBRC:
case CTL_RBRC: case CTL_RBRC:
case SFT_MINS: case SFT_MINS:
case ALT_RGHT: case GUI_RGHT:
case GUI_UP: case ALT_UP:
case CTL_DOWN: case CTL_DOWN:
case SFT_LEFT: case SFT_LEFT:
case ALT_1: case GUI_1:
case GUI_2: case ALT_2:
case CTL_3: case CTL_3:
case SFT_4: case SFT_4:
case ALT_0: case GUI_0:
case GUI_9: case ALT_9:
case CTL_8: case CTL_8:
case SFT_7: // permissive hold for mod-taps case SFT_7: // permissive hold for mod-taps
return true; return true;
@ -83,30 +83,30 @@ bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t* record) {
return false; return false;
break; break;
case ALT_A: case GUI_A:
case GUI_S: case ALT_S:
case CTL_D: case CTL_D:
case SFT_F: case SFT_F:
case ALT_SCLN: case GUI_SCLN:
case GUI_L: case ALT_L:
case CTL_K: case CTL_K:
case SFT_J: case SFT_J:
case ALT_BSLS: case GUI_BSLS:
case GUI_LBRC: case ALT_LBRC:
case CTL_RBRC: case CTL_RBRC:
case SFT_MINS: case SFT_MINS:
case ALT_RGHT: case GUI_RGHT:
case GUI_UP: case ALT_UP:
case CTL_DOWN: case CTL_DOWN:
case SFT_LEFT: case SFT_LEFT:
case ALT_1: case GUI_1:
case GUI_2: case ALT_2:
case CTL_3: case CTL_3:
case SFT_4: case SFT_4:
case ALT_0: case GUI_0:
case GUI_9: case ALT_9:
case CTL_8: case CTL_8:
case SFT_7: // no hold on other key press for mod taps case SFT_7: // no hold on other key press for mod taps
return false; return false;
@ -117,19 +117,19 @@ bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t* record) {
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t* record) { uint16_t get_tapping_term(uint16_t keycode, keyrecord_t* record) {
switch (keycode) { switch (keycode) {
case GUI_S: case ALT_S:
case GUI_L: case ALT_L:
case GUI_2: case ALT_2:
case GUI_9: case ALT_9:
case GUI_LBRC: case ALT_LBRC:
case GUI_UP: case ALT_UP:
case ALT_A: case GUI_A:
case ALT_SCLN: case GUI_SCLN:
case ALT_1: case GUI_1:
case ALT_0: case GUI_0:
case ALT_BSLS: case GUI_BSLS:
case ALT_RGHT: // alt and gui have events for a hold and release case GUI_RGHT: // alt and gui have events for a hold and release
case GUI_LAUNCH: // also non-homerow mod-taps case GUI_LAUNCH: // also non-homerow mod-taps
return 400; return 400;