]> git.donarmstrong.com Git - qmk_firmware.git/blob - users/stanrc85/stanrc85.c
[Keymap] Jarred's Plaid keymap (#6049)
[qmk_firmware.git] / users / stanrc85 / stanrc85.c
1 #include "stanrc85.h"
2
3 static td_state_t td_state;
4
5 __attribute__ ((weak))
6 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
7   return true;
8 }
9
10 // determine the tapdance state to return
11 int cur_dance (qk_tap_dance_state_t *state) {
12   if (state->count == 1) {
13     if (state->interrupted || !state->pressed) { return SINGLE_TAP; }
14     else { return SINGLE_HOLD; }
15   }
16   if (state->count == 2) { return DOUBLE_TAP; }
17   else { return 3; } // any number higher than the maximum state value you return above
18 }
19
20 // handle the possible states for each tapdance keycode you define:
21 void ctl_copy_finished (qk_tap_dance_state_t *state, void *user_data) {
22   td_state = cur_dance(state);
23   switch (td_state) {
24     case SINGLE_TAP:
25       SEND_STRING(SS_LCTRL("c"));
26       break;
27     case SINGLE_HOLD:
28       register_mods(MOD_BIT(KC_RCTL));
29       break;
30     case DOUBLE_TAP:
31       SEND_STRING(SS_LCTRL("v"));
32   }
33 }
34
35 void ctl_copy_reset (qk_tap_dance_state_t *state, void *user_data) {
36   switch (td_state) {
37     case SINGLE_TAP:
38       break;
39     case SINGLE_HOLD:
40       unregister_mods(MOD_BIT(KC_RCTL));
41       break;
42     case DOUBLE_TAP:
43       break;
44   }
45 }
46
47 qk_tap_dance_action_t tap_dance_actions[] = {
48   [TD_WIN] = ACTION_TAP_DANCE_DOUBLE(KC_CAD, KC_LOCK),
49   [TD_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRV),
50   [TD_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctl_copy_finished, ctl_copy_reset)
51 };
52
53 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
54   switch (keycode) {
55   case KC_MAKE:
56     if (!record->event.pressed) {
57       uint8_t mods = get_mods();
58       clear_mods();
59       send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10);
60         if (mods & MOD_MASK_SHIFT) {
61           //RESET board for flashing if SHIFT held or tapped with KC_MAKE
62           #if defined(__arm__)
63             send_string_with_delay_P(PSTR(":dfu-util"), 10);
64           #elif defined(BOOTLOADER_DFU)
65             send_string_with_delay_P(PSTR(":dfu"), 10);
66           #elif defined(BOOTLOADER_HALFKAY)
67             send_string_with_delay_P(PSTR(":teensy"), 10);
68           #elif defined(BOOTLOADER_CATERINA)
69             send_string_with_delay_P(PSTR(":avrdude"), 10);
70           #endif // bootloader options
71           send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
72           reset_keyboard();
73         }
74         if (mods & MOD_MASK_CTRL) {
75           send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10);
76         }
77         send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
78         set_mods(mods);
79       }
80     break;
81   case KC_RDP: //Opens Windows RDP
82     if (!record->event.pressed) {
83       register_code(KC_LGUI);
84       tap_code(KC_R);
85       unregister_code(KC_LGUI);
86       wait_ms(200);
87       send_string_with_delay_P(PSTR("mstsc"), 10);
88       send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
89     }
90     break;
91   }
92   return process_record_keymap(keycode, record);
93 }