Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: Pablo COVES <pablo.coves@anatoscope.com>
		
			
				
	
	
		
			127 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "tapDance.h"
 | 
						|
 | 
						|
#include "quantum.h"
 | 
						|
 | 
						|
void left(qk_tap_dance_state_t* state, void* user_data) {
 | 
						|
    switch (state->count) {
 | 
						|
        case 1:
 | 
						|
            if (state->pressed)
 | 
						|
                tap_code16(S(KC_LBRACKET));
 | 
						|
            else
 | 
						|
                tap_code16(S(KC_9));
 | 
						|
            break;
 | 
						|
        case 2:
 | 
						|
            if (state->pressed)
 | 
						|
                tap_code16(S(KC_COMM));
 | 
						|
            else
 | 
						|
                tap_code(KC_LBRACKET);
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            reset_tap_dance(state);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
void right(qk_tap_dance_state_t* state, void* user_data) {
 | 
						|
    switch (state->count) {
 | 
						|
        case 1:
 | 
						|
            if (state->pressed)
 | 
						|
                tap_code16(S(KC_RBRACKET));
 | 
						|
            else
 | 
						|
                tap_code16(S(KC_0));
 | 
						|
            break;
 | 
						|
        case 2:
 | 
						|
            if (state->pressed)
 | 
						|
                tap_code16(S(KC_DOT));
 | 
						|
            else
 | 
						|
                tap_code(KC_RBRACKET);
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            reset_tap_dance(state);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
enum { REST, HOLD1, HOLD2, HOLD3 };
 | 
						|
 | 
						|
static int Alt = REST;
 | 
						|
void       altFinish(qk_tap_dance_state_t* state, void* user_data) {
 | 
						|
    switch (state->count) {
 | 
						|
        case 1:
 | 
						|
            if (state->pressed) {
 | 
						|
                register_code(KC_LALT);
 | 
						|
                Alt = HOLD1;
 | 
						|
            }
 | 
						|
            break;
 | 
						|
        case 2:
 | 
						|
            if (state->pressed) {
 | 
						|
                register_code(KC_RALT);
 | 
						|
                Alt = HOLD2;
 | 
						|
            }
 | 
						|
            break;
 | 
						|
        case 3:
 | 
						|
            if (state->pressed) {
 | 
						|
                register_code(KC_RALT);
 | 
						|
                register_code(KC_RSHIFT);
 | 
						|
                Alt = HOLD3;
 | 
						|
            }
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            reset_tap_dance(state);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
void altReset(qk_tap_dance_state_t* state, void* user_data) {
 | 
						|
    switch (Alt) {
 | 
						|
        case HOLD1:
 | 
						|
            unregister_code(KC_LALT);
 | 
						|
            break;
 | 
						|
        case HOLD2:
 | 
						|
            unregister_code(KC_RALT);
 | 
						|
            break;
 | 
						|
        case HOLD3:
 | 
						|
            unregister_code(KC_RSHIFT);
 | 
						|
            unregister_code(KC_RALT);
 | 
						|
            break;
 | 
						|
    }
 | 
						|
    Alt = REST;
 | 
						|
}
 | 
						|
 | 
						|
static int Ctrl = REST;
 | 
						|
void       ctrlFinish(qk_tap_dance_state_t* state, void* user_data) {
 | 
						|
    switch (state->count) {
 | 
						|
        case 1:
 | 
						|
            if (state->pressed) {
 | 
						|
                register_code(KC_LCTL);
 | 
						|
                Ctrl = HOLD1;
 | 
						|
            } else {
 | 
						|
                tap_code(KC_ESC);
 | 
						|
            }
 | 
						|
            break;
 | 
						|
        case 2:
 | 
						|
            if (state->pressed) {
 | 
						|
                register_code(KC_LGUI);
 | 
						|
                Ctrl = HOLD2;
 | 
						|
            }
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            reset_tap_dance(state);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
void ctrlReset(qk_tap_dance_state_t* state, void* user_data) {
 | 
						|
    switch (Ctrl) {
 | 
						|
        case HOLD1:
 | 
						|
            unregister_code(KC_LCTL);
 | 
						|
            break;
 | 
						|
        case HOLD2:
 | 
						|
            unregister_code(KC_LGUI);
 | 
						|
            break;
 | 
						|
    }
 | 
						|
    Ctrl = REST;
 | 
						|
}
 | 
						|
 | 
						|
qk_tap_dance_action_t tap_dance_actions[] = {
 | 
						|
    [ALT]   = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altFinish, altReset),
 | 
						|
    [CTRL]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrlFinish, ctrlReset),
 | 
						|
    [LEFT]  = ACTION_TAP_DANCE_FN(left),
 | 
						|
    [RIGHT] = ACTION_TAP_DANCE_FN(right),
 | 
						|
};
 |