diff options
Diffstat (limited to 'layouts/community/ergodox/ordinary/keymap.c')
| -rw-r--r-- | layouts/community/ergodox/ordinary/keymap.c | 504 |
1 files changed, 504 insertions, 0 deletions
diff --git a/layouts/community/ergodox/ordinary/keymap.c b/layouts/community/ergodox/ordinary/keymap.c new file mode 100644 index 000000000..86ab86491 --- /dev/null +++ b/layouts/community/ergodox/ordinary/keymap.c | |||
| @@ -0,0 +1,504 @@ | |||
| 1 | #include QMK_KEYBOARD_H | ||
| 2 | #include "led.h" | ||
| 3 | #include "mousekey.h" | ||
| 4 | #include "debug.h" | ||
| 5 | #include "action_layer.h" | ||
| 6 | #include "action_util.h" | ||
| 7 | |||
| 8 | #define BASE 0 // default layer | ||
| 9 | #define SYMB 1 // symbols layer | ||
| 10 | #define MDIA 2 // media layer | ||
| 11 | #define SPEC 3 // special layer | ||
| 12 | #define RBASE 4 // reverse default layer | ||
| 13 | |||
| 14 | #define LSymb 10 // left symbol-shift key | ||
| 15 | #define LMdia 11 // left media-shift key | ||
| 16 | #define LSpec 12 // left special-shift key | ||
| 17 | #define RSymb 13 // right symbol-shift key | ||
| 18 | #define RMdia 14 // right media-shift key | ||
| 19 | #define RSpec 15 // right special-shift key | ||
| 20 | |||
| 21 | #define NotEq 16 // != macro | ||
| 22 | #define GrtEq 17 // >= macro | ||
| 23 | #define LesEq 18 // <= macro | ||
| 24 | #define DeRef 19 // -> macro | ||
| 25 | |||
| 26 | #define MUL 20 // mouse up left | ||
| 27 | #define MUR 21 // mouse up right | ||
| 28 | #define MDL 22 // mouse down left | ||
| 29 | #define MDR 23 // mouse down right | ||
| 30 | |||
| 31 | |||
| 32 | |||
| 33 | /* | ||
| 34 | * The Ordinary Layout for the Ergodox EZ keyboard, v5 | ||
| 35 | * | ||
| 36 | * Modifications from the default Ergodox EZ layout | ||
| 37 | * by Nicholas Keene ergodoxez@nicholaskeene.com | ||
| 38 | * | ||
| 39 | * No rights reserved. This software is in the public domain. | ||
| 40 | * Credit me if you are friendly but if you're a jerk don't bother. | ||
| 41 | * If you use or modify this layout I would love to hear from you. | ||
| 42 | * | ||
| 43 | * Details: readme.md | ||
| 44 | * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary | ||
| 45 | */ | ||
| 46 | |||
| 47 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
| 48 | |||
| 49 | /******* Base Layer **************************************************************************************************** | ||
| 50 | * | ||
| 51 | * ,------------------------------------------------------. ,------------------------------------------------------. | ||
| 52 | * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special | | ||
| 53 | * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| | ||
| 54 | * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | | ||
| 55 | * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| | ||
| 56 | * | Symbol | ^A | S | D | ^F | G |------| |------| H | ^J | K | L | ^; | '" Symbol | | ||
| 57 | * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| | ||
| 58 | * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | | ||
| 59 | * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' | ||
| 60 | * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl | | ||
| 61 | * `-----------------------------------' `-----------------------------------' | ||
| 62 | * ,-------------. ,-------------. | ||
| 63 | * | Home | End | | Left | Right| | ||
| 64 | * ,------|------|------| |------+------+------. | ||
| 65 | * | | | PgUp | | Up | | | | ||
| 66 | * |Backsp| Del |------| |------| Enter| Space| | ||
| 67 | * | | | PgDn | | Down | | | | ||
| 68 | * `--------------------' `--------------------' | ||
| 69 | */ | ||
| 70 | [BASE] = LAYOUT_ergodox( | ||
| 71 | // left hand | ||
| 72 | F(LSpec) ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC | ||
| 73 | ,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC | ||
| 74 | ,M(LSymb) ,LT(RBASE, KC_A),KC_S ,KC_D ,LT(RBASE, KC_F) ,KC_G | ||
| 75 | ,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) | ||
| 76 | ,KC_LCTL ,MEH_T(KC_NO) ,ALL_T(KC_NO),KC_LALT,KC_LGUI | ||
| 77 | ,KC_HOME,KC_END | ||
| 78 | ,KC_PGUP | ||
| 79 | ,KC_BSPC,KC_DEL ,KC_PGDN | ||
| 80 | // right hand | ||
| 81 | ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) | ||
| 82 | ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) | ||
| 83 | ,KC_H ,LT(RBASE, KC_J),KC_K ,KC_L ,LT(RBASE,KC_SCLN),F(RSymb) | ||
| 84 | ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT | ||
| 85 | ,KC_RGUI ,KC_RALT,KC_HYPR,KC_MEH ,KC_RCTL | ||
| 86 | ,KC_LEFT ,KC_RGHT | ||
| 87 | ,KC_UP | ||
| 88 | ,KC_DOWN ,KC_ENT ,KC_SPC | ||
| 89 | ), | ||
| 90 | |||
| 91 | /******* Symbols Layer ************************************************************************************************* | ||
| 92 | * | ||
| 93 | * ,-----------------------------------------------------. ,-----------------------------------------------------. | ||
| 94 | * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | | ||
| 95 | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| | ||
| 96 | * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | | ||
| 97 | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| | ||
| 98 | * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | | ||
| 99 | * |-----------+------+------+------+------+------| ' | | " |------+------+------+------+------+-----------| | ||
| 100 | * | | % | ^ | [ | ] | ~ | | | | \ | 1 | 2 | 3 | - | | | ||
| 101 | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' | ||
| 102 | * | ; | & | * | < | > | | 0 | . | = | + | Enter | | ||
| 103 | * `-----------------------------------' `-----------------------------------' | ||
| 104 | * ,-------------. ,-------------. | ||
| 105 | * | |||| | |||| | | |||| | |||| | | ||
| 106 | * ,------|------|------| |------+------+------. | ||
| 107 | * | Plus | Equal| |||| | | |||| | Under| Dash | | ||
| 108 | * | | |------| |------| Score| | | ||
| 109 | * | + | = | != | | -> | _ | - | | ||
| 110 | * `--------------------' `--------------------' | ||
| 111 | */ | ||
| 112 | [SYMB] = LAYOUT_ergodox( | ||
| 113 | // left hand | ||
| 114 | KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC | ||
| 115 | ,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) | ||
| 116 | ,KC_TRNS ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV | ||
| 117 | ,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_QUOT | ||
| 118 | ,KC_SCLN ,KC_AMPR ,KC_ASTR ,LSFT(KC_COMM),LSFT(KC_DOT) | ||
| 119 | ,M(GrtEq),M(LesEq) | ||
| 120 | ,KC_NO | ||
| 121 | ,KC_PLUS ,KC_EQL ,M(NotEq) | ||
| 122 | // right hand | ||
| 123 | ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS | ||
| 124 | ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS | ||
| 125 | ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS | ||
| 126 | ,LSFT(KC_QUOT),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS | ||
| 127 | ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT | ||
| 128 | ,KC_NO ,KC_NO | ||
| 129 | ,KC_NO | ||
| 130 | ,M(DeRef) ,LSFT(KC_MINS),KC_MINS | ||
| 131 | ), | ||
| 132 | |||
| 133 | /******* Media Layer ******************************************************************************************************* | ||
| 134 | * | ||
| 135 | * ,---------------------------------------------------------------. ,---------------------------------------------------------------. | ||
| 136 | * | | F11 | F12 | F13 | F14 | F15 | Esc | | |||| | F16 | F17 | F18 | F19 | F20 | | | ||
| 137 | * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| | ||
| 138 | * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | | | ||
| 139 | * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| | ||
| 140 | * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | | | ||
| 141 | * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| | ||
| 142 | * | | |||| |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | |||| | End | Down | PgDn | |||| | | | ||
| 143 | * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' | ||
| 144 | * | ||| | |||| | MClick | LClick | R Click| | Insert | Del | |||| | |||| | ||| | | ||
| 145 | * `---------------------------------------------' `---------------------------------------------' | ||
| 146 | * ,-------------. ,-------------. | ||
| 147 | * | Stop |Refrsh| | Prev | Next | | ||
| 148 | * ,------|------|------| |------+------+------. | ||
| 149 | * |Brwser|Brwser|Search| |VolUp | | | | ||
| 150 | * |Back | Fwd |------| |------| Stop | Play-| | ||
| 151 | * | | | Home | |VolDn | | Pause| | ||
| 152 | * `--------------------' `--------------------' | ||
| 153 | */ | ||
| 154 | [MDIA] = LAYOUT_ergodox( | ||
| 155 | // left hand | ||
| 156 | KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC | ||
| 157 | ,KC_TRNS ,KC_POWER ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U | ||
| 158 | ,KC_TRNS ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD | ||
| 159 | ,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D | ||
| 160 | ,KC_NO ,KC_NO ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 | ||
| 161 | ,KC_WSTP ,KC_WREF | ||
| 162 | ,KC_WSCH | ||
| 163 | ,KC_WBAK ,KC_NO ,KC_WHOM | ||
| 164 | // right hand | ||
| 165 | ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS | ||
| 166 | ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_MAIL ,KC_TRNS | ||
| 167 | ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_TRNS | ||
| 168 | ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS | ||
| 169 | ,KC_INS ,KC_DEL ,KC_NO ,KC_NO ,KC_NO | ||
| 170 | ,KC_MPRV ,KC_MNXT | ||
| 171 | ,KC_VOLU | ||
| 172 | ,KC_VOLD ,KC_MSTP ,KC_MPLY | ||
| 173 | ), | ||
| 174 | |||
| 175 | /******* Special Layer ***************************************************************************************************** | ||
| 176 | * | ||
| 177 | * ,-------------------------------------------------------. ,-------------------------------------------------------. | ||
| 178 | * | | Esc | | | | | | | | | | | - | Bspc | | | ||
| 179 | * |-------------+------+------+------+------+-------------| |------+------+------+------+------+------+-------------| | ||
| 180 | * | Media Lock | | | | | | | | | | | | [ | ] | Media Lock | | ||
| 181 | * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------| | ||
| 182 | * | Symbol Lock | | | | | |------| |------| | | | | | Symbol Lock | | ||
| 183 | * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------| | ||
| 184 | * | Caps Lock | | | | | | | | | | | | | | Caps Lock | | ||
| 185 | * `-------------+------+------+------+------+-------------' `-------------+------+------+------+------+-------------' | ||
| 186 | * | | | | | | | | | | | | | ||
| 187 | * `------------------------------------' `------------------------------------' | ||
| 188 | * ,-------------. ,-------------. | ||
| 189 | * | | | | | | | ||
| 190 | * ,------|------|------| |------+------+------. | ||
| 191 | * | | | | | | | | | ||
| 192 | * | | |------| |------| | | | ||
| 193 | * | | | | | | | | | ||
| 194 | * `--------------------' `--------------------' | ||
| 195 | */ | ||
| 196 | [SPEC] = LAYOUT_ergodox( | ||
| 197 | // left hand | ||
| 198 | KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
| 199 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
| 200 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
| 201 | ,KC_CAPS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
| 202 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
| 203 | ,KC_TRNS ,KC_TRNS | ||
| 204 | ,KC_TRNS | ||
| 205 | ,KC_TRNS,KC_TRNS ,KC_TRNS | ||
| 206 | // right hand | ||
| 207 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_MINS ,KC_BSPC ,KC_TRNS | ||
| 208 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_LBRC ,KC_RBRC ,KC_TRNS | ||
| 209 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
| 210 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS | ||
| 211 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
| 212 | ,KC_TRNS ,KC_TRNS | ||
| 213 | ,KC_TRNS | ||
| 214 | ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
| 215 | ), | ||
| 216 | |||
| 217 | /******* Reverse Base Layer ********************************************************************************************* | ||
| 218 | * | ||
| 219 | * ,------------------------------------------------------. ,------------------------------------------------------. | ||
| 220 | * | =+ | 0 | 9 | 8 | 7 | 6 | - | | Esc | 5 | 4 | 3 | 2 | 1 | `~ | | ||
| 221 | * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| | ||
| 222 | * | \| | P | O | I | U | Y | ] | | [ | T | R | E | W | Q | Tab | | ||
| 223 | * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| | ||
| 224 | * | '" | ; | L | K | J | H |------| |------| G | F | D | S | A | | | ||
| 225 | * |------------+------+------+------+------+------| Tab | |Shift |------+------+------+------+------+------------| | ||
| 226 | * | Capitals | / | . | , | M | N | | | -Tab | B | V | C | X | Z | Capitals | | ||
| 227 | * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' | ||
| 228 | * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl | | ||
| 229 | * `-----------------------------------' `-----------------------------------' | ||
| 230 | * ,-------------. ,-------------. | ||
| 231 | * | Left | Right| | Home | End | | ||
| 232 | * ,------|------|------| |------+------+------. | ||
| 233 | * | | | Up | | PgUp | | | | ||
| 234 | * |Space |Enter |------| |------|BackSp| Del | | ||
| 235 | * | | | Down | | PgDn | | | | ||
| 236 | * `--------------------' `--------------------' | ||
| 237 | */ | ||
| 238 | [RBASE] = LAYOUT_ergodox( | ||
| 239 | // left hand | ||
| 240 | KC_EQL ,KC_0 ,KC_9 ,KC_8 ,KC_7 ,KC_6 ,KC_MINS | ||
| 241 | ,KC_BSLS ,KC_P ,KC_O ,KC_I ,KC_U ,KC_Y ,KC_RBRC | ||
| 242 | ,KC_QUOT ,LT(RBASE, KC_SCLN) ,KC_L ,KC_K ,LT(RBASE, KC_J) ,KC_H | ||
| 243 | ,KC_RSFT ,KC_SLSH ,KC_DOT ,KC_COMM,KC_M ,KC_N ,KC_TAB | ||
| 244 | ,KC_RCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_RALT,KC_RGUI | ||
| 245 | ,KC_LEFT ,KC_RGHT | ||
| 246 | ,KC_UP | ||
| 247 | ,KC_SPC ,KC_ENT ,KC_DOWN | ||
| 248 | // right hand | ||
| 249 | ,KC_ESC ,KC_5 ,KC_4 ,KC_3 ,KC_2 ,KC_1 ,KC_GRV | ||
| 250 | ,KC_LBRC ,KC_T ,KC_R ,KC_E ,KC_W ,KC_Q ,KC_TAB | ||
| 251 | ,KC_G ,LT(RBASE, KC_F),KC_D ,KC_S ,LT(RBASE, KC_A) ,KC_NO | ||
| 252 | ,LSFT(KC_TAB),KC_B ,KC_V ,KC_C ,KC_X ,KC_Z ,KC_LSFT | ||
| 253 | ,KC_LGUI,KC_LALT,KC_HYPR ,KC_MEH,KC_LCTL | ||
| 254 | ,KC_HOME ,KC_END | ||
| 255 | ,KC_PGUP | ||
| 256 | ,KC_PGDN ,KC_BSPC ,KC_DEL | ||
| 257 | ) | ||
| 258 | }; | ||
| 259 | |||
| 260 | const uint16_t PROGMEM fn_actions[] = { | ||
| 261 | // the faux shift keys are implemented as macro taps | ||
| 262 | [LSymb] = ACTION_MACRO_TAP(LSymb) | ||
| 263 | ,[LMdia] = ACTION_MACRO_TAP(LMdia) | ||
| 264 | ,[LSpec] = ACTION_MACRO_TAP(LSpec) | ||
| 265 | ,[RSymb] = ACTION_MACRO_TAP(RSymb) | ||
| 266 | ,[RMdia] = ACTION_MACRO_TAP(RMdia) | ||
| 267 | ,[RSpec] = ACTION_MACRO_TAP(RSpec) | ||
| 268 | }; | ||
| 269 | |||
| 270 | uint16_t symb_shift = 0; | ||
| 271 | uint16_t mdia_shift = 0; | ||
| 272 | uint16_t spec_shift = 0; | ||
| 273 | |||
| 274 | bool mdia_lock = false; | ||
| 275 | bool symb_lock = false; | ||
| 276 | |||
| 277 | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||
| 278 | { | ||
| 279 | switch(id) { | ||
| 280 | // There are two shift keys for each layer so we increment a layer_shift var when one | ||
| 281 | // is pressed and decrement when one is released. The shift counts are bound between 0 and 2 | ||
| 282 | // only because sometimes rapid pressing led to irregular events; this way the states | ||
| 283 | // are self healing during use. | ||
| 284 | |||
| 285 | case LSymb: // | ||
| 286 | if (record->event.pressed) { // when the LSymb button is pressed | ||
| 287 | if(++symb_shift > 2) symb_shift = 2; // increment the symb shift count, max two | ||
| 288 | if(spec_shift) symb_lock = !symb_lock; // if the Special layer is on, toggle the shift lock | ||
| 289 | layer_on(SYMB); // in any case, turn on the Symbols layer | ||
| 290 | } else { // when the LSymb button is released | ||
| 291 | if(--symb_shift < 0) symb_shift = 0; // decrement the shift count, minimum zero | ||
| 292 | if((!symb_shift) && (!symb_lock)) layer_off(SYMB); // if both shifts are released and the lock is off, turn off the Symbols layer | ||
| 293 | } | ||
| 294 | break; | ||
| 295 | |||
| 296 | case LMdia: | ||
| 297 | if (record->event.pressed) { | ||
| 298 | if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { | ||
| 299 | register_code(KC_TAB); | ||
| 300 | } else { | ||
| 301 | if(spec_shift) mdia_lock = !mdia_lock; | ||
| 302 | if(++mdia_shift > 2) mdia_shift = 2; | ||
| 303 | layer_on(MDIA); | ||
| 304 | } | ||
| 305 | } else { | ||
| 306 | if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { | ||
| 307 | unregister_code(KC_TAB); | ||
| 308 | } else { | ||
| 309 | if(--mdia_shift < 0) mdia_shift = 0; | ||
| 310 | if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); | ||
| 311 | } | ||
| 312 | } | ||
| 313 | break; | ||
| 314 | |||
| 315 | case LSpec: | ||
| 316 | if (record->event.pressed) { // when the LSpec button is pressed | ||
| 317 | if(symb_shift) symb_lock = !symb_lock; // if another layer button is engaged, then | ||
| 318 | else if(mdia_shift) mdia_lock = !mdia_lock; // lock that layer, be it caps or symb or mdia | ||
| 319 | else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) { | ||
| 320 | register_code(KC_GRV); // otherwise, if it's an uninterrupted tap, emit a char | ||
| 321 | } else { | ||
| 322 | if(++spec_shift > 2) spec_shift = 2; | ||
| 323 | layer_on(SPEC); // otherwise, turn on the Special layer | ||
| 324 | } | ||
| 325 | } else { | ||
| 326 | if(record->tap.count && !record->tap.interrupted && (!spec_shift)) { | ||
| 327 | unregister_code(KC_GRV); | ||
| 328 | } else { | ||
| 329 | if(--spec_shift < 0) spec_shift = 0; | ||
| 330 | if(!spec_shift) layer_off(SPEC); | ||
| 331 | } | ||
| 332 | } | ||
| 333 | break; | ||
| 334 | |||
| 335 | case RSymb: | ||
| 336 | if (record->event.pressed) { | ||
| 337 | if (record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) { | ||
| 338 | register_code(KC_QUOT); | ||
| 339 | } else { | ||
| 340 | if(++symb_shift > 2) symb_shift = 2; | ||
| 341 | if(spec_shift) symb_lock = !symb_lock; | ||
| 342 | layer_on(SYMB); | ||
| 343 | } | ||
| 344 | } else { | ||
| 345 | if(record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) { | ||
| 346 | unregister_code(KC_QUOT); | ||
| 347 | } else { | ||
| 348 | if(--symb_shift < 0) symb_shift = 0; | ||
| 349 | if((!symb_shift) && (!symb_lock)) layer_off(SYMB); | ||
| 350 | } | ||
| 351 | } | ||
| 352 | break; | ||
| 353 | |||
| 354 | case RMdia: | ||
| 355 | if (record->event.pressed) { | ||
| 356 | if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { | ||
| 357 | register_code(KC_BSLS); | ||
| 358 | } else { | ||
| 359 | if(++mdia_shift > 2) mdia_shift = 2; | ||
| 360 | if(spec_shift) mdia_lock = !mdia_lock; | ||
| 361 | layer_on(MDIA); | ||
| 362 | } | ||
| 363 | } else { | ||
| 364 | if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { | ||
| 365 | unregister_code(KC_BSLS); | ||
| 366 | } else { | ||
| 367 | if(--mdia_shift < 0) mdia_shift = 0; | ||
| 368 | if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); | ||
| 369 | } | ||
| 370 | } | ||
| 371 | break; | ||
| 372 | |||
| 373 | case RSpec: | ||
| 374 | if (record->event.pressed) { | ||
| 375 | if(symb_shift) symb_lock = !symb_lock; | ||
| 376 | else if(mdia_shift) mdia_lock = !mdia_lock; | ||
| 377 | else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) { | ||
| 378 | register_code(KC_EQL); | ||
| 379 | } else { | ||
| 380 | if(++spec_shift > 2) spec_shift = 2; | ||
| 381 | layer_on(SPEC); | ||
| 382 | } | ||
| 383 | } else { | ||
| 384 | if(record->tap.count && !record->tap.interrupted && (!spec_shift)) { | ||
| 385 | unregister_code(KC_EQL); | ||
| 386 | } else { | ||
| 387 | if(--spec_shift < 0) spec_shift = 0; | ||
| 388 | if(!spec_shift) layer_off(SPEC); | ||
| 389 | } | ||
| 390 | } | ||
| 391 | break; | ||
| 392 | |||
| 393 | case NotEq: | ||
| 394 | if (record->event.pressed) { | ||
| 395 | return MACRO( I(10), D(LSFT), T(1), U(LSFT), T(EQL), END ); // != | ||
| 396 | } | ||
| 397 | break; | ||
| 398 | |||
| 399 | case GrtEq: | ||
| 400 | if (record->event.pressed) { | ||
| 401 | return MACRO( I(10), D(LSFT), T(COMM), U(LSFT), T(EQL), END ); // <= | ||
| 402 | } | ||
| 403 | break; | ||
| 404 | |||
| 405 | case LesEq: | ||
| 406 | if (record->event.pressed) { | ||
| 407 | return MACRO( I(10), D(LSFT), T(DOT), U(LSFT), T(EQL), END ); // >= | ||
| 408 | } | ||
| 409 | break; | ||
| 410 | |||
| 411 | case DeRef: | ||
| 412 | if (record->event.pressed) { | ||
| 413 | return MACRO( I(10), T(MINS), D(LSFT), T(DOT), U(LSFT), END ); // -> | ||
| 414 | } | ||
| 415 | break; | ||
| 416 | |||
| 417 | // mouse diagonals | ||
| 418 | |||
| 419 | case MUL: // mouse up left | ||
| 420 | if (record->event.pressed) { | ||
| 421 | mousekey_on(KC_MS_UP); | ||
| 422 | mousekey_on(KC_MS_LEFT); | ||
| 423 | mousekey_send(); | ||
| 424 | } else { | ||
| 425 | mousekey_off(KC_MS_UP); | ||
| 426 | mousekey_off(KC_MS_LEFT); | ||
| 427 | mousekey_send(); | ||
| 428 | } | ||
| 429 | break; | ||
| 430 | |||
| 431 | case MUR: // mouse up right | ||
| 432 | if (record->event.pressed) { | ||
| 433 | mousekey_on(KC_MS_UP); | ||
| 434 | mousekey_on(KC_MS_RIGHT); | ||
| 435 | mousekey_send(); | ||
| 436 | } else { | ||
| 437 | mousekey_off(KC_MS_UP); | ||
| 438 | mousekey_off(KC_MS_RIGHT); | ||
| 439 | mousekey_send(); | ||
| 440 | } | ||
| 441 | break; | ||
| 442 | |||
| 443 | case MDL: // mouse down left | ||
| 444 | if (record->event.pressed) { | ||
| 445 | mousekey_on(KC_MS_DOWN); | ||
| 446 | mousekey_on(KC_MS_LEFT); | ||
| 447 | mousekey_send(); | ||
| 448 | } else { | ||
| 449 | mousekey_off(KC_MS_DOWN); | ||
| 450 | mousekey_off(KC_MS_LEFT); | ||
| 451 | mousekey_send(); | ||
| 452 | } | ||
| 453 | break; | ||
| 454 | |||
| 455 | case MDR: // mouse down right | ||
| 456 | if (record->event.pressed) { | ||
| 457 | mousekey_on(KC_MS_DOWN); | ||
| 458 | mousekey_on(KC_MS_RIGHT); | ||
| 459 | mousekey_send(); | ||
| 460 | } else { | ||
| 461 | mousekey_off(KC_MS_DOWN); | ||
| 462 | mousekey_off(KC_MS_RIGHT); | ||
| 463 | mousekey_send(); | ||
| 464 | } | ||
| 465 | break; | ||
| 466 | |||
| 467 | default: | ||
| 468 | // none | ||
| 469 | break; | ||
| 470 | } | ||
| 471 | |||
| 472 | return MACRO_NONE; | ||
| 473 | }; | ||
| 474 | |||
| 475 | // Runs just one time when the keyboard initializes. | ||
| 476 | void matrix_init_user(void) { | ||
| 477 | |||
| 478 | }; | ||
| 479 | |||
| 480 | // Runs constantly in the background, in a loop. | ||
| 481 | void matrix_scan_user(void) { | ||
| 482 | // shift or caps lock turns on red light | ||
| 483 | if((keyboard_report->mods & MOD_BIT(KC_LSFT)) | ||
| 484 | || (keyboard_report->mods & MOD_BIT(KC_RSFT)) | ||
| 485 | || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) { | ||
| 486 | ergodox_right_led_1_on(); | ||
| 487 | } else { | ||
| 488 | ergodox_right_led_1_off(); | ||
| 489 | } | ||
| 490 | |||
| 491 | // Symbol layer turns on green light | ||
| 492 | if(layer_state & (1UL<<SYMB)) { | ||
| 493 | ergodox_right_led_2_on(); | ||
| 494 | } else { | ||
| 495 | ergodox_right_led_2_off(); | ||
| 496 | } | ||
| 497 | |||
| 498 | // Media layer turns on blue light | ||
| 499 | if(layer_state & (1UL<<MDIA)) { | ||
| 500 | ergodox_right_led_3_on(); | ||
| 501 | } else { | ||
| 502 | ergodox_right_led_3_off(); | ||
| 503 | } | ||
| 504 | }; | ||
