123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464 |
- #include "art.h"
- #include "string.h"
- __attribute__ ((weak))
- bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
- return true;
- }
- __attribute__ ((weak))
- void led_show_current_os(void) {
- }
- static bool mac_ctrl_on = false; //for switching tabs
- static bool mac_gui_on = false; //for switching languages
- static bool mac_alt_tab_on = false; //for switching windows
- static const char *key_up[2] = {SS_UP(X_LALT), SS_UP(X_LCTL)};
- static const char *key_down[2] = {SS_DOWN(X_LALT), SS_DOWN(X_LCTL)};
- int char_to_del = 1;
- static bool sarcasm_on = false;
- static bool sarcasm_key = false;
- void backspace_n_times(int times) {
- for (int i=0; i<times; i++) {
- SEND_STRING(SS_TAP(X_BSPC));
- }
- }
- void send_string_remembering_length(char *string) {
- send_string(string);
- char_to_del = strlen(string);
- }
- void send_shifted_strings(char *string1, char *string2) {
- if ( get_mods() & MOD_MASK_SHIFT ) {
- clear_mods();
- send_string_remembering_length(string2);
- } else {
- send_string_remembering_length(string1);
- }
- }
- void send_shifted_strings_add(char *string1, char *string2) {
- bool shifted = get_mods() & MOD_MASK_SHIFT;
- clear_mods();
- send_string_remembering_length(string1);
- if (shifted) {
- send_string(string2);
- char_to_del = strlen(string1) + strlen(string2);
- }
- }
- bool is_mac_with_base_layer_off(void) {
- return !is_win && !layer_state_is(BASE);
- }
- bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (sarcasm_on) {
- sarcasm_key = ! sarcasm_key;
- if (sarcasm_key) {
- SEND_STRING(SS_TAP(X_CAPS));
- }
- }
- //Checking all other non-backspace keys to clear the backspace buffer. This is to prevent the bug of deleting N chars sometime after using a macro
- if (record->event.pressed && (keycode != KC_BSPACE && keycode != XXXXXXX)) {
- char_to_del = 1;
- }
- switch (keycode) {
- case KC_TAB:
- if (record->event.pressed && is_mac_with_base_layer_off()) {
- uint8_t mods = get_mods();
- uint8_t mod_state = mods & MOD_MASK_ALT;
- if (get_mods() & mod_state) {
- del_mods(mod_state);
- add_mods(MOD_LCTL);
- mac_alt_tab_on = true;
- }
- mod_state = mods & MOD_MASK_CTRL;
- if (get_mods() & mod_state && !mac_alt_tab_on) {
- del_mods(mod_state);
- add_mods(MOD_LGUI);
- mac_ctrl_on = true;
- }
- }
- break;
- case KC_LSFT:
- if (record->event.pressed && is_mac_with_base_layer_off()) {
- uint8_t mods = get_mods();
- uint8_t mod_state = mods & MOD_MASK_AG;
- if (get_mods() & mod_state) {
- del_mods(mod_state);
- add_mods(MOD_LGUI);
- mac_gui_on = true;
- SEND_STRING(SS_TAP(X_SPACE));
- return false;
- } else {
- return true;
- }
- }
- break;
- case KC_LEFT:
- case KC_RIGHT:
- if (record->event.pressed && is_mac_with_base_layer_off()) {
- /* && !mac_ctrl_on/!mac_alt_tab_on are required since setting the state while holding the key changes
- the modifier from OS's perspective. As a result, just the pressed key cannot be the single source
- of truth to determine which state we're in, and a separate bool is required */
- uint8_t mods = get_mods();
- uint8_t mod_state = mods & MOD_MASK_ALT;
- //Allows Ctrl <-/-> on Mac if Ctrl Tab is already pressed
- if (get_mods() & mod_state && mac_alt_tab_on && !mac_ctrl_on) {
- del_mods(mod_state);
- add_mods(MOD_LCTL);
- }
- mod_state = mods & MOD_MASK_CTRL;
- if (get_mods() & mod_state && !mac_alt_tab_on) {
- del_mods(mod_state);
- add_mods(MOD_LALT);
- mac_ctrl_on = true;
- }
- }
- break;
- case KC_DEL:
- if (record->event.pressed && is_mac_with_base_layer_off()) {
- uint8_t mod_state = get_mods() & MOD_MASK_CTRL;
- if (get_mods() & mod_state) {
- del_mods(mod_state);
- add_mods(MOD_LALT);
- mac_ctrl_on = true;
- }
- }
- break;
- case KC_LALT:
- if (!record->event.pressed && is_mac_with_base_layer_off()) {
- if (mac_alt_tab_on) {
- unregister_mods(MOD_LCTL);
- mac_alt_tab_on = false;
- return false;
- } else if (mac_gui_on) {
- SEND_STRING(SS_UP(X_LGUI));
- mac_gui_on = false;
- return false;
- }
- }
- break;
- case KC_RALT:
- if (!record->event.pressed && mac_alt_tab_on && is_mac_with_base_layer_off()) {
- unregister_mods(MOD_LCTL);
- mac_alt_tab_on = false;
- return false;
- }
- break;
- case KC_LCTL:
- case KC_RCTL:
- if (!record->event.pressed && mac_ctrl_on && is_mac_with_base_layer_off()) {
- SEND_STRING(SS_UP(X_LGUI) SS_UP(X_LALT));
- mac_ctrl_on = false;
- return false;
- }
- break;
- case KC_HOME:
- if (record->event.pressed && is_mac_with_base_layer_off()) {
- SEND_STRING(SS_LCTL(SS_TAP(X_LEFT)));
- return false;
- }
- break;
- case KC_END:
- if (record->event.pressed && is_mac_with_base_layer_off()) {
- SEND_STRING(SS_LCTL(SS_TAP(X_RIGHT)));
- return false;
- }
- break;
- case KC_BSPC:
- if (record->event.pressed) {
- if (char_to_del > 1) {
- layer_off(GIT_C);
- layer_off(GIT_S);
- backspace_n_times(char_to_del);
- char_to_del = 1;
- return false;
- }
- if (is_mac_with_base_layer_off()) {
- uint8_t mod_state = get_mods() & MOD_MASK_CTRL;
- if (get_mods() & mod_state) {
- del_mods(mod_state);
- add_mods(MOD_LALT);
- mac_ctrl_on = true;
- }
- }
- }
- break;
- /* -------------------------------------------------------------------------
- * CUSTOM MACROS
- * ------------------------------------------------------------------------ */
- case CTRL_CTV:
- if (record->event.pressed) {
- if ( get_mods() & MOD_MASK_SHIFT ) {
- clear_mods();
- SEND_STRING(SS_LCTL("ctv"));
- } else {
- SEND_STRING(SS_LCTL("ctv") SS_TAP(X_ENTER));
- }
- }
- break;
- case CTRL_LCTV:
- if (record->event.pressed) {
- if ( get_mods() & MOD_MASK_SHIFT ) {
- //Firefox
- clear_mods();
- SEND_STRING(SS_LCTL("lcP"));
- wait_ms(200);
- SEND_STRING(SS_LCTL("v") SS_TAP(X_ENTER));
- } else if ( get_mods() & MOD_MASK_CTRL ) {
- //Chrome
- clear_mods();
- SEND_STRING(SS_LCTL("lcNv") SS_TAP(X_ENTER));
- } else {
- SEND_STRING(SS_LCTL("lctv"));
- }
- }
- break;
- case CTRL_CAV:
- if (record->event.pressed) {
- SEND_STRING(SS_LCTL("c" SS_TAP(X_TAB)));
- wait_ms(50);
- SEND_STRING(SS_LCTL("av"));
- }
- break;
- case SARCASM:
- if (record->event.pressed) {
- sarcasm_on = !sarcasm_on;
- }
- break;
- /* -------------------------------------------------------------------------
- * OS TOGGLING
- * ------------------------------------------------------------------------ */
- case TOG_OS:
- if (record->event.pressed) {
- is_win = ! is_win;
- led_show_current_os();
- }
- break;
- case CTR_ALT:
- if (record->event.pressed) {
- send_string(key_down[is_win]);
- } else {
- send_string(key_up[is_win]);
- }
- break;
- case OS_CTRL:
- if (is_win) {
- if (record->event.pressed) {
- SEND_STRING(SS_DOWN(X_LCTL));
- } else {
- SEND_STRING(SS_UP(X_LCTL));
- }
- } else {
- if (record->event.pressed) {
- SEND_STRING(SS_DOWN(X_LGUI));
- } else {
- SEND_STRING(SS_UP(X_LGUI));
- }
- }
- break;
- case OS_WIN:
- if (is_win) {
- if (record->event.pressed) {
- SEND_STRING(SS_DOWN(X_LGUI));
- } else {
- SEND_STRING(SS_UP(X_LGUI));
- }
- } else {
- if (record->event.pressed) {
- SEND_STRING(SS_DOWN(X_LCTL));
- } else {
- SEND_STRING(SS_UP(X_LCTL));
- }
- }
- break;
- /* -------------------------------------------------------------------------
- * STRING MACROS
- * ------------------------------------------------------------------------ */
- // case :
- // if (record->event.pressed) {
- // send_string_remembering_length("");
- // }
- // break;
- // case :
- // if (record->event.pressed) {
- // send_string_remembering_length("", "");
- // }
- // break;
- case TILD_BLOCK:
- if (record->event.pressed) {
- SEND_STRING("```" SS_LSFT(SS_TAP(X_ENTER) SS_TAP(X_ENTER)) "```" SS_TAP(X_UP));
- char_to_del = 4;
- }
- break;
- case ADMINS:
- if (record->event.pressed) {
- send_shifted_strings_add("admin", "/aurora/status");
- }
- break;
- case PRESCRIPTION:
- if (record->event.pressed) {
- SEND_STRING("55\t12122019\t");
- char_to_del = 8;
- }
- break;
- case FOURS:
- if (record->event.pressed) {
- SEND_STRING("4444333322221111\t1\t12\t21\t123\n");
- char_to_del = 16;
- }
- break;
-
- case G_ADD:
- if (record->event.pressed) {
- send_string_remembering_length("git add ");
- }
- break;
- case G_BRCH:
- if (record->event.pressed) {
- send_shifted_strings_add("git branch ", "-d ");
- }
- break;
- case G_C:
- if (record->event.pressed) {
- send_string_remembering_length("git c[Heckout/Ommit]");
- layer_on(GIT_C);
- }
- break;
- case G_CHEC:
- if (!record->event.pressed) {
- bool shifted = get_mods() & MOD_MASK_SHIFT;
- clear_mods();
-
- backspace_n_times(15);
- SEND_STRING("heckout ");
- char_to_del = 13;
- if (shifted) {
- SEND_STRING("-b ");
- char_to_del = 16;
- }
- layer_off(GIT_C);
- }
- break;
- case G_COMM:
- if (!record->event.pressed) {
- bool shifted = get_mods() & MOD_MASK_SHIFT;
- clear_mods();
-
- backspace_n_times(15);
- SEND_STRING("ommit -");
- char_to_del = 15;
- if (shifted) {
- SEND_STRING("a");
- char_to_del = 16;
- }
- SEND_STRING("m \"\"" SS_TAP(X_LEFT));
- layer_off(GIT_C);
- }
- break;
- case G_DEV:
- if (record->event.pressed) {
- send_shifted_strings("develop", "master");
- }
- break;
- case G_DIFF:
- if (record->event.pressed) {
- send_string_remembering_length("git diff ");
- }
- break;
- case G_FTCH:
- if (record->event.pressed) {
- send_string_remembering_length("git fetch ");
- }
- break;
- case G_LOG:
- if (record->event.pressed) {
- send_string_remembering_length("git log ");
- }
- break;
- case G_MERG:
- if (record->event.pressed) {
- send_string_remembering_length("git merge ");
- }
- break;
- case G_P:
- if (record->event.pressed) {
- send_shifted_strings_add("git pu", "sh -u ");
- }
- break;
- case G_RST:
- if (record->event.pressed) {
- send_string_remembering_length("git reset ");
- }
- break;
- case G_S:
- if (!record->event.pressed) {
- send_string_remembering_length("git s[taSh/How/taTus]");
- layer_on(GIT_S);
- }
- break;
- case G_SHOW:
- if (!record->event.pressed) {
- backspace_n_times(16);
- SEND_STRING("how ");
- char_to_del = 9;
- layer_off(GIT_S);
- }
- break;
- case G_STSH:
- if (!record->event.pressed) {
- bool shifted = get_mods() & MOD_MASK_SHIFT;
- clear_mods();
- backspace_n_times(16);
- SEND_STRING("tash ");
- char_to_del = 10;
- if (shifted) {
- clear_mods();
- SEND_STRING("apply ");
- char_to_del = 16;
- }
- layer_off(GIT_S);
- }
- break;
- case G_STAT:
- if (!record->event.pressed) {
- backspace_n_times(16);
- SEND_STRING("tatus ");
- char_to_del = 11;
- layer_off(GIT_S);
- }
- break;
- case CTL_ALT_START ... CTL_ALT_END:
- if (record->event.pressed) {
- if (is_win) {
- tap_code16(LCTL(keycode - CTL_ALT_START));
- } else {
- tap_code16(LALT(keycode - CTL_ALT_START));
- }
- }
- break;
- }
- return process_record_keymap(keycode, record);
- }
|