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 | }; | ||