]> git.donarmstrong.com Git - tmk_firmware.git/blob - keyboard/ergodox/keymap_cub.h
New layer for F* keys
[tmk_firmware.git] / keyboard / ergodox / keymap_cub.h
1 static 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  | ~L1  |           | ~L3  |   Y  |   U  |   I  |   O  |   P  |   '    |
9      * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
10      * | LShift |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | - FN14 |
11      * |--------+------+------+------+------+------|  L0  |           | ~L4  |------+------+------+------+------+--------|
12      * | LCtrl  |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | \ FN15 |
13      * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
14      *   | ~L1  | ~L2  | Caps | LAlt | LGui |                                       |  Lft |  Up  |  Dn  | Rght | ~L4  |
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 Layer5 :)
43      * // hint: switch to Layer5 is only at Layer4
44      *
45      ****************************************************************************************************
46      *
47      *
48      *
49      * Keymap: Default Layer in Workman
50      *
51      * ,--------------------------------------------------.           ,--------------------------------------------------.
52      * |   ~    |   ;  |   !  |   #  |   {  |   }  |   '  |           |   ^  |   [  |   ]  |   *  |   (  |   )  |   =    |
53      * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
54      * | Tab    |   Q  |   D  |   R  |   W  |   B  | ~L1  |           | ~L3  |   J  |   F  |   U  |   P  |   $  |   :    |
55      * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
56      * | LShift |   A  |   S  |   H  |   T  |   G  |------|           |------|   Y  |   N  |   E  |   O  |   I  | _ FN14 |
57      * |--------+------+------+------+------+------|  L0  |           | ~L4  |------+------+------+------+------+--------|
58      * | LCtrl  |   Z  |   X  |   M  |   C  |   V  |      |           |      |   K  |   L  |   ,  |   .  |   /  | | FN15 |
59      * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
60      *   | ~L1  | ~L2  | Caps | LAlt | LGui |                                       |  Lft |  Up  |  Dn  | Rght | ~L4  |
61      *   `----------------------------------'                                       `----------------------------------'
62      *                                        ,-------------.       ,-------------.
63      *                                        | +L2  | Home |       | PgUp | Del  |
64      *                                 ,------|------|------|       |------+------+------.
65      *                                 |      |      |  End |       | 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  | ~L1  |           | ~L3  |   J  |   F  |   U  |   P  |   @  |   %    |
76      * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
77      * | LShift |   A  |   S  |   H  |   T  |   G  |------|           |------|   Y  |   N  |   E  |   O  |   I  | - FN14 |
78      * |--------+------+------+------+------+------|  L0  |           | ~L4  |------+------+------+------+------+--------|
79      * | LCtrl  |   Z  |   X  |   M  |   C  |   V  |      |           |      |   K  |   L  |   ,  |   .  |   /  | & FN15 |
80      * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
81      *   | ~L1  | ~L2  | Caps | LAlt | LGui |                                       |  Lft |  Up  |  Dn  | Rght | ~L4  |
82      *   `----------------------------------'                                       `----------------------------------'
83      *                                        ,-------------.       ,-------------.
84      *                                        | +L2  | Home |       | PgUp | Del  |
85      *                                 ,------|------|------|       |------+------+------.
86      *                                 |      |      |  End |       | PgDn |      |      |
87      *                                 | BkSp |  ESC |------|       |------| Enter| Space|
88      *                                 |      |      |  Spc |       | Ins  |      |      |
89      *                                 `--------------------'       `--------------------'
90      *
91      */
92
93     KEYMAP(  // layout: layer 0: default
94         // left hand
95         GRV, 1,   2,   3,   4,   5,   LBRC,
96         TAB, Q,   W,   E,   R,   T,   FN1,
97         FN16,FN20,S,   D,   F,   G,
98         LCTL,Z,   X,   C,   FN19,B,   FN0,
99         FN1, FN6, CAPS,LALT,FN17,
100                                       FN2, HOME,
101                                            END,
102                                  FN8, FN9, FN10,
103         // right hand
104              RBRC,6,   7,   8,   9,   0,   EQL,
105              FN3, Y,   U,   I,   O,   P,   QUOT,
106                   FN18,J,   K,   L,   FN21,FN14,
107              FN4, N,   M,   COMM,DOT, SLSH,FN15,
108                        LEFT,UP,  DOWN,RGHT,FN4,
109         PGUP,DEL,
110         PGDN,
111         FN11,FN12,FN13
112     ),
113
114     KEYMAP(  // layout: layer 1: F-keys instead of numbers
115         // left hand
116         TRNS,F1,  F2,  F3,  F4,  F5,  F6,
117         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
118         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
119         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
120         TRNS,TRNS,TRNS,TRNS,TRNS,
121                                       TRNS,TRNS,
122                                            TRNS,
123                                  TRNS,TRNS,TRNS,
124         // right hand
125              F7,  F8,  F9,  F10, F11, F12, TRNS,
126              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
127                   TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
128              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
129                        TRNS,TRNS,TRNS,TRNS,TRNS,
130         TRNS,TRNS,
131         TRNS,
132         TRNS,TRNS,TRNS
133     ),
134
135     KEYMAP(  // layout: layer 2: mouse + numpad
136         // left hand
137         TRNS,NO,  NO,  NO,  NO,  PAUS,PSCR,
138         TRNS,WH_L,WH_U,WH_D,WH_R,BTN2,TRNS,
139         TRNS,MS_L,MS_U,MS_D,MS_R,BTN1,
140         TRNS,NO,  NO,  NO,  TRNS,BTN3,TRNS,
141         TRNS,TRNS,TRNS,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,BSPC,
148                   TRNS,P4,  P5,  P6,  PPLS,PENT,
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(  // layout: layer 3: F-keys only
157         // left hand
158         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
159         TRNS,F13, F14, F15, F16, NO,  TRNS,
160         TRNS,F17, F18, F19, F20, NO,
161         TRNS,F21, F22, F23, F24, NO,  TRNS,
162         TRNS,TRNS,TRNS,TRNS,TRNS,
163                                       TRNS,TRNS,
164                                            TRNS,
165                                  TRNS,TRNS,TRNS,
166         // right hand
167              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
168              TRNS,NO,  F1,  F2,  F3,  F4,  TRNS,
169                   NO,  F5,  F6,  F7,  F8,  TRNS,
170              TRNS,NO,  F9,  F10, F11, F12, TRNS,
171                        TRNS,TRNS,TRNS,TRNS,TRNS,
172         TRNS,TRNS,
173         TRNS,
174         TRNS,TRNS,TRNS
175     ),
176
177     KEYMAP(  // layout: layer 4: F-keys + cursor
178         // left hand
179         TRNS,F1,  F2,  F3,  F4,  F5,  F6,
180         FN7, NO,  PGUP,UP,  PGDN,PGUP,TRNS,
181         TRNS,NO,  LEFT,DOWN,RGHT,PGDN,
182         TRNS,NO,  NO,  END, HOME,NO,  TRNS,
183         FN5, TRNS,TRNS,TRNS,TRNS,
184                                       TRNS,TRNS,
185                                            TRNS,
186                                  TRNS,TRNS,TRNS,
187         // right hand
188              F7,  F8,  F9,  F10, F11, F12, MINS,
189              TRNS,PGUP,PGUP,UP,  PGDN,NO,  FN7,
190                   PGDN,LEFT,DOWN,RGHT,NO,  TRNS,
191              TRNS,NO,  HOME,END, NO,  NO,  TRNS,
192                        TRNS,TRNS,TRNS,TRNS,TRNS,
193         TRNS,TRNS,
194         TRNS,
195         TRNS,TRNS,TRNS
196     ),
197
198     KEYMAP(  // layout: layer 5: Workman layout
199         // left hand
200         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
201         TRNS,Q,   D,   R,   W,   B,   TRNS,
202         TRNS,A,   S,   H,   T,   G,
203         TRNS,Z,   X,   M,   C,   V,   TRNS,
204         TRNS,TRNS,TRNS,TRNS,TRNS,
205                                       TRNS,TRNS,
206                                            TRNS,
207                                  TRNS,TRNS,TRNS,
208         // right hand
209              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
210              TRNS,J,   F,   U,   P,   4,   TRNS,
211                   Y,   N,   E,   O,   I,   TRNS,
212              TRNS,K,   L,   TRNS,TRNS,TRNS,TRNS,
213                        TRNS,TRNS,TRNS,TRNS,TRNS,
214         TRNS,TRNS,
215         TRNS,
216         TRNS,TRNS,TRNS
217     ),
218
219     KEYMAP(  // layout: layer 6: F-keys on home+1 row
220         // left hand
221         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
222         TRNS,F1,  F2,  F3,  F4,  F5,  F11,
223         TRNS,TRNS,NO,  NO,  NO,  NO,
224         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
225         TRNS,TRNS,TRNS,LALT,LGUI,
226                                       TRNS,TRNS,
227                                            TRNS,
228                                  LCTL,LSFT,TRNS,
229         // right hand
230              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
231              F12, F6,  F7,  F8,  F9,  F10, PGUP,
232                   NO,  NO,  NO,  NO,  TRNS,PGDN,
233              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
234                        RGUI,RALT,TRNS,TRNS,TRNS,
235         TRNS,TRNS,
236         TRNS,
237         TRNS,RSFT,RCTL
238     ),
239
240     KEYMAP(  // layout: layer 7: F-keys on right hand
241         // left hand
242         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
243         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
244         TRNS,TRNS,NO,  NO,  NO,  NO,
245         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
246         TRNS,TRNS,TRNS,LALT,LGUI,
247                                       TRNS,TRNS,
248                                            TRNS,
249                                  LCTL,LSFT,TRNS,
250         // right hand
251              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
252              TRNS,NO,  F1,  F2,  F3,  F4,  PGUP,
253                   NO,  F5,  F6,  F7,  F8,  PGDN,
254              TRNS,NO,  F9,  F10, F11, F12, TRNS,
255                        RGUI,RALT,TRNS,TRNS,TRNS,
256         TRNS,TRNS,
257         TRNS,
258         TRNS,RSFT,RCTL
259     ),
260
261 /*
262     // templates to copy from
263
264     KEYMAP(  // layout: layer N: transparent on edges, all others are empty
265         // left hand
266         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
267         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
268         TRNS,NO,  NO,  NO,  NO,  NO,
269         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
270         TRNS,TRNS,TRNS,LALT,LGUI,
271                                       TRNS,TRNS,
272                                            TRNS,
273                                  LCTL,LSFT,TRNS,
274         // right hand
275              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
276              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
277                   NO,  NO,  NO,  NO,  NO,  TRNS,
278              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
279                        RGUI,RALT,TRNS,TRNS,TRNS,
280         TRNS,TRNS,
281         TRNS,
282         TRNS,RSFT,RCTL
283     ),
284     KEYMAP(  // layout: layer N: fully transparent
285         // left hand
286         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
287         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
288         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
289         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
290         TRNS,TRNS,TRNS,TRNS,TRNS,
291                                       TRNS,TRNS,
292                                            TRNS,
293                                  TRNS,TRNS,TRNS,
294         // right hand
295              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
296              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
297                   TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
298              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
299                        TRNS,TRNS,TRNS,TRNS,TRNS,
300         TRNS,TRNS,
301         TRNS,
302         TRNS,TRNS,TRNS
303     ),
304 */
305
306 };
307
308 /* id for user defined functions */
309 enum function_id {
310     TEENSY_KEY,
311 };
312
313 /*
314  * Fn action definition
315  */
316 static const uint16_t PROGMEM fn_actions[] = {
317     ACTION_LAYER_SET(0, ON_BOTH),                   // FN0 - switch to Layer0
318     ACTION_LAYER_MOMENTARY(1),                      // FN1 - push Layer1
319     ACTION_LAYER_SET(2, ON_BOTH),                   // FN2 - switch to Layer2
320     ACTION_LAYER_MOMENTARY(3),                      // FN3 - push Layer3
321     ACTION_LAYER_MOMENTARY(4),                      // FN4 - push Layer4
322     ACTION_LAYER_SET(5, ON_BOTH),                   // FN5 - switch to Layer5
323     ACTION_LAYER_MOMENTARY(2),                      // FN6 - push Layer2
324     ACTION_FUNCTION(TEENSY_KEY),                    // FN7 - Teensy key
325
326     ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC),         // FN8  = LShift with tap BackSpace
327     ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC),          // FN9  = LCtrl with tap Escape
328     ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC),          // FN10 = LAlt with tap Space
329     ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS),          // FN11 = RAlt with tap Ins
330     ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),          // FN12 = RShift with tap Enter
331     ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC),          // FN13 = RCtrl with tap Space
332     ACTION_MODS_TAP_KEY(MOD_RSFT, KC_MINS),         // FN14 = RShift with tap Enter
333     ACTION_MODS_TAP_KEY(MOD_RCTL, KC_BSLS),         // FN15 = RCtrl with tap Space
334     ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB),          // FN16 = LShift with tap Tab
335     ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC),          // FN17 = LShift with tap Tab
336
337     ACTION_LAYER_TAP_KEY(2, KC_H),                  // FN18 = L2 symbols on J key, to use with Mouse keys
338     ACTION_LAYER_TAP_KEY(2, KC_V),                  // FN19 = L2 symbols on V key, to use with Numpad keys
339     ACTION_LAYER_TAP_KEY(7, KC_A),                  // FN20 = L7 symbols on A key, to use with F* keys
340     ACTION_LAYER_TAP_KEY(6, KC_SCLN),               // FN21 = L6 symbols on ; key, to use with F* keys
341 };
342
343 void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
344 {
345     print("action_function called\n");
346     print("id  = "); phex(id); print("\n");
347     print("opt = "); phex(opt); print("\n");
348     if (id == TEENSY_KEY) {
349         clear_keyboard();
350         print("\n\nJump to bootloader... ");
351         _delay_ms(250);
352         bootloader_jump(); // should not return
353         print("not supported.\n");
354     }
355 }
356