Introduced Ultra-Tab

- num layer right encoder will either tab or shift tab. leaving it alone with
tab through elements or can hold alt or ctrl for those things
- used similar logic to do mouse scroll zoom becuase keyboard shortcuts are
not consistent across apps
- Damn this is pretty damn clever
This commit is contained in:
Victor 2024-07-03 00:00:41 -05:00
parent edf4c932f2
commit 047ca9d0a9
Failed to generate hash of commit
5 changed files with 58 additions and 35 deletions

View file

@ -40,7 +40,7 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_COLEMAK_DH] = { ENCODER_CCW_CW(KC_WH_D, KC_WH_U), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[_GAME] = { ENCODER_CCW_CW(KC_WH_D, KC_WH_U), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[_NAVIGATION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
[_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(ALT_TAB, RALT_TB) },
[_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(FWD_TAB, BCK_TAB) },
[_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
[_MOUSE_FUNC] = { ENCODER_CCW_CW(KC_WH_D, KC_WH_U), ENCODER_CCW_CW(ZOOMIN, ZOOMOUT) },
[_CONFIG] = { ENCODER_CCW_CW(BASELYR, RBSELYR), ENCODER_CCW_CW(BASELYR, RBSELYR) }

View file

@ -56,7 +56,7 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_COLEMAK_DH] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_GAME] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_NAVIGATION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
[_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(RALT_TB, ALT_TAB) },
[_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(BCK_TAB, FWD_TAB) },
[_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
[_MOUSE_FUNC] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(ZOOMOUT, ZOOMIN) },
[_CONFIG] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RBSELYR, BASELYR) }

View file

@ -35,14 +35,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_QWERTY] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_COLEMAK_DH] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_GAME] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_NAVIGATION] = { ENCODER_CCW_CW(ZOOMOUT, ZOOMIN), ENCODER_CCW_CW(___x___, ___x___) },
[_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(RALT_TB, ALT_TAB) },
[_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
[_MOUSE_FUNC] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(ZOOMOUT, ZOOMIN) },
[_CONFIG] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RBSELYR, BASELYR) }
[_QWERTY] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_COLEMAK_DH] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_GAME] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_NAVIGATION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
[_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(BCK_TAB, FWD_TAB) },
[_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
[_MOUSE_FUNC] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(ZOOMOUT, ZOOMIN) },
[_CONFIG] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RBSELYR, BASELYR) }
};

View file

@ -8,10 +8,10 @@ static uint8_t current_base_layer = FIRST_DEFAULT_LAYER;
// keep track of current mods to override existing keys
static uint8_t current_mods;
// enables alt tab for the encoder
static bool is_alt_tab_active = false;
static bool is_alt_shift_tab_active = false;
static uint16_t alt_tab_timer = 0;
// enables encoder to handle alt/ctrl tab and ctrl scroll wheel
static bool hold_forward_active = false;
static bool hold_reverse_active = false;
static uint16_t hold_mod_timer = 0;
#if defined(WPM_ENABLE)
// Luna Pet Variables
@ -75,6 +75,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
#if defined(WPM_ENABLE)
case KC_SPC:
if (record->event.pressed) {
isJumping = true;
@ -84,6 +85,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
isJumping = false;
}
break;
#endif // WPM_ENABLE
case BASELYR:
if (record->event.pressed) {
@ -103,34 +105,54 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
case ALT_TAB:
case FWD_TAB:
if (record->event.pressed) {
if (!is_alt_tab_active || (current_mods & MOD_MASK_SHIFT)) {
is_alt_tab_active = true;
register_code(KC_LALT);
if (!hold_forward_active || (current_mods & MOD_MASK_SHIFT)) {
hold_forward_active = true;
unregister_code(KC_LSFT);
}
alt_tab_timer = timer_read();
hold_mod_timer = timer_read();
register_code(KC_TAB);
} else {
unregister_code(KC_TAB);
}
return false;
case RALT_TB:
case BCK_TAB:
if (record->event.pressed) {
if (!is_alt_shift_tab_active || !(current_mods & MOD_MASK_SHIFT)) {
is_alt_shift_tab_active = true;
register_code(KC_LALT);
if (!hold_reverse_active || !(current_mods & MOD_MASK_SHIFT)) {
hold_reverse_active = true;
register_code(KC_LSFT);
}
alt_tab_timer = timer_read();
hold_mod_timer = timer_read();
register_code(KC_TAB);
} else {
unregister_code(KC_TAB);
}
return false;
case ZOOMIN:
case ZOOMOUT:
if (record->event.pressed) {
if (!hold_forward_active) {
hold_forward_active = true;
register_code(KC_LCTL);
}
hold_mod_timer = timer_read();
if (keycode == ZOOMIN) {
register_code(KC_WH_U);
} else {
register_code(KC_WH_D);
}
} else {
if (keycode == ZOOMIN) {
unregister_code(KC_WH_U);
} else {
unregister_code(KC_WH_D);
}
}
return false;
#if defined(HAPTIC_ENABLE)
case TR_HNXT:
if (record->event.pressed) {
@ -208,13 +230,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
void matrix_scan_user(void) {
// timer for the super alt-tab
if (is_alt_tab_active || is_alt_shift_tab_active) {
if (timer_elapsed(alt_tab_timer) > ALT_TAB_TIMEOUT) {
unregister_code(KC_LALT);
// timer for the hold mods
if (hold_forward_active || hold_reverse_active) {
if (timer_elapsed(hold_mod_timer) > HOLD_MOD_TIMEOUT) {
unregister_code(KC_LSFT);
is_alt_tab_active = false;
is_alt_shift_tab_active = false;
unregister_code(KC_LCTL);
hold_forward_active = false;
hold_reverse_active = false;
}
}
}

View file

@ -8,7 +8,7 @@ bool isJumpShown(void);
void setLunaJumped(void);
#endif // WPM_ENABLE
#define ALT_TAB_TIMEOUT 1000
#define HOLD_MOD_TIMEOUT 1000
// put the default base layers first
enum layers {
@ -56,8 +56,11 @@ enum keycodes {
TR_HNXT, // HF_NEXT or HF_PREV when shift is held
TR_CKUP, // CK_UP or CK_DOWN when shift is held
ALT_TAB,
RALT_TB,
FWD_TAB,
BCK_TAB,
ZOOMIN,
ZOOMOUT,
BASELYR,
RBSELYR
@ -83,8 +86,6 @@ enum keycodes {
#define SC_WIN LGUI(KC_TAB)
// Zoom for encoders
#define ZOOMIN LCTL(KC_PLUS)
#define ZOOMOUT LCTL(KC_MINS)
#define ZOOMRST LCTL(KC_0)
/*