mirror of
https://github.com/qmk/qmk_userspace.git
synced 2025-05-05 15:14:17 -04:00
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:
parent
edf4c932f2
commit
047ca9d0a9
5 changed files with 58 additions and 35 deletions
|
@ -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) }
|
||||
|
|
|
@ -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) }
|
||||
|
|
|
@ -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) }
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue