 1b7a003d84
			
		
	
	
		1b7a003d84
		
	
	
	
	
		
			
			* feat(build): added script for compiling with docker easily * chore: bring my own build with docker to master * feat: merge ergodox ez into latest maste * chore: remove my build with docker file * chore: remove my changes to process_leader * feat: more modular user danielo515 * Apply suggestions from @ridingqwerty Co-Authored-By: ridingqwerty <george.g.koenig@gmail.com> * chore: more suggestions implemented * chore: add my basic details * Apply suggestions from @drashna Co-Authored-By: Drashna Jaelre <drashna@live.com> * fix: more @drashna fixes * feat: @fauxpark optimization * fix: some more @drashna improvements Co-Authored-By: Drashna Jaelre <drashna@live.com> * chore: small improvement on layout * fix: some more @drashna improvements * chore: remove some F dance Co-authored-by: ridingqwerty <george.g.koenig@gmail.com> Co-authored-by: Drashna Jaelre <drashna@live.com>
		
			
				
	
	
		
			139 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "tap_dance.h"
 | |
| //**************** Definitions needed for quad function to work *********************//
 | |
| #ifdef QUAD_DANCE
 | |
| 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 || state->pressed == 0)
 | |
|       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. In example below, that means to send `xx` instead of `Escape`.
 | |
|   else if (state->count == 2)
 | |
|   {
 | |
|     if (state->interrupted)
 | |
|       return DOUBLE_SINGLE_TAP;
 | |
|     else if (state->pressed)
 | |
|       return DOUBLE_HOLD;
 | |
|     else
 | |
|       return DOUBLE_TAP;
 | |
|   }
 | |
|   else
 | |
|     return 6; //magic number. At some point this method will expand to work for more presses
 | |
| };
 | |
| 
 | |
| //**************** Definitions needed for quad function to work *********************//
 | |
| # endif
 | |
| 
 | |
| // Slightly better tap dance double: interruption sends double single and any number over double sends the single that number of times
 | |
| void qk_tap_dance_pair_finished_safe(qk_tap_dance_state_t *state, void *user_data) {
 | |
|   qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data;
 | |
|   int count = state->count;
 | |
|   if (state->count == 2) {
 | |
|     if (state->interrupted){
 | |
|       tap_code16(pair->kc1);register_code16 (pair->kc1);
 | |
|       state->count = 1; // Reset the counter as we are using the first key
 | |
|     } else register_code16 (pair->kc2);
 | |
|     return;
 | |
|   }
 | |
|   register_code16 (pair->kc1);
 | |
|   while(--count){
 | |
|     unregister_code16(pair->kc1);
 | |
|     register_code16 (pair->kc1);
 | |
|   }
 | |
| }
 | |
| 
 | |
| void qk_tap_dance_pair_reset_safe(qk_tap_dance_state_t *state, void *user_data) {
 | |
|   qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data;
 | |
|   if (state->count == 2) {
 | |
|     unregister_code16 (pair->kc2);
 | |
|     return;
 | |
|   }
 | |
|   unregister_code16(pair->kc1);
 | |
| }
 | |
| 
 | |
| //**************** Tap dance functions *********************//
 | |
| 
 | |
| qk_tap_dance_action_t tap_dance_actions[] = {
 | |
|     [COPY_CUT] = ACTION_TAP_DANCE_FN(td_copy_cut),
 | |
|     [PASTE_DANCE] = ACTION_TAP_DANCE_FN(td_paste),
 | |
|     [_TD_F1] = ACTION_TAP_DANCE_DOUBLE(KC_1, KC_F1),
 | |
|     [_TD_F2] = ACTION_TAP_DANCE_DOUBLE(KC_2, KC_F2),
 | |
|     [_TD_F3] = ACTION_TAP_DANCE_DOUBLE(KC_3, KC_F3),
 | |
|     [_TD_F4] = ACTION_TAP_DANCE_DOUBLE(KC_4, KC_F4),
 | |
|     [_TD_F5] = ACTION_TAP_DANCE_DOUBLE(KC_5, KC_F5),
 | |
|     [_TD_F6] = ACTION_TAP_DANCE_DOUBLE(KC_6, KC_F6),
 | |
|     [_TD_F7] = ACTION_TAP_DANCE_DOUBLE(KC_7, KC_F7),
 | |
|     [_TD_F8] = ACTION_TAP_DANCE_DOUBLE(KC_8, KC_F8),
 | |
|     [_TD_F9] = ACTION_TAP_DANCE_DOUBLE(KC_9, KC_F9),
 | |
|     [_TD_F10] = ACTION_TAP_DANCE_DOUBLE(KC_0, KC_F10),
 | |
|     [_TD_F11] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_F11),
 | |
|     [_TD_F12] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_F12),
 | |
|     [_TD_H_ENTER] = ACTION_TAP_DANCE_DOUBLE(KC_H, KC_ENT),
 | |
|     [_TD_CLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLON),
 | |
|     [_TD_SLASH] = ACTION_TAP_DANCE_DOUBLE(KC_SLASH, KC_BSLASH),
 | |
|     // OLD ONES
 | |
|     [LEFT_HOME] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME),
 | |
|     [RGT_HOME] = ACTION_TAP_DANCE_DOUBLE_SAFE(KC_RGHT, KC_END),
 | |
|     [J_ENT] = ACTION_TAP_DANCE_DOUBLE_SAFE(KC_J,KC_ENT),
 | |
|     [H_MINS] = ACTION_TAP_DANCE_DOUBLE_SAFE(KC_H,KC_SLASH),
 | |
|     [_TD_COPY] =  ACTION_TAP_DANCE_FN(dance_copy),
 | |
|     [_TD_CUT] = ACTION_TAP_DANCE_FN(dance_cut),
 | |
|     [_TD_PASTE] = ACTION_TAP_DANCE_FN(dance_paste)
 | |
| };
 | |
| 
 | |
| void td_copy_cut(qk_tap_dance_state_t *state, void *user_data)
 | |
| {
 | |
|   if (state->count == 2)
 | |
|   {
 | |
|     onMac ?  SEND_STRING(SS_LGUI("x")) :   SEND_STRING(SS_LCTRL("x"));
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     onMac ?  SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c"));
 | |
|   }
 | |
|   reset_tap_dance(state);
 | |
| };
 | |
| 
 | |
| void td_paste(qk_tap_dance_state_t *state, void *user_data)
 | |
| {
 | |
|   if (state->count == 2)
 | |
|   {
 | |
|     onMac ?  SEND_STRING(SS_DOWN(X_RSHIFT) SS_LGUI("v") SS_UP(X_RSHIFT)) :   SEND_STRING(SS_DOWN(X_RSHIFT) SS_LCTRL("v") SS_UP(X_RSHIFT));
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     onMac ?  SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v"));
 | |
|   }
 | |
|   reset_tap_dance(state);
 | |
| };
 | |
| 
 | |
| //===== The awesome tap dance for CUT, COPY and PASTE letters
 | |
| void dance_copy (qk_tap_dance_state_t *state, void *user_data) {
 | |
|   if (state->count == 1) { tap_code16(KC_C); }
 | |
|   else
 | |
|   if (state->interrupted) { tap_code16(KC_C);tap_code16(KC_C);}
 | |
|   else CMD(KC_C);
 | |
| 
 | |
|   reset_tap_dance (state);
 | |
| }
 | |
| 
 | |
| void dance_cut (qk_tap_dance_state_t *state, void *user_data) {
 | |
|   if (state->count == 1) { tap_code16(KC_X); }
 | |
|   else { CMD(KC_X); }
 | |
|   reset_tap_dance (state);
 | |
| }
 | |
| 
 | |
| void dance_paste (qk_tap_dance_state_t *state, void *user_data) {
 | |
|   if (state->count == 1) {
 | |
|     tap_code16(KC_V);
 | |
|   }
 | |
|   else {
 | |
|     CMD(KC_V);
 | |
|   }
 | |
|   reset_tap_dance (state);
 | |
| }
 |