]> git.donarmstrong.com Git - tmk_firmware.git/blob - keyboard/ergodox/keymap_cub.h
Additional switch to L2
[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 /*
241     // templates to copy from
242
243     KEYMAP(  // layout: layer N: transparent on edges, all others are empty
244         // left hand
245         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
246         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
247         TRNS,NO,  NO,  NO,  NO,  NO,
248         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
249         TRNS,TRNS,TRNS,LALT,LGUI,
250                                       TRNS,TRNS,
251                                            TRNS,
252                                  LCTL,LSFT,TRNS,
253         // right hand
254              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
255              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
256                   NO,  NO,  NO,  NO,  NO,  TRNS,
257              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
258                        RGUI,RALT,TRNS,TRNS,TRNS,
259         TRNS,TRNS,
260         TRNS,
261         TRNS,RSFT,RCTL
262     ),
263     KEYMAP(  // layout: layer N: fully transparent
264         // left hand
265         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
266         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
267         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
268         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
269         TRNS,TRNS,TRNS,TRNS,TRNS,
270                                       TRNS,TRNS,
271                                            TRNS,
272                                  TRNS,TRNS,TRNS,
273         // right hand
274              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
275              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
276                   TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
277              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
278                        TRNS,TRNS,TRNS,TRNS,TRNS,
279         TRNS,TRNS,
280         TRNS,
281         TRNS,TRNS,TRNS
282     ),
283 */
284
285 };
286
287 /* id for user defined functions */
288 enum function_id {
289     TEENSY_KEY,
290 };
291
292 /*
293  * Fn action definition
294  */
295 static const uint16_t PROGMEM fn_actions[] = {
296     ACTION_LAYER_SET(0, ON_BOTH),                   // FN0 - switch to Layer0
297     ACTION_LAYER_MOMENTARY(1),                      // FN1 - push Layer1
298     ACTION_LAYER_SET(2, ON_BOTH),                   // FN2 - switch to Layer2
299     ACTION_LAYER_MOMENTARY(3),                      // FN3 - push Layer3
300     ACTION_LAYER_MOMENTARY(4),                      // FN4 - push Layer4
301     ACTION_LAYER_SET(5, ON_BOTH),                   // FN5 - switch to Layer5
302     ACTION_LAYER_MOMENTARY(2),                      // FN6 - push Layer2
303     ACTION_FUNCTION(TEENSY_KEY),                    // FN7 - Teensy key
304
305     ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC),         // FN8  = LShift with tap BackSpace
306     ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC),          // FN9  = LCtrl with tap Escape
307     ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC),          // FN10 = LAlt with tap Space
308     ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS),          // FN11 = RAlt with tap Ins
309     ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),          // FN12 = RShift with tap Enter
310     ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC),          // FN13 = RCtrl with tap Space
311     ACTION_MODS_TAP_KEY(MOD_RSFT, KC_MINS),         // FN14 = RShift with tap Enter
312     ACTION_MODS_TAP_KEY(MOD_RCTL, KC_BSLS),         // FN15 = RCtrl with tap Space
313     ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB),          // FN16 = LShift with tap Tab
314     ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC),          // FN17 = LShift with tap Tab
315
316     ACTION_LAYER_TAP_KEY(2, KC_H),                  // FN18 = L2 symbols on J key, to use with Mouse keys
317     ACTION_LAYER_TAP_KEY(2, KC_V),                  // FN19 = L2 symbols on V key, to use with Numpad keys
318     ACTION_LAYER_TAP_KEY(6, KC_A),                  // FN20 = L6 symbols on A key, to use with F* keys
319     ACTION_LAYER_TAP_KEY(6, KC_SCLN),               // FN21 = L6 symbols on ; key, to use with F* keys
320 };
321
322 void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
323 {
324     print("action_function called\n");
325     print("id  = "); phex(id); print("\n");
326     print("opt = "); phex(opt); print("\n");
327     if (id == TEENSY_KEY) {
328         clear_keyboard();
329         print("\n\nJump to bootloader... ");
330         _delay_ms(250);
331         bootloader_jump(); // should not return
332         print("not supported.\n");
333     }
334 }
335