diff options
Diffstat (limited to 'users/danielo515/process_records.c')
| -rw-r--r-- | users/danielo515/process_records.c | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/users/danielo515/process_records.c b/users/danielo515/process_records.c new file mode 100644 index 000000000..b1a8b9255 --- /dev/null +++ b/users/danielo515/process_records.c | |||
| @@ -0,0 +1,167 @@ | |||
| 1 | #include "process_records.h" | ||
| 2 | #include "alt_tab.h" | ||
| 3 | extern bool onMac; | ||
| 4 | // ======== INCREMENTAL MACROS STUFF ============= | ||
| 5 | #define MAX_INCREMENTAL_MACRO 20 | ||
| 6 | #define TAP_ROTATION_TIMEOUT 400 | ||
| 7 | uint16_t latest_kc = 0; | ||
| 8 | uint16_t latest_rotation = 0; | ||
| 9 | int key_count = 0; | ||
| 10 | |||
| 11 | const char incremental_macros[][MAX_INCREMENTAL_MACRO] = { "String1"SS_TAP(X_HOME)"X-", "String2"SS_TAP(X_HOME) }; | ||
| 12 | |||
| 13 | bool process_incremental_macro(uint16_t kc) { | ||
| 14 | if (kc < INC_MACROS_START || kc > INC_MACROS_END) { | ||
| 15 | return false; | ||
| 16 | } | ||
| 17 | int macro_idx = (int)(kc - INC_MACROS_START) - 1; | ||
| 18 | char tempstring[3] = {0}; | ||
| 19 | tempstring[0] = incremental_macros[macro_idx][key_count]; | ||
| 20 | // Special cases of SS_TAP SS_UP and SS_DOWN, they require two characters so get both once and skip on next iteration | ||
| 21 | if (tempstring[0] == '\1' || tempstring[0] == '\2' || tempstring[0] == '\3') { | ||
| 22 | tempstring[1] = incremental_macros[macro_idx][++key_count]; | ||
| 23 | } | ||
| 24 | if (tempstring[0] == '\0') { | ||
| 25 | key_count = 0; | ||
| 26 | } | ||
| 27 | send_string(tempstring); | ||
| 28 | |||
| 29 | return true; | ||
| 30 | }; | ||
| 31 | |||
| 32 | void refresh_incremental_macros(uint16_t kc) { | ||
| 33 | if (kc == latest_kc) { | ||
| 34 | if ((timer_elapsed(latest_rotation) > TAP_ROTATION_TIMEOUT) || (key_count >= MAX_INCREMENTAL_MACRO)) | ||
| 35 | key_count = 0; | ||
| 36 | else | ||
| 37 | key_count++; | ||
| 38 | } else { | ||
| 39 | key_count = 0; | ||
| 40 | latest_kc = kc; | ||
| 41 | } | ||
| 42 | |||
| 43 | latest_rotation = timer_read(); | ||
| 44 | } | ||
| 45 | // Send control or GUI depending if we are on windows or mac | ||
| 46 | bool CMD(uint16_t kc) { | ||
| 47 | if(onMac){ tap_code16(LGUI(kc)); } else { tap_code16(LCTL(kc)); } | ||
| 48 | return false; | ||
| 49 | } | ||
| 50 | |||
| 51 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
| 52 | bool pressed = record->event.pressed; | ||
| 53 | if(pressed){ | ||
| 54 | refresh_incremental_macros(keycode); | ||
| 55 | if(process_incremental_macro(keycode)){ | ||
| 56 | return false; | ||
| 57 | } | ||
| 58 | switch (keycode) { | ||
| 59 | case MAC_TGL: | ||
| 60 | onMac = !onMac; | ||
| 61 | onMac ? SEND_STRING("On mac") : SEND_STRING("Not on MAC"); | ||
| 62 | return false; | ||
| 63 | } | ||
| 64 | } | ||
| 65 | |||
| 66 | switch (keycode) { | ||
| 67 | case QWERTY: | ||
| 68 | if (record->event.pressed) { | ||
| 69 | #ifdef AUDIO_ENABLE | ||
| 70 | PLAY_SONG(tone_qwerty); | ||
| 71 | #endif | ||
| 72 | layer_on(_QWERTY); | ||
| 73 | } | ||
| 74 | return false; | ||
| 75 | case LOWER: | ||
| 76 | if (record->event.pressed) { | ||
| 77 | layer_on(_LOWER); | ||
| 78 | } else { | ||
| 79 | layer_off(_LOWER); | ||
| 80 | } | ||
| 81 | return false; | ||
| 82 | case RAISE: | ||
| 83 | if (record->event.pressed) { | ||
| 84 | layer_on(_RAISE); | ||
| 85 | } else { | ||
| 86 | layer_off(_RAISE); | ||
| 87 | } | ||
| 88 | return false; | ||
| 89 | case ADJUST: | ||
| 90 | if (record->event.pressed) { | ||
| 91 | layer_on(_ADJUST); | ||
| 92 | } else { | ||
| 93 | layer_off(_ADJUST); | ||
| 94 | } | ||
| 95 | return false; | ||
| 96 | // == Macros START === | ||
| 97 | case IARROW: if (record->event.pressed) SEND_STRING("<-"); return false; | ||
| 98 | case ARROW: if (record->event.pressed) SEND_STRING("->"); return false; | ||
| 99 | case F_ARROW: if (record->event.pressed) SEND_STRING("=>"); return false; | ||
| 100 | case GREP: if (record->event.pressed) SEND_STRING(" | grep "); return false; | ||
| 101 | case CLN_EQ: if (record->event.pressed) SEND_STRING(":="); return false; | ||
| 102 | // == Macros END === | ||
| 103 | // == Multi Os START === | ||
| 104 | case KC_HOME:// make the home behave the same on OSX | ||
| 105 | if (record->event.pressed && onMac) { | ||
| 106 | SEND_STRING(SS_LCTRL("a")); | ||
| 107 | return false; | ||
| 108 | } | ||
| 109 | case KC_END:// make the end behave the same on OSX | ||
| 110 | if (record->event.pressed && onMac) { | ||
| 111 | tap_code16(C(KC_E)); | ||
| 112 | return false; | ||
| 113 | } | ||
| 114 | case AC_A:// Accent á | ||
| 115 | if (record->event.pressed) SEND_STRING(SS_LALT("e") "a"); return false; | ||
| 116 | case AC_E:// Accent é | ||
| 117 | if (record->event.pressed) SEND_STRING(SS_LALT("e") "e"); return false; | ||
| 118 | case AC_I:// Accent í | ||
| 119 | if (record->event.pressed) SEND_STRING(SS_LALT("e") "i"); return false; | ||
| 120 | case AC_O:// Accent ó | ||
| 121 | if (record->event.pressed) SEND_STRING(SS_LALT("e") "o"); return false; | ||
| 122 | case CUT: if (record->event.pressed) return CMD(KC_X); | ||
| 123 | case COPY: | ||
| 124 | if (record->event.pressed) { | ||
| 125 | onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c")); | ||
| 126 | } | ||
| 127 | return false; | ||
| 128 | case PASTE: | ||
| 129 | if (record->event.pressed) { | ||
| 130 | onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v")); | ||
| 131 | } | ||
| 132 | return false; | ||
| 133 | case SAVE: | ||
| 134 | if (record->event.pressed) { | ||
| 135 | onMac ? SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTRL("s")); | ||
| 136 | } | ||
| 137 | return false; | ||
| 138 | case UNDO: | ||
| 139 | if (record->event.pressed) { | ||
| 140 | onMac ? SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTRL("z")); | ||
| 141 | } | ||
| 142 | return false; | ||
| 143 | case FIND: | ||
| 144 | if (record->event.pressed) { | ||
| 145 | onMac ? SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTRL("f")); | ||
| 146 | } | ||
| 147 | return false; | ||
| 148 | case CHG_LAYOUT: | ||
| 149 | if (record->event.pressed) { | ||
| 150 | onMac ? SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f")); | ||
| 151 | } | ||
| 152 | return false; | ||
| 153 | // == Multi Os END === | ||
| 154 | #ifdef RGBLIGHT_ENABLE | ||
| 155 | case RGB_SLD: | ||
| 156 | if (record->event.pressed) { rgblight_mode(1); } | ||
| 157 | return false; | ||
| 158 | break; | ||
| 159 | //First time alt + tab, and alt stays sticky. Next press we just send tab. Any other key releases the alt | ||
| 160 | #endif | ||
| 161 | } | ||
| 162 | // =============== ALT_TAB single key handling | ||
| 163 | return process_alt_tab(keycode, record); | ||
| 164 | }; | ||
| 165 | |||
| 166 | |||
| 167 | |||
