]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/ergodox/keymaps/dvorak_programmer/keymap.c
put home/end on thumb cluster
[qmk_firmware.git] / keyboards / ergodox / keymaps / dvorak_programmer / keymap.c
1
2 #include "ergodox.h"
3 #include "led.h"
4 #include "debug.h"
5 #include "action_layer.h"
6 #include "action_code.h"
7
8 #define BASE    0 // default layer
9 #define SHELL_NAV 1
10 #define KEY_NAV 3 // key navigation layer
11 #define KEY_SEL 4 // key selection layer
12 #define NUMBER  5  // number layer
13 #define SYMBOL  6
14 #define BRACKETS  7
15 #define SHORTCUTS 8
16 #define MOUSE 9
17
18 // macros
19 #define MC_COPY_LINE  0
20 #define MC_CUT_LINE   1
21 #define MC_PASTE_LINE 2
22 #define MC_NEW_SEARCH_TAB 3
23 #define SCREEN_TAB_LEFT 4
24 #define SCREEN_TAB_RIGHT 5
25 #define SCREEN_NEW_TAB 6
26 #define SWITCH_NDS 7
27 #define SCREEN_COPY_MODE 8
28 #define SCREEN_PASTE 9
29 #define OPEN_CLOSE_PAREN 10
30 #define OPEN_CLOSE_BRACKET 11
31 #define OPEN_CLOSE_CURLY 12
32 #define OPEN_CLOSE_SINGLE_QUOTE 13
33 #define OPEN_CLOSE_DOUBLE_QUOTE 14
34 #define SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND 15
35 #define SEMICOLON_NEWLINE 16
36 #define END_NEWLINE 17
37
38
39 const uint16_t PROGMEM fn_actions[] = {
40   [1] = ACTION_LAYER_TAP_TOGGLE(KEY_NAV), // FN1 - keynav layer
41   [2] = ACTION_LAYER_TAP_TOGGLE(NUMBER), // FN2 - number layer
42   [3] = ACTION_MODS_ONESHOT(MOD_LSFT),   // FN3 - shift modifier / oneshot
43   [4] = ACTION_MODS_ONESHOT(MOD_LCTL),   // FN4 - ctrl modifier / oneshot
44   [5] = ACTION_MODS_ONESHOT(MOD_LALT),   // FN5 - alt modifier / oneshot
45 };
46
47 //Tap Dance Declarations
48 enum {
49   TD_SHIFT_CAPSLOCK = 0,
50   TD_BRK_LEFT = 1,
51   TD_BRK_RIGHT = 2
52 };
53
54
55
56 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
57 // base layer
58 [BASE] = KEYMAP(  // layer 0 : default
59         // left hand
60         KC_ESC,                    KC_F1,          KC_F2,       KC_F3,        KC_F4,       KC_F5,       KC_F6,
61         LT(MOUSE,KC_TAB),       KC_QUOT,        KC_COMM,     KC_DOT,       KC_P,        KC_Y,        MO(KEY_SEL),
62         MO(SHELL_NAV),             KC_A,           KC_O,        KC_E,         KC_U,        KC_I,
63         KC_FN3,                    KC_SCLN,        KC_Q,        KC_J,         KC_K,        KC_X,        MO(KEY_NAV),
64                    OSL(SHORTCUTS),KC_FN4, KC_FN5,OSL(SYMBOL),MO(NUMBER),  
65                                               // thumb cluster
66                                                MO(BRACKETS), RCTL(KC_S),
67                                                                       RCTL(KC_DEL),
68                                                KC_BSPC,RCTL(KC_BSPC),KC_DEL,
69         // right hand
70              KC_F7,       KC_F8,       KC_F9,       KC_F10,        KC_F11,       KC_F12,       KC_BSLS,
71              KC_PGUP,     KC_F,        KC_G,        KC_C,          KC_R,         KC_L,         KC_SLSH,
72                           KC_D,        KC_H,        KC_T,          KC_N,         KC_S,         KC_MINS,
73              KC_PGDN,     KC_B,        KC_M,        KC_W,          KC_V,         KC_Z,         TD(TD_SHIFT_CAPSLOCK),
74                                   // lower keys - browser tab control
75                                   RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT), RCTL(KC_W),
76              // thumb cluster
77              KC_HOME,KC_END,
78              KC_UP,
79              KC_DOWN,KC_ENT, KC_SPC
80     ),
81      
82
83 // shell navigation layer
84 [SHELL_NAV] = KEYMAP(
85        // left hand
86        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
87        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
88        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
89        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
90                // bottom row
91                KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
92                                        // thumb cluster
93                                        KC_TRNS,KC_TRNS,
94                                                LALT(KC_D),
95                                KC_TRNS,RCTL(KC_W),KC_TRNS,
96        // right hand
97        KC_TRNS,    KC_TRNS,        KC_TRNS,             KC_TRNS,         KC_TRNS,         KC_TRNS,        KC_TRNS,
98        RCTL(KC_L), RCTL(KC_W),     KC_HOME,             KC_UP,           KC_END,          LALT(KC_D),     RCTL(KC_R),
99                    LALT(KC_B),     KC_LEFT,             KC_DOWN,         KC_RIGHT,        LALT(KC_F),     LALT(KC_DOT),
100        RCTL(KC_C), RCTL(KC_U),     M(SCREEN_COPY_MODE), M(SCREEN_PASTE), MEH(KC_V),      RCTL(KC_K),     M(SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND),
101                 // bottom row
102                  M(SCREEN_TAB_LEFT), M(SCREEN_TAB_RIGHT), M(SCREEN_NEW_TAB),  KC_TRNS,    KC_TRNS,
103        // thumb cluster
104        KC_TRNS, KC_TRNS,
105        KC_TRNS,
106        KC_TRNS, KC_TRNS, KC_TRNS
107 ),
108
109     
110 // key navigation layer
111 [KEY_NAV] = KEYMAP(
112        // left hand
113        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
114        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
115        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
116        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
117                // bottom row
118                KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
119                                        // thumb cluster
120                                        KC_TRNS,KC_TRNS,
121                                                KC_TRNS,
122                                KC_TRNS,KC_TRNS,KC_TRNS,
123        // right hand
124        KC_TRNS, KC_TRNS,        KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,        KC_TRNS,
125        KC_TRNS, KC_PGDN,        KC_HOME,    KC_UP,      KC_END,     KC_PGUP,        M(MC_COPY_LINE),
126                 RCTL(KC_LEFT),  KC_LEFT,    KC_DOWN,    KC_RIGHT,   RCTL(KC_RIGHT), M(MC_CUT_LINE),
127        KC_TRNS, KC_TRNS,        RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_TRNS,        M(MC_PASTE_LINE),
128                 // bottom row
129                 KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,    KC_TRNS,
130        // thumb cluster
131        KC_TRNS, KC_TRNS,
132        KC_TRNS,
133        KC_TRNS, KC_TRNS, KC_TRNS
134 ),
135
136 // key selection layer
137 [KEY_SEL] = KEYMAP(
138        // left hand
139        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
140        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
141        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
142        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
143                // bottom row
144                KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
145                                        // thumb cluster
146                                        KC_TRNS,KC_TRNS,
147                                                KC_TRNS,
148                                KC_TRNS,KC_TRNS,KC_TRNS,
149        // right hand
150        KC_TRNS,       KC_TRNS,             KC_TRNS,       KC_TRNS,       KC_TRNS,        KC_TRNS,              KC_TRNS,
151        RSFT(KC_PGUP), RSFT(KC_PGDN),       RSFT(KC_HOME), RSFT(KC_UP),   RSFT(KC_END),   RSFT(KC_PGUP),        M(MC_COPY_LINE),
152                       RSFT(RCTL(KC_LEFT)), RSFT(KC_LEFT), RSFT(KC_DOWN), RSFT(KC_RIGHT), RSFT(RCTL(KC_RIGHT)), M(MC_CUT_LINE),
153        RSFT(KC_PGDN), KC_TRNS,             RCTL(KC_C),    RCTL(KC_X),    RCTL(KC_V),     KC_TRNS,              M(MC_PASTE_LINE),
154                 // bottom row
155                 KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,    KC_TRNS,
156        // thumb cluster
157        KC_TRNS, KC_TRNS,
158        KC_TRNS,
159        KC_TRNS, KC_TRNS, KC_TRNS
160 ),
161
162 // number layer
163 [NUMBER] = KEYMAP(
164        // left hand
165        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
166        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
167        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
168        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
169                // bottom row
170                KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
171                                        // thumb cluster
172                                        KC_TRNS,KC_TRNS,
173                                                KC_TRNS,
174                                KC_TRNS,KC_TRNS,KC_TRNS,
175        // right hand
176        KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
177        KC_TRNS, KC_PLUS,  KC_7,    KC_8,    KC_9,     KC_ASTR, KC_TRNS,
178                 KC_MINS,  KC_4,    KC_5,    KC_6,     KC_SLSH, KC_TRNS,
179        KC_TRNS, KC_EQUAL, KC_1,    KC_2,    KC_3,     KC_COLN, KC_TRNS,
180                                // bottom row
181                                 KC_0, KC_DOT, KC_COMMA, KC_TRNS,  KC_TRNS,
182        // thumb cluster
183        KC_TRNS, KC_TRNS,
184        KC_TRNS,
185        KC_TRNS, KC_TRNS, KC_TRNS
186 ),
187
188
189 [SYMBOL] = KEYMAP(
190        // left hand
191        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
192        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
193        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
194        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,       
195        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
196                                        KC_TRNS,KC_TRNS,
197                                                KC_TRNS,
198                                KC_TRNS,KC_TRNS,KC_TRNS,
199        // right hand
200        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
201        KC_TRNS, KC_PLUS, KC_AMPR, KC_ASTR, KC_GRAVE,KC_TILD, KC_TRNS,
202                 KC_MINS, KC_DLR,  KC_PERC, KC_CIRC, KC_PIPE, KC_TRNS,
203        KC_TRNS, KC_EQUAL,KC_EXLM, KC_AT,   KC_HASH, KC_TRNS, KC_TRNS,
204                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
205        M(SEMICOLON_NEWLINE), M(END_NEWLINE),
206        KC_TRNS,
207        KC_TRNS, KC_TRNS, KC_TRNS
208 ),
209
210 [BRACKETS] = KEYMAP(
211        // left hand
212        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
213        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
214        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
215        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,       
216        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
217                                        KC_TRNS,KC_TRNS,
218                                                KC_TRNS,
219                                KC_TRNS,KC_TRNS,KC_TRNS,
220        // right hand
221        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
222        KC_TRNS, KC_TRNS, M(OPEN_CLOSE_BRACKET),M(OPEN_CLOSE_PAREN),M(OPEN_CLOSE_CURLY),KC_TRNS,KC_TRNS,
223                 KC_TRNS, KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_TRNS,
224        KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_TRNS, KC_TRNS, KC_TRNS, 
225                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
226        KC_TRNS, KC_TRNS,
227        KC_TRNS,
228        KC_TRNS, KC_TRNS, KC_TRNS
229 ),
230
231 [SHORTCUTS] = KEYMAP(
232        // left hand
233        KC_NO,  MEH(KC_F1), MEH(KC_F2), MEH(KC_F3),  MEH(KC_F4), MEH(KC_F5), MEH(KC_F6),
234        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
235        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
236        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,       
237        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
238                                          MEH(KC_0),MEH(KC_1),
239                                                    MEH(KC_2),
240                                MEH(KC_3),MEH(KC_4),MEH(KC_5),
241        // right hand
242        MEH(KC_F7), MEH(KC_F8), MEH(KC_F9), MEH(KC_F10),  MEH(KC_F11), MEH(KC_F12),  M(SWITCH_NDS),
243        KC_TRNS, MEH(KC_A), MEH(KC_B),    MEH(KC_C),    MEH(KC_D),    MEH(KC_E), MEH(KC_F),
244                 MEH(KC_G), MEH(KC_H),    MEH(KC_I),    MEH(KC_J),    MEH(KC_K), MEH(KC_L),
245        KC_TRNS, MEH(KC_M), MEH(KC_N),    MEH(KC_O),    MEH(KC_P),    MEH(KC_Q), MEH(KC_R),
246                            MEH(KC_S),    MEH(KC_T),    MEH(KC_U),    MEH(KC_V), MEH(KC_X),
247        MEH(KC_6), MEH(KC_7),
248        MEH(KC_8),
249        MEH(KC_9), MEH(KC_Y), MEH(KC_Z)
250 ),
251
252
253 [MOUSE] = KEYMAP(
254        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
255        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
256        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
257        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
258        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
259                                            KC_TRNS, KC_TRNS,
260                                                     KC_TRNS,
261                                   KC_TRNS, KC_TRNS, KC_TRNS,
262     // right hand
263        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
264        KC_TRNS,  KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
265                  KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS,
266        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
267                           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
268        KC_TRNS, KC_TRNS,
269        KC_TRNS,
270            KC_TRNS, KC_BTN1, KC_BTN2
271 ),
272
273 };
274
275
276
277 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
278 {
279   // MACRODOWN only works in this function
280       switch(id) {
281         case MC_COPY_LINE:
282             if (record->event.pressed) {
283                 return MACRO( T(HOME), D(LSFT), T(END), U(LSFT), D(LCTL), T(C), U(LCTL), END);
284             }
285             break;
286         case MC_CUT_LINE:
287             if (record->event.pressed) {
288                 return MACRO( T(HOME), D(LSFT), T(END), U(LSFT), D(LCTL), T(X), U(LCTL), END);
289             }        
290             break;
291         case MC_PASTE_LINE:
292             if (record->event.pressed) {
293                 return MACRO( T(END), T(ENTER), D(LCTL), T(V), U(LCTL), END);
294             }                
295             break;
296         case MC_NEW_SEARCH_TAB:
297              if (record->event.pressed) {
298                 return MACRO( D(LCTL), T(T), T(K), U(LCTL), END);
299             }
300             break;
301         case SCREEN_TAB_LEFT:
302              if (record->event.pressed) {
303                 return MACRO( D(LCTL), T(A), U(LCTL), T(P), END);
304             }        
305             break;
306         case SCREEN_TAB_RIGHT:
307              if (record->event.pressed) {
308                 return MACRO( D(LCTL), T(A), U(LCTL), T(N), END);
309             }                    
310             break;
311         case SCREEN_NEW_TAB:
312              if (record->event.pressed) {
313                 return MACRO( D(LCTL), T(A), U(LCTL), T(C), END);
314             }                                
315         break;
316         case SCREEN_COPY_MODE:
317             if (record->event.pressed) {
318                 return MACRO( D(LCTL), T(A), U(LCTL), T(ESC), END);
319             }
320         break;
321         case SCREEN_PASTE:
322             if (record->event.pressed) {
323                 return MACRO( D(LCTL), T(A), U(LCTL), T(RBRC), END); 
324             }
325         break;        
326         case SWITCH_NDS:
327              if (record->event.pressed) {
328                 return MACRO( D(LSFT), T(F11), U(LSFT), W(500), D(LALT), T(TAB), U(LALT), END); 
329             }                                
330         break;        
331         case OPEN_CLOSE_PAREN:
332             if (record->event.pressed) {
333                 return MACRO( D(LSFT), T(LPRN), T(RPRN), U(LSFT), T(LEFT), END);
334             }
335         break;
336         case OPEN_CLOSE_BRACKET:
337             if (record->event.pressed) {
338                 return MACRO( T(LBRC), T(RBRC), T(LEFT), END);
339             }
340         break;        
341         case OPEN_CLOSE_CURLY:
342             if (record->event.pressed) {
343                 return MACRO( D(LSFT), T(LCBR), T(RCBR), U(LSFT), T(LEFT), END);
344             }
345         break;                
346         case OPEN_CLOSE_SINGLE_QUOTE:
347             if (record->event.pressed) {
348                 return MACRO( T(QUOT), T(QUOT), T(LEFT), END);
349             }
350         break;        
351         case OPEN_CLOSE_DOUBLE_QUOTE:
352             if (record->event.pressed) {
353                 return MACRO( D(LSFT), T(QUOT), T(QUOT), U(LSFT), T(LEFT), END);
354             }
355         break;                        
356         case SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND:
357             if (record->event.pressed) {
358                 return MACRO( T(UP), T(HOME), D(LALT), T(D), U(LALT), END);
359             }
360         break;                                
361                 case SEMICOLON_NEWLINE:
362             if (record->event.pressed) {
363                 return MACRO( T(END), T(SCLN), T(ENTER), END);
364             }           
365                 break;
366                 case END_NEWLINE:
367             if (record->event.pressed) {
368                 return MACRO( T(END), T(ENTER), END);
369             }           
370                 break;          
371         
372       }
373     return MACRO_NONE;
374 };
375
376 // Runs just one time when the keyboard initializes.
377 void matrix_init_user(void) {
378
379     return;
380 };
381
382 void led_set_user(uint8_t usb_led) {
383     if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
384         ergodox_right_led_1_on();
385     } else {
386         ergodox_right_led_1_off();
387     }
388 }
389
390 qk_tap_dance_action_t tap_dance_actions[] = {
391   [TD_SHIFT_CAPSLOCK]  = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPSLOCK),
392   [TD_BRK_LEFT]  = ACTION_TAP_DANCE_DOUBLE (KC_LPRN, KC_LCBR),
393   [TD_BRK_RIGHT] = ACTION_TAP_DANCE_DOUBLE (KC_RPRN, KC_RCBR)
394
395 };
396
397
398 // Runs constantly in the background, in a loop.
399 void matrix_scan_user(void) {
400
401     uint8_t layer = biton32(layer_state);
402
403     ergodox_board_led_off();
404     ergodox_right_led_2_off();
405     ergodox_right_led_3_off();
406     switch (layer) {
407         case NUMBER:
408         case SYMBOL:
409             ergodox_right_led_2_on();
410             break;
411         case KEY_NAV:
412         case KEY_SEL:
413             ergodox_right_led_3_on();
414             break;        
415         case SHORTCUTS:
416             ergodox_right_led_2_on();
417             ergodox_right_led_3_on();
418             break;
419         default:
420             // none
421             break;
422     } 
423     return;
424 };