From 32d03eef902a1ac9cec53804dcb72ace5c585960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Rodr=C3=ADguez=20Rivero?= Date: Thu, 12 Mar 2020 03:50:19 +0100 Subject: Danielo515/redox (#8232) * feat(build): added script for compiling with docker easily * chore: bring my own build with docker to master * chore: delete a file that does not make sense anymore * feat: first redox for danielo * chore: basic compatibility between redox and my space * refactor: removed some old stuff * feat: added go coding symbols * feat: name control_k and alt_j * chore: reduce combo term * feat: improved first layer of redox * feat: add configurations to the redox * feat: make alt tab more portable * feat: small improvements to redox layout * feat: added leader * refactor: move leader defs to my userspace config * chore: movement modified * feat: more predefined keys and a a new combo * feat: redox alt tab functionality * refactor: move alt_tab processing to a separate file * refactor: early return * refactor: move process record to a separate file * format leader function * chore: backspace on digits layer * feat: add extra combo * feat: added more combos * implement guard proposed by @drashna Co-Authored-By: Drashna Jaelre * chore: include @drashna placeholder suggestion Co-Authored-By: Drashna Jaelre Co-authored-by: Drashna Jaelre --- users/danielo515/process_records.c | 167 +++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 users/danielo515/process_records.c (limited to 'users/danielo515/process_records.c') 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); +}; + + + -- cgit v1.2.3