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