Keymap: Talljoe's keymap for oddball keyboards (#3910)
* Create layout for JD45 * Tweak layout to better support JD45 and add more tap dancing. * Add Maltron and tweak layout for 40% enter compatibility. * Switch back to `BL_TOGGLE` for backlight. * More tweaks * Rename talljoe_gherkin to talljoe-gherkin * Make NAV layer tab C_S_T also. * Add missing RESET key. * Add Talljoe layout for minivan. * MTI is not for me * Tweak keymap. * Add talljoe keymap to Atreus. * Minor tweaks. * Fix talljoe keymaps to work with new Zeal60 commit.
This commit is contained in:
		
							parent
							
								
									71fe973190
								
							
						
					
					
						commit
						c23233f41a
					
				
					 20 changed files with 420 additions and 68 deletions
				
			
		| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
#ifndef USERSPACE_CONFIG_H
 | 
			
		||||
#define USERSPACE_CONFIG_H
 | 
			
		||||
 | 
			
		||||
#define IGNORE_MOD_TAP_INTERRUPT
 | 
			
		||||
#define PERMISSIVE_HOLD
 | 
			
		||||
 | 
			
		||||
#define RESET_LAYER 15
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,10 +5,10 @@
 | 
			
		|||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
  [_BASE] = TEMPLATE_TKL(
 | 
			
		||||
      KC_ESC,  KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11 , KC_F12 ,          KC_PSCR, KC_SLCK, MO_ADJ ,
 | 
			
		||||
      KC_GRV , KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_6   , KC_7   , KC_8   , KC_9   , KC_0   , KC_MINS, KC_EQL , KC_BSLS, KC_INS , KC_HOME, KC_PGUP,
 | 
			
		||||
      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_BSPC, KC_DEL , KC_END , KC_PGDN,
 | 
			
		||||
      US_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G   , KC_H,    KC_J,    KC_K,    KC_L,    US_SCLN, US_QUOT,          US_ENT ,
 | 
			
		||||
      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  ,
 | 
			
		||||
      US_GRV , KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_6   , KC_7   , KC_8   , KC_9   , KC_0   , KC_MINS, KC_EQL , US_BSLS, KC_INS , KC_HOME, KC_PGUP,
 | 
			
		||||
      US_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_BSPC, KC_DEL , KC_END , KC_PGDN,
 | 
			
		||||
      CTL_ESC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G   , KC_H,    KC_J,    KC_K,    KC_L,    US_SCLN, US_QUOT,          US_ENT ,
 | 
			
		||||
      SH_LBRC, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B   , KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,                   SH_RBRC,          KC_UP  ,
 | 
			
		||||
      KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC2, KC_SPC1, KC_SPC3,                   KC_RALT, KC_RGUI, KC_RCTL, KC_PTT , KC_LEFT, KC_DOWN, KC_RGHT),
 | 
			
		||||
  [_WORKMAN] = TEMPLATE(
 | 
			
		||||
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
			
		||||
| 
						 | 
				
			
			@ -34,41 +34,44 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
      _______, KC_A,    KC_R,    KC_S,    KC_T,    KC_D   , KC_H,    KC_N,    KC_E,    KC_I,    KC_O   , _______,          _______,
 | 
			
		||||
      _______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B   , KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          _______, _______,
 | 
			
		||||
      _______, _______, _______,                   _______, _______, _______,                   _______, _______, _______, _______),
 | 
			
		||||
 | 
			
		||||
