diff options
Diffstat (limited to 'users/twschum/twschum.h')
| -rw-r--r-- | users/twschum/twschum.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/users/twschum/twschum.h b/users/twschum/twschum.h new file mode 100644 index 000000000..e8c9aeffc --- /dev/null +++ b/users/twschum/twschum.h | |||
| @@ -0,0 +1,131 @@ | |||
| 1 | #pragma once | ||
| 2 | #include <stdarg.h> | ||
| 3 | #include "quantum.h" | ||
| 4 | #include "xtonhasvim.h" | ||
| 5 | |||
| 6 | /************************** | ||
| 7 | * QMK Features Used | ||
| 8 | ************************** | ||
| 9 | * RGBLIGHT_ENABLE | ||
| 10 | * - Adds layer indication via RGB underglow | ||
| 11 | * - see the `layer_definitions` enum and following _*_HSV #defines | ||
| 12 | * | ||
| 13 | * | ||
| 14 | * | ||
| 15 | ************************** | ||
| 16 | * Custom Feature Flags | ||
| 17 | ************************** | ||
| 18 | * | ||
| 19 | * TWSCHUM_TAPPING_CTRL_PREFIX | ||
| 20 | * - Adds feature that makes sending nested sequences of C-a, C-b[, C-b, ...] | ||
| 21 | * as simple as C-a b [b ...] | ||
| 22 | * - Not necessarily super useful outside specialized nested tmux sessions, | ||
| 23 | * but it was a fun state-machine to build | ||
| 24 | * | ||
| 25 | * TWSCHUM_VIM_LAYER | ||
| 26 | * - Fork of xtonhasvim, adding vim-emulation | ||
| 27 | * | ||
| 28 | * TWSCHUM_IS_MAC | ||
| 29 | * - Flag for handling media keys and other settings between OSX and Win/Unix | ||
| 30 | * without having to include bootmagic | ||
| 31 | * | ||
| 32 | ************************** | ||
| 33 | * Features Wishlist | ||
| 34 | ************************** | ||
| 35 | * use VIM_Q as macro recorder! | ||
| 36 | * Dynamic macros | ||
| 37 | * Leader functions | ||
| 38 | * Uniicode leader commands??? (symbolic unicode) | ||
| 39 | * Mac mode vs not: -probably bootmagic or use default with dynamic swap out here | ||
| 40 | * KC_MFFD(KC_MEDIA_FAST_FORWARD) and KC_MRWD(KC_MEDIA_REWIND) instead of KC_MNXT and KC_MPRV | ||
| 41 | */ | ||
| 42 | |||
| 43 | /* Each layer gets a color, overwritable per keyboard */ | ||
| 44 | enum layers_definitions { | ||
| 45 | _Base, | ||
| 46 | _Vim, | ||
| 47 | _Fn, | ||
| 48 | _Nav, | ||
| 49 | _Num, | ||
| 50 | _Cfg, | ||
| 51 | _None, | ||
| 52 | }; | ||
| 53 | #ifdef RGBLIGHT_ENABLE | ||
| 54 | #define _Base_HSV_ON HSV_WHITE | ||
| 55 | #define _Base_HSV_OFF 0, 0, 0 | ||
| 56 | #define _Vim_HSV HSV_ORANGE | ||
| 57 | #define _Fn_HSV HSV_GREEN | ||
| 58 | #define _Nav_HSV HSV_AZURE | ||
| 59 | #define _Num_HSV HSV_GOLD | ||
| 60 | #define _Cfg_HSV HSV_RED | ||
| 61 | #define _None_HSV HSV_WHITE | ||
| 62 | #endif | ||
| 63 | |||
| 64 | enum extra_keycodes { | ||
| 65 | TWSCHUM_START = VIM_SAFE_RANGE, | ||
| 66 | KC_MAKE, // types the make command for this keyboard | ||
| 67 | #ifdef TWSCHUM_TAPPING_CTRL_PREFIX | ||
| 68 | CTRL_A, | ||
| 69 | CTRL_B, | ||
| 70 | EN_CTRL_SHORTCUTS, | ||
| 71 | #endif | ||
| 72 | #ifdef RGBLIGHT_ENABLE | ||
| 73 | TG_LAYER_RGB, // Toggle between standard RGB underglow, and RGB underglow to do layer indication | ||
| 74 | TG_L0_RGB, // Toggle color on or off of layer0 | ||
| 75 | #endif | ||
| 76 | SALT_CMD, // macro | ||
| 77 | LESS_PD, // macro | ||
| 78 | CODE_PASTE, // macro | ||
| 79 | KEYMAP_SAFE_RANGE, // range to start for the keymap | ||
| 80 | }; | ||
| 81 | #define SALT_CMD_MACRO "sudo salt \\* cmd.run ''"SS_TAP(X_LEFT) | ||
| 82 | #define LESS_PD_MACRO "sudo less /pipedream/cache/" | ||
| 83 | // TODO mac vs linux | ||
| 84 | #define CODE_PASTE_MACRO SS_LSFT("\n")"```"SS_LSFT("\n")SS_LALT("v")SS_LSFT("\n")"```" | ||
| 85 | |||
| 86 | |||
| 87 | /* PP_NARG macro returns the number of arguments passed to it. | ||
| 88 | * https://groups.google.com/forum/#!topic/comp.std.c/d-6Mj5Lko_s | ||
| 89 | */ | ||
| 90 | #define PP_NARG(...) PP_NARG_(__VA_ARGS__,PP_RSEQ_N()) | ||
| 91 | #define PP_NARG_(...) PP_ARG_N(__VA_ARGS__) | ||
| 92 | #define PP_MAX_ARGS 64 | ||
| 93 | #define PP_ARG_N( \ | ||
| 94 | _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ | ||
| 95 | _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ | ||
| 96 | _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ | ||
| 97 | _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ | ||
| 98 | _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ | ||
| 99 | _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ | ||
| 100 | _61,_62,_63,N,...) N | ||
| 101 | #define PP_RSEQ_N() 63,62,61,60, \ | ||
| 102 | 59,58,57,56,55,54,53,52,51,50, \ | ||
| 103 | 49,48,47,46,45,44,43,42,41,40, \ | ||
| 104 | 39,38,37,36,35,34,33,32,31,30, \ | ||
| 105 | 29,28,27,26,25,24,23,22,21,20, \ | ||
| 106 | 19,18,17,16,15,14,13,12,11,10, \ | ||
| 107 | 9,8,7,6,5,4,3,2,1,0 | ||
| 108 | |||
| 109 | #define send_keys(...) send_n_keys(PP_NARG(__VA_ARGS__), __VA_ARGS__) | ||
| 110 | static inline void send_n_keys(int n, ...) { | ||
| 111 | uint8_t i = 0; | ||
| 112 | uint16_t keycodes[PP_MAX_ARGS]; | ||
| 113 | va_list keys; | ||
| 114 | va_start(keys, n); | ||
| 115 | for (; i < n; ++i) { | ||
| 116 | keycodes[i] = (uint16_t)va_arg(keys, int); // cast suppresses warning | ||
| 117 | register_code(keycodes[i]); | ||
| 118 | } | ||
| 119 | for (; n > 0; --n) { | ||
| 120 | unregister_code(keycodes[n-1]); | ||
| 121 | } | ||
| 122 | va_end(keys); | ||
| 123 | } | ||
| 124 | #define repeat_send_keys(n, ...) {for (int i=0; i < n; ++i) {send_keys(__VA_ARGS__);}} | ||
| 125 | |||
| 126 | /* State functions for nested c-a & c-b leader keystrokes */ | ||
| 127 | struct Tapping_ctrl_key_t { | ||
| 128 | bool down; | ||
| 129 | int8_t count; | ||
| 130 | const uint16_t keycode; | ||
| 131 | }; | ||
