summaryrefslogtreecommitdiffstats
path: root/users/danielo515/process_records.c
diff options
context:
space:
mode:
Diffstat (limited to 'users/danielo515/process_records.c')
-rw-r--r--users/danielo515/process_records.c167
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 0000000000..b1a8b92552
--- /dev/null
+++ b/users/danielo515/process_records.c
@@ -0,0 +1,167 @@
+#include "process_records.h"
+#include "alt_tab.h"
+extern bool onMac;
+// ======== INCREMENTAL MACROS STUFF =============
+#define MAX_INCREMENTAL_MACRO 20
+#define TAP_ROTATION_TIMEOUT 400
+uint16_t latest_kc = 0;
+uint16_t latest_rotation = 0;
+int key_count = 0;
+
+const char incremental_macros[][MAX_INCREMENTAL_MACRO] = { "String1"SS_TAP(X_HOME)"X-", "String2"SS_TAP(X_HOME) };
+
+bool process_incremental_macro(uint16_t kc) {
+ if (kc < INC_MACROS_START || kc > INC_MACROS_END) {
+ return false;
+ }
+ int macro_idx = (int)(kc - INC_MACROS_START) - 1;
+ char tempstring[3] = {0};
+ tempstring[0] = incremental_macros[macro_idx][key_count];
+ // Special cases of SS_TAP SS_UP and SS_DOWN, they require two characters so get both once and skip on next iteration
+ if (tempstring[0] == '\1' || tempstring[0] == '\2' || tempstring[0] == '\3') {
+ tempstring[1] = incremental_macros[macro_idx][++key_count];
+ }
+ if (tempstring[0] == '\0') {
+ key_count = 0;
+ }
+ send_string(tempstring);
+
+ return true;
+};
+
+void refresh_incremental_macros(uint16_t kc) {
+ if (kc == latest_kc) {
+ if ((timer_elapsed(latest_rotation) > TAP_ROTATION_TIMEOUT) || (key_count >= MAX_INCREMENTAL_MACRO))
+ key_count = 0;
+ else
+ key_count++;
+ } else {
+ key_count = 0;
+ latest_kc = kc;
+ }
+
+ latest_rotation = timer_read();
+}
+// Send control or GUI depending if we are on windows or mac
+bool CMD(uint16_t kc) {
+ if(onMac){ tap_code16(LGUI(kc)); } else { tap_code16(LCTL(kc)); }
+ return false;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ bool pressed = record->event.pressed;
+ if(pressed){
+ refresh_incremental_macros(keycode);
+ if(process_incremental_macro(keycode)){
+ return false;
+ }
+ switch (keycode) {
+ case MAC_TGL:
+ onMac = !onMac;
+ onMac ? SEND_STRING("On mac") : SEND_STRING("Not on MAC");
+ return false;
+ }
+ }
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ layer_on(_QWERTY);
+ }
+ return false;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+ return false;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ // == Macros START ===
+ case IARROW: if (record->event.pressed) SEND_STRING("<-"); return false;
+ case ARROW: if (record->event.pressed) SEND_STRING("->"); return false;
+ case F_ARROW: if (record->event.pressed) SEND_STRING("=>"); return false;
+ case GREP: if (record->event.pressed) SEND_STRING(" | grep "); return false;
+ case CLN_EQ: if (record->event.pressed) SEND_STRING(":="); return false;
+ // == Macros END ===
+ // == Multi Os START ===
+ case KC_HOME:// make the home behave the same on OSX
+ if (record->event.pressed && onMac) {
+ SEND_STRING(SS_LCTRL("a"));
+ return false;
+ }
+ case KC_END:// make the end behave the same on OSX
+ if (record->event.pressed && onMac) {
+ tap_code16(C(KC_E));
+ return false;
+ }
+ case AC_A:// Accent á
+ if (record->event.pressed) SEND_STRING(SS_LALT("e") "a"); return false;
+ case AC_E:// Accent é
+ if (record->event.pressed) SEND_STRING(SS_LALT("e") "e"); return false;
+ case AC_I:// Accent í
+ if (record->event.pressed) SEND_STRING(SS_LALT("e") "i"); return false;
+ case AC_O:// Accent ó
+ if (record->event.pressed) SEND_STRING(SS_LALT("e") "o"); return false;
+ case CUT: if (record->event.pressed) return CMD(KC_X);
+ case COPY:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c"));
+ }
+ return false;
+ case PASTE:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v"));
+ }
+ return false;
+ case SAVE:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTRL("s"));
+ }
+ return false;
+ case UNDO:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTRL("z"));
+ }
+ return false;
+ case FIND:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTRL("f"));
+ }
+ return false;
+ case CHG_LAYOUT:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f"));
+ }
+ return false;
+ // == Multi Os END ===
+#ifdef RGBLIGHT_ENABLE
+ case RGB_SLD:
+ if (record->event.pressed) { rgblight_mode(1); }
+ return false;
+ break;
+ //First time alt + tab, and alt stays sticky. Next press we just send tab. Any other key releases the alt
+#endif
+ }
+// =============== ALT_TAB single key handling
+ return process_alt_tab(keycode, record);
+};
+
+
+