#if (SPACE_COUNT > 1)
 | 
			
		||||
  // A tweaked version of the Maltron layout
 | 
			
		||||
  [_MALTROFF] = TEMPLATE(
 | 
			
		||||
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
			
		||||
      _______, KC_Q,    KC_P,    KC_Y,    KC_G,    KC_B   , KC_J,    KC_M,    KC_U,    KC_K,    KC_L,    _______, _______, _______,
 | 
			
		||||
      _______, KC_A,    KC_N,    KC_I,    KC_S,    KC_F   , KC_D,    KC_T,    KC_H,    KC_O,    KC_R   , US_ENT ,          KC_BSPC,
 | 
			
		||||
      _______, KC_Z,    KC_X,    KC_C,    KC_V,    US_QUOT, KC_SCLN, KC_W,    KC_COMM, KC_DOT,  KC_SLSH,          _______, _______,
 | 
			
		||||
      _______, _______, _______,                   MLT_E  , _______, _______,                   _______, _______, _______, _______),
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef ENABLE_GAME_LAYER
 | 
			
		||||
  [_GAME] = TEMPLATE(
 | 
			
		||||
      KC_ESC , KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_6   , KC_7   , KC_8   , KC_9   , KC_0   , KC_MINS, KC_EQL , KC_BSLS, KC_GRV,
 | 
			
		||||
      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_BSPC,
 | 
			
		||||
      MO_NAV , 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_LSFT, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_N   , KC_M   , KC_COMM, KC_DOT , KC_SLSH,          KC_RSFT, MO_ADJ ,
 | 
			
		||||
      KC_LCTL, KC_PTT , KC_PGDN,                   KC_SPC , KC_SPC , KC_SPC ,                    KC_RALT, KC_APP , KC_RCTL, KC_PTT ),
 | 
			
		||||
      KC_LCTL, KC_PTT , KC_PGDN,                   KC_SPC , KC_SPC , KC_SPC ,                   KC_RALT, KC_APP , KC_RCTL, KC_PTT ),
 | 
			
		||||
