aboutsummaryrefslogtreecommitdiff
path: root/layouts/community/ergodox/workman_osx_mdw/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'layouts/community/ergodox/workman_osx_mdw/keymap.c')
-rw-r--r--layouts/community/ergodox/workman_osx_mdw/keymap.c390
1 files changed, 217 insertions, 173 deletions
diff --git a/layouts/community/ergodox/workman_osx_mdw/keymap.c b/layouts/community/ergodox/workman_osx_mdw/keymap.c
index f14d9cf4c..5b2c7d718 100644
--- a/layouts/community/ergodox/workman_osx_mdw/keymap.c
+++ b/layouts/community/ergodox/workman_osx_mdw/keymap.c
@@ -1,6 +1,5 @@
1#include QMK_KEYBOARD_H 1#include QMK_KEYBOARD_H
2#include "debug.h" 2
3#include "action_layer.h"
4// readme 3// readme
5// This keyboard layout is based on the [Workman Dead layout](https://github.com/ojbucao/Workman/tree/master/mac#workman-dead-for-programmers), which uses the comma as a dead key to trigger a second layer. 4// This keyboard layout is based on the [Workman Dead layout](https://github.com/ojbucao/Workman/tree/master/mac#workman-dead-for-programmers), which uses the comma as a dead key to trigger a second layer.
6// Since I have more keys at my disposal on the ErgoDox, I moved the dead key to the bottom right. There are still a lot of 5// Since I have more keys at my disposal on the ErgoDox, I moved the dead key to the bottom right. There are still a lot of
@@ -9,12 +8,46 @@
9// triggers the key you pressed AND switches the layout back to the original. For now I do this with a super kludgey macro and I 8// triggers the key you pressed AND switches the layout back to the original. For now I do this with a super kludgey macro and I
10// look forward to learning about a more elegant way to do the same thing. Until then, this will have to do. 9// look forward to learning about a more elegant way to do the same thing. Until then, this will have to do.
11 10
11enum layer_names {
12 BASE, // default layer
13 SYMB, // symbols
14 MDIA, // media keys
15 DEAD // dead version of the symbols layer
16};
12 17
13// TODO: Define layer names that make sense for the ErgoDox EZ. 18enum custom_keycodes {
14#define BASE 0 // default layer 19 M_100 = SAFE_RANGE,
15#define SYMB 1 // symbols 20 M_101,
16#define MDIA 2 // media keys 21 M_102,
17#define DEAD 3 // dead version of the symbols layer 22 M_103,
23 M_104,
24 M_105,
25 M_106,
26 M_107,
27 M_108,
28 M_109,
29 M_110,
30 M_111,
31 M_112,
32 M_113,
33 M_114,
34 M_115,
35 M_116,
36 M_117,
37 M_118,
38 M_119,
39 M_120,
40 M_121,
41 M_122,
42 M_123,
43 M_124,
44 M_125,
45 M_126,
46 M_127,
47 M_128,
48 M_129,
49 M_130
50};
18 51
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 52const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20/* Keymap 0: Basic layer 53/* Keymap 0: Basic layer
@@ -43,7 +76,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
43[BASE] = LAYOUT_ergodox( // layer 0 : default 76[BASE] = LAYOUT_ergodox( // layer 0 : default
44 // left hand 77 // left hand
45 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, 78 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
46 KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, TG(1), 79 KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, TG(SYMB),
47 ALL_T(KC_ESC), KC_A, KC_S, KC_H, KC_T, KC_G, 80 ALL_T(KC_ESC), KC_A, KC_S, KC_H, KC_T, KC_G,
48 KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_NO, 81 KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_NO,
49 KC_NO, KC_NO, KC_LCTL,KC_LALT,KC_LGUI, 82 KC_NO, KC_NO, KC_LCTL,KC_LALT,KC_LGUI,
@@ -52,10 +85,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
52 KC_BSPC,KC_SPC,KC_END, 85 KC_BSPC,KC_SPC,KC_END,
53 // right hand 86 // right hand
54 KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, 87 KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
55 TG(1), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS, 88 TG(SYMB), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS,
56 KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, 89 KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT,
57 MEH_T(KC_NO),KC_K, KC_L, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, 90 MEH_T(KC_NO),KC_K, KC_L, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
58 KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, F(4), 91 KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, TG(DEAD),
59 KC_NO, KC_NO, 92 KC_NO, KC_NO,
60 KC_PGUP, 93 KC_PGUP,
61 KC_PGDN,KC_SPC,KC_ENT 94 KC_PGDN,KC_SPC,KC_ENT
@@ -168,18 +201,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
168[DEAD] = LAYOUT_ergodox( 201[DEAD] = LAYOUT_ergodox(
169 // left hand 202 // left hand
170 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, 203 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
171 KC_TRNS, M(100), M(101), M(102), M(103), M(104), KC_TRNS, 204 KC_TRNS, M_100, M_101, M_102, M_103, M_104, KC_TRNS,
172 KC_TRNS, M(109), M(110), M(111), M(112), M(113), 205 KC_TRNS, M_109, M_110, M_111, M_112, M_113,
173 KC_TRNS, M(120), M(121), M(122), M(123), M(124), KC_TRNS, 206 KC_TRNS, M_120, M_121, M_122, M_123, M_124, KC_TRNS,
174 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 207 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
175 KC_TRNS,KC_TRNS, 208 KC_TRNS,KC_TRNS,
176 KC_TRNS, 209 KC_TRNS,
177 KC_TRNS,KC_TRNS,KC_TRNS, 210 KC_TRNS,KC_TRNS,KC_TRNS,
178 // right hand 211 // right hand
179 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 212 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
180 KC_TRNS, M(105), M(106), M(107), M(108), M(130), KC_F12, 213 KC_TRNS, M_105, M_106, M_107, M_108, M_130, KC_F12,
181 M(114), M(115), M(116), M(117), M(118), M(119), 214 M_114, M_115, M_116, M_117, M_118, M_119,
182 KC_TRNS, M(125), M(126), M(127), M(128), M(129), KC_TRNS, 215 KC_TRNS, M_125, M_126, M_127, M_128, M_129, KC_TRNS,
183 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 216 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
184 KC_TRNS, KC_TRNS, 217 KC_TRNS, KC_TRNS,
185 KC_TRNS, 218 KC_TRNS,
@@ -187,169 +220,181 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
187), 220),
188}; 221};
189 222
190const uint16_t PROGMEM fn_actions[] = { 223void tap_dead_code(uint16_t keycode) {
191 [2] = ACTION_LAYER_ON(BASE,0), // FN2 - Go back to the base layer 224 layer_clear();
192 [3] = ACTION_LAYER_ON(DEAD,0), 225 tap_code16(keycode);
193 [4] = ACTION_LAYER_TOGGLE(DEAD), 226 layer_on(DEAD);
194}; 227}
195
196const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
197{
198 // MACRODOWN only works in this function
199 switch(id) {
200 case 0:
201 if (record->event.pressed) {
202 register_code(KC_RSFT);
203 } else {
204 unregister_code(KC_RSFT);
205 }
206 break;
207 case 100:
208 layer_clear();
209 return MACRODOWN(D(LSFT), T(5), U(LSFT), T(FN4), END);
210 break;
211 case 101:
212 layer_clear();
213 return MACRODOWN(D(LSFT), T(7), U(LSFT), T(FN4), END);
214 break;
215 case 102:
216 layer_clear();
217 return MACRODOWN(D(LSFT), T(SLSH), U(LSFT), T(FN4), END);
218 break;
219 case 103:
220 layer_clear();
221 return MACRODOWN(D(LSFT), T(EQL), U(LSFT), T(FN4), END);
222 break;
223 case 104:
224 layer_clear();
225 return MACRODOWN(D(LSFT), T(2), U(LSFT), T(FN4), END);
226 break;
227 case 105:
228 layer_clear();
229 return MACRODOWN(D(LSFT), T(4), U(LSFT), T(FN4), END);
230 break;
231 case 106:
232 layer_clear();
233 return MACRODOWN(D(LSFT), T(MINS), U(LSFT), T(FN4), END);
234 break;
235 case 107:
236 layer_clear();
237 return MACRODOWN(T(LBRC), T(FN4), END);
238 break;
239 case 108:
240 layer_clear();
241 return MACRODOWN(T(RBRC), T(FN4), END);
242 break;
243 case 130:
244 layer_clear();
245 return MACRODOWN(D(LSFT), T(1), U(LSFT), T(FN4), END);
246 break;
247 case 109:
248 layer_clear();
249 return MACRODOWN(T(SLSH), T(FN4), END);
250 break;
251 case 110:
252 layer_clear();
253 return MACRODOWN(D(LSFT), T(9), U(LSFT), T(FN4), END);
254 break;
255 case 111:
256 layer_clear();
257 return MACRODOWN(T(EQL), T(FN4), END);
258 break;
259 case 112:
260 layer_clear();
261 return MACRODOWN(T(0), T(FN4), END);
262 break;
263 case 113:
264 layer_clear();
265 return MACRODOWN(D(LSFT), T(LBRC), U(LSFT), T(FN4), END);
266 break;
267 case 114:
268 layer_clear();
269 return MACRODOWN(D(LSFT), T(RBRC), U(LSFT), T(FN4), END);
270 break;
271 case 115:
272 layer_clear();
273 return MACRODOWN(T(1), T(FN4), END);
274 break;
275 case 116:
276 layer_clear();
277 return MACRODOWN(D(LSFT), T(8), U(LSFT), T(FN4), END);
278 break;
279 case 117:
280 layer_clear();
281 return MACRODOWN(D(LSFT), T(0), U(LSFT), T(FN4), END);
282 break;
283 case 118:
284 layer_clear();
285 return MACRODOWN(T(MINS), T(FN4), END);
286 break;
287 case 119:
288 layer_clear();
289 return MACRODOWN(D(LSFT), T(QUOT), U(LSFT), T(FN4), END);
290 break;
291 case 120:
292 layer_clear();
293 return MACRODOWN(T(6), T(FN4), END);
294 break;
295 case 121:
296 layer_clear();
297 return MACRODOWN(T(7), T(FN4), END);
298 break;
299 case 122:
300 layer_clear();
301 return MACRODOWN(T(8), T(FN4), END);
302 break;
303 case 123:
304 layer_clear();
305 return MACRODOWN(T(9), T(FN4), END);
306 break;
307 case 124:
308 layer_clear();
309 return MACRODOWN(D(LSFT), T(BSLS), U(LSFT), T(FN4), END);
310 break;
311 case 125:
312 layer_clear();
313 return MACRODOWN(T(BSLS), T(FN4), END);
314 break;
315 case 126:
316 layer_clear();
317 return MACRODOWN(T(2), T(FN4), END);
318 break;
319 case 127:
320 layer_clear();
321 return MACRODOWN(T(3), T(FN4), END);
322 break;
323 case 128:
324 layer_clear();
325 return MACRODOWN(T(4), T(FN4), END);
326 break;
327 case 129:
328 layer_clear();
329 return MACRODOWN(T(5), T(FN4), END);
330 break;
331
332 default:
333 return MACRO_NONE;
334 }
335 return MACRO_NONE;
336};
337
338// Runs just one time when the keyboard initializes.
339void matrix_init_user(void) {
340 228
341}; 229bool process_record_user(uint16_t keycode, keyrecord_t *record) {
230 switch (keycode) {
231 case M_100:
232 if (record->event.pressed) {
233 tap_dead_code(S(KC_5));
234 }
235 return false;
236 case M_101:
237 if (record->event.pressed) {
238 tap_dead_code(S(KC_7));
239 }
240 return false;
241 case M_102:
242 if (record->event.pressed) {
243 tap_dead_code(S(KC_SLSH));
244 }
245 return false;
246 case M_103:
247 if (record->event.pressed) {
248 tap_dead_code(S(KC_EQL));
249 }
250 return false;
251 case M_104:
252 if (record->event.pressed) {
253 tap_dead_code(S(KC_2));
254 }
255 return false;
256 case M_105:
257 if (record->event.pressed) {
258 tap_dead_code(S(KC_4));
259 }
260 return false;
261 case M_106:
262 if (record->event.pressed) {
263 tap_dead_code(S(KC_MINS));
264 }
265 return false;
266 case M_107:
267 if (record->event.pressed) {
268 tap_dead_code(KC_LBRC);
269 }
270 return false;
271 case M_108:
272 if (record->event.pressed) {
273 tap_dead_code(KC_RBRC);
274 }
275 return false;
276 case M_109:
277 if (record->event.pressed) {
278 tap_dead_code(KC_SLSH);
279 }
280 return false;
281 case M_110:
282 if (record->event.pressed) {
283 tap_dead_code(S(KC_9));
284 }
285 return false;
286 case M_111:
287 if (record->event.pressed) {
288 tap_dead_code(KC_EQL);
289 }
290 return false;
291 case M_112:
292 if (record->event.pressed) {
293 tap_dead_code(KC_0);
294 }
295 return false;
296 case M_113:
297 if (record->event.pressed) {
298 tap_dead_code(S(KC_LBRC));
299 }
300 return false;
301 case M_114:
302 if (record->event.pressed) {
303 tap_dead_code(S(KC_RBRC));
304 }
305 return false;
306 case M_115:
307 if (record->event.pressed) {
308 tap_dead_code(KC_1);
309 }
310 return false;
311 case M_116:
312 if (record->event.pressed) {
313 tap_dead_code(S(KC_8));
314 }
315 return false;
316 case M_117:
317 if (record->event.pressed) {
318 tap_dead_code(S(KC_0));
319 }
320 return false;
321 case M_118:
322 if (record->event.pressed) {
323 tap_dead_code(KC_MINS);
324 }
325 return false;
326 case M_119:
327 if (record->event.pressed) {
328 tap_dead_code(S(KC_QUOT));
329 }
330 return false;
331 case M_120:
332 if (record->event.pressed) {
333 tap_dead_code(KC_6);
334 }
335 return false;
336 case M_121:
337 if (record->event.pressed) {
338 tap_dead_code(KC_7);
339 }
340 return false;
341 case M_122:
342 if (record->event.pressed) {
343 tap_dead_code(KC_8);
344 }
345 return false;
346 case M_123:
347 if (record->event.pressed) {
348 tap_dead_code(KC_9);
349 }
350 return false;
351 case M_124:
352 if (record->event.pressed) {
353 tap_dead_code(S(KC_BSLS));
354 }
355 return false;
356 case M_125:
357 if (record->event.pressed) {
358 tap_dead_code(KC_BSLS);
359 }
360 return false;
361 case M_126:
362 if (record->event.pressed) {
363 tap_dead_code(KC_2);
364 }
365 return false;
366 case M_127:
367 if (record->event.pressed) {
368 tap_dead_code(KC_3);
369 }
370 return false;
371 case M_128:
372 if (record->event.pressed) {
373 tap_dead_code(KC_4);
374 }
375 return false;
376 case M_129:
377 if (record->event.pressed) {
378 tap_dead_code(KC_5);
379 }
380 return false;
381 case M_130:
382 if (record->event.pressed) {
383 tap_dead_code(S(KC_1));
384 }
385 return false;
386 }
387 return true;
388}
342 389
343// Runs constantly in the background, in a loop. 390// Runs constantly in the background, in a loop.
344void matrix_scan_user(void) { 391void matrix_scan_user(void) {
345
346 uint8_t layer = biton32(layer_state);
347
348 ergodox_board_led_off(); 392 ergodox_board_led_off();
349 ergodox_right_led_1_off(); 393 ergodox_right_led_1_off();
350 ergodox_right_led_2_off(); 394 ergodox_right_led_2_off();
351 ergodox_right_led_3_off(); 395 ergodox_right_led_3_off();
352 switch (layer) { 396
397 switch (get_highest_layer(layer_state)) {
353 // TODO: Make this relevant to the ErgoDox EZ. 398 // TODO: Make this relevant to the ErgoDox EZ.
354 case 1: 399 case 1:
355 ergodox_right_led_1_on(); 400 ergodox_right_led_1_on();
@@ -361,5 +406,4 @@ void matrix_scan_user(void) {
361 // none 406 // none
362 break; 407 break;
363 } 408 }
364 409}
365};