Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "atreus.h"
- // Each layer gets a name for readability, which is then used in the keymap matrix below.
- // The underscores don't mean anything - you can have a layer called STUFF or any other name.
- // Layer names don't all need to be of the same length, obviously, and you can also skip them
- // entirely and just use numbers.
- #define _QW 0
- #define _RS 1
- #define _LW 2
- #define _M 3
- enum {
- TD_ESC_CAPS,
- TD_AKSENT,
- TD_PGEND,
- TD_PGHOME,
- CT_CLN,
- CT_CLNR,
- SINGLE_TAP = 1,
- SINGLE_HOLD = 2,
- DOUBLE_TAP = 3,
- DOUBLE_HOLD = 4,
- DOUBLE_SINGLE_TAP = 5,
- TRIPLE_TAP = 6,
- TRIPLE_HOLD = 7,
- X_TAP_DANCE,
- X_TAP_DANCE2,
- X_TAP_DANCE3
- };
- typedef struct {
- bool is_press_action;
- int state;
- } tap;
- int cur_dance (qk_tap_dance_state_t *state) {
- if (state->count == 1) {
- if (state->interrupted || !state->pressed) return SINGLE_TAP;
- //key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'.
- else return SINGLE_HOLD;
- }
- else if (state->count == 2) {
- /*
- * DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap
- * action when hitting 'pp'. Suggested use case for this return value is when you want to send two
- * keystrokes of the key, and not the 'double tap' action/macro.
- */
- if (state->interrupted) return DOUBLE_SINGLE_TAP;
- else if (state->pressed) return DOUBLE_HOLD;
- else return DOUBLE_TAP;
- }
- //Assumes no one is trying to type the same letter three times (at least not quickly).
- //If your tap dance key is 'KC_W', and you want to type "www." quickly - then you will need to add
- //an exception here to return a 'TRIPLE_SINGLE_TAP', and define that enum just like 'DOUBLE_SINGLE_TAP'
- if (state->count == 3) {
- if (state->interrupted || !state->pressed) return TRIPLE_TAP;
- else return TRIPLE_HOLD;
- }
- else return 8; //magic number. At some point this method will expand to work for more presses
- }
- //**************** Definitions needed for quad function to work *********************//
- //instanalize an instance of 'tap' for the 'x' tap dance.
- static tap xtap_state = {
- .is_press_action = true,
- .state = 0
- };
- void x_finished (qk_tap_dance_state_t *state, void *user_data) {
- xtap_state.state = cur_dance(state);
- switch (xtap_state.state) {
- case SINGLE_TAP: register_code(KC_LSFT); register_code(KC_8); break;
- case SINGLE_HOLD: register_code(KC_LSFT); register_code(KC_8); break;
- case DOUBLE_TAP: register_code(KC_RALT); register_code(KC_8); break;
- case DOUBLE_HOLD: register_code(KC_RALT); register_code(KC_8); break;
- case DOUBLE_SINGLE_TAP: register_code(KC_RALT); register_code(KC_8); break;
- case TRIPLE_HOLD: register_code(KC_RALT); register_code(KC_7); break;
- case TRIPLE_TAP: register_code(KC_RALT); register_code(KC_7);
- }
- }
- void x_reset (qk_tap_dance_state_t *state, void *user_data) {
- switch (xtap_state.state) {
- case SINGLE_TAP: unregister_code(KC_LSFT); unregister_code(KC_8); break;
- case SINGLE_HOLD: unregister_code(KC_LSFT); unregister_code(KC_8); break;
- case DOUBLE_TAP: unregister_code(KC_RALT); unregister_code(KC_8); break;
- case DOUBLE_HOLD: unregister_code(KC_RALT); unregister_code(KC_8); break;
- case DOUBLE_SINGLE_TAP: unregister_code(KC_RALT); unregister_code(KC_8); break;
- case TRIPLE_HOLD: unregister_code(KC_RALT); unregister_code(KC_7); break;
- case TRIPLE_TAP: unregister_code(KC_RALT); unregister_code(KC_7);
- }
- xtap_state.state = 0;
- }
- void x_finished2 (qk_tap_dance_state_t *state, void *user_data) {
- xtap_state.state = cur_dance(state);
- switch (xtap_state.state) {
- case SINGLE_TAP: register_code(KC_LSFT); register_code(KC_9); break;
- case SINGLE_HOLD: register_code(KC_LSFT); register_code(KC_9); break;
- case DOUBLE_TAP: register_code(KC_RALT); register_code(KC_9); break;
- case DOUBLE_HOLD: register_code(KC_RALT); register_code(KC_9); break;
- case DOUBLE_SINGLE_TAP: register_code(KC_RALT); register_code(KC_9); break;
- case TRIPLE_HOLD: register_code(KC_RALT); register_code(KC_0); break;
- case TRIPLE_TAP: register_code(KC_RALT); register_code(KC_0);
- }
- }
- void x_reset2 (qk_tap_dance_state_t *state, void *user_data) {
- switch (xtap_state.state) {
- case SINGLE_TAP: unregister_code(KC_LSFT); unregister_code(KC_9); break;
- case SINGLE_HOLD: unregister_code(KC_LSFT); unregister_code(KC_9); break;
- case DOUBLE_TAP: unregister_code(KC_RALT); unregister_code(KC_9); break;
- case DOUBLE_HOLD: unregister_code(KC_RALT); unregister_code(KC_9); break;
- case DOUBLE_SINGLE_TAP: unregister_code(KC_RALT); unregister_code(KC_9); break;
- case TRIPLE_HOLD: unregister_code(KC_RALT); unregister_code(KC_0); break;
- case TRIPLE_TAP: unregister_code(KC_RALT); unregister_code(KC_0);
- }
- xtap_state.state = 0;
- }
- void dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) {
- if (state->count == 1) {
- register_code (KC_LSFT);
- register_code (KC_8);
- } else {
- register_code (KC_RALT);
- register_code (KC_8);
- }
- }
- void dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) {
- if (state->count == 1) {
- unregister_code (KC_LSFT);
- unregister_code (KC_8);
- } else {
- unregister_code (KC_RALT);
- unregister_code (KC_8);
- }
- }
- void dance_cln_finishedr (qk_tap_dance_state_t *state, void *user_data) {
- if (state->count == 1) {
- register_code (KC_LSFT);
- register_code (KC_9);
- } else {
- register_code (KC_RALT);
- register_code (KC_9);
- }
- }
- void dance_cln_resetr (qk_tap_dance_state_t *state, void *user_data) {
- if (state->count == 1) {
- unregister_code (KC_LSFT);
- unregister_code (KC_9);
- } else {
- unregister_code (KC_RALT);
- unregister_code (KC_9);
- }
- }
- void dance_aksent_finished (qk_tap_dance_state_t *state, void *user_data) {
- if (state->count == 1) {
- register_code (KC_EQL);
- } else {
- register_code (KC_RALT);
- register_code (KC_EQL);
- }
- }
- void dance_aksent_reset (qk_tap_dance_state_t *state, void *user_data) {
- if (state->count == 1) {
- unregister_code (KC_EQL);
- } else {
- unregister_code (KC_RALT);
- unregister_code (KC_EQL);
- }
- }
- void newTabSearch1 (qk_tap_dance_state_t *state, void *user_data) {
- if (state->count == 1) {
- register_code(KC_LGUI);
- } else {
- register_code(KC_LCTL);
- register_code(KC_C);
- unregister_code(KC_C);
- register_code(KC_T);
- unregister_code(KC_T);
- register_code(KC_V);
- unregister_code(KC_V);
- unregister_code(KC_LCTL);
- register_code(KC_ENTER);
- unregister_code(KC_ENTER);
- }
- }
- void newTabSearch2 (qk_tap_dance_state_t *state, void *user_data) {
- if (state->count == 1) {
- unregister_code(KC_LGUI);
- }
- }
- qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS),
- [TD_AKSENT] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_aksent_finished, dance_aksent_reset),
- [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cln_finished, dance_cln_reset),
- [CT_CLNR] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cln_finishedr, dance_cln_resetr),
- [TD_PGEND] = ACTION_TAP_DANCE_DOUBLE(KC_PGDN, KC_END),
- [TD_PGHOME] = ACTION_TAP_DANCE_DOUBLE(KC_PGUP, KC_HOME),
- [X_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, x_finished, x_reset),
- [X_TAP_DANCE2] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, x_finished2, x_reset2),
- [X_TAP_DANCE3] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,newTabSearch1,newTabSearch2)
- };
- const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = KEYMAP( /* Qwerty */
- KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_LBRC ,
- KC_A, KC_R, KC_S, KC_T, KC_G, KC_K, KC_N, KC_E, KC_I, KC_O ,
- KC_Z, KC_X, KC_C, KC_D, KC_V, KC_M, KC_H, KC_COMM, KC_DOT, KC_MINS,
- KC_LCTL, KC_TAB, TD(X_TAP_DANCE3), KC_LSFT, KC_BSPC, TD(TD_ESC_CAPS) , KC_LALT, KC_SPC, MO(_RS), KC_SLSH, KC_RALT, KC_ENT ),
- [_RS] = KEYMAP( /* [> RAISE <] */
- KC_EXLM, KC_AT, KC_UP, KC_NUBS, KC_RBRC, TD(TD_PGHOME), KC_7, KC_8, KC_9, KC_SCLN ,
- KC_HASH, KC_LEFT, KC_DOWN, KC_RIGHT, LSFT(KC_5), TD(TD_PGEND), KC_4, KC_5, KC_6, KC_QUOT,
- TD(X_TAP_DANCE), TD(X_TAP_DANCE2), KC_GRV, LSFT(KC_0), LSFT(KC_7), LALT(KC_F4),KC_1, KC_2, KC_3, KC_BSLS ,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, TO(_LW), KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_TRNS, TD(TD_AKSENT) ),
- [_LW] = KEYMAP( /* [> LOWER <] */
- KC_INS, KC_HOME, KC_VOLU, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 ,
- KC_MPLY, KC_MPRV, KC_VOLD, KC_MNXT, KC_PGDN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 ,
- KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12 ,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_M), KC_TRNS, KC_TRNS, KC_TRNS, TO(_QW), KC_TRNS, KC_TRNS, KC_TRNS ),
- [_M] = KEYMAP( /* [> LOWER <] */
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO ,
- M(0), M(1), M(2), M(3), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO ,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO ,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TO(_QW), KC_TRNS, KC_TRNS, KC_TRNS )
- };
- const uint16_t PROGMEM fn_actions[] = {
- };
- const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
- {
- switch(id) {
- case 0:
- if (record->event.pressed) {
- SEND_STRING("hidden");
- break;
- }
- case 1:
- if (record->event.pressed) {
- SEND_STRING("hidden");
- break;
- }
- case 2:
- if (record->event.pressed) {
- SEND_STRING("hidden");
- }
- case 3:
- if (record->event.pressed) {
- SEND_STRING("hidden");
- break;
- }
- case 4:
- if (record->event.pressed) {
- SEND_STRING("test");
- // register_code(KC_LCTL);
- // register_code(KC_T);
- // unregister_code(KC_T);
- // register_code(KC_V);
- // unregister_code(KC_V);
- // unregister_code(KC_LCTL);
- // register_code(KC_ENTER);
- // unregister_code(KC_ENTER);
- break;
- }
- }
- return MACRO_NONE;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement