]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/callum/keymap.c
Fixed tap/down/up handling in dynamic keymap macros (#5363)
[qmk_firmware.git] / keyboards / planck / keymaps / callum / keymap.c
1 #pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
2 #include "planck.h"
3 #include "action_layer.h"
4
5 extern keymap_config_t keymap_config;
6
7 #define AC(X) A(C(X))
8 #define SC(X) S(C(X))
9
10 enum planck_layers {
11     _COLEMAK,
12     _QWERTY,
13     _SYMB,
14     _MOVE,
15     _FUNC,
16     _MOUSE,
17 };
18
19 enum planck_keycodes {
20     COLEMAK = SAFE_RANGE,
21     QWERTY,
22     SYMB,
23     MOVE,
24     FUNC,
25     MOUSE,
26 };
27
28 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29
30     /* COLEMAK
31      * ,-----------------------------------------------------------------------.
32      * |Tab  |  Q  |  W  |  F  |  P  |  G  |  J  |  L  |  U  |  Y  |  ;  |  -  |
33      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
34      * |Bksp |  A  |  R  |  S  |  T  |  D  |  H  |  N  |  E  |  I  |  O  |  '  |
35      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
36      * |Shift|  Z  |  X  |  C  |  V  |  B  |  K  |  M  |  ,  |  .  |  /  |Shift|
37      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
38      * |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
39      * `-----------------------------------------------------------------------'
40      */
41     [_COLEMAK] = {
42         {
43             KC_TAB,       KC_Q,         KC_W,         KC_F,
44             KC_P,         KC_G,         KC_J,         KC_L,
45             KC_U,         KC_Y,         KC_SCLN,      KC_MINS
46         },
47         {
48             KC_BSPC,      KC_A,         KC_R,         KC_S,
49             KC_T,         KC_D,         KC_H,         KC_N,
50             KC_E,         KC_I,         KC_O,         KC_QUOT
51         },
52         {
53             KC_LSFT,      KC_Z,         KC_X,         KC_C,
54             KC_V,         KC_B,         KC_K,         KC_M,
55             KC_COMM,      KC_DOT,       KC_SLSH,      KC_RSFT
56         },
57         {
58             FUNC,         KC_LCTL,      KC_LALT,      KC_LGUI,
59             SYMB,         KC_ENT,       KC_SPC,       MOVE,
60             KC_RGUI,      KC_RALT,      KC_RCTL,      FUNC
61         }
62     },
63
64     /* QWERTY
65      * ,-----------------------------------------------------------------------.
66      * |Tab  |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  -  |
67      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
68      * |Bksp |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |
69      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
70      * |Shift|  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  |Shift|
71      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
72      * |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
73      * `-----------------------------------------------------------------------'
74      */
75     [_QWERTY] = {
76         {
77             KC_TAB,       KC_Q,         KC_W,         KC_E,
78             KC_R,         KC_T,         KC_Y,         KC_U,
79             KC_I,         KC_O,         KC_P,         KC_MINS
80         },
81         {
82             KC_BSPC,      KC_A,         KC_S,         KC_D,
83             KC_F,         KC_G,         KC_H,         KC_J,
84             KC_K,         KC_L,         KC_SCLN,      KC_QUOT
85         },
86         {
87             KC_LSFT,      KC_Z,         KC_X,         KC_C,
88             KC_V,         KC_B,         KC_N,         KC_M,
89             KC_COMM,      KC_DOT,       KC_SLSH,      KC_RSFT
90         },
91         {
92             FUNC,         KC_LCTL,      KC_LALT,      KC_LGUI,
93             SYMB,         KC_ENT,       KC_SPC,       MOVE,
94             KC_RGUI,      KC_RALT,      KC_RCTL,      FUNC
95         }
96     },
97
98     /* SYMB
99      * ,-----------------------------------------------------------------------.
100      * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |     |
101      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
102      * | Del |  !  |  @  |  #  |  $  |  %  |  ^  |  &  |  *  |  (  |  )  |     |
103      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
104      * |     |  ~  |  `  |  +  |  =  |  |  |  \  |  [  |  ]  |  {  |  }  |     |
105      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
106      * |     |     |     |     |     |     |     |Mouse|     |     |     |     |
107      * `-----------------------------------------------------------------------'
108      */
109     [_SYMB] = {
110         {
111             KC_ESC,       KC_1,         KC_2,         KC_3,
112             KC_4,         KC_5,         KC_6,         KC_7,
113             KC_8,         KC_9,         KC_0,         _______
114         },
115         {
116             KC_DEL,       KC_EXLM,      KC_AT,        KC_HASH,
117             KC_DLR,       KC_PERC,      KC_CIRC,      KC_AMPR,
118             KC_ASTR,      KC_LPRN,      KC_RPRN,      _______
119         },
120         {
121             _______,      KC_TILD,      KC_GRV,       KC_PLUS,
122             KC_EQL,       KC_PIPE,      KC_BSLS,      KC_LBRC,
123             KC_RBRC,      KC_LCBR,      KC_RCBR,      _______
124         },
125         {
126             _______,      _______,      _______,      _______,
127             _______,      _______,      _______,      MOUSE,
128             _______,      _______,      _______,      _______
129         }
130     },
131
132     /* MOVE
133      * ,-----------------------------------------------------------------------.
134      * |     |     |     |     |     |     |CtrUp|Home | Up  | End |Caps | Esc |
135      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
136      * |     |     |     |     |     |     |SpaL |Left |Down |Right|SpaR | Del |
137      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
138      * |     |     |     |     |     |     |CtrDn|PgDn |PgUp |TabL |TabR |     |
139      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
140      * |     |     |     |     |Mouse|     |     |     |     |     |     |     |
141      * `-----------------------------------------------------------------------'
142      */
143     [_MOVE] = {
144         {
145             AC(KC_A),     AC(KC_B),     AC(KC_C),     AC(KC_D),
146             AC(KC_E),     AC(KC_F),     C(KC_UP),     KC_HOME,
147             KC_UP,        KC_END,       KC_CAPS,      KC_ESC
148         },
149         {
150             AC(KC_G),     AC(KC_H),     AC(KC_I),     AC(KC_J),
151             AC(KC_K),     AC(KC_L),     C(KC_LEFT),   KC_LEFT,
152             KC_DOWN,      KC_RGHT,      C(KC_RIGHT),  KC_DEL
153         },
154         {
155             _______,      AC(KC_M),     AC(KC_N),     AC(KC_O),
156             AC(KC_P),     AC(KC_Q),     C(KC_DOWN),   KC_PGDN,
157             KC_PGUP,      SC(KC_TAB),   C(KC_TAB),    _______
158         },
159         {
160             _______,      _______,      _______,      _______,
161             MOUSE,        _______,      _______,      _______,
162             _______,      _______,      _______,      _______
163         }
164     },
165
166     /* FUNC
167      * ,-----------------------------------------------------------------------.
168      * |Reset| F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 |VolUp|
169      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
170      * |Power| F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 |VolDn|
171      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
172      * |     |     |Home |TabL |TabR |End  |     |     |     |Clmak|Qwrty|     |
173      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
174      * |     |     |     |     |Prev |Mute |Play |Next |     |     |     |     |
175      * `-----------------------------------------------------------------------'
176      */
177     [_FUNC] = {
178         {
179             RESET,        KC_F1,        KC_F2,        KC_F3,
180             KC_F4,        KC_F5,        KC_F6,        KC_F7,
181             KC_F8,        KC_F9,        KC_F10,       KC_VOLU
182         },
183         {
184             KC_POWER,     KC_F11,       KC_F12,       KC_F13,
185             KC_F14,       KC_F15,       KC_F16,       KC_F17,
186             KC_F18,       KC_F19,       KC_F20,       KC_VOLD
187         },
188         {
189             _______,      XXXXXXX,      KC_HOME,      SC(KC_TAB),
190             C(KC_TAB),    KC_END,       XXXXXXX,      XXXXXXX,
191             XXXXXXX,      COLEMAK,      QWERTY,       _______
192         },
193         {
194             _______,      _______,      _______,      _______,
195             KC_MPRV,      KC_MUTE,      KC_MPLY,      KC_MNXT,
196             _______,      _______,      _______,      _______
197         }
198     },
199
200     /* MOUSE
201      * ,-----------------------------------------------------------------------.
202      * |     |     |     |     |     |     |     | ScL |Up   | ScR |     |     |
203      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
204      * |     | B4  | B3  | B2  | B1  |     |     |Left |Down |Right|     |     |
205      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
206      * |     |     | Ac0 | Ac1 | Ac2 |     |     | ScD | ScU |     |     |     |
207      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
208      * |     |     |     |     |     |     |     |     |     |     |     |     |
209      * `-----------------------------------------------------------------------'
210      */
211     [_MOUSE] = {
212         {
213             _______,      _______,      C(KC_LEFT),   C(KC_UP),
214             C(KC_RIGHT),  _______,      _______,      KC_WH_L,
215             KC_MS_U,      KC_WH_R,      _______,      _______
216         },
217         {
218             _______,      KC_BTN4,      KC_BTN3,      KC_BTN2,
219             KC_BTN1,      _______,      _______,      KC_MS_L,
220             KC_MS_D,      KC_MS_R,      _______,      _______
221         },
222         {
223             _______,      _______,      KC_ACL0,      KC_ACL1,
224             KC_ACL2,      _______,      _______,      KC_WH_D,
225             KC_WH_U,      _______,      _______,      _______
226         },
227         {
228             _______,      _______,      _______,      _______,
229             _______,      _______,      _______,      _______,
230             _______,      _______,      _______,      _______
231         }
232     }
233 };
234
235 #ifdef AUDIO_ENABLE
236 float colemak_song[][2] = SONG(COLEMAK_SOUND);
237 float qwerty_song[][2] = SONG(QWERTY_SOUND);
238 #endif
239
240 void set_colemak(void) {
241 #ifdef AUDIO_ENABLE
242     stop_all_notes();
243     PLAY_SONG(colemak_song);
244 #endif
245     set_single_persistent_default_layer(_COLEMAK);
246 }
247
248 void set_qwerty(void) {
249 #ifdef AUDIO_ENABLE
250     stop_all_notes();
251     PLAY_SONG(qwerty_song);
252 #endif
253     set_single_persistent_default_layer(_QWERTY);
254 }
255
256 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
257     switch (keycode) {
258         case COLEMAK:
259             if (record->event.pressed) {
260                 set_colemak();
261             }
262             return false;
263         case QWERTY:
264             if (record->event.pressed) {
265                 set_qwerty();
266             }
267             return false;
268         case SYMB:
269             if (record->event.pressed) {
270                 layer_on(_SYMB);
271             } else {
272                 layer_off(_SYMB);
273             }
274             return false;
275         case MOVE:
276             if (record->event.pressed) {
277                 layer_on(_MOVE);
278             } else {
279                 layer_off(_MOVE);
280             }
281             return false;
282         case FUNC:
283             if (record->event.pressed) {
284                 layer_on(_FUNC);
285             } else {
286                 layer_off(_FUNC);
287             }
288             return false;
289         case MOUSE:
290             if (record->event.pressed) {
291                 layer_on(_MOUSE);
292             } else {
293                 layer_off(_MOUSE);
294             }
295             return false;
296
297         // Override the defualt auto shifted symbols to use SEND_STRING
298         // See https://github.com/qmk/qmk_firmware/issues/4072
299         case KC_EXLM:
300             if (record->event.pressed) { SEND_STRING("!"); }
301             return false;
302         case KC_AT:
303             if (record->event.pressed) { SEND_STRING("@"); }
304             return false;
305         case KC_HASH:
306             if (record->event.pressed) { SEND_STRING("#"); }
307             return false;
308         case KC_DLR:
309             if (record->event.pressed) { SEND_STRING("$"); }
310             return false;
311         case KC_PERC:
312             if (record->event.pressed) { SEND_STRING("%"); }
313             return false;
314         case KC_CIRC:
315             if (record->event.pressed) { SEND_STRING("^"); }
316             return false;
317         case KC_AMPR:
318             if (record->event.pressed) { SEND_STRING("&"); }
319             return false;
320         case KC_ASTR:
321             if (record->event.pressed) { SEND_STRING("*"); }
322             return false;
323         case KC_LPRN:
324             if (record->event.pressed) { SEND_STRING("("); }
325             return false;
326         case KC_RPRN:
327             if (record->event.pressed) { SEND_STRING(")"); }
328             return false;
329         case KC_TILD:
330             if (record->event.pressed) { SEND_STRING("~"); }
331             return false;
332         case KC_GRV:
333             if (record->event.pressed) { SEND_STRING("`"); }
334             return false;
335         case KC_PLUS:
336             if (record->event.pressed) { SEND_STRING("+"); }
337             return false;
338         case KC_EQL:
339             if (record->event.pressed) { SEND_STRING("="); }
340             return false;
341         case KC_PIPE:
342             if (record->event.pressed) { SEND_STRING("|"); }
343             return false;
344         case KC_BSLS:
345             if (record->event.pressed) { SEND_STRING("\\"); }
346             return false;
347         case KC_LBRC:
348             if (record->event.pressed) { SEND_STRING("["); }
349             return false;
350         case KC_RBRC:
351             if (record->event.pressed) { SEND_STRING("]"); }
352             return false;
353         case KC_LCBR:
354             if (record->event.pressed) { SEND_STRING("{"); }
355             return false;
356         case KC_RCBR:
357             if (record->event.pressed) { SEND_STRING("}"); }
358             return false;
359     }
360     return true;
361 }