#ifndef GORDON #define GORDON #include "quantum.h" #include "process_keycode/process_tap_dance.h" // Fillers to make layering more clear #define ________ KC_TRNS #define _________ KC_TRNS #define _XXXXXX_ KC_TRNS // KC codes that are too long #define DOLLAR KC_DOLLAR #define LSQUIGLY KC_LBRACKET #define RSQUIGLY KC_RBRACKET #define NUMLOCK KC_NUMLOCK #define CAPLOCK KC_CAPSLOCK #define BK_SLASH KC_BSLASH #define ASTERSK KC_KP_ASTERISK // Navigation #define SNAPLEFT LGUI(KC_LEFT) #define SNAPRGHT LGUI(KC_RIGHT) #define SNAPUP LGUI(KC_UP) #define SNAPDOWN LGUI(KC_DOWN) #define PREVTAB LCTL(LSFT(KC_TAB)) #define NEXTTAB LCTL(KC_TAB) #define WORKRIGHT LCTL(LGUI(KC_RIGHT)) #define WORKLEFT LCTL(LGUI(KC_LEFT)) #define APP_1 LCTL(LGUI(KC_1)) #define APP_2 LCTL(LGUI(KC_2)) #define APP_3 LCTL(LGUI(KC_3)) #define APP_4 LCTL(LGUI(KC_4)) #define APP_5 LCTL(LGUI(KC_5)) #define APP_6 LCTL(LGUI(KC_6)) #define APP_7 LCTL(LGUI(KC_7)) #define APP_8 LCTL(LGUI(KC_8)) // KC/modifier hold #define CTRL_F CTL_T(KC_F) #define CTRL_J CTL_T(KC_J) #define CTRL_Z CTL_T(KC_Z) #define ALT_V ALT_T(KC_V) #define ALT_M ALT_T(KC_M) #define WIN_G GUI_T(KC_G) #define WIN_H GUI_T(KC_H) #define HYPER_X ALL_T(KC_X) #define HYPE_DOT ALL_T(KC_DOT) #define MEH_S MEH_T(KC_S) #define MEH_L MEH_T(KC_L) #define ALT_HOME ALT_T(KC_HOME) // KC/Layer Hold #define NAV_E LT(_NAV,KC_E) #define NUMPAD_D LT(_NUMPAD,KC_D) #define MOUSE_C LT(_MOUSE,KC_C) #define SYMB_BSP LT(_SYMBOLS,KC_BSPACE) #define COL_MOUS LT(_MOUSE,KC_SCOLON) #define SPAC_SYM LT(_SYMBOLS,KC_SPACE) #define SPAC_TXT LT(_TEXTNAV,KC_SPACE) #define APP_SW_I LT(_APPSWITCH,KC_I) #define APP_SW_K LT(_APPSWITCH,KC_K) // #define TLSLSH TIL_SLASH // #define TILDA_3x TILD3 // #define _RESET_ UP_ENTER_RESET // Double Modifier ONLY hold #define ALT_SHFT LSFT(KC_LALT) #define CTR_SHFT LSFT(KC_LCTL) // KC/Double modifier Hold #define CTR_SH_W MT(MOD_LCTL|MOD_LSFT,KC_W) #define CTR_AL_R MT(MOD_LCTL|MOD_LALT,KC_R) #define ALT_SH_R MT(MOD_LSFT|MOD_LALT,KC_R) //MISC #define PRINTSCR KC_PSCREEN #define CALTDEL LCTL(LALT(KC_DEL)) #define TSKMGR LCTL(LSFT(KC_ESC)) typedef struct { bool is_press_action; int state; } xtap; enum { SINGLE_TAP = 1, SINGLE_HOLD = 2, DOUBLE_TAP = 3, DOUBLE_HOLD = 4, DOUBLE_SINGLE_TAP = 5, //send two single taps TRIPLE_TAP = 6, TRIPLE_HOLD = 7 }; //Tap dance enums enum { F12TAP = 0, F12ETAPS, CALCCOMP, REFRESH, //send R, or Control+R if double tapped. ENDESC, XESC, //'quad function'. x, control, escape, alt ALY2, //'quad function': a, Hyper, ctrl+a, layer 2 PRLOCK, F6F7, // Shift F6 or Alt F7 TABCOMBO, FCTRL, F3D, ALTF4, COMMA, AT, HTAB, F1F13, F2F14, F5F15, ENDHOME, Q_ESCAPE }; #ifdef TAP_DANCE_ENABLE #define F1_F13 TD(F1F13) #define F2_F14 TD(F2F14) #define F5_F15 TD(F5F15) #define F4_ALTF4 TD(ALTF4) #define END_ESC TD(ENDESC) #define Q_ESC TD(Q_ESCAPE) #define END_HOME TD(ENDHOME) #define SHF6_AF7 TD(F6F7) #define F12_RUN TD(F12ETAPS) #define COMMA_TD TD(COMMA) #define CALC_COM TD(CALCCOMP) #else //just to make things compile #define F1_F13 KC_1 #define F2_F14 KC_1 #define F5_F15 KC_1 #define F4_ALTF4 KC_1 #define END_ESC KC_1 #define END_HOME KC_1 #define SHF6_AF7 KC_1 #define F12_RUN KC_1 #define COMMA_TD KC_1 #define CALC_COM KC_1 #endif enum gordon_layers { _QWERTY = 0, _SYMBOLS, // Programming and all other commonlye used symbols _MOUSE, // Mouse movement and also a few macros _NUMPAD, // For getting a numpad under the right hand, and a few helpful things under the left _NAV, // Windows navigation. Windows snapping, changing workspaces, and ARROWS _MACROS, // Non-text related Macros. _FUNCTION, // Not sure what I had in mind for this one _APPSWITCH, // For switching between apps using the `ctrl + Win + [num]` shortcut. // This allows for toggling windows of the same app with one button. // Example: Press and hold `I`, then tap `j` multiple times to cycle through all // Intellij windows (and only Intellij). This requires the app to be pinned to the Windows bar _ONESHOT, // A layer I use for shortcuts that require multiple modifiers and a button not on my home layer // Example: If I need to hit `alt + shift + 5` _TEXTNAV, // Navigate through text _QWERTY_KIDS, // So my kids can do nothing but type. Could also be a `speed typing` layer with no LT or MTs _STREET_FIGHTER, // For Street Fighter 5. Die 1000x Deaths!!!! _DIRNAV, // For navigating to different directories. _TEXT_MACROS // For text-manipulation macros. Passwords, saved strings, pre-formatting }; void register_hyper (void); void unregister_hyper (void); void register_ctrl_a (void); void unregister_ctrl_a (void); void register_alt_f7 (void); void unregister_alt_f7 (void); void register_shift_f6 (void); void unregister_shift_f6 (void); void register_ctrl_shift (void); void unregister_ctrl_shift (void); void register_alt_shift (void); void unregister_alt_shift (void); int cur_dance (qk_tap_dance_state_t *state); int hold_cur_dance (qk_tap_dance_state_t *state); void x_finished (qk_tap_dance_state_t *state, void *user_data); void x_reset (qk_tap_dance_state_t *state, void *user_data); void h_finished (qk_tap_dance_state_t *state, void *user_data); void h_reset (qk_tap_dance_state_t *state, void *user_data); void tab_finished (qk_tap_dance_state_t *state, void *user_data); void tab_reset (qk_tap_dance_state_t *state, void *user_data); void comma_finished (qk_tap_dance_state_t *state, void *user_data); void comma_reset (qk_tap_dance_state_t *state, void *user_data); void bt_finished (qk_tap_dance_state_t *state, void *user_data); void bt_reset (qk_tap_dance_state_t *state, void *user_data); enum secret_strings { KC_SECRET_1 = SAFE_RANGE, KC_SECRET_2, KC_SECRET_3, KC_SECRET_4, KC_SECRET_5, END_SECRET_SAFE_RANGE }; // Macro Declarations enum { INFOQM = END_SECRET_SAFE_RANGE, MODRESET, TIL_SLASH, DEREF, EQRIGHT, TILD3, TICK3, SPRK_TCK, ALTTAB_START, ALTTAB_END, UP_ENTER_RESET, DBMS_OUT, DIE_1000X_RIGHT, DIE_1000X_LEFT, ID_MAN_IP }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt); #endif