#endif
 | 
			
		||||
  [_NAV] = TEMPLATE(
 | 
			
		||||
  [_NAV] = TEMPLATE_NAV(
 | 
			
		||||
      KC_GRV , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 | 
			
		||||
      KC_TAB , KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_VOLU, KC_INS , KC_PGUP, KC_UP  , KC_PGDN, KC_BTN1, KC_BTN2, KC_BTN3, KC_DEL ,
 | 
			
		||||
      US_CAPS, KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_MUTE, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , KC_RCTL,          TG_ADJ ,
 | 
			
		||||
      KC_LSFT, KC_F9  , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_END , KC_PGDN, KC_WBAK, KC_WFWD, KC_WREF,          KC_RSFT, KC_APP ,
 | 
			
		||||
      US_TAB , KC_EXLM, KC_AT  , KC_HASH, KC_DLR , KC_PERC, KC_INS , KC_PGUP, KC_UP  , KC_PGDN, KC_BTN1, KC_BTN3, KC_BTN2, KC_DEL ,
 | 
			
		||||
      CTL_ESC, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_AMPR, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , US_QUOT,          TG_ADJ ,
 | 
			
		||||
      KC_LSFT, KC_EQL,  KC_PLUS, KC_MINS, KC_UNDS, KC_ASTR, KC_CALC, US_GRV , KC_WBAK, KC_WFWD, KC_WREF,          KC_RSFT, KC_APP ,
 | 
			
		||||
      KC_LCTL, KC_LGUI, KC_LALT,                   NV_SPC2, NV_SPC1, NV_SPC3,                   KC_RALT, KC_RGUI, KC_RCTL, KC_PTT ),
 | 
			
		||||
  [_NUM] = TEMPLATE(
 | 
			
		||||
  [_NUM] = TEMPLATE_NUM(
 | 
			
		||||
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 | 
			
		||||
      KC_GRV , KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, XXXXXXX, KC_DEL ,
 | 
			
		||||
      US_CAPS, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_4,    KC_5,    KC_6,    KC_PPLS, KC_PENT,          XXXXXXX,
 | 
			
		||||
      KC_LSFT, KC_EQL,  KC_PLUS, KC_BSLS, KC_PIPE, KC_SCLN, XXXXXXX, KC_1,    KC_2,    KC_3,    KC_PAST,          KC_PSLS, XXXXXXX,
 | 
			
		||||
      KC_GRV , KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_VOLU, KC_CIRC, KC_7,    KC_8,    KC_9,    KC_PMNS, XXXXXXX, XXXXXXX, KC_DEL ,
 | 
			
		||||
      CTL_ESC, KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_MUTE, KC_PENT, KC_4,    KC_5,    KC_6,    KC_PPLS, XXXXXXX,          KC_ENT ,
 | 
			
		||||
      KC_LSFT, KC_F9  , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_PIPE, KC_1,    KC_2,    KC_3,    KC_PAST,          KC_PSLS, TG_NUM ,
 | 
			
		||||
      KC_LCTL, KC_LGUI, KC_LALT,                   NM_SPC2, NM_SPC1, NM_SPC3,                   KC_PDOT, KC_PCMM, KC_RCTL, KC_PTT ),
 | 
			
		||||
 // Adjust layer is on the split-shift key; or NAV+Enter (for non-split keyboards)
 | 
			
		||||
  [_ADJUST] = TEMPLATE(
 | 
			
		||||
      MO_RST , FX(1)  , FX(2)  , FX(3)  , FX(4)  , FX(5)  , FX(6)  , FX(7)  , FX(8)  , FX(9)  , FX(10) , BR_DEC , BR_INC , XXXXXXX, MO_RST ,
 | 
			
		||||
      XXXXXXX, H1_INC , S1_INC , H2_INC , S2_INC , EF_INC , RGB_HUI, RGB_SAI, RGB_MOD, RGB_M_P, DFAULTS, RGB_VAD, RGB_VAI, KC_DEL ,
 | 
			
		||||
  [_ADJUST] = TEMPLATE_ADJUST(
 | 
			
		||||
      MO_RST , FX(1)  , FX(2)  , FX(3)  , FX(4)  , FX(5)  , FX(8)  , FX(9)  , FX(10) , FX(20) , FX(0)  , BR_DEC , BR_INC , XXXXXXX, MO_RST ,
 | 
			
		||||
      MO_RST , H1_INC , S1_INC , H2_INC , S2_INC , EF_INC , RGB_HUI, RGB_SAI, RGB_MOD, RGB_M_P, DFAULTS, RGB_VAD, RGB_VAI, MO_RST ,
 | 
			
		||||
      XXXXXXX, H1_DEC , S1_DEC , H2_DEC , S2_DEC , EF_DEC , RGB_HUD, RGB_SAD, RGB_RMOD,RGB_M_K, RGB_M_B, RGB_M_G,          TG_ADJ ,
 | 
			
		||||
      TG_NKRO, LY_QWER, LY_WORK, LY_NRMN, LY_DVRK, LY_CLMK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MAKE,          KC_CAPS, XXXXXXX,
 | 
			
		||||
      MO_RST , AG_NORM, AG_SWAP,                   XXXXXXX, BL_STEP, XXXXXXX,                   RGB_TOG, XXXXXXX, XXXXXXX, TG_GAME),
 | 
			
		||||
      TG_NKRO, LY_QWER, LY_WORK, LY_NRMN, LY_DVRK, LY_CLMK, XXXXXXX, LY_MALT, XXXXXXX, XXXXXXX, KC_MAKE,          KC_CAPS, XXXXXXX,
 | 
			
		||||
      MO_RST , AG_SWAP, AG_NORM,                   XXXXXXX, BL_TOGG, XXXXXXX,                   RGB_TOG, XXXXXXX, XXXXXXX, TG_GAME),
 | 
			
		||||
  // To Reset hit FN + ` + Esc
 | 
			
		||||
  [_RESET] = TEMPLATE(
 | 
			
		||||
      RESET  , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET  ,
 | 
			
		||||
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 | 
			
		||||
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX,
 | 
			
		||||
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX, XXXXXXX,
 | 
			
		||||
      RESET  , XXXXXXX, XXXXXXX,                   XXXXXXX, KC_SLEP, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX),
 | 
			
		||||
  [_RESET] = TEMPLATE_RESET,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ enum userspace_custom_keycodes {
 | 
			
		|||
  DFAULTS,
 | 
			
		||||
  TOGGLE_BACKLIGHT,
 | 
			
		||||
  EFFECT,
 | 
			
		||||
  EFFECT_END = EFFECT + 10
 | 
			
		||||
  EFFECT_END = EFFECT + 20
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifndef RESET_LAYER
 | 
			
		||||
| 
						 | 
				
			
			@ -21,6 +21,7 @@ enum layers {
 | 
			
		|||
    _NORMAN,
 | 
			
		||||
    _DVORAK,
 | 
			
		||||
    _COLMAK,
 | 
			
		||||
    _MALTROFF,
 | 
			
		||||
    _GAME,
 | 
			
		||||
    _NAV,
 | 
			
		||||
    _NUM,
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +30,9 @@ enum layers {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
enum tap_dancers {
 | 
			
		||||
  TD_SEMICOLON
 | 
			
		||||
  TD_SEMICOLON,
 | 
			
		||||
  TD_GRAVE,
 | 
			
		||||
  TD_QUOTE,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define _______ KC_TRNS
 | 
			
		||||
| 
						 | 
				
			
			@ -39,6 +42,7 @@ enum tap_dancers {
 | 
			
		|||
#define MO_ADJ    MO(_ADJUST)
 | 
			
		||||
#define MO_RST    MO(_RESET)
 | 
			
		||||
#define TG_ADJ    TG(_ADJUST)
 | 
			
		||||
#define TG_NUM    TG(_NUM)
 | 
			
		||||
#ifdef ENABLE_GAME_LAYER
 | 
			
		||||
  #define TG_GAME TG(_GAME)
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			@ -49,16 +53,28 @@ enum tap_dancers {
 | 
			
		|||
#define LY_NRMN   DF(_NORMAN)
 | 
			
		||||
#define LY_DVRK   DF(_DVORAK)
 | 
			
		||||
#define LY_CLMK   DF(_COLMAK)
 | 
			
		||||
#if SPACE_COUNT >= 2
 | 
			
		||||
  #define LY_MALT DF(_MALTROFF)
 | 
			
		||||
#else
 | 
			
		||||
  #define LY_MALT KC_NO
 | 
			
		||||
#endif
 | 
			
		||||
#define TG_NKRO   MAGIC_TOGGLE_NKRO
 | 
			
		||||
#define KC_PTT    KC_F24
 | 
			
		||||
#define MS_MID    KC_MS_BTN3
 | 
			
		||||
#define FX(x)     (EFFECT + x)
 | 
			
		||||
 | 
			
		||||
#define US_CAPS   CTL_T(KC_ESC)
 | 
			
		||||
#define US_QUOT   RCTL_T(KC_QUOT)
 | 
			
		||||
#define CTL_ESC   CTL_T(KC_ESC)
 | 
			
		||||
#define US_ENT    RCTL_T(KC_ENT)
 | 
			
		||||
#define US_MINS   RCTL_T(KC_QUOT)
 | 
			
		||||
#define US_BSLS   LCA_T(KC_BSLS)
 | 
			
		||||
#define US_SCLN   TD(TD_SEMICOLON)
 | 
			
		||||
#define US_ENT    LT(_NUM, KC_ENT)
 | 
			
		||||
#define US_GRV    TD(TD_GRAVE)
 | 
			
		||||
#define US_QUOT   TD(TD_QUOTE)
 | 
			
		||||
#define US_TAB    C_S_T(KC_TAB)
 | 
			
		||||
#define SH_LBRC   LSFT_T(KC_LBRC)
 | 
			
		||||
#define SH_RBRC   RSFT_T(KC_RBRC)
 | 
			
		||||
 | 
			
		||||
#define MLT_E     LT(_NUM, KC_E)
 | 
			
		||||
 | 
			
		||||
#ifndef SPACE_COUNT
 | 
			
		||||
  #define SPACE_COUNT 1
 | 
			
		||||
| 
						 | 
				
			
			@ -75,17 +91,34 @@ enum tap_dancers {
 | 
			
		|||
  #define NM_SPC1   _______
 | 
			
		||||
  #define NM_SPC2   _______
 | 
			
		||||
  #define NM_SPC3   _______
 | 
			
		||||
#elif (SPACE_COUNT == 2)
 | 
			
		||||
  #define KC_SPC1   LT(_NAV,KC_SPC)
 | 
			
		||||
  #define KC_SPC2   LT(_NUM,KC_ENT)
 | 
			
		||||
 | 
			
		||||
  #define NV_SPC1   KC_SPC
 | 
			
		||||
  #define NV_SPC2   KC_ENT
 | 
			
		||||
 | 
			
		||||
  #define NM_SPC1   KC_0
 | 
			
		||||
  #define NM_SPC2   KC_SPC
 | 
			
		||||
 | 
			
		||||
  #define KC_SPC3   XXXXXXX
 | 
			
		||||
  #define NV_SPC3   XXXXXXX
 | 
			
		||||
  #define NM_SPC3   XXXXXXX
 | 
			
		||||
#elif (SPACE_COUNT == 3)
 | 
			
		||||
  #define KC_SPC1   KC_BSPC
 | 
			
		||||
  #ifdef SWAP_HANDS_ENABLE
 | 
			
		||||
    #define KC_SPC1 SH_T(KC_BSPC)
 | 
			
		||||
  #else
 | 
			
		||||
    #define KC_SPC1 KC_BSPC
 | 
			
		||||
  #endif
 | 
			
		||||
  #define KC_SPC2   LT(_NUM,KC_ENT)
 | 
			
		||||
  #define KC_SPC3   LT(_NAV,KC_SPC)
 | 
			
		||||
 | 
			
		||||
  #define NV_SPC1   KC_SPC
 | 
			
		||||
  #define NV_SPC2   C_S_T(KC_ENT)
 | 
			
		||||
  #define NV_SPC2   KC_ENT
 | 
			
		||||
  #define NV_SPC3   KC_SPC
 | 
			
		||||
 | 
			
		||||
  #define NM_SPC2   XXXXXXX
 | 
			
		||||
  #define NM_SPC1   KC_SPC
 | 
			
		||||
  #define NM_SPC2   XXXXXXX
 | 
			
		||||
  #define NM_SPC3   KC_0
 | 
			
		||||
#else
 | 
			
		||||
  #error "Unsupported space count:" SPACE_COUNT
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +143,7 @@ enum tap_dancers {
 | 
			
		|||
  #define FN_MO2 KC_NO
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef TEMPLATE_TKL
 | 
			
		||||
#ifndef TEMPLATE
 | 
			
		||||
  #define _X_ KC_NO
 | 
			
		||||
  #define TEMPLATE( \
 | 
			
		||||
    KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KJ6,      \
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +159,8 @@ enum tap_dancers {
 | 
			
		|||
    KN2,      KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0,      KN3,        _X_,      \
 | 
			
		||||
    KA4, KP2, KC6,           KX1, KK6, KX2,           KC0, KM3, KD0, KA1,   _X_, _X_, _X_  \
 | 
			
		||||
  )
 | 
			
		||||
#else
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef TEMPLATE_TKL
 | 
			
		||||
  #define TEMPLATE_TKL( \
 | 
			
		||||
    KJ6,      KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0,   KC7, KC5, KA5, \
 | 
			
		||||
    KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2,   KL4, KO4, KQ4, \
 | 
			
		||||
| 
						 | 
				
			
			@ -143,4 +177,26 @@ enum tap_dancers {
 | 
			
		|||
  )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef TEMPLATE_ALT
 | 
			
		||||
  #define TEMPLATE_ALT TEMPLATE
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef TEMPLATE_NUM
 | 
			
		||||
  #define TEMPLATE_NUM TEMPLATE_ALT
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef TEMPLATE_NAV
 | 
			
		||||
  #define TEMPLATE_NAV TEMPLATE_ALT
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef TEMPLATE_ADJUST
 | 
			
		||||
  #define TEMPLATE_ADJUST TEMPLATE_ALT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef TEMPLATE_RESET
 | 
			
		||||
  #define TEMPLATE_RESET TEMPLATE_ALT( \
 | 
			
		||||
      RESET  , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET  ,  \
 | 
			
		||||
      RESET  , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET  ,           \
 | 
			
		||||
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX,           \
 | 
			
		||||
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX, XXXXXXX,           \
 | 
			
		||||
      RESET  , XXXXXXX, XXXXXXX,                   XXXXXXX, RESET  , XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,34 +1,146 @@
 | 
			
		|||
//Tap Dance
 | 
			
		||||
#include "talljoe.h"
 | 
			
		||||
 | 
			
		||||
// Send semin-colon + enter on two taps
 | 
			
		||||
void tap_dance_semicolon(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
enum {
 | 
			
		||||
  SINGLE_TAP = 1,
 | 
			
		||||
  SINGLE_HOLD = 2,
 | 
			
		||||
  DOUBLE_TAP = 3,
 | 
			
		||||
  DOUBLE_HOLD = 4,
 | 
			
		||||
  DOUBLE_SINGLE_TAP = 5, //send two single taps
 | 
			
		||||
  TRIPLE_TAP = 6,
 | 
			
		||||
  TRIPLE_HOLD = 7,
 | 
			
		||||
  SPECIAL = 8
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct {
 | 
			
		||||
  int quote;
 | 
			
		||||
  int semicolon;
 | 
			
		||||
} tap_state = {0};
 | 
			
		||||
 | 
			
		||||
int cur_dance (qk_tap_dance_state_t *state) {
 | 
			
		||||
  if (state->count == 1) {
 | 
			
		||||
    //If count = 1, and it has been interrupted - it doesn't matter if it is pressed or not: Send SINGLE_TAP
 | 
			
		||||
    if (state->interrupted) {
 | 
			
		||||
      //     if (!state->pressed) return SINGLE_TAP;
 | 
			
		||||
      //need "permissive hold" here.
 | 
			
		||||
      //     else return SINGLE_HOLD;
 | 
			
		||||
      //If the interrupting key is released before the tap-dance key, then it is a single HOLD
 | 
			
		||||
      //However, if the tap-dance key is released first, then it is a single TAP
 | 
			
		||||
      //But how to get access to the state of the interrupting key????
 | 
			
		||||
      return SINGLE_TAP;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      if (!state->pressed) return SINGLE_TAP;
 | 
			
		||||
      else return SINGLE_HOLD;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated
 | 
			
		||||
  //with single tap.
 | 
			
		||||
  else if (state->count == 2) {
 | 
			
		||||
    if (state->interrupted) return DOUBLE_SINGLE_TAP;
 | 
			
		||||
    else if (state->pressed) return DOUBLE_HOLD;
 | 
			
		||||
    else return DOUBLE_TAP;
 | 
			
		||||
  }
 | 
			
		||||
  else if ((state->count == 3) && ((state->interrupted) || (!state->pressed))) return TRIPLE_TAP;
 | 
			
		||||
  else if (state->count == 3) return TRIPLE_HOLD;
 | 
			
		||||
  else return SPECIAL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int hold_cur_dance (qk_tap_dance_state_t *state) {
 | 
			
		||||
  if (state->count == 1) {
 | 
			
		||||
    if (state->interrupted) {
 | 
			
		||||
      if (!state->pressed) return SINGLE_TAP;
 | 
			
		||||
      else return SINGLE_HOLD;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      if (!state->pressed) return SINGLE_TAP;
 | 
			
		||||
      else return SINGLE_HOLD;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated
 | 
			
		||||
  //with single tap.
 | 
			
		||||
  else if (state->count == 2) {
 | 
			
		||||
    if (state->pressed) return DOUBLE_HOLD;
 | 
			
		||||
    else return DOUBLE_TAP;
 | 
			
		||||
  }
 | 
			
		||||
  else if (state->count == 3) {
 | 
			
		||||
    if (!state->pressed) return TRIPLE_TAP;
 | 
			
		||||
    else return TRIPLE_HOLD;
 | 
			
		||||
  }
 | 
			
		||||
  else return SPECIAL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Send semi-colon + enter on two taps
 | 
			
		||||
void tap_dance_semicolon_finished(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
  tap_state.semicolon = hold_cur_dance(state);
 | 
			
		||||
  switch (tap_state.semicolon) {
 | 
			
		||||
    case SINGLE_TAP: case DOUBLE_HOLD: register_code(KC_SCLN); break;
 | 
			
		||||
    case SINGLE_HOLD: layer_on(_NUM); break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void tap_dance_semicolon_reset(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
  switch (tap_state.semicolon) {
 | 
			
		||||
    case SINGLE_TAP: case DOUBLE_HOLD: unregister_code(KC_SCLN); break;
 | 
			
		||||
    case DOUBLE_TAP: {
 | 
			
		||||
      if (get_mods()) {
 | 
			
		||||
        SEND_STRING(";;"); // send normal when mods are pressed
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        SEND_STRING(";\n");
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case TRIPLE_TAP: {
 | 
			
		||||
      SEND_STRING(";\n\n");
 | 
			
		||||
    }
 | 
			
		||||
    case SPECIAL: layer_invert(_NUM); break;
 | 
			
		||||
    case SINGLE_HOLD: layer_off(_NUM); break;
 | 
			
		||||
  }
 | 
			
		||||
  tap_state.semicolon = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Send `. ~. ```
 | 
			
		||||
void tap_dance_grave_finished(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
  switch(state->count) {
 | 
			
		||||
    case 1:
 | 
			
		||||
      register_code(KC_SCLN);
 | 
			
		||||
      unregister_code(KC_SCLN);
 | 
			
		||||
      SEND_STRING("`");
 | 
			
		||||
      break;
 | 
			
		||||
    case 2:
 | 
			
		||||
      register_code(KC_SCLN);
 | 
			
		||||
      unregister_code(KC_SCLN);
 | 
			
		||||
 | 
			
		||||
      uint8_t mods = get_mods();
 | 
			
		||||
      if (mods) {
 | 
			
		||||
        clear_mods();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      register_code(KC_ENT);
 | 
			
		||||
      unregister_code(KC_ENT);
 | 
			
		||||
 | 
			
		||||
      if (mods) {
 | 
			
		||||
        set_mods(mods);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      reset_tap_dance(state);
 | 
			
		||||
      SEND_STRING("~");
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void tap_dance_grave_each(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
  if(state->count == 3) {
 | 
			
		||||
    SEND_STRING("```");
 | 
			
		||||
  } else if (state->count > 3) {
 | 
			
		||||
    SEND_STRING("`");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void tap_dance_quote_finished(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
  tap_state.quote = hold_cur_dance(state);
 | 
			
		||||
  switch (tap_state.quote) {
 | 
			
		||||
    case SINGLE_TAP: case DOUBLE_HOLD: register_code(KC_QUOT); break;
 | 
			
		||||
    case SINGLE_HOLD: layer_on(_NAV); break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void tap_dance_quote_reset(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
  switch (tap_state.quote) {
 | 
			
		||||
    case SINGLE_TAP: case DOUBLE_HOLD: unregister_code(KC_QUOTE); break;
 | 
			
		||||
    case DOUBLE_TAP: SEND_STRING("\""); break;
 | 
			
		||||
    case TRIPLE_TAP: layer_invert(_NAV); break;
 | 
			
		||||
    case SINGLE_HOLD: layer_off(_NAV); break;
 | 
			
		||||
  }
 | 
			
		||||
  tap_state.quote = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
qk_tap_dance_action_t tap_dance_actions[] = {
 | 
			
		||||
  [TD_SEMICOLON]  = ACTION_TAP_DANCE_FN(tap_dance_semicolon),
 | 
			
		||||
  [TD_SEMICOLON] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_semicolon_finished, tap_dance_semicolon_reset),
 | 
			
		||||
  [TD_GRAVE]     = ACTION_TAP_DANCE_FN_ADVANCED(tap_dance_grave_each, tap_dance_grave_finished, NULL),
 | 
			
		||||
  [TD_QUOTE]     = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_quote_finished, tap_dance_quote_reset),
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue