aboutsummaryrefslogtreecommitdiff
path: root/keyboard/ergodox/keymaps/keymap_cub.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboard/ergodox/keymaps/keymap_cub.c')
-rw-r--r--keyboard/ergodox/keymaps/keymap_cub.c595
1 files changed, 595 insertions, 0 deletions
diff --git a/keyboard/ergodox/keymaps/keymap_cub.c b/keyboard/ergodox/keymaps/keymap_cub.c
new file mode 100644
index 000000000..6e6d0cd8d
--- /dev/null
+++ b/keyboard/ergodox/keymaps/keymap_cub.c
@@ -0,0 +1,595 @@
1static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
2 /*
3 * Keymap: Default Layer in QWERTY
4 *
5 * ,--------------------------------------------------. ,--------------------------------------------------.
6 * | ~ | 1 | 2 | 3 | 4 | 5 | \ | | - | 6 | 7 | 8 | 9 | 0 | = |
7 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
8 * | Tab | Q | W | E | R | T | ~L5 | | ~L6 | Y | U | I | O | P | [ |
9 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
10 * | Tab/Shf| A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
11 * |--------+------+------+------+------+------| L0 | | ~L7 |------+------+------+------+------+--------|
12 * | LCtrl | Z | X | C | V | B | | | | N | M | , | . | / | ] |
13 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
14 * | ~L5 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L6 |
15 * `----------------------------------' `----------------------------------'
16 * ,-------------. ,-------------.
17 * | +L2 | Home | | PgUp | Del |
18 * ,------|------|------| |------+------+------.
19 * | | | End | | PgDn | | |
20 * | BkSp | ESC |------| |------| Enter| Space|
21 * | | | Spc | | Ins | | |
22 * `--------------------' `--------------------'
23 *
24 *
25 *
26 ****************************************************************************************************
27 *
28 * Under XOrg, I use my own mapping from QWERTY to "Workman for Programmers"
29 * See XOrg files in ./addons/ subdirectory.
30 *
31 * I have to do so, because of two things:
32 * 1) my native language is Russian, and XOrg keymap for it is based on QWERTY layout
33 * 2) I want to have non-standart shifted keys, like $ (as normal) and @ (as shifted), or _ and -
34 *
35 * And even if (2) could be solved using FN* keys (but there is limit in firmware for only 32 such
36 * keys), then (1) can't be solved at firmware level at all.
37 *
38 * So, I have to stick with QWERTY as my main layout + my own XOrg keyboard layout for English.
39 * But sometimes I have to input something when XOrg is not active - for example, in Linux console,
40 * or in firmware console (while debugging firmware), or when keyboard is connected to not my computer.
41 *
42 * For such cases I have Layer1 :)
43 * // hint: switch to Layer1 is only at Layer6
44 *
45 ****************************************************************************************************
46 *
47 *
48 *
49 * Keymap: Default Layer in Workman
50 *
51 * ,--------------------------------------------------. ,--------------------------------------------------.
52 * | ~ | ; | ! | # | { | } | ' | | ^ | [ | ] | * | ( | ) | = |
53 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
54 * | Tab | Q | D | R | W | B | NO | | ~L7 | J | F | U | P | $ | : |
55 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
56 * | Tab/Shf| A | S | H | T | G |------| |------| Y | N | E | O | I | - |
57 * |--------+------+------+------+------+------| Home | | End |------+------+------+------+------+--------|
58 * | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | | |
59 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
60 * | ~L5 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L6 |
61 * `----------------------------------' `----------------------------------'
62 * ,-------------. ,-------------.
63 * | L0 | +L2 | | PgUp | Del |
64 * ,------|------|------| |------+------+------.
65 * | | | NO | | PgDn | | |
66 * | BkSp | ESC |------| |------| Enter| Space|
67 * | | | Spc | | Ins | | |
68 * `--------------------' `--------------------'
69 *
70 * Keymap: Default Layer in Workman / with Shift
71 *
72 * ,--------------------------------------------------. ,--------------------------------------------------.
73 * | ` | 1 | 2 | 3 | 4 | 5 | " | | \ | 6 | 7 | 8 | 9 | 0 | + |
74 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
75 * | Tab | Q | D | R | W | B | NO | | ~L7 | J | F | U | P | @ | % |
76 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
77 * | Tab/Shf| A | S | H | T | G |------| |------| Y | N | E | O | I | _ |
78 * |--------+------+------+------+------+------| Home | | End |------+------+------+------+------+--------|
79 * | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | & |
80 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
81 * | ~L5 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L6 |
82 * `----------------------------------' `----------------------------------'
83 * ,-------------. ,-------------.
84 * | L0 | +L2 | | PgUp | Del |
85 * ,------|------|------| |------+------+------.
86 * | | | NO | | PgDn | | |
87 * | BkSp | ESC |------| |------| Enter| Space|
88 * | | | Spc | | Ins | | |
89 * `--------------------' `--------------------'
90 *
91 */
92
93 KEYMAP( // Layer0: default, leftled:none
94 // left hand
95 GRV, 1, 2, 3, 4, 5, BSLS,
96 FN2, Q, W, E, R, T, FN23,
97 FN11,FN28,FN29,FN30,FN31,G,
98 FN12,FN24,FN25,FN26,FN27,B, HOME,
99 FN21,FN20,CAPS,FN13,FN14,
100 FN17,FN19,
101 NO,
102 FN5, FN6, FN7,
103 // right hand
104 MINS,6, 7, 8, 9, 0, EQL,
105 FN23,Y, U, I, O, P, LBRC,
106 H, J, K, L, SCLN,FN15,
107 END, N, M, COMM,DOT, SLSH,FN16,
108 LEFT,UP, DOWN,RGHT,FN22,
109 PGUP,DEL,
110 PGDN,
111 FN8, FN9, FN10
112 ),
113
114 KEYMAP( // Layer1: Workman layout, leftled:all
115 // left hand
116 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
117 TRNS,Q, D, R, W, B, TRNS,
118 TRNS,A, S, H, T, G,
119 TRNS,Z, X, M, C, V, TRNS,
120 TRNS,TRNS,FN17,TRNS,TRNS,
121 TRNS,TRNS,
122 TRNS,
123 TRNS,TRNS,TRNS,
124 // right hand
125 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
126 TRNS,J, F, U, P, 4, TRNS,
127 Y, N, E, O, I, TRNS,
128 TRNS,K, L, TRNS,TRNS,TRNS,TRNS,
129 TRNS,TRNS,TRNS,TRNS,TRNS,
130 TRNS,TRNS,
131 TRNS,
132 TRNS,TRNS,TRNS
133 ),
134
135 KEYMAP( // Layer2: numpad, leftled:mid/blue
136 // left hand
137 TRNS,NO, NO, NO, NO, PAUS,PSCR,
138 TRNS,NO, NO, NO, NO, NO, TRNS,
139 TRNS,NO, NO, NO, TRNS,NO,
140 TRNS,NO, NO, NO, TRNS,NO, TRNS,
141 TRNS,TRNS,FN17,TRNS,TRNS,
142 TRNS,TRNS,
143 TRNS,
144 TRNS,TRNS,TRNS,
145 // right hand
146 SLCK,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
147 TRNS,NO, P7, P8, P9, PMNS,PGUP,
148 NO, P4, P5, P6, PPLS,PGDN,
149 TRNS,NO, P1, P2, P3, PPLS,PENT,
150 P0, PDOT,SLSH,PENT,PENT,
151 TRNS,TRNS,
152 TRNS,
153 TRNS,TRNS,TRNS
154 ),
155
156 KEYMAP( // Layer3: F-keys + PgUp/PgDn on right hand, leftled:bot/green
157 // left hand
158 TRNS,NO, NO, NO, NO, NO, NO,
159 TRNS,NO, NO, NO, NO, NO, TRNS,
160 TRNS,NO, TRNS,NO, NO, NO,
161 TRNS,NO, TRNS,NO, NO, NO, TRNS,
162 TRNS,TRNS,TRNS,LALT,LGUI,
163 TRNS,TRNS,
164 TRNS,
165 LCTL,LSFT,TRNS,
166 // right hand
167 NO, NO, NO, NO, NO, NO, TRNS,
168 TRNS,NO, F1, F2, F3, F4, PGUP,
169 NO, F5, F6, F7, F8, PGDN,
170 TRNS,NO, F9, F10, F11, F12, APP,
171 RGUI,RALT,TRNS,TRNS,TRNS,
172 TRNS,TRNS,
173 TRNS,
174 TRNS,RSFT,RCTL
175 ),
176
177 KEYMAP( // Layer4: unconvenient keys on right hand, leftled:top/white
178 // left hand
179 TRNS,NO, NO, NO, NO, NO, NO,
180 TRNS,NO, NO, NO, NO, NO, TRNS,
181 TRNS,TRNS,NO, NO, NO, NO,
182 TRNS,TRNS,NO, NO, NO, NO, TRNS,
183 TRNS,TRNS,TRNS,LALT,LGUI,
184 TRNS,TRNS,
185 TRNS,
186 TRNS,TRNS,TRNS,
187
188 /* in Workman right hand will be:
189 { } ( ) +
190 ^ ! ? =
191 ' ! $ " ; \
192 # [ < > ] \
193 */
194
195 // right hand
196 NO, NO, 4, 5, 9, 0, PPLS,
197 TRNS,MINS,2, FN5, 9, 0, EQL,
198 BSLS,2, P, FN1, 1, FN2,
199 TRNS,3, 6, FN3, FN4, 7, FN2,
200 TRNS,TRNS,TRNS,TRNS,TRNS,
201 TRNS,TRNS,
202 TRNS,
203 TRNS,TRNS,TRNS
204 ),
205
206 KEYMAP( // Layer5: F-keys instead of numbers, leftled:top/white
207 // left hand
208 TRNS,F1, F2, F3, F4, F5, F6,
209 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
210 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
211 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
212 TRNS,TRNS,TRNS,TRNS,TRNS,
213 TRNS,TRNS,
214 TRNS,
215 TRNS,TRNS,TRNS,
216 // right hand
217 F7, F8, F9, F10, F11, F12, TRNS,
218 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
219 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
220 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
221 TRNS,TRNS,TRNS,TRNS,TRNS,
222 TRNS,TRNS,
223 TRNS,
224 TRNS,TRNS,TRNS
225 ),
226
227 KEYMAP( // Layer6: F-keys + utils(Teensy, Workman-layer switch), leftled:top/white+onboard
228 // left hand
229 TRNS,F1, F2, F3, F4, F5, F6,
230 FN0, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
231 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
232 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
233 FN18,TRNS,TRNS,TRNS,TRNS,
234 TRNS,TRNS,
235 TRNS,
236 TRNS,TRNS,TRNS,
237 // right hand
238 F7, F8, F9, F10, F11, F12, TRNS,
239 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN0,
240 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
241 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
242 TRNS,TRNS,TRNS,TRNS,TRNS,
243 TRNS,TRNS,
244 TRNS,
245 TRNS,TRNS,TRNS
246 ),
247
248 //
249 // rarely used
250 //
251
252 KEYMAP( // Layer7: F-keys only, leftled:top/white
253 // left hand
254 FN0, NO, NO, NO, NO, NO, NO,
255 FN1, F13, F14, F15, F16, NO, TRNS,
256 TRNS,F17, F18, F19, F20, NO,
257 TRNS,F21, F22, F23, F24, NO, TRNS,
258 TRNS,TRNS,TRNS,TRNS,TRNS,
259 TRNS,TRNS,
260 TRNS,
261 TRNS,TRNS,TRNS,
262 // right hand
263 NO, NO, NO, NO, NO, NO, TRNS,
264 TRNS,NO, F1, F2, F3, F4, TRNS,
265 NO, F5, F6, F7, F8, TRNS,
266 TRNS,NO, F9, F10, F11, F12, TRNS,
267 TRNS,TRNS,TRNS,TRNS,TRNS,
268 TRNS,TRNS,
269 TRNS,
270 SLEP,TRNS,TRNS
271 ),
272
273 KEYMAP( // Layer8: mouse and navigation, leftled:mid/blue+bot/green
274 // left hand
275 TRNS,NO, NO, NO, NO, NO, NO,
276 TRNS,NO, NO, NO, ACL0,NO, TRNS,
277 TRNS,NO, NO, TRNS,ACL1,NO,
278 TRNS,NO, NO, TRNS,ACL2,NO, TRNS,
279 TRNS,TRNS,TRNS,TRNS,TRNS,
280 TRNS,TRNS,
281 TRNS,
282 TRNS,TRNS,TRNS,
283
284 // right hand
285 F16, MPLY,MPRV,MNXT,VOLD,VOLU,MUTE,
286 F14, BTN2,WH_L,WH_U,WH_D,WH_R,PGUP,
287 BTN1,MS_L,MS_U,MS_D,MS_R,PGDN,
288 F15, BTN3,HOME,END, DEL, INS, NO,
289 TRNS,TRNS,TRNS,TRNS,TRNS,
290 TRNS,TRNS,
291 TRNS,
292 TRNS,TRNS,TRNS
293 ),
294
295 KEYMAP( // Layer9: application-specific shortcuts (mostly browser), leftled:top/white+bot/green
296 // left hand
297 TRNS,NO, NO, NO, NO, NO, NO,
298 TRNS,NO, NO, NO, NO, NO, TRNS,
299 TRNS,NO, NO, NO, NO, NO,
300 TRNS,NO, NO, NO, TRNS,NO, TRNS,
301 TRNS,TRNS,TRNS,TRNS,TRNS,
302 TRNS,TRNS,
303 TRNS,
304 TRNS,TRNS,TRNS,
305 // right hand
306 NO, NO, NO, NO, NO, NO, TRNS,
307 TRNS,NO, FN12,FN13,FN14,FN15,FN10,
308 FN1, FN2, FN3, FN4, FN5, FN11,
309 TRNS,TRNS,FN6, FN7, FN8, FN9, FN0,
310 TRNS,TRNS,TRNS,TRNS,TRNS,
311 TRNS,TRNS,
312 TRNS,
313 TRNS,TRNS,TRNS
314 ),
315
316/*
317 // templates to copy from
318
319 KEYMAP( // LayerN: transparent on edges + hard-defined thumb keys, all others are empty
320 // left hand
321 TRNS,NO, NO, NO, NO, NO, NO,
322 TRNS,NO, NO, NO, NO, NO, TRNS,
323 TRNS,NO, NO, NO, NO, NO,
324 TRNS,NO, NO, NO, NO, NO, TRNS,
325 TRNS,TRNS,TRNS,LALT,LGUI,
326 TRNS,TRNS,
327 TRNS,
328 LCTL,LSFT,TRNS,
329 // right hand
330 NO, NO, NO, NO, NO, NO, TRNS,
331 TRNS,NO, NO, NO, NO, NO, TRNS,
332 NO, NO, NO, NO, NO, TRNS,
333 TRNS,NO, NO, NO, NO, NO, TRNS,
334 RGUI,RALT,TRNS,TRNS,TRNS,
335 TRNS,TRNS,
336 TRNS,
337 TRNS,RSFT,RCTL
338 ),
339 KEYMAP( // LayerN: fully transparent
340 // left 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 // right hand
350 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
351 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
352 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
353 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
354 TRNS,TRNS,TRNS,TRNS,TRNS,
355 TRNS,TRNS,
356 TRNS,
357 TRNS,TRNS,TRNS
358 ),
359*/
360
361};
362
363/* id for user defined functions & macros */
364enum function_id {
365 TEENSY_KEY,
366 CUSTOM_KEY,
367 L_CTRL_ALT_ENT,
368 R_CTRL_ALT_ENT,
369};
370
371enum macro_id {
372 XMONAD_RESET,
373 PASSWORD1,
374 PASSWORD2,
375 PASSWORD3,
376};
377
378/*
379 * Fn action definition
380 */
381static const uint16_t PROGMEM fn_actions[] = {
382 [0] = ACTION_FUNCTION(TEENSY_KEY), // FN0 - Teensy key
383
384 [1] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN1 = Shifted BackSlash // " in Workman
385 [2] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // FN2 = Shifted Minus // \ in Workman
386 [3] = ACTION_MODS_KEY(MOD_LSFT, KC_COMM), // FN3 = Shifted comma // < in Workman
387 [4] = ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // FN4 = Shifted dot // > in Workman
388
389 [5] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC), // FN5 = LShift with tap BackSpace
390 [6] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_DEL), // FN6 = LCtrl with tap Delete
391 [7] = ACTION_MODS_TAP_KEY(MOD_LALT, KC_ESC), // FN7 = LAlt with tap Escape
392 [8] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS), // FN8 = RAlt with tap Ins
393 [9] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // FN9 = RShift with tap Enter
394 [10] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC), // FN10 = RCtrl with tap Space
395
396 [11] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), // FN11 = LShift with tap Tab
397 [12] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_GRV), // FN12 = LCtrl with tap Tilda
398 [13] = ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC), // FN13 = LAlt with tap Space
399 [14] = ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC), // FN14 = LGui with tap Escape
400 [15] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_QUOT), // FN15 = RShift with tap quotes
401 [16] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC), // FN16 = RCtrl with tap ]
402
403 [17] = ACTION_LAYER_SET(0, ON_BOTH), // FN17 - set Layer0
404 [18] = ACTION_LAYER_SET(1, ON_BOTH), // FN18 - set Layer1, to use Workman layout at firmware level
405 [19] = ACTION_LAYER_SET(2, ON_BOTH), // FN19 - set Layer2, to use with Numpad keys
406
407 [21] = ACTION_FUNCTION_TAP(L_CTRL_ALT_ENT), // FN21 - momentary Layer5+CTRL+ALT on Enter, to use with F* keys on top row
408 [22] = ACTION_FUNCTION_TAP(R_CTRL_ALT_ENT), // FN22 - momentary Layer6+CTRL+ALT on Enter, to use with F* keys on top row + utils
409
410 [28] = ACTION_LAYER_TAP_KEY(4, KC_A), // FN28 = momentary Layer4 on A key, to use with unconvenient keys
411 [29] = ACTION_LAYER_TAP_KEY(3, KC_S), // FN29 = momentary Layer3 on S key, to use with F* keys
412 [30] = ACTION_LAYER_TAP_KEY(8, KC_D), // FN30 = momentary Layer8 on D key, to use with mouse and navigation keys
413 [31] = ACTION_LAYER_TAP_KEY(2, KC_F), // FN31 = momentary Layer2 on F key, to use with Numpad keys
414
415 // i'd like to remove this - will try to get used to live without this and convert them to usual keys
416 [20] = ACTION_LAYER_MOMENTARY(2), // FN20 - momentary Layer2, to use with Numpad keys
417// or
418// [20] = ACTION_FUNCTION_TAP(CUSTOM_KEY), // FN20 - use custom key, with tapping support
419
420 [23] = ACTION_LAYER_TAP_KEY(7, KC_BSLS), // FN23 - momentary Layer7 on ' , to use with F* keys (F1-F24)
421
422 [24] = ACTION_LAYER_TAP_KEY(4, KC_Z), // FN24 = momentary Layer4 on Z key, to use with unconvenient keys
423 [25] = ACTION_LAYER_TAP_KEY(3, KC_X), // FN25 = momentary Layer3 on X key, to use with F* keys
424 [26] = ACTION_LAYER_TAP_KEY(8, KC_C), // FN26 = momentary Layer8 on C key, to use with mouse and navigation keys
425 [27] = ACTION_LAYER_TAP_KEY(9, KC_V), // FN27 = momentary Layer9 on V key, to use with application-specific shortcuts
426};
427
428static const uint16_t PROGMEM fn_actions_4[] = {
429 [1] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN1 = Shifted BackSlash // " in Workman
430 [2] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // FN2 = Shifted Minus // \ in Workman
431 [3] = ACTION_MODS_KEY(MOD_LSFT, KC_COMM), // FN3 = Shifted comma // < in Workman
432 [4] = ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // FN4 = Shifted dot // > in Workman
433 [5] = ACTION_MODS_KEY(MOD_LSFT, KC_SLSH), // FN5 = Shifted slash // ? in Workman
434};
435
436static const uint16_t PROGMEM fn_actions_7[] = {
437 [0] = ACTION_MACRO(XMONAD_RESET), // FN0 = xmonad-reanimator
438 [1] = ACTION_MACRO(PASSWORD1), // FN1 = default password
439 [2] = ACTION_MACRO(PASSWORD1), // FN2 = other password
440 [3] = ACTION_MACRO(PASSWORD1), // FN3 = mega password
441};
442
443static const uint16_t PROGMEM fn_actions_9[] = {
444 [0] = ACTION_MODS_KEY(MOD_LCTL, KC_P0), // FN0 = Ctrl+0
445 [1] = ACTION_MODS_KEY(MOD_LALT, KC_P1), // FN1 = Alt+1
446 [2] = ACTION_MODS_KEY(MOD_LALT, KC_P2), // FN2 = Alt+2
447 [3] = ACTION_MODS_KEY(MOD_LALT, KC_P3), // FN3 = Alt+3
448 [4] = ACTION_MODS_KEY(MOD_LALT, KC_P4), // FN4 = Alt+4
449 [5] = ACTION_MODS_KEY(MOD_LALT, KC_P5), // FN5 = Alt+5
450 [6] = ACTION_MODS_KEY(MOD_LALT, KC_P6), // FN6 = Alt+6
451 [7] = ACTION_MODS_KEY(MOD_LALT, KC_P7), // FN7 = Alt+7
452 [8] = ACTION_MODS_KEY(MOD_LALT, KC_P8), // FN8 = Alt+8
453 [9] = ACTION_MODS_KEY(MOD_LALT, KC_P9), // FN9 = Alt+9
454 [10] = ACTION_MODS_KEY(MOD_LCTL|MOD_LSFT, KC_TAB), // FN10 = Ctrl+Shift+Tab
455 [11] = ACTION_MODS_KEY(MOD_LCTL, KC_TAB), // FN11 = Ctrl+Tab
456 [12] = ACTION_MODS_KEY(MOD_LCTL|MOD_LSFT, KC_PGUP), // FN12 = Ctrl+Shift+PgUp
457 [13] = ACTION_MODS_KEY(MOD_LCTL|MOD_LSFT, KC_PGDN), // FN13 = Ctrl+Shift+PgDn
458 [14] = ACTION_MODS_KEY(MOD_LCTL, KC_PMNS), // FN14 = Ctrl+Pad Minus
459 [15] = ACTION_MODS_KEY(MOD_LCTL, KC_PPLS), // FN15 = Ctrl+Pad Plus
460};
461
462void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
463{
464 // print("action_function called\n");
465 // print("id = "); phex(id); print("\n");
466 // print("opt = "); phex(opt); print("\n");
467
468 if (id == TEENSY_KEY) {
469 clear_keyboard();
470 print("\n\nJump to bootloader... ");
471 _delay_ms(50);
472 bootloader_jump(); // should not return
473 print("not supported.\n");
474 }
475
476 if (id == L_CTRL_ALT_ENT || id == R_CTRL_ALT_ENT) {
477 if (record->tap.count == 0 || record->tap.interrupted) {
478 uint8_t weak_mods;
479 uint8_t layer;
480
481 if (id == L_CTRL_ALT_ENT) {
482 weak_mods = MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT);
483 layer = 5;
484 } else {
485 weak_mods = MOD_BIT(KC_RCTL) | MOD_BIT(KC_RALT);
486 layer = 6;
487 }
488
489 if (record->event.pressed) {
490 layer_on(layer);
491 add_weak_mods(weak_mods);
492 } else {
493 del_weak_mods(weak_mods);
494 layer_off(layer);
495 }
496 } else {
497 if (record->event.pressed) {
498 add_key(KC_ENT);
499 send_keyboard_report();
500 } else {
501 del_key(KC_ENT);
502 send_keyboard_report();
503 }
504 }
505 }
506
507
508/*
509 * just an example of custom key implementation
510 * not really needed with custom keymap_fn_to_action(),
511 * because it will allow you to have 32 FN** keys on EACH layer
512 */
513
514/*
515 keyevent_t event = record->event;
516
517 if (id == CUSTOM_KEY) {
518 uint8_t layer = biton32(layer_state);
519 uint8_t col = event.key.col;
520 uint8_t row = event.key.row;
521 uint8_t handled = 0;
522
523 if (event.pressed) {
524 if (layer == XXX && col == XXX && row == XXX) {
525 action_macro_play(
526 MACRO(
527 ...........
528 END)
529 );
530 handled++;
531 }
532 }
533 }
534
535 if (!handled) {
536 print("custom key not handled");
537 print(": layer "); pdec(layer);
538 print(", col "); pdec(col);
539 print(", row "); pdec(row);
540 print("\n");
541 }
542 }
543*/
544
545}
546
547#include "keymap_passwords.h"
548const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
549 if (record->event.pressed) {
550 switch (id) {
551 case XMONAD_RESET: return MACRO_XMONAD_RESET;
552 case PASSWORD1: return MACRO_PASSWORD1;
553 }
554 }
555 return MACRO_NONE;
556}
557
558#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))
559#define FN_ACTIONS_4_SIZE (sizeof(fn_actions_4) / sizeof(fn_actions_4[0]))
560#define FN_ACTIONS_7_SIZE (sizeof(fn_actions_7) / sizeof(fn_actions_7[0]))
561#define FN_ACTIONS_9_SIZE (sizeof(fn_actions_9) / sizeof(fn_actions_9[0]))
562
563/*
564 * translates Fn keycode to action
565 * for some layers, use different translation table
566 */
567action_t keymap_fn_to_action(uint8_t keycode)
568{
569 uint8_t layer = biton32(layer_state);
570
571 action_t action;
572 action.code = ACTION_NO;
573
574 if (layer == 4 && FN_INDEX(keycode) < FN_ACTIONS_4_SIZE) {
575 action.code = pgm_read_word(&fn_actions_4[FN_INDEX(keycode)]);
576 }
577
578 if (layer == 7 && FN_INDEX(keycode) < FN_ACTIONS_7_SIZE) {
579 action.code = pgm_read_word(&fn_actions_7[FN_INDEX(keycode)]);
580 }
581
582 if (layer == 9 && FN_INDEX(keycode) < FN_ACTIONS_9_SIZE) {
583 action.code = pgm_read_word(&fn_actions_9[FN_INDEX(keycode)]);
584 }
585
586 // by default, use fn_actions from default layer 0
587 // this is needed to get mapping for same key, that was used switch to some layer,
588 // to have possibility to switch layers back
589 if (action.code == ACTION_NO && FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
590 action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
591 }
592
593 return action;
594}
595