aboutsummaryrefslogtreecommitdiff
path: root/keyboard/ergodox/keymaps/keymap_simon.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboard/ergodox/keymaps/keymap_simon.c')
-rw-r--r--keyboard/ergodox/keymaps/keymap_simon.c624
1 files changed, 0 insertions, 624 deletions
diff --git a/keyboard/ergodox/keymaps/keymap_simon.c b/keyboard/ergodox/keymaps/keymap_simon.c
deleted file mode 100644
index 525c2d601..000000000
--- a/keyboard/ergodox/keymaps/keymap_simon.c
+++ /dev/null
@@ -1,624 +0,0 @@
1#include "action_util.h"
2#include "action_layer.h"
3#define KC_SW0 KC_FN0
4#define DEBUG_ACTION
5
6static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 /* Keymap 0: Default Layer
8 *
9 * ,--------------------------------------------------. ,--------------------------------------------------.
10 * | ~ | 1 | 2 | 3 | 4 | 5 | \ | | ' | 6 | 7 | 8 | 9 | 0 | = |
11 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
12 * | Tab | Q | W | E | R | T | ~Fn1 | | ~Fn3 | Y | U | I | O | P | [ |
13 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
14 * | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | RShift |
15 * |--------+------+------+------+------+------| Fn0 | | ~Fn4 |------+------+------+------+------+--------|
16 * | LCtrl | Z | X | C | V | B | | | | N | M | , | . | / | RCtrl |
17 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
18 * | ~Fn1 | ~Fn2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~Fn4 |
19 * `----------------------------------' `----------------------------------'
20 * ,-------------. ,-------------.
21 * | +Fn2 | Home | | PgUp | Del |
22 * ,------|------|------| |------+------+------.
23 * | | | End | | PgDn | | |
24 * | BkSp | ESC |------| |------| Enter| Space|
25 * | | | Spc | | Ins | | |
26 * `--------------------' `--------------------'
27 */
28
29 // BASE LAYERS
30
31 KEYMAP( // layout: layer 0: customized dvorak with symbol row switched
32 // left hand
33 ESC, FN12,FN12,FN12,FN12,FN12,BSLS,
34 TAB, QUOT,COMM,DOT, P, Y, FN2,
35 LSFT,A, O, E, U, I,
36 LCTL,SCLN,Q, J, K, X, DEL,
37 FN3, FN1, LCTL,LALT,LGUI,
38 FN5, HOME,
39 END,
40 BSPC,LSFT,LGUI,
41 // right hand
42 MINS,FN12,FN12,FN12,FN12,FN12,MPLY,
43 FN3, F, G, C, R, L, MNXT,
44 D, H, T, N, S, RSFT,
45 DEL, B, M, W, V, Z, RCTL,
46 MPRV,MNXT,APP, FN8,FN2,
47 PGUP,MPLY,
48 PGDN,
49 ENT, FN1, SPC
50 ),
51
52 KEYMAP( // layout: layer 1: customized dvorak
53 // left hand
54 ESC, 1, 2, 3, 4, 5, BSLS,
55 TAB, QUOT,COMM,DOT, P, Y, FN2,
56 LSFT,A, O, E, U, I,
57 LCTL,SCLN,Q, J, K, X, DEL,
58 FN3, FN1, LCTL,LALT,LGUI,
59 FN5, HOME,
60 END,
61 BSPC,LSFT,LGUI,
62 // right hand
63 MINS,6, 7, 8, 9, 0, EQL,
64 FN3, F, G, C, R, L, SLSH,
65 D, H, T, N, S, RSFT,
66 DEL, B, M, W, V, Z, RCTL,
67 LEFT,DOWN,UP, RGHT,FN2,
68 PGUP,MPLY,
69 PGDN,
70 ENT, FN1, SPC
71 ),
72
73 KEYMAP( // layer 2 : qwerty
74 // left hand
75 TRNS,1, 2, 3, 4, 5, TRNS,
76 TRNS,Q, W, E, R, T, TRNS,
77 TRNS,A, S, D, F, G,
78 TRNS,Z, X, C, V, B, TRNS,
79 TRNS,TRNS,TRNS,TRNS,TRNS,
80 TRNS,TRNS,
81 TRNS,
82 TRNS,TRNS,TRNS,
83 // right hand
84 TRNS,6, 7, 8, 9, 0, MINS,
85 TRNS,Y, U, I, O, P, RBRC,
86 H, J, K, L, SCLN,RSFT,
87 TRNS,N, M, COMM,DOT, SLSH,RSFT,
88 TRNS,TRNS,TRNS,TRNS,TRNS,
89 TRNS,TRNS,
90 TRNS,
91 TRNS,TRNS,TRNS
92 ),
93
94 KEYMAP( // layer 3 : reserved
95 // left hand
96 TRNS,1, 2, 3, 4, 5, TRNS,
97 TRNS,Q, W, E, R, T, TRNS,
98 TRNS,A, S, D, F, G,
99 TRNS,Z, X, C, V, B, TRNS,
100 TRNS,TRNS,TRNS,TRNS,TRNS,
101 TRNS,TRNS,
102 TRNS,
103 TRNS,TRNS,TRNS,
104 // right hand
105 TRNS,6, 7, 8, 9, 0, MINS,
106 TRNS,Y, U, I, O, P, RBRC,
107 H, J, K, L, SCLN,QUOT,
108 TRNS,N, M, COMM,DOT, SLSH,RSFT,
109 TRNS,TRNS,TRNS,TRNS,TRNS,
110 RALT,RCTL,
111 PGUP,
112 PGDN,ENT, SPC
113 ),
114
115 // PLOVER (SPECIAL CASE)
116
117 KEYMAP( // layout: layer 4: Steno for Plover
118 // left hand
119 FN5, NO, NO, NO, NO, NO, NO,
120 NO, 1, 2, 3, 4, 5, NO,
121 NO, Q, W, E, R, T,
122 NO, A, S, D, F, G, NO,
123 NO, NO, NO, NO, NO,
124 FN5, NO,
125 NO,
126 C, V, NO,
127 // right hand
128 NO, NO, NO, NO, NO, NO, TRNS,
129 NO, 6, 7, 8, 9, 0, TRNS,
130 Y, U, I, O, P, LBRC,
131 NO, H, J, K, L, SCLN,QUOT,
132 TRNS,TRNS,NO, NO, NO,
133 TRNS,TRNS,
134 TRNS,
135 NO, N, M
136 ),
137
138 KEYMAP( // layout: layer 5: reserved
139 // left hand
140 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
141 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
142 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
143 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
144 TRNS,TRNS,TRNS,TRNS,TRNS,
145 TRNS,TRNS,
146 TRNS,
147 TRNS,TRNS,TRNS,
148 // right hand
149 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
150 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
151 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
152 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
153 TRNS,TRNS,TRNS,TRNS,TRNS,
154 TRNS,TRNS,
155 TRNS,
156 TRNS,TRNS,TRNS
157 ),
158
159 // MODIFIERS THAT MIGHT BE STICKY
160
161 KEYMAP( // layout: layer 6: mouse + numpad
162 // left hand
163 FN0, NO, NO, NO, NO, PAUS,PSCR,
164 TRNS,NO, WH_U,MS_U,WH_D,BTN2,TRNS,
165 TRNS,NO, MS_L,MS_D,MS_R,BTN1,
166 TRNS,NO, NO, NO, NO, BTN3,TRNS,
167 TRNS,FN13,TRNS,TRNS,TRNS,
168 TRNS,TRNS,
169 TRNS,
170 TRNS,TRNS,TRNS,
171 // right hand
172 SLCK,NLCK,EQL, PSLS,PAST,PMNS,TRNS,
173 TRNS,NO, P7, P8, P9, PMNS,BSPC,
174 NO, P4, P5, P6, PPLS,PENT,
175 TRNS,NO, P1, P2, P3, PPLS,PENT,
176 P0, PDOT,PDOT,PENT,PENT,
177 TRNS,TRNS,
178 TRNS,
179 ENT, TRNS,BSPC
180 ),
181
182 KEYMAP( // layout: layer 7: F-keys + cursor
183 // left hand
184 FN0, F1, F2, F3, F4, F5, F6,
185 FN4, NO, PGUP,UP, PGDN,NO, TRNS,
186 TRNS,HOME,LEFT,DOWN,RGHT,END,
187 TRNS,NO, NO, END, HOME,NO, TRNS,
188 TRNS,TRNS,TRNS,FN10,FN11,
189 TRNS,TRNS,
190 TRNS,
191 LCTL,LSFT,TRNS,
192 // right hand
193 F7, F8, F9, F10, F11, F12, MINS,
194 TRNS,NO, PGUP,UP, PGDN, NO, FN4,
195 HOME,LEFT,DOWN,RGHT,END, TRNS,
196 TRNS,NO, NO, NO, NO, NO, TRNS,
197 RGUI,RALT,TRNS,TRNS,TRNS,
198 TRNS,TRNS,
199 TRNS, TRNS,RSFT,RCTL
200 ),
201
202 KEYMAP( // layout: layer 8: "BlueShift"
203 // left hand
204 FN0, F1, F2, F3, F4, F5, F6,
205 TRNS,GRV, FN12,FN12,PSCR,BSLS,TRNS, // the FN12 entries are for inverted brace/bracket keys
206 TRNS,APP, TAB, EQL, TRNS,INS,
207 TRNS,TRNS,FN8, TRNS,CAPS,TRNS,TRNS, // quit (alt+f4)
208 FN13,TRNS,TRNS,TRNS,TRNS,
209 TRNS,TRNS,
210 TRNS,
211 ESC, TRNS,TRNS,
212 // right hand
213 F7, F8, F9, F10, F11, F12, MINS,
214 TRNS,PGUP,HOME,UP, END, SLSH,RBRC,
215 PGDN,LEFT,DOWN,RGHT,MINS,TRNS,
216 TRNS,TRNS,NO, UP, NO, TRNS,TRNS,
217 LEFT,DOWN,RGHT,TRNS,TRNS,
218 TRNS,TRNS,
219 TRNS,
220 TRNS,TRNS,TRNS
221 ),
222
223 KEYMAP( // layout: layer 9: reserved
224 // left hand
225 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
226 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
227 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
228 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
229 TRNS,TRNS,TRNS,TRNS,TRNS,
230 TRNS,TRNS,
231 TRNS,
232 TRNS,TRNS,TRNS,
233 // right hand
234 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
235 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
236 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
237 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
238 TRNS,TRNS,TRNS,TRNS,TRNS,
239 TRNS,TRNS,
240 TRNS,
241 TRNS,TRNS,TRNS
242 ),
243
244 KEYMAP( // layout: layer 10: reserved
245 // left hand
246 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
247 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
248 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
249 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
250 TRNS,TRNS,TRNS,TRNS,TRNS,
251 TRNS,TRNS,
252 TRNS,
253 TRNS,TRNS,TRNS,
254 // right hand
255 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
256 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
257 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
258 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
259 TRNS,TRNS,TRNS,TRNS,TRNS,
260 TRNS,TRNS,
261 TRNS,
262 TRNS,TRNS,TRNS
263 ),
264
265 // MODIFIERS THAT WON'T BE STICKY
266
267 KEYMAP( // layout: layer 11: Special function-driven commands (any-key)
268 // left hand
269 FN8, FN8, FN8, FN8, FN8, FN8, FN8,
270 FN8, FN8, FN8, FN8, FN8, FN8, FN8,
271 LSFT,FN8, FN8, FN8, FN8, FN8,
272 FN8, FN8, FN8, FN8, FN8, FN8, FN8,
273 FN8, FN8, FN8, FN8, FN8,
274 FN8, FN8,
275 FN8,
276 FN8, FN10,FN8,
277 // right hand
278 FN8, FN8, FN8, FN8, FN8, FN8, FN8,
279 FN8, FN8, FN8, FN8, FN8, FN8, FN8,
280 FN8, FN8, FN8, FN8, FN8, RSFT,
281 FN8, FN8, FN8, FN8, FN8, FN8, FN8,
282 FN8, FN8, FN8, FN8, FN8,
283 FN8, FN8,
284 FN8,
285 FN8, FN8, FN8
286 ),
287
288 KEYMAP( // layout: layer 12: F-keys only
289 // left hand
290 FN0, NO, NO, NO, NO, NO, NO,
291 TRNS,F13, F14, F15, F16, NO, TRNS,
292 TRNS,F17, F18, F19, F20, NO,
293 TRNS,F21, F22, F23, F24, NO, TRNS,
294 FN13,FN13,TRNS,LALT,LGUI,
295 TRNS,TRNS,
296 TRNS,
297 LCTL,LSFT,TRNS,
298 // right hand
299 NO, NO, F10, F11, F12, NO, TRNS,
300 TRNS,NO, F7, F8, F9, NO, TRNS,
301 NO, F4, F5, F6, NO, TRNS,
302 TRNS,NO, F1, F2, F3, NO, TRNS,
303 RGUI,RALT,RCTL,TRNS,TRNS,
304 TRNS,TRNS,
305 TRNS,
306 TRNS,RSFT,RCTL
307 ),
308
309 KEYMAP( // layout: layer 13: reserved
310 // left hand
311 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
312 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
313 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
314 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
315 TRNS,TRNS,TRNS,TRNS,TRNS,
316 TRNS,TRNS,
317 TRNS,
318 TRNS,TRNS,TRNS,
319 // right hand
320 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
321 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
322 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
323 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
324 TRNS,TRNS,TRNS,TRNS,TRNS,
325 TRNS,TRNS,
326 TRNS,
327 TRNS,TRNS,TRNS
328 ),
329
330 KEYMAP( // layout: layer 14: reserved
331 // left hand
332 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
333 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
334 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
335 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
336 TRNS,TRNS,TRNS,TRNS,TRNS,
337 TRNS,TRNS,
338 TRNS,
339 TRNS,TRNS,TRNS,
340 // right hand
341 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
342 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
343 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
344 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
345 TRNS,TRNS,TRNS,TRNS,TRNS,
346 TRNS,TRNS,
347 TRNS,
348 TRNS,TRNS,TRNS
349 ),
350
351 // TEMPLATES
352
353/*
354 KEYMAP( // layout: layer N: transparent on edges, all others are empty
355 // left hand
356 TRNS,NO, NO, NO, NO, NO, NO,
357 TRNS,NO, NO, NO, NO, NO, TRNS,
358 TRNS,NO, NO, NO, NO, NO,
359 TRNS,NO, NO, NO, NO, NO, TRNS,
360 TRNS,TRNS,TRNS,LALT,LGUI,
361 TRNS,TRNS,
362 TRNS,
363 LCTL,LSFT,TRNS,
364 // right hand
365 NO, NO, NO, NO, NO, NO, TRNS,
366 TRNS,NO, NO, NO, NO, NO, TRNS,
367 NO, NO, NO, NO, NO, TRNS,
368 TRNS,NO, NO, NO, NO, NO, TRNS,
369 RGUI,RALT,TRNS,TRNS,TRNS,
370 TRNS,TRNS,
371 TRNS,
372 TRNS,RSFT,RCTL
373 ),
374 KEYMAP( // layout: layer N: fully transparent
375 // left hand
376 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
377 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
378 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
379 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
380 TRNS,TRNS,TRNS,TRNS,TRNS,
381 TRNS,TRNS,
382 TRNS,
383 TRNS,TRNS,TRNS,
384 // right hand
385 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
386 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
387 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
388 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
389 TRNS,TRNS,TRNS,TRNS,TRNS,
390 TRNS,TRNS,
391 TRNS,
392 TRNS,TRNS,TRNS
393 ),
394*/
395
396};
397
398/* id for user defined functions */
399enum function_id {
400 TEENSY_KEY,
401 ANY_KEY,
402 PLOVER_SWITCH,
403 SHIFT_SWITCH,
404 FKEY_SWITCH,
405};
406
407enum macro_id {
408 MACRO_PASSWORD1,
409 MACRO_PASSWORD2,
410 MACRO_PASSWORD3,
411};
412
413/*
414 * Fn action definition
415 */
416static const uint16_t PROGMEM fn_actions[] = {
417 ACTION_LAYER_SET(0, ON_PRESS), // FN0 - set layer0 only
418 ACTION_LAYER_TAP_TOGGLE(8), // FN1 - switch to BlueShift
419 ACTION_LAYER_TAP_TOGGLE(7), // FN2 - movement tap/toggle
420 ACTION_LAYER_TAP_TOGGLE(6), // FN3 - numpad
421 ACTION_FUNCTION(TEENSY_KEY), // FN4 - Teensy key
422 ACTION_FUNCTION(PLOVER_SWITCH), // FN5 - enable Plover
423 ACTION_FUNCTION(PLOVER_SWITCH), // ** FN6 - suspend Plover (OUT OF USE)
424 ACTION_LAYER_MOMENTARY(11), // FN7 - Trigger the AnyKey layer
425 ACTION_FUNCTION(ANY_KEY), // FN8 - AnyKey functional layer
426 ACTION_MODS_TAP_TOGGLE(MOD_LSFT), // ** FN9 - tap toggle shift (OUT OF USE)
427 ACTION_MACRO(MACRO_PASSWORD1), // FN10 - password1
428 ACTION_MACRO(MACRO_PASSWORD2), // FN11 - password2
429 ACTION_FUNCTION(SHIFT_SWITCH), // FN12 - symbolized number row
430 ACTION_FUNCTION(FKEY_SWITCH), // FN13 - trigger Fkey layer and get rid of it appropriately
431};
432
433void simon_hotkey(keyrecord_t *record, action_t action)
434{
435 keyevent_t event = record->event;
436
437 switch (action.kind.id) {
438 /* Key and Mods */
439 case ACT_LMODS:
440 case ACT_RMODS:
441 {
442 uint8_t mods = (action.kind.id == ACT_LMODS) ? action.key.mods :
443 action.key.mods<<4;
444 if (event.pressed) {
445 if (mods) {
446 add_weak_mods(mods);
447 send_keyboard_report();
448 }
449 register_code(action.key.code);
450 } else {
451 unregister_code(action.key.code);
452 if (mods) {
453 del_weak_mods(mods);
454 send_keyboard_report();
455 }
456 }
457 }
458 break;
459 default:
460 print("not supported.\n");
461 break;
462 }
463}
464
465void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
466{
467 keyevent_t event = record->event;
468
469 // print("action_function called\n");
470 // print("id = "); phex(id); print("\n");
471 // print("opt = "); phex(opt); print("\n");
472 if (id == TEENSY_KEY) {
473 clear_keyboard();
474 print("\n\nJump to bootloader... ");
475 _delay_ms(250);
476 bootloader_jump(); // should not return
477 print("not supported.\n");
478 }
479 else if (id == PLOVER_SWITCH) {
480 if (event.pressed) {
481 if (layer_state & 1<<4) { // plover is already on
482 print("switching off plover layout...\n");
483 action_macro_play(MACRO( D(A), D(W), D(P), D(F), D(SCLN), D(LBRC), D(QUOT), D(D), D(A), D(L), U(W), U(P), U(F), U(SCLN), U(LBRC), U(QUOT), U(D), U(L), END));
484 layer_off(4);
485 } else {
486 print("switching on plover layout...\n");
487 action_macro_play(MACRO(D(LANG5), U(LANG5), D(W), D(P), D(F), D(SCLN), D(LBRC), D(QUOT), D(D), D(A), U(W), U(P), U(F), U(SCLN), U(LBRC), U(QUOT), U(D), END));
488 layer_on(4);
489 }
490 }
491 }
492 else if (id == ANY_KEY) {
493 uint8_t col = event.key.col;
494 uint8_t row = event.key.row;
495
496 action_t action = { .code = ACTION_NO };
497
498 if (col == 3 && row == 2) { // Q
499 action.code = ACTION_MODS_KEY(MOD_LALT, KC_F4);
500 }
501 if (col == 3 && row == 10) { // W
502 action.code = ACTION_MODS_KEY(MOD_LALT, KC_F4);
503 }
504 if (col == 4 && row == 12) { // Alt+tab
505 action.code = ACTION_MODS_KEY(MOD_LALT, KC_TAB);
506 }
507 if (action.code != ACTION_NO) {
508 simon_hotkey(record, action);
509 }
510 else
511 {
512 print("col = "); pdec(col); print("\n");
513 print("row = "); pdec(row); print("\n");
514 }
515 }
516 else if (id == SHIFT_SWITCH) {
517 uint8_t col = event.key.col;
518 uint8_t row = event.key.row;
519 uint8_t savedmods = get_mods();
520 uint8_t shiftpressed = (savedmods & (MOD_LSFT | MOD_RSFT));
521 uint8_t othermodspressed = (savedmods & (MOD_LGUI | MOD_RGUI | MOD_LCTL | MOD_RCTL | MOD_LALT | MOD_RALT ));
522
523 action_t action = { .code = ACTION_NO };
524 uint8_t keycode = KC_NO;
525
526 if (col == 0) { // Number row
527 switch (row) {
528 case 1:
529 keycode = KC_1;
530 break;
531 case 2:
532 keycode = KC_2;
533 break;
534 case 3:
535 keycode = KC_3;
536 break;
537 case 4:
538 keycode = KC_4;
539 break;
540 case 5:
541 keycode = KC_5;
542 break;
543 case 8:
544 keycode = KC_6;
545 break;
546 case 9:
547 keycode = KC_7;
548 break;
549 case 10:
550 keycode = KC_8;
551 break;
552 case 11:
553 keycode = KC_9;
554 break;
555 case 12:
556 keycode = KC_0;
557 break;
558 default:
559 break;
560 }
561 }
562 if (col == 1) { // next row
563 switch (row) {
564 case 2:
565 keycode = KC_LBRC;
566 break;
567 case 3:
568 keycode = KC_RBRC;
569 break;
570 default:
571 break;
572 }
573 }
574 if (keycode != KC_NO) {
575 action.code = ACTION_MODS_KEY(MOD_LSFT, keycode);
576 }
577 if (action.code != ACTION_NO) {
578 if (othermodspressed) {
579 action.key.mods = 0;
580 }
581 else if (shiftpressed) {
582 action.key.mods = 0;
583 del_mods(MOD_LSFT | MOD_RSFT);
584 }
585 simon_hotkey(record, action);
586 if (shiftpressed) {
587 set_mods(savedmods);
588 }
589 }
590 }
591 else if (id == FKEY_SWITCH) {
592 uint8_t row = event.key.row;
593 if (event.pressed) {
594 layer_on(12);
595 }
596 else {
597 if ((row == 0) && (layer_state & 1<<6)) { // left button and from numpad; out-of-order release
598 layer_off(6);
599 }
600 else if ((row == 1) && (layer_state & 1<<8)) { // right button and from BlueShift; out-of-order release
601 layer_off(8);
602 }
603 else {
604 layer_off(12);
605 }
606 }
607 }
608}
609
610/*
611 * Macro definition
612 */
613const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
614{
615 keyevent_t event = record->event;
616
617 if (event.pressed) {
618 switch (id) {
619#include "keymap_simon_passwords.h"
620 }
621 }
622 return MACRO_NONE;
623}
624