diff options
| -rw-r--r-- | keyboards/chimera_ortho/keymaps/gordon/keymap.c | 389 | ||||
| -rw-r--r-- | keyboards/ergodox_infinity/keymaps/gordon/keymap.c | 315 | ||||
| -rw-r--r-- | users/gordon/gordon.c | 275 | ||||
| -rw-r--r-- | users/gordon/gordon.h | 157 | ||||
| -rw-r--r-- | users/gordon/readme.md | 14 | ||||
| -rw-r--r-- | users/gordon/rules.mk | 1 |
6 files changed, 1151 insertions, 0 deletions
diff --git a/keyboards/chimera_ortho/keymaps/gordon/keymap.c b/keyboards/chimera_ortho/keymaps/gordon/keymap.c new file mode 100644 index 000000000..721f8207a --- /dev/null +++ b/keyboards/chimera_ortho/keymaps/gordon/keymap.c | |||
| @@ -0,0 +1,389 @@ | |||
| 1 | // this is the style you want to emulate. | ||
| 2 | // This is the canonical layout file for the Quantum project. If you want to add another keyboard, | ||
| 3 | |||
| 4 | #include "chimera_ortho.h" | ||
| 5 | #include "action_layer.h" | ||
| 6 | #include "version.h" | ||
| 7 | #include "process_keycode/process_tap_dance.h" | ||
| 8 | #include "gordon.h" | ||
| 9 | |||
| 10 | // Each layer gets a name for readability, which is then used in the keymap matrix below. | ||
| 11 | // The underscores don't mean anything - you can have a layer called STUFF or any other name. | ||
| 12 | // Layer names don't all need to be of the same length, obviously, and you can also skip them | ||
| 13 | // entirely and just use numbers. | ||
| 14 | |||
| 15 | #define CALTDEL LCTL(LALT(KC_DEL)) | ||
| 16 | #define TSKMGR LCTL(LSFT(KC_ESC)) | ||
| 17 | |||
| 18 | #define KC_SNAPLEFT LGUI(KC_LEFT) | ||
| 19 | #define KC_SNAPRIGHT LGUI(KC_RIGHT) | ||
| 20 | #define KC_SNAPUP LGUI(KC_UP) | ||
| 21 | #define KC_SNAPDOWN LGUI(KC_DOWN) | ||
| 22 | #define KC_PREVTAB LCTL(LSFT(KC_TAB)) | ||
| 23 | #define KC_NEXTTAB LCTL(KC_TAB) | ||
| 24 | #define KC_WORKRIGHT LCTL(LGUI(KC_RIGHT)) | ||
| 25 | #define KC_WORKLEFT LCTL(LGUI(KC_LEFT)) | ||
| 26 | |||
| 27 | #define KC_NMPD TG(_NUMPAD) | ||
| 28 | #define KC_SYMB TG(_SYMBOLS) | ||
| 29 | |||
| 30 | #define KC_SCTL MT(MOD_LCTL, KC_LBRC) | ||
| 31 | #define KC_SCTR MT(MOD_LCTL, KC_RBRC) | ||
| 32 | #define KC_SPLT MT(MOD_LALT, KC_MINS) | ||
| 33 | #define KC_SPRT MT(MOD_LALT, KC_1) | ||
| 34 | #define KC_GBRC MT(MOD_RGUI, KC_8) | ||
| 35 | #define KC_GQOT MT(MOD_LGUI, KC_QUOT) | ||
| 36 | #define KC_CSHW MT(MOD_LCTL|MOD_LSFT,KC_W) | ||
| 37 | |||
| 38 | #define KC_CDEL LCTL(KC_DEL) | ||
| 39 | #define KC_AUDUP KC_AUDIO_VOL_UP | ||
| 40 | #define KC_AUDOWN KC_AUDIO_VOL_DOWN | ||
| 41 | |||
| 42 | |||
| 43 | #define KC_MEHS MEH_T(KC_S) | ||
| 44 | #define KC_MEHL MEH_T(KC_L) | ||
| 45 | #define KC_GWIN GUI_T(KC_G) | ||
| 46 | #define KC_FCTL CTL_T(KC_F) | ||
| 47 | #define KC_JCTL CTL_T(KC_J) | ||
| 48 | #define KC_ZCTL CTL_T(KC_Z) | ||
| 49 | #define KC_ALTV ALT_T(KC_V) | ||
| 50 | #define KC_ALTN ALT_T(KC_N) | ||
| 51 | #define KC_MEHX ALL_T(KC_X) | ||
| 52 | #define KC_RESET RESET | ||
| 53 | |||
| 54 | //LTs | ||
| 55 | #define KC_MESC LT(_MACROS, KC_ESC) | ||
| 56 | #define KC_DNUM LT(_NUMPAD, KC_D) | ||
| 57 | #define KC_SPFN LT(_NAV,KC_EQL) | ||
| 58 | #define KC_EMAUS LT(_MOUSE,KC_E) | ||
| 59 | #define KC_ENAV LT(_NAV,KC_E) | ||
| 60 | #define KC_INAV LT(_TEXTNAV,KC_I) | ||
| 61 | #define KC_BSPSYM LT(_SYMBOLS,KC_BSPACE) | ||
| 62 | #define KC_ENTSYM LT(_SYMBOLS,KC_ENTER) | ||
| 63 | #define KC_CLNMAUS LT(_MOUSE,KC_SCOLON) | ||
| 64 | |||
| 65 | #define KC_FUNC TT(_FUNCTION) | ||
| 66 | |||
| 67 | //TAP DANCE | ||
| 68 | #define KC_F6F7 TD(F6F7) | ||
| 69 | #define KC_ALF4 TD(ALTF4) | ||
| 70 | #define KC_TTT TD(TTT) | ||
| 71 | #define KC_ENHM TD(HOME_END) | ||
| 72 | #define KC_CLPS TD(CALC_PRINTSCREEN) | ||
| 73 | |||
| 74 | |||
| 75 | #define KC_INCL M(0) | ||
| 76 | #define KC_PULL M(1) | ||
| 77 | #define KC_PUSH M(2) | ||
| 78 | #define KC_SCAP M(3) | ||
| 79 | #define KC_SCOF M(4) | ||
| 80 | #define KC_CAD LALT(LCTL(KC_DEL)) | ||
| 81 | |||
| 82 | #define LONGPRESS_DELAY 150 | ||
| 83 | //#define LAYER_TOGGLE_DELAY 300 | ||
| 84 | |||
| 85 | // Fillers to make layering more clear | ||
| 86 | #define _______ KC_TRNS | ||
| 87 | #define XXXXXXX KC_NO | ||
| 88 | #define KC_ KC_TRNS | ||
| 89 | |||
| 90 | /* TODO: | ||
| 91 | * | ||
| 92 | * DONE: RESET and CAD into macro layer. | ||
| 93 | * DONE: WINUP AND WINDOWN in NAV layer | ||
| 94 | * DONE: Get rid of caps layer. not sure what it is even for. | ||
| 95 | * DONE: LMEH | ||
| 96 | * DONE: plus, divide, multiply on left hand for num layer | ||
| 97 | * DONE: F1 - F12 on a layer toggle (not a temp toggle but a one shot or something) | ||
| 98 | * DONE: Volume, page up and down for mouse layer. | ||
| 99 | * DONE: Add full user files - without using anything. | ||
| 100 | * DONE: Insert, ctrl delete | ||
| 101 | * DONE: Home and End | ||
| 102 | * DONE: Printscreen | ||
| 103 | |||
| 104 | * Easier way to open new terminal (instead of alt + F2) | ||
| 105 | * Intellij/text navigation layer (ctrl delete could be here). | ||
| 106 | * Macro for "System.exit(0)" probably macro layer and "c" | ||
| 107 | * Some sort of tap dance for comma, H, right pinky, and possibly other corners. | ||
| 108 | * Something more with the right hand. not sure what. | ||
| 109 | * Mouse: Left scroll, right scroll | ||
| 110 | * Passwords and any other macros. | ||
| 111 | * LED for control | ||
| 112 | * All modifiers reset | ||
| 113 | * Russain layer | ||
| 114 | * Hebrew layer | ||
| 115 | * Get rid of stupid git pull and push macros. | ||
| 116 | * | ||
| 117 | */ | ||
| 118 | |||
| 119 | //Tap dance enums | ||
| 120 | enum { | ||
| 121 | F12ETAPS = 0, | ||
| 122 | CALCCOMP, | ||
| 123 | ALTF4, | ||
| 124 | F6F7, | ||
| 125 | TTT, | ||
| 126 | HOME_END, | ||
| 127 | CALC_PRINTSCREEN | ||
| 128 | }; | ||
| 129 | |||
| 130 | static xtap ttt_state = { | ||
| 131 | .is_press_action = true, | ||
| 132 | .state = 0 | ||
| 133 | }; | ||
| 134 | |||
| 135 | |||
| 136 | //Already exists in gordon.c, shouldn't need this anymore | ||
| 137 | /*// To activate SINGLE_HOLD, you will need to hold for 200ms first. | ||
| 138 | // This tap dance favors keys that are used frequently in typing like 'f' | ||
| 139 | int cur_dance (qk_tap_dance_state_t *state) { | ||
| 140 | if (state->count == 1) { | ||
| 141 | if (state->interrupted) { | ||
| 142 | return SINGLE_TAP; | ||
| 143 | } | ||
| 144 | else { | ||
| 145 | if (!state->pressed) return SINGLE_TAP; | ||
| 146 | else return SINGLE_HOLD; | ||
| 147 | } | ||
| 148 | } | ||
| 149 | //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated | ||
| 150 | //with single tap. | ||
| 151 | else if (state->count == 2) { | ||
| 152 | if (state->interrupted) return DOUBLE_SINGLE_TAP; | ||
| 153 | else if (state->pressed) return DOUBLE_HOLD; | ||
| 154 | else return DOUBLE_TAP; | ||
| 155 | } | ||
| 156 | else if ((state->count == 3) && ((state->interrupted) || (!state->pressed))) return TRIPLE_TAP; | ||
| 157 | else if (state->count == 3) return TRIPLE_HOLD; | ||
| 158 | else return 8; //magic number. At some point this method will expand to work for more presses | ||
| 159 | }*/ | ||
| 160 | |||
| 161 | /* "Super tap toggle" | ||
| 162 | * Basically, TT but for two or more layers for a single key. | ||
| 163 | * This particular dance: | ||
| 164 | * Single tap/hold - TT for Function layer | ||
| 165 | * Double tap/hold - TT for Numpad layer | ||
| 166 | * Triple tap/hold - TT for Mouse layer | ||
| 167 | * | ||
| 168 | */ | ||
| 169 | void TTT_finished (qk_tap_dance_state_t *state, void *user_data) { | ||
| 170 | ttt_state.state = cur_dance(state); | ||
| 171 | switch (ttt_state.state) { | ||
| 172 | case SINGLE_TAP: layer_invert(_FUNCTION); break; | ||
| 173 | case SINGLE_HOLD: layer_on(_FUNCTION); break; | ||
| 174 | case DOUBLE_TAP: layer_invert(_NUMPAD); break; | ||
| 175 | case DOUBLE_HOLD: layer_on(_NUMPAD); break; | ||
| 176 | case DOUBLE_SINGLE_TAP: layer_invert(_NUMPAD); break; | ||
| 177 | case TRIPLE_TAP: layer_invert(_MOUSE); break; | ||
| 178 | case TRIPLE_HOLD: layer_on(_MOUSE); break; | ||
| 179 | } | ||
| 180 | } | ||
| 181 | |||
| 182 | void TTT_reset (qk_tap_dance_state_t *state, void *user_data) { | ||
| 183 | switch (ttt_state.state) { | ||
| 184 | case SINGLE_TAP: break; | ||
| 185 | case SINGLE_HOLD: layer_off(_FUNCTION); break; | ||
| 186 | case DOUBLE_TAP: break; | ||
| 187 | case DOUBLE_HOLD: layer_off(_NUMPAD); break; | ||
| 188 | case DOUBLE_SINGLE_TAP: break; | ||
| 189 | case TRIPLE_TAP: break; | ||
| 190 | case TRIPLE_HOLD: layer_off(_MOUSE); break; | ||
| 191 | } | ||
| 192 | ttt_state.state = 0; | ||
| 193 | } | ||
| 194 | |||
| 195 | qk_tap_dance_action_t tap_dance_actions[] = { | ||
| 196 | // simple tap dance | ||
| 197 | [F12ETAPS] = ACTION_TAP_DANCE_DOUBLE(KC_F12,LSFT(LCTL(KC_F10))), | ||
| 198 | [CALCCOMP] = ACTION_TAP_DANCE_DOUBLE(KC_CALCULATOR, KC_MY_COMPUTER), | ||
| 199 | [CALC_PRINTSCREEN] = ACTION_TAP_DANCE_DOUBLE(KC_CALCULATOR, KC_PSCR), | ||
| 200 | [ALTF4] = ACTION_TAP_DANCE_DOUBLE(KC_F4,LALT(KC_F4)), | ||
| 201 | [F6F7] = ACTION_TAP_DANCE_DOUBLE(LSFT(KC_F6), LALT(KC_F7)), | ||
| 202 | [HOME_END] = ACTION_TAP_DANCE_DOUBLE(KC_END, KC_HOME), | ||
| 203 | [TTT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,TTT_finished, TTT_reset), | ||
| 204 | }; | ||
| 205 | |||
| 206 | |||
| 207 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
| 208 | |||
| 209 | [_QWERTY] = KEYMAP( | ||
| 210 | //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. | ||
| 211 | MESC, Q ,CSHW,ENAV, R , T ,SPC , CLPS, Y , U ,INAV, O , P ,TTT, | ||
| 212 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 213 | TAB , A , MEHS,DNUM,FCTL,GWIN,GRAVE, TILD, H ,JCTL, K ,MEHL,CLNMAUS,ENHM, | ||
| 214 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 215 | MINUS,ZCTL,MEHX, C ,ALTV, B ,DELETE, INS ,ALTN, M ,COMM,DOT ,SLSH,UNDS, | ||
| 216 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 217 | LSHIFT,BSPSYM, SPC ,ENTSYM | ||
| 218 | // \------------------+----+----+---/ \---+----+----+-------------------/ | ||
| 219 | ), | ||
| 220 | |||
| 221 | [_NUMPAD] = KEYMAP( | ||
| 222 | //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. | ||
| 223 | , , , ,ASTR, , , , , 7 , 8 , 9 ,ASTR,/**/, | ||
| 224 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 225 | ,MINS,PLUS,/**/,EQUAL, , , , , 4 , 5 , 6 ,PLUS, , | ||
| 226 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 227 | , , , ,SLSH, , , , , 1 , 2 , 3 ,SLSH, , | ||
| 228 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 229 | , , , 0 | ||
| 230 | // \------------------+----+----+---/ \---+----+----+-------------------/ | ||
| 231 | ), | ||
| 232 | |||
| 233 | [_SYMBOLS] = KEYMAP( | ||
| 234 | //,----+----+-----+----+----+----+----. ,----+----+----+----+----+----+----. | ||
| 235 | ,EXLM, AT ,LCBR,RCBR,HASH, , ,CIRC,AMPR,ASTR,LPRN,RPRN,/**/, | ||
| 236 | //|----+----+-----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 237 | ,EXLM,EXLM,LPRN,RPRN , , , , ,DQUO,EQUAL,QUOTE,RCBR, , | ||
| 238 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 239 | ,DOLLAR, PERC,LBRACKET,RBRACKET, , , ,PIPE,BSLASH,PLUS, , , , | ||
| 240 | //|----+----+-----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 241 | UNDS,/**/, ,/**/ | ||
| 242 | // \-------------------+----+----+---/ \---+----+----+-------------------/ | ||
| 243 | ), | ||
| 244 | |||
| 245 | [_FUNCTION] = KEYMAP( | ||
| 246 | //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. | ||
| 247 | F6F7 ,F1 ,F2 ,F3 ,ALF4,F5 ,F6 , F7 ,F8 ,F9 ,F10 ,F11 ,F12 ,/**/, | ||
| 248 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 249 | , , , , , , , , , , , , , , | ||
| 250 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 251 | , , , , , , , , , , , , , , | ||
| 252 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 253 | , , , | ||
| 254 | // \------------------+----+----+---/ \---+----+----+-------------------/ | ||
| 255 | ), | ||
| 256 | |||
| 257 | [_NAV] = KEYMAP( | ||
| 258 | //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. | ||
| 259 | , ,SNAPLEFT,/**/,SNAPRIGHT,, , , , , UP , , , , | ||
| 260 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 261 | ,SNAPUP,PREVTAB, ,NEXTTAB,SNAPDOWN,, , ,LEFT,DOWN,RGHT, , , | ||
| 262 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 263 | , ,WORKLEFT, ,WORKRIGHT,, , , ,PGUP,PGDN, , , , | ||
| 264 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 265 | CDEL ,DEL, , | ||
| 266 | // \------------------+----+----+---/ \---+----+----+-------------------/ | ||
| 267 | ), | ||
| 268 | |||
| 269 | [_TEXTNAV] = KEYMAP( | ||
| 270 | //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. | ||
| 271 | , , , , , , , , , ,/**/, , , , | ||
| 272 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 273 | , , , , , , , , , , , , , , | ||
| 274 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 275 | , , , , , , , , , , , , , , | ||
| 276 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 277 | , , , | ||
| 278 | // \------------------+----+----+---/ \---+----+----+-------------------/ | ||
| 279 | ), | ||
| 280 | |||
| 281 | [_MOUSE] = KEYMAP( | ||
| 282 | //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. | ||
| 283 | , , ,MS_UP, , , , , , , UP , , , ,/**/ | ||
| 284 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 285 | , ,MS_LEFT,MS_DOWN,MS_RIGHT, , , , ,LEFT,DOWN,RGHT,/**/, , | ||
| 286 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 287 | , , , , , , , , , , , , , , | ||
| 288 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 289 | ,MS_BTN1 ,MS_BTN2 , | ||
| 290 | // \------------------+----+----+---/ \---+----+----+-------------------/ | ||
| 291 | ), | ||
| 292 | |||
| 293 | |||
| 294 | [_MACROS] = KEYMAP( | ||
| 295 | //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. | ||
| 296 | /**/,RESET,SECRET_2,SECRET_3, , , ,SYSTEM_SLEEP, , ,INCL, , , , | ||
| 297 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 298 | CAD ,SECRET_1, , , , , , , , , , , , , | ||
| 299 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 300 | SCAP, , , , , , , , , , , , ,SCAP, | ||
| 301 | //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| | ||
| 302 | , , , | ||
| 303 | // \------------------+----+----+---/ \---+----+----+-------------------/ | ||
| 304 | ) | ||
| 305 | |||
| 306 | }; | ||
| 307 | |||
| 308 | |||
| 309 | const uint16_t PROGMEM fn_actions[] = { | ||
| 310 | |||
| 311 | }; | ||
| 312 | |||
| 313 | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||
| 314 | { | ||
| 315 | switch(id) { | ||
| 316 | /* include some kind of library or header */ | ||
| 317 | case 0: | ||
| 318 | if (record->event.pressed) { | ||
| 319 | SEND_STRING("#include <>"); | ||
| 320 | return MACRO( T(LEFT), END); | ||
| 321 | } | ||
| 322 | break; | ||
| 323 | case 1: | ||
| 324 | if (record->event.pressed) { | ||
| 325 | SEND_STRING("git pull"); | ||
| 326 | return MACRO( T(ENT), END ); | ||
| 327 | } | ||
| 328 | break; | ||
| 329 | case 2: | ||
| 330 | if (record->event.pressed){ | ||
| 331 | SEND_STRING("git push"); | ||
| 332 | return MACRO( T(ENT), END ); | ||
| 333 | } | ||
| 334 | break; | ||
| 335 | case 3: | ||
| 336 | if (record->event.pressed){ | ||
| 337 | // layer_on(_CAPS); | ||
| 338 | // register_code(KC_CAPSLOCK); | ||
| 339 | // unregister_code(KC_CAPSLOCK); | ||
| 340 | } | ||
| 341 | break; | ||
| 342 | case 4: | ||
| 343 | if (record->event.pressed){ | ||
| 344 | // layer_off(_CAPS); | ||
| 345 | // register_code(KC_CAPSLOCK); | ||
| 346 | // unregister_code(KC_CAPSLOCK); | ||
| 347 | } | ||
| 348 | break; | ||
| 349 | } | ||
| 350 | return MACRO_NONE; | ||
| 351 | }; | ||
| 352 | |||
| 353 | |||
| 354 | void matrix_scan_user(void) { | ||
| 355 | uint8_t layer = biton32(layer_state); | ||
| 356 | |||
| 357 | switch (layer) { | ||
| 358 | case _QWERTY: | ||
| 359 | set_led_green; | ||
| 360 | break; | ||
| 361 | case _MOUSE: | ||
| 362 | set_led_yellow; | ||
| 363 | break; | ||
| 364 | case _NUMPAD: | ||
| 365 | set_led_blue; | ||
| 366 | break; | ||
| 367 | case _SYMBOLS: | ||
| 368 | set_led_red; | ||
| 369 | break; | ||
| 370 | case _NAV: | ||
| 371 | set_led_magenta; | ||
| 372 | break; | ||
| 373 | case _MACROS: | ||
| 374 | set_led_green; | ||
| 375 | _delay_ms(45); | ||
| 376 | set_led_red; | ||
| 377 | _delay_ms(45); | ||
| 378 | break; | ||
| 379 | case _FUNCTION: | ||
| 380 | set_led_green; | ||
| 381 | _delay_ms(45); | ||
| 382 | set_led_blue; | ||
| 383 | _delay_ms(45); | ||
| 384 | break; | ||
| 385 | default: | ||
| 386 | set_led_green; | ||
| 387 | break; | ||
| 388 | } | ||
| 389 | }; | ||
diff --git a/keyboards/ergodox_infinity/keymaps/gordon/keymap.c b/keyboards/ergodox_infinity/keymaps/gordon/keymap.c new file mode 100644 index 000000000..7e3e51cdd --- /dev/null +++ b/keyboards/ergodox_infinity/keymaps/gordon/keymap.c | |||
| @@ -0,0 +1,315 @@ | |||
| 1 | #include QMK_KEYBOARD_H | ||
| 2 | #include "debug.h" | ||
| 3 | #include "action_layer.h" | ||
| 4 | #include "version.h" | ||
| 5 | #include "process_keycode/process_tap_dance.h" | ||
| 6 | #include "gordon.h" | ||
| 7 | |||
| 8 | #include "keymap_german.h" | ||
| 9 | |||
| 10 | #include "keymap_nordic.h" | ||
| 11 | |||
| 12 | |||
| 13 | #define TLSLSH M(TIL_SLASH) | ||
| 14 | #define F1_F13 TD(F1F13) | ||
| 15 | #define F2_F14 TD(F2F14) | ||
| 16 | #define F5_F15 TD(F5F15) | ||
| 17 | #define F4_ALTF4 TD(ALTF4) | ||
| 18 | #define END_ESC TD(ENDESC) | ||
| 19 | #define SHF6_AF7 TD(F6F7) | ||
| 20 | #define F12_RUN TD(F12ETAPS) | ||
| 21 | #define COMMA_TD TD(COMMA) | ||
| 22 | |||
| 23 | enum custom_keycodes { | ||
| 24 | PLACEHOLDER = SAFE_RANGE, // can always be here | ||
| 25 | EPRM, | ||
| 26 | VRSN, | ||
| 27 | RGB_SLD, | ||
| 28 | }; | ||
| 29 | |||
| 30 | //Tap dance enums | ||
| 31 | enum { | ||
| 32 | F12TAP = 0, | ||
| 33 | F12ETAPS, | ||
| 34 | CALCCOMP, | ||
| 35 | REFRESH, //send R, or Control+R if double tapped. | ||
| 36 | ENDESC, | ||
| 37 | XESC, //'quad function'. x, control, escape, alt | ||
| 38 | ALY2, //'quad function': a, Hyper, ctrl+a, layer 2 | ||
| 39 | PRLOCK, | ||
| 40 | F6F7, // Shift F6 or Alt F7 | ||
| 41 | TABCOMBO, | ||
| 42 | FCTRL, | ||
| 43 | F3D, | ||
| 44 | ALTF4, | ||
| 45 | COMMA, | ||
| 46 | AT, | ||
| 47 | HTAB, | ||
| 48 | F1F13, | ||
| 49 | F2F14, | ||
| 50 | F5F15 | ||
| 51 | }; | ||
| 52 | |||
| 53 | |||
| 54 | |||
| 55 | // Custom tapping terms for each key. | ||
| 56 | // Requires changes to action_taping.c | ||
| 57 | /* uint16_t get_tapping_term(keyevent_t* event) { | ||
| 58 | uint16_t keycode = keymap_key_to_keycode(layer_switch_get_layer(event->key), event->key); | ||
| 59 | if (keycode == LT(3,KC_E) ) { | ||
| 60 | return TAPPING_TERM + 50; | ||
| 61 | } | ||
| 62 | return TAPPING_TERM; | ||
| 63 | } */ | ||
| 64 | |||
| 65 | |||
| 66 | // Tap Dance Definitions | ||
| 67 | qk_tap_dance_action_t tap_dance_actions[] = { | ||
| 68 | // simple tap dance | ||
| 69 | [F12ETAPS] = ACTION_TAP_DANCE_DOUBLE(KC_F12,LSFT(LCTL(KC_F10))), | ||
| 70 | [REFRESH] = ACTION_TAP_DANCE_DOUBLE(KC_R,LCTL(KC_R)), | ||
| 71 | [ENDESC] = ACTION_TAP_DANCE_DOUBLE(KC_END, KC_ESC), | ||
| 72 | [CALCCOMP] = ACTION_TAP_DANCE_DOUBLE(KC_CALCULATOR, KC_MY_COMPUTER), | ||
| 73 | [ALTF4] = ACTION_TAP_DANCE_DOUBLE(KC_F4,LALT(KC_F4)), | ||
| 74 | [F6F7] = ACTION_TAP_DANCE_DOUBLE(LSFT(KC_F6), LALT(KC_F7)), | ||
| 75 | [F1F13] = ACTION_TAP_DANCE_DOUBLE(KC_F1, KC_F13), | ||
| 76 | [F2F14] = ACTION_TAP_DANCE_DOUBLE(KC_F2, KC_F14), | ||
| 77 | [F5F15] = ACTION_TAP_DANCE_DOUBLE(KC_F5, KC_F15), | ||
| 78 | [TABCOMBO] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tab_finished, tab_reset), | ||
| 79 | [F3D] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, bt_finished, bt_reset), | ||
| 80 | [COMMA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, comma_finished, comma_reset), | ||
| 81 | [HTAB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,h_finished, h_reset) | ||
| 82 | }; | ||
| 83 | |||
| 84 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
| 85 | |||
| 86 | |||
| 87 | //**************************FIRST LAYER - LAYER ZERO ************************************** | ||
| 88 | [_QWERTY] = KEYMAP( | ||
| 89 | |||
| 90 | SHF6_AF7, F1_F13, F2_F14, TD(F3D), F4_ALTF4, F5_F15, KC_F11, | ||
| 91 | ________, KC_Q, CTR_SH_W, NAV_E, CTR_AL_R, KC_T, PRINTSCR, | ||
| 92 | KC_TAB, KC_A, MEH_S, NUMPAD_D, CTRL_F, WIN_G, | ||
| 93 | ALT_SHFT, CTRL_Z, HYPER_X, MOUSE_C, ALT_V, KC_B, TT(_MOUSE), | ||
| 94 | KC_MINUS, KC_GRAVE, KC_DELETE, KC_LEFT, KC_RIGHT, | ||
| 95 | |||
| 96 | KC_INSERT, KC_DELETE, | ||
| 97 | ALT_HOME, | ||
| 98 | KC_LSHIFT, SYMB_BSP, END_ESC, | ||
| 99 | |||
| 100 | F12_RUN, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, TD(CALCCOMP), | ||
| 101 | ________, KC_Y, KC_U, KC_I, KC_O, KC_P, ________, | ||
| 102 | WIN_H, CTRL_J, KC_K, MEH_L, COL_MOUS, ________, | ||
| 103 | KC_LEAD, KC_N, ALT_M, COMMA_TD, HYPE_DOT, KC_SLASH, TD(TABCOMBO), | ||
| 104 | KC_UP, KC_DOWN, KC_ESC, KC_TILD, KC_UNDS, | ||
| 105 | |||
| 106 | KC_ESCAPE, KC_DELETE, | ||
| 107 | ALT_T(KC_PGUP), | ||
| 108 | RCTL_T(KC_PGDOWN), LT(_NAV,KC_ENTER), SPAC_SYM), | ||
| 109 | |||
| 110 | |||
| 111 | //**************************SYMBOLS LAYER************************** | ||
| 112 | [_SYMBOLS] = KEYMAP( | ||
| 113 | ________, ________, ________, ________, ________, ________, ________, | ||
| 114 | ________, TLSLSH, KC_AT, KC_LCBR, KC_RCBR, KC_CIRC, ________, | ||
| 115 | ________, KC_EXLM, KC_PIPE, KC_LPRN, KC_RPRN, M(DEREF), | ||
| 116 | ________,KC_DOLLAR, KC_PERC, LSQUIGLY, RSQUIGLY, ________, ________, | ||
| 117 | ________, M(TICK3), ________, ________, ________, | ||
| 118 | |||
| 119 | ________,________, | ||
| 120 | ________, | ||
| 121 | ________,________,________, | ||
| 122 | |||
| 123 | |||
| 124 | ________, ________, ________, ________, ________, ________, NUMLOCK, | ||
| 125 | ________, TLSLSH, KC_PIPE, KC_PLUS, KC_AMPR, ________, CAPLOCK, | ||
| 126 | M(EQRIGHT), KC_DQUO, KC_EQUAL, KC_QUOTE,KC_SCOLON, ________, | ||
| 127 | ________, KC_PIPE, BK_SLASH, ASTERSK, KC_DOT, KC_SLASH, ________, | ||
| 128 | ________,________,________,M(TILD3),________, | ||
| 129 | ________,________, | ||
| 130 | ________, | ||
| 131 | ________,________,________), | ||
| 132 | |||
| 133 | //**************************MOUSE MOVEMENT LAYER************************** | ||
| 134 | [_MOUSE] = KEYMAP(RESET,________,________,________,________,________,________, | ||
| 135 | RESET,________,________,KC_MS_UP,________,KC_MS_WH_UP,CALTDEL, | ||
| 136 | ________,________,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_MS_WH_DOWN, | ||
| 137 | KC_SECRET_1,________,HYPR(KC_F13),________,HYPR(KC_F14),KC_SECRET_2,________, | ||
| 138 | ________,________,HYPR(KC_F15),KC_MS_WH_LEFT,KC_MS_WH_RIGHT, | ||
| 139 | |||
| 140 | ________,________, | ||
| 141 | ________, | ||
| 142 | KC_MS_BTN1,KC_MS_BTN2,________, | ||
| 143 | |||
| 144 | |||
| 145 | ________,________,________,________,________,________,________, | ||
| 146 | KC_MS_WH_UP,________,________,KC_UP,________,________,________, | ||
| 147 | ________,KC_LEFT,KC_DOWN,KC_RIGHT,________,________, | ||
| 148 | KC_MS_WH_DOWN,________,KC_PGUP,KC_PGDOWN,KC_MEDIA_NEXT_TRACK,________,________, | ||
| 149 | KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_AUDIO_MUTE,KC_MEDIA_PLAY_PAUSE,________, | ||
| 150 | ________,________, | ||
| 151 | ________, | ||
| 152 | ________,________,KC_WWW_BACK), | ||
| 153 | |||
| 154 | |||
| 155 | |||
| 156 | |||
| 157 | //**************************WINDOWS NAVIGATION LAYER************************** | ||
| 158 | |||
| 159 | [_NAV] = KEYMAP(________,________,________,________,________,________,________, | ||
| 160 | ________,________,SNAPLEFT,________,SNAPRGHT,LALT(KC_LEFT),________, | ||
| 161 | ________,LCTL(KC_W),PREVTAB,LGUI(KC_D),NEXTTAB,________, | ||
| 162 | ________,________,WORKLEFT,________,WORKRIGHT,________,________, | ||
| 163 | ________,________,________,________,________, | ||
| 164 | |||
| 165 | ________,________, | ||
| 166 | ________, | ||
| 167 | ________,________,________, | ||
| 168 | |||
| 169 | |||
| 170 | ________,________,________,________,________,________,________, | ||
| 171 | ________,________,SNAPUP ,KC_UP ,SNAPDOWN,________,________, | ||
| 172 | ________,KC_LEFT ,KC_DOWN ,KC_RIGHT,________,________, | ||
| 173 | ________,________,________,________,________,________,________, | ||
| 174 | ________,________,________,________,________, | ||
| 175 | |||
| 176 | |||
| 177 | ________,________, | ||
| 178 | ________, | ||
| 179 | ________,________,________), | ||
| 180 | |||
| 181 | //****************************NUMPAD LAYER**************************** | ||
| 182 | [_NUMPAD] = KEYMAP(________,________,________,________,________,________,________, | ||
| 183 | ________,________,________,________,________,________,________, | ||
| 184 | ________,________,________,________,________,________, | ||
| 185 | ________,________,________,________,________,________,________, | ||
| 186 | ________,________,________,________,________, | ||
| 187 | |||
| 188 | ________,________, | ||
| 189 | ________, | ||
| 190 | ________,________,________, | ||
| 191 | |||
| 192 | BL_TOGG ,BL_STEP ,________,________,________,________,________, | ||
| 193 | ________,________,KC_7 ,KC_8 ,KC_9 ,________,________, | ||
| 194 | ________,KC_4 ,KC_5 ,KC_6 ,________,________, | ||
| 195 | ________,________,KC_1 ,KC_2 ,KC_3 ,________,________, | ||
| 196 | KC_0 ,KC_0 , KC_DOT ,________,________, | ||
| 197 | |||
| 198 | ________,________, | ||
| 199 | ________, | ||
| 200 | ________,________,KC_0), | ||
| 201 | //****************************TEXT/INTELLIJ NAVIGATION LAYER**************************** | ||
| 202 | [_TEXTNAV] = KEYMAP(________,________,________,________,________,________,________, | ||
| 203 | ________,MEH(KC_Q),LSFT(KC_ESCAPE),MEH(KC_D),MEH(KC_2),LALT(LSFT(KC_UP)),________, | ||
| 204 | ________,LALT(KC_F7),LCTL(KC_LEFT),LCTL(KC_B),LCTL(KC_RIGHT),LALT(LSFT(KC_DOWN)), | ||
| 205 | ________,________,________,LCTL(LSFT(KC_COMMA)),MEH(KC_DOT),LALT(KC_MS_WH_UP),________,________,________,________,________,________,________,________,________,________,LCTL(KC_DELETE),________,LALT(LSFT(KC_F9)),________,________,________,________,________,________,________,MEH(KC_5),LALT(LSFT(KC_Z)),________,LALT(KC_Z),________,________,________,LCTL(LSFT(KC_LEFT)),LALT(LCTL(KC_S)),LCTL(LSFT(KC_RIGHT)),LCTL(LSFT(KC_COMMA)),________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,________) | ||
| 206 | }; | ||
| 207 | |||
| 208 | const uint16_t PROGMEM fn_actions[] = { | ||
| 209 | [1] = ACTION_LAYER_TAP_TOGGLE(1) | ||
| 210 | }; | ||
| 211 | |||
| 212 | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||
| 213 | { | ||
| 214 | switch(id) { | ||
| 215 | case INFOQM: { | ||
| 216 | if (record->event.pressed) { | ||
| 217 | SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); | ||
| 218 | } | ||
| 219 | break; | ||
| 220 | } | ||
| 221 | |||
| 222 | case TIL_SLASH: { | ||
| 223 | if (record->event.pressed) { | ||
| 224 | SEND_STRING ("~/."); | ||
| 225 | } | ||
| 226 | break; | ||
| 227 | } | ||
| 228 | |||
| 229 | case DEREF: { | ||
| 230 | if (record->event.pressed) { | ||
| 231 | SEND_STRING ("->"); | ||
| 232 | } | ||
| 233 | break; | ||
| 234 | } | ||
| 235 | |||
| 236 | case EQRIGHT: { | ||
| 237 | if (record->event.pressed) { | ||
| 238 | SEND_STRING ("=>"); | ||
| 239 | } | ||
| 240 | break; | ||
| 241 | } | ||
| 242 | |||
| 243 | case TICK3: { | ||
| 244 | if (record->event.pressed) { | ||
| 245 | SEND_STRING ("```"); | ||
| 246 | } | ||
| 247 | break; | ||
| 248 | } | ||
| 249 | |||
| 250 | case TILD3: { | ||
| 251 | if (record->event.pressed) { | ||
| 252 | SEND_STRING ("~~~"); | ||
| 253 | } | ||
| 254 | break; | ||
| 255 | } | ||
| 256 | |||
| 257 | case ALTTAB_START: { | ||
| 258 | register_code(KC_LALT); | ||
| 259 | layer_on(8); | ||
| 260 | } | ||
| 261 | |||
| 262 | case ALTTAB_END: { | ||
| 263 | unregister_code(KC_LALT); | ||
| 264 | layer_off(8); | ||
| 265 | } | ||
| 266 | |||
| 267 | |||
| 268 | |||
| 269 | } | ||
| 270 | return MACRO_NONE; | ||
| 271 | }; | ||
| 272 | |||
| 273 | void matrix_scan_user(void) { | ||
| 274 | |||
| 275 | uint8_t layer = biton32(layer_state); | ||
| 276 | |||
| 277 | ergodox_board_led_on(); | ||
| 278 | ergodox_led_all_on(); | ||
| 279 | |||
| 280 | ergodox_board_led_off(); | ||
| 281 | ergodox_right_led_1_off(); | ||
| 282 | ergodox_right_led_2_off(); | ||
| 283 | ergodox_right_led_3_off(); | ||
| 284 | switch (layer) { | ||
| 285 | case _SYMBOLS: | ||
| 286 | ergodox_right_led_1_on(); | ||
| 287 | break; | ||
| 288 | case _MOUSE: | ||
| 289 | ergodox_right_led_2_on(); | ||
| 290 | break; | ||
| 291 | case _NUMPAD: | ||
| 292 | ergodox_right_led_3_on(); | ||
| 293 | break; | ||
| 294 | case _NAV: | ||
| 295 | ergodox_right_led_1_on(); | ||
| 296 | ergodox_right_led_2_on(); | ||
| 297 | break; | ||
| 298 | case 5: | ||
| 299 | ergodox_right_led_1_on(); | ||
| 300 | ergodox_right_led_3_on(); | ||
| 301 | break; | ||
| 302 | case 6: | ||
| 303 | ergodox_right_led_2_on(); | ||
| 304 | ergodox_right_led_3_on(); | ||
| 305 | break; | ||
| 306 | case 7: | ||
| 307 | ergodox_right_led_1_on(); | ||
| 308 | ergodox_right_led_2_on(); | ||
| 309 | ergodox_right_led_3_on(); | ||
| 310 | break; | ||
| 311 | default: | ||
| 312 | break; | ||
| 313 | } | ||
| 314 | |||
| 315 | }; | ||
diff --git a/users/gordon/gordon.c b/users/gordon/gordon.c new file mode 100644 index 000000000..056012a21 --- /dev/null +++ b/users/gordon/gordon.c | |||
| @@ -0,0 +1,275 @@ | |||
| 1 | #include "gordon.h" | ||
| 2 | #include "quantum.h" | ||
| 3 | #include "action.h" | ||
| 4 | #include "process_keycode/process_tap_dance.h" | ||
| 5 | |||
| 6 | #if (__has_include("secret.h")) | ||
| 7 | #include "secret.h" | ||
| 8 | #else | ||
| 9 | const char secret[][64] = { | ||
| 10 | "test1", | ||
| 11 | "test2", | ||
| 12 | "test3", | ||
| 13 | "test4", | ||
| 14 | "test5" | ||
| 15 | }; | ||
| 16 | #endif | ||
| 17 | |||
| 18 | |||
| 19 | |||
| 20 | |||
| 21 | void register_hyper (void) { //Helper function to invoke Hyper | ||
| 22 | register_code (KC_LSFT); | ||
| 23 | register_code (KC_LCTL); | ||
| 24 | register_code (KC_LALT); | ||
| 25 | register_code (KC_LGUI); | ||
| 26 | } | ||
| 27 | void unregister_hyper (void) { //Helper function to invoke Hyper | ||
| 28 | unregister_code (KC_LSFT); | ||
| 29 | unregister_code (KC_LCTL); | ||
| 30 | unregister_code (KC_LALT); | ||
| 31 | unregister_code (KC_LGUI); | ||
| 32 | } | ||
| 33 | |||
| 34 | void register_ctrl_a (void) { | ||
| 35 | register_code(KC_LCTL); | ||
| 36 | register_code(KC_A); | ||
| 37 | } | ||
| 38 | |||
| 39 | void unregister_ctrl_a (void) { | ||
| 40 | unregister_code(KC_LCTL); | ||
| 41 | unregister_code(KC_A); | ||
| 42 | } | ||
| 43 | |||
| 44 | void register_alt_f7 (void) { | ||
| 45 | register_code (KC_LALT); | ||
| 46 | register_code (KC_F7); | ||
| 47 | } | ||
| 48 | |||
| 49 | void unregister_alt_f7 (void) { | ||
| 50 | unregister_code (KC_LALT); | ||
| 51 | unregister_code (KC_F7); | ||
| 52 | } | ||
| 53 | |||
| 54 | void register_shift_f6 (void) { | ||
| 55 | register_code (KC_LSFT); | ||
| 56 | register_code (KC_F6); | ||
| 57 | } | ||
| 58 | |||
| 59 | void unregister_shift_f6 (void) { | ||
| 60 | unregister_code (KC_LSFT); | ||
| 61 | unregister_code (KC_F6); | ||
| 62 | } | ||
| 63 | |||
| 64 | void register_ctrl_shift (void) { | ||
| 65 | register_code (KC_LSFT); | ||
| 66 | register_code (KC_LCTRL); | ||
| 67 | } | ||
| 68 | |||
| 69 | void unregister_ctrl_shift (void) { | ||
| 70 | unregister_code (KC_LSFT); | ||
| 71 | unregister_code (KC_LCTRL); | ||
| 72 | } | ||
| 73 | |||
| 74 | void register_alt_shift (void) { | ||
| 75 | register_code (KC_LSFT); | ||
| 76 | register_code (KC_LALT); | ||
| 77 | } | ||
| 78 | |||
| 79 | void unregister_alt_shift (void) { | ||
| 80 | unregister_code (KC_LSFT); | ||
| 81 | unregister_code (KC_LALT); | ||
| 82 | } | ||
| 83 | |||
| 84 | // To activate SINGLE_HOLD, you will need to hold for 200ms first. | ||
| 85 | // This tap dance favors keys that are used frequently in typing like 'f' | ||
| 86 | int cur_dance (qk_tap_dance_state_t *state) { | ||
| 87 | if (state->count == 1) { | ||
| 88 | //If count = 1, and it has been interrupted - it doesn't matter if it is pressed or not: Send SINGLE_TAP | ||
| 89 | if (state->interrupted) { | ||
| 90 | // if (!state->pressed) return SINGLE_TAP; | ||
| 91 | //need "permissive hold" here. | ||
| 92 | // else return SINsGLE_HOLD; | ||
| 93 | //If the interrupting key is released before the tap-dance key, then it is a single HOLD | ||
| 94 | //However, if the tap-dance key is released first, then it is a single TAP | ||
| 95 | //But how to get access to the state of the interrupting key???? | ||
| 96 | return SINGLE_TAP; | ||
| 97 | } | ||
| 98 | else { | ||
| 99 | if (!state->pressed) return SINGLE_TAP; | ||
| 100 | else return SINGLE_HOLD; | ||
| 101 | } | ||
| 102 | } | ||
| 103 | //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated | ||
| 104 | //with single tap. | ||
| 105 | else if (state->count == 2) { | ||
| 106 | if (state->interrupted) return DOUBLE_SINGLE_TAP; | ||
| 107 | else if (state->pressed) return DOUBLE_HOLD; | ||
| 108 | else return DOUBLE_TAP; | ||
| 109 | } | ||
| 110 | else if ((state->count == 3) && ((state->interrupted) || (!state->pressed))) return TRIPLE_TAP; | ||
| 111 | else if (state->count == 3) return TRIPLE_HOLD; | ||
| 112 | else return 8; //magic number. At some point this method will expand to work for more presses | ||
| 113 | } | ||
| 114 | |||
| 115 | //This works well if you want this key to work as a "fast modifier". It favors being held over being tapped. | ||
| 116 | int hold_cur_dance (qk_tap_dance_state_t *state) { | ||
| 117 | if (state->count == 1) { | ||
| 118 | if (state->interrupted) { | ||
| 119 | if (!state->pressed) return SINGLE_TAP; | ||
| 120 | else return SINGLE_HOLD; | ||
| 121 | } | ||
| 122 | else { | ||
| 123 | if (!state->pressed) return SINGLE_TAP; | ||
| 124 | else return SINGLE_HOLD; | ||
| 125 | } | ||
| 126 | } | ||
| 127 | //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated | ||
| 128 | //with single tap. | ||
| 129 | else if (state->count == 2) { | ||
| 130 | if (state->pressed) return DOUBLE_HOLD; | ||
| 131 | else return DOUBLE_TAP; | ||
| 132 | } | ||
| 133 | else if (state->count == 3) { | ||
| 134 | if (!state->pressed) return TRIPLE_TAP; | ||
| 135 | else return TRIPLE_HOLD; | ||
| 136 | } | ||
| 137 | else return 8; //magic number. At some point this method will expand to work for more presses | ||
| 138 | } | ||
| 139 | |||
| 140 | |||
| 141 | static xtap htap_state = { | ||
| 142 | .is_press_action = true, | ||
| 143 | .state = 0 | ||
| 144 | }; | ||
| 145 | |||
| 146 | void h_finished (qk_tap_dance_state_t *state, void *user_data) { | ||
| 147 | htap_state.state = cur_dance(state); | ||
| 148 | switch (htap_state.state) { | ||
| 149 | case SINGLE_TAP: register_code(KC_H); break; | ||
| 150 | case SINGLE_HOLD: layer_on(8); register_code(KC_LALT); break; | ||
| 151 | case DOUBLE_TAP: layer_invert(8); register_code(KC_LALT); break; | ||
| 152 | // case DOUBLE_HOLD: register_code(KC_LALT); | ||
| 153 | case DOUBLE_SINGLE_TAP: register_code(KC_H);unregister_code(KC_H);register_code(KC_H); | ||
| 154 | } | ||
| 155 | } | ||
| 156 | |||
| 157 | void h_reset (qk_tap_dance_state_t *state, void *user_data) { | ||
| 158 | switch (htap_state.state) { | ||
| 159 | case SINGLE_TAP: unregister_code(KC_H); break; | ||
| 160 | case SINGLE_HOLD: layer_off(8); unregister_code(KC_LALT); break; | ||
| 161 | case DOUBLE_TAP: unregister_code(KC_LALT);break; | ||
| 162 | // case DOUBLE_HOLD: unregister_code(KC_LALT); | ||
| 163 | case DOUBLE_SINGLE_TAP: unregister_code(KC_H); | ||
| 164 | } | ||
| 165 | htap_state.state = 0; | ||
| 166 | } | ||
| 167 | |||
| 168 | |||
| 169 | /**************** QUAD FUNCTION FOR TAB ****************/ | ||
| 170 | // TAB, ALT + SHIFT, TAB TAB, CTRL + SHIFT | ||
| 171 | static xtap tab_state = { | ||
| 172 | .is_press_action = true, | ||
| 173 | .state = 0 | ||
| 174 | }; | ||
| 175 | |||
| 176 | void tab_finished (qk_tap_dance_state_t *state, void *user_data) { | ||
| 177 | tab_state.state = cur_dance(state); | ||
| 178 | switch (tab_state.state) { | ||
| 179 | case SINGLE_TAP: register_code(KC_TAB); break; //send tab on single press | ||
| 180 | case SINGLE_HOLD: register_ctrl_shift(); break; | ||
| 181 | case DOUBLE_HOLD: register_alt_shift(); break; //alt shift on single hold | ||
| 182 | case DOUBLE_TAP: register_code(KC_TAB); unregister_code(KC_TAB); register_code(KC_TAB); break; //tab tab | ||
| 183 | case TRIPLE_TAP: register_code(KC_LSHIFT) ;register_code(KC_ESC); break; | ||
| 184 | case TRIPLE_HOLD: register_code(KC_LSHIFT); register_code(KC_LGUI); break; | ||
| 185 | } | ||
| 186 | } | ||
| 187 | |||
| 188 | void tab_reset (qk_tap_dance_state_t *state, void *user_data) { | ||
| 189 | switch (tab_state.state) { | ||
| 190 | case SINGLE_TAP: unregister_code(KC_TAB); break; //unregister tab | ||
| 191 | case DOUBLE_HOLD: unregister_alt_shift(); break; //let go of alt shift | ||
| 192 | case DOUBLE_TAP: unregister_code(KC_TAB); break; | ||
| 193 | case SINGLE_HOLD: unregister_ctrl_shift(); break; | ||
| 194 | case TRIPLE_TAP: unregister_code(KC_LSHIFT); unregister_code(KC_ESC); break; | ||
| 195 | case TRIPLE_HOLD: unregister_code(KC_LSHIFT); unregister_code(KC_LGUI); break; | ||
| 196 | } | ||
| 197 | tab_state.state = 0; | ||
| 198 | } | ||
| 199 | /**************** QUAD FUNCTION FOR TAB ****************/ | ||
| 200 | |||
| 201 | //*************** SUPER COMMA *******************// | ||
| 202 | // Assumption: we don't care about trying to hit ,, quickly | ||
| 203 | //*************** SUPER COMMA *******************// | ||
| 204 | static xtap comma_state = { | ||
| 205 | .is_press_action = true, | ||
| 206 | .state = 0 | ||
| 207 | }; | ||
| 208 | |||
| 209 | void comma_finished (qk_tap_dance_state_t *state, void *user_data) { | ||
| 210 | comma_state.state = hold_cur_dance(state); //Use the dance that favors being held | ||
| 211 | switch (comma_state.state) { | ||
| 212 | case SINGLE_TAP: register_code(KC_COMMA); break; | ||
| 213 | case SINGLE_HOLD: layer_on(1); break; //turn on symbols layer | ||
| 214 | case DOUBLE_TAP: layer_invert(4); break; //toggle numbers layer | ||
| 215 | case DOUBLE_HOLD: layer_on(2); break; | ||
| 216 | case TRIPLE_TAP: register_code(KC_CALCULATOR); break; | ||
| 217 | case TRIPLE_HOLD: layer_on(3); | ||
| 218 | } | ||
| 219 | } | ||
| 220 | |||
| 221 | void comma_reset (qk_tap_dance_state_t *state, void *user_data) { | ||
| 222 | switch (comma_state.state) { | ||
| 223 | case SINGLE_TAP: unregister_code(KC_COMMA); break; //unregister comma | ||
| 224 | case SINGLE_HOLD: layer_off(1); break; | ||
| 225 | case DOUBLE_TAP: ;break; | ||
| 226 | case DOUBLE_HOLD: layer_off(2); break; | ||
| 227 | case TRIPLE_TAP: unregister_code(KC_CALCULATOR); break; | ||
| 228 | case TRIPLE_HOLD: layer_off(3); | ||
| 229 | } | ||
| 230 | comma_state.state = 0; | ||
| 231 | } | ||
| 232 | //*************** SUPER COMMA *******************// | ||
| 233 | //*************** SUPER COMMA *******************// | ||
| 234 | |||
| 235 | |||
| 236 | //*************** F3 TAP DANCE *******************// | ||
| 237 | //Good example for accessing multiple layers from the same key. | ||
| 238 | static xtap S1_state = { | ||
| 239 | .is_press_action = true, | ||
| 240 | .state = 0 | ||
| 241 | }; | ||
| 242 | |||
| 243 | void bt_finished (qk_tap_dance_state_t *state, void *user_data) { | ||
| 244 | S1_state.state = cur_dance(state); | ||
| 245 | switch (S1_state.state) { | ||
| 246 | case SINGLE_TAP: register_code(KC_F3); break; | ||
| 247 | case SINGLE_HOLD: layer_on(4); break; | ||
| 248 | case DOUBLE_TAP: layer_invert(4); break; | ||
| 249 | case DOUBLE_HOLD: layer_on(5); break; | ||
| 250 | case DOUBLE_SINGLE_TAP: layer_invert(4); break; | ||
| 251 | } | ||
| 252 | } | ||
| 253 | |||
| 254 | void bt_reset (qk_tap_dance_state_t *state, void *user_data) { | ||
| 255 | switch (S1_state.state) { | ||
| 256 | case SINGLE_TAP: unregister_code(KC_F3); break; | ||
| 257 | case SINGLE_HOLD: layer_off(4); break; | ||
| 258 | case DOUBLE_TAP: break; //already inverted. Don't do anything. | ||
| 259 | case DOUBLE_HOLD: layer_off(5); break; | ||
| 260 | case DOUBLE_SINGLE_TAP: break; | ||
| 261 | } | ||
| 262 | S1_state.state = 0; | ||
| 263 | } | ||
| 264 | |||
| 265 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
| 266 | switch (keycode) { | ||
| 267 | case KC_SECRET_1 ... KC_SECRET_5: | ||
| 268 | if (!record->event.pressed) { | ||
| 269 | send_string(secret[keycode - KC_SECRET_1]); | ||
| 270 | } | ||
| 271 | return false; | ||
| 272 | break; | ||
| 273 | } | ||
| 274 | return true; | ||
| 275 | } \ No newline at end of file | ||
diff --git a/users/gordon/gordon.h b/users/gordon/gordon.h new file mode 100644 index 000000000..548c63049 --- /dev/null +++ b/users/gordon/gordon.h | |||
| @@ -0,0 +1,157 @@ | |||
| 1 | #ifndef GORDON | ||
| 2 | #define GORDON | ||
| 3 | |||
| 4 | #include "quantum.h" | ||
| 5 | #include "process_keycode/process_tap_dance.h" | ||
| 6 | |||
| 7 | |||
| 8 | // Fillers to make layering more clear | ||
| 9 | #define _______ KC_TRNS | ||
| 10 | #define ________ KC_TRNS | ||
| 11 | #define _________ KC_TRNS | ||
| 12 | #define XXXXXXX KC_NO | ||
| 13 | |||
| 14 | // KC codes that are too long | ||
| 15 | #define DOLLAR KC_DOLLAR | ||
| 16 | #define LSQUIGLY KC_LBRACKET | ||
| 17 | #define RSQUIGLY KC_RBRACKET | ||
| 18 | #define NUMLOCK KC_NUMLOCK | ||
| 19 | #define CAPLOCK KC_CAPSLOCK | ||
| 20 | #define BK_SLASH KC_BSLASH | ||
| 21 | #define ASTERSK KC_KP_ASTERISK | ||
| 22 | |||
| 23 | // Navigation | ||
| 24 | #define SNAPLEFT LGUI(KC_LEFT) | ||
| 25 | #define SNAPRGHT LGUI(KC_RIGHT) | ||
| 26 | #define SNAPUP LGUI(KC_UP) | ||
| 27 | #define SNAPDOWN LGUI(KC_DOWN) | ||
| 28 | #define PREVTAB LCTL(LSFT(KC_TAB)) | ||
| 29 | #define NEXTTAB LCTL(KC_TAB) | ||
| 30 | #define WORKRIGHT LCTL(LGUI(KC_RIGHT)) | ||
| 31 | #define WORKLEFT LCTL(LGUI(KC_LEFT)) | ||
| 32 | |||
| 33 | // KC/modifier hold | ||
| 34 | #define CTRL_F CTL_T(KC_F) | ||
| 35 | #define CTRL_J CTL_T(KC_J) | ||
| 36 | #define CTRL_Z CTL_T(KC_Z) | ||
| 37 | #define ALT_V ALT_T(KC_V) | ||
| 38 | #define ALT_M ALT_T(KC_M) | ||
| 39 | #define WIN_G GUI_T(KC_G) | ||
| 40 | #define WIN_H GUI_T(KC_H) | ||
| 41 | #define HYPER_X ALL_T(KC_X) | ||
| 42 | #define HYPE_DOT ALL_T(KC_DOT) | ||
| 43 | #define MEH_S MEH_T(KC_S) | ||
| 44 | #define MEH_L MEH_T(KC_L) | ||
| 45 | #define ALT_HOME ALT_T(KC_HOME) | ||
| 46 | |||
| 47 | |||
| 48 | // KC/Layer Hold | ||
| 49 | #define NAV_E LT(_NAV,KC_E) | ||
| 50 | #define NUMPAD_D LT(_NUMPAD,KC_D) | ||
| 51 | #define MOUSE_C LT(_MOUSE,KC_C) | ||
| 52 | #define SYMB_BSP LT(_SYMBOLS,KC_BSPACE) | ||
| 53 | #define COL_MOUS LT(_MOUSE,KC_SCOLON) | ||
| 54 | #define SPAC_SYM LT(_SYMBOLS,KC_SPACE) | ||
| 55 | |||
| 56 | // Double Modifier ONLY hold | ||
| 57 | #define ALT_SHFT LSFT(KC_LALT) | ||
| 58 | #define CTR_SHFT LSFT(KC_LCTL) | ||
| 59 | |||
| 60 | // KC/Double modifier Hold | ||
| 61 | #define CTR_SH_W MT(MOD_LCTL|MOD_LSFT,KC_W) | ||
| 62 | #define CTR_AL_R MT(MOD_LCTL|MOD_LALT,KC_R) | ||
| 63 | |||
| 64 | //MISC | ||
| 65 | #define PRINTSCR KC_PSCREEN | ||
| 66 | #define CALTDEL LCTL(LALT(KC_DEL)) | ||
| 67 | #define TSKMGR LCTL(LSFT(KC_ESC)) | ||
| 68 | |||
| 69 | |||
| 70 | typedef struct { | ||
| 71 | bool is_press_action; | ||
| 72 | int state; | ||
| 73 | } xtap; | ||
| 74 | |||
| 75 | enum { | ||
| 76 | SINGLE_TAP = 1, | ||
| 77 | SINGLE_HOLD = 2, | ||
| 78 | DOUBLE_TAP = 3, | ||
| 79 | DOUBLE_HOLD = 4, | ||
| 80 | DOUBLE_SINGLE_TAP = 5, //send two single taps | ||
| 81 | TRIPLE_TAP = 6, | ||
| 82 | TRIPLE_HOLD = 7 | ||
| 83 | }; | ||
| 84 | |||
| 85 | enum gordon_layers | ||
| 86 | { | ||
| 87 | _QWERTY = 0, | ||
| 88 | _SYMBOLS, | ||
| 89 | _MOUSE, | ||
| 90 | _NUMPAD, | ||
| 91 | _NAV, | ||
| 92 | _MACROS, | ||
| 93 | _FUNCTION, | ||
| 94 | _TEXTNAV | ||
| 95 | }; | ||
| 96 | |||
| 97 | |||
| 98 | |||
| 99 | void register_hyper (void); | ||
| 100 | void unregister_hyper (void); | ||
| 101 | |||
| 102 | void register_ctrl_a (void); | ||
| 103 | void unregister_ctrl_a (void); | ||
| 104 | |||
| 105 | void register_alt_f7 (void); | ||
| 106 | void unregister_alt_f7 (void); | ||
| 107 | |||
| 108 | void register_shift_f6 (void); | ||
| 109 | void unregister_shift_f6 (void); | ||
| 110 | |||
| 111 | void register_ctrl_shift (void); | ||
| 112 | void unregister_ctrl_shift (void); | ||
| 113 | |||
| 114 | void register_alt_shift (void); | ||
| 115 | void unregister_alt_shift (void); | ||
| 116 | |||
| 117 | int cur_dance (qk_tap_dance_state_t *state); | ||
| 118 | int hold_cur_dance (qk_tap_dance_state_t *state); | ||
| 119 | |||
| 120 | void x_finished (qk_tap_dance_state_t *state, void *user_data); | ||
| 121 | void x_reset (qk_tap_dance_state_t *state, void *user_data); | ||
| 122 | |||
| 123 | void h_finished (qk_tap_dance_state_t *state, void *user_data); | ||
| 124 | void h_reset (qk_tap_dance_state_t *state, void *user_data); | ||
| 125 | |||
| 126 | void tab_finished (qk_tap_dance_state_t *state, void *user_data); | ||
| 127 | void tab_reset (qk_tap_dance_state_t *state, void *user_data); | ||
| 128 | |||
| 129 | void comma_finished (qk_tap_dance_state_t *state, void *user_data); | ||
| 130 | void comma_reset (qk_tap_dance_state_t *state, void *user_data); | ||
| 131 | |||
| 132 | void bt_finished (qk_tap_dance_state_t *state, void *user_data); | ||
| 133 | void bt_reset (qk_tap_dance_state_t *state, void *user_data); | ||
| 134 | |||
| 135 | // Macro Declarations | ||
| 136 | enum { | ||
| 137 | INFOQM, | ||
| 138 | TIL_SLASH, | ||
| 139 | DEREF, | ||
| 140 | EQRIGHT, | ||
| 141 | TILD3, | ||
| 142 | TICK3, | ||
| 143 | ALTTAB_START, | ||
| 144 | ALTTAB_END | ||
| 145 | }; | ||
| 146 | |||
| 147 | enum secret_strings { | ||
| 148 | KC_SECRET_1 = SAFE_RANGE, | ||
| 149 | KC_SECRET_2, | ||
| 150 | KC_SECRET_3, | ||
| 151 | KC_SECRET_4, | ||
| 152 | KC_SECRET_5, | ||
| 153 | }; | ||
| 154 | |||
| 155 | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt); | ||
| 156 | |||
| 157 | #endif \ No newline at end of file | ||
diff --git a/users/gordon/readme.md b/users/gordon/readme.md new file mode 100644 index 000000000..fdea33b67 --- /dev/null +++ b/users/gordon/readme.md | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | Copyright <year> <name> <email> @<github_username> | ||
| 2 | |||
| 3 | This program is free software: you can redistribute it and/or modify | ||
| 4 | it under the terms of the GNU General Public License as published by | ||
| 5 | the Free Software Foundation, either version 2 of the License, or | ||
| 6 | (at your option) any later version. | ||
| 7 | |||
| 8 | This program is distributed in the hope that it will be useful, | ||
| 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | GNU General Public License for more details. | ||
| 12 | |||
| 13 | You should have received a copy of the GNU General Public License | ||
| 14 | along with this program. If not, see <http://www.gnu.org/licenses/>. \ No newline at end of file | ||
diff --git a/users/gordon/rules.mk b/users/gordon/rules.mk new file mode 100644 index 000000000..5dd62c200 --- /dev/null +++ b/users/gordon/rules.mk | |||
| @@ -0,0 +1 @@ | |||
| SRC += gordon.c \ No newline at end of file | |||
