aboutsummaryrefslogtreecommitdiff
path: root/keyboards/planck/keymaps/samuel/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/planck/keymaps/samuel/keymap.c')
-rw-r--r--keyboards/planck/keymaps/samuel/keymap.c372
1 files changed, 243 insertions, 129 deletions
diff --git a/keyboards/planck/keymaps/samuel/keymap.c b/keyboards/planck/keymaps/samuel/keymap.c
index 53760da76..ff1424489 100644
--- a/keyboards/planck/keymaps/samuel/keymap.c
+++ b/keyboards/planck/keymaps/samuel/keymap.c
@@ -2,36 +2,45 @@
2 2
3extern keymap_config_t keymap_config; 3extern keymap_config_t keymap_config;
4 4
5static uint16_t tap_timers[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
6
7char last_mod = -1;
8
9enum planck_layers {
10 _DVORAK,
11 _RISE
12};
13
14// where the 'T_' communicates how the key does something different when tapped. 5// where the 'T_' communicates how the key does something different when tapped.
15enum planck_keycodes { 6enum planck_keycodes {
16 DVORAK = SAFE_RANGE, 7//DVORAK = SAFE_RANGE,
17 KC_T_LALT, 8KC_T_LALT = SAFE_RANGE,
18 KC_T_RALT, 9KC_T_RALT,
19 KC_T_LGUI, 10KC_T_LGUI,
20 KC_T_RGUI, 11KC_T_RGUI,
21 KC_T_LCTL, 12KC_T_LCTL,
22 KC_T_RCTL, 13KC_T_RCTL,
23 KC_T_LSFT, 14KC_T_LSFT,
24 KC_T_RSFT, 15KC_T_RSFT,
25 KC_T_LRSE, 16KC_T_LRSE,
26 KC_T_RRSE, 17KC_T_RRSE,
27 KC_EZRGHT, 18KC_EZRGHT,
28 KC_EZLEFT, 19KC_EZLEFT,
29 KC_EZUP, 20KC_EZUP,
30 KC_EZDOWN, 21KC_EZDOWN,
31 KC_EZUNDO, 22KC_EZUNDO,
32 KC_EZCOPY, 23KC_EZCOPY,
33 KC_EZCUT, 24KC_EZCUT,
34 KC_EZPSTE 25KC_EZPSTE,
26KC_EZSHFT,
27KC_EZCTRL,
28KC_EZGUI,
29KC_EZALT,
30KC_DVORAK,
31KC_QWERTY,
32KC_USER,
33KC_EMAIL,
34KC_NAME,
35KC_DIR,
36KC_COM
37};
38
39enum planck_layers {
40_DVORAK,
41_QWERTY,
42_RISE,
43_COMMAND
35}; 44};
36 45
37const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 46const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -44,202 +53,307 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
44{ KC_T_LGUI, KC_T_LALT, KC_UP, KC_DOWN, KC_BSPC, KC_TAB, KC_ENT, KC_SPC, KC_LEFT, KC_RIGHT, KC_T_RALT, KC_T_RGUI} 53{ KC_T_LGUI, KC_T_LALT, KC_UP, KC_DOWN, KC_BSPC, KC_TAB, KC_ENT, KC_SPC, KC_LEFT, KC_RIGHT, KC_T_RALT, KC_T_RGUI}
45}, 54},
46 55
56[_QWERTY] =
57
58{{ KC_T_LRSE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_T_RRSE},
59{ KC_T_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_T_RSFT},
60{ KC_T_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT, KC_T_RCTL},
61{ KC_T_LGUI, KC_T_LALT, KC_UP, KC_DOWN, KC_BSPC, KC_TAB, KC_ENT, KC_SPC, KC_LEFT, KC_RIGHT, KC_T_RALT, KC_DVORAK}
62},
63
47[_RISE] = 64[_RISE] =
48 65
49{{ KC_TRANSPARENT, KC_EZUNDO, KC_EZCOPY, KC_EZCUT, KC_EZPSTE, KC_INS, KC_EQL, KC_7, KC_8, KC_9, KC_F11, KC_TRANSPARENT}, 66{{ KC_TRANSPARENT, KC_EZUNDO, KC_EZCOPY, KC_EZCUT, KC_EZPSTE, KC_INS, KC_EQL, KC_7, KC_8, KC_9, KC_TRANSPARENT, KC_TRANSPARENT},
50{ KC_TRANSPARENT, KC_ESC, KC_CAPS, KC_PGUP, KC_PGDN, KC_F4, KC_ASTR, KC_4, KC_5, KC_6, KC_0, KC_TRANSPARENT}, 67{ KC_EZSHFT, KC_ESC, KC_CAPS, KC_PGUP, KC_PGDN, KC_HOME, KC_ASTR, KC_4, KC_5, KC_6, KC_0, KC_EZSHFT},
51{ KC_TRANSPARENT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_1, KC_2, KC_3, KC_F12, KC_TRANSPARENT}, 68{ KC_EZCTRL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_1, KC_2, KC_3, KC_COM, KC_EZCTRL},
52{ KC_TRANSPARENT, KC_TRANSPARENT, KC_EZUP, KC_EZDOWN, KC_TRANSPARENT, KC_AMPR, KC_PIPE, KC_TRANSPARENT, KC_EZLEFT, KC_EZRGHT, KC_TRANSPARENT, KC_TRANSPARENT} 69{ KC_EZGUI, KC_EZALT, KC_EZUP, KC_EZDOWN, KC_SPC, KC_AMPR, KC_PIPE, KC_END, KC_EZLEFT, KC_EZRGHT, KC_EZALT, KC_EZGUI}
70},
71
72[_COMMAND] =
73
74{{ KC_TRANSPARENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRANSPARENT},
75{ KC_TRANSPARENT, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRANSPARENT},
76{ KC_TRANSPARENT, KC_F21, KC_F22, KC_F23, KC_F24, KC_QWERTY, KC_DVORAK, KC_USER, KC_EMAIL, KC_NAME, KC_TRANSPARENT, KC_TRANSPARENT},
77{ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_DIR, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT}
53}, 78},
54 79
55}; 80};
56 81
57void mod_press(uint16_t hold_code, int id) { 82static uint16_t tap_timer = 0;
58 tap_timers[id] = timer_read(); 83char last_mod = 10;
59 last_mod = id; 84
60 register_code(hold_code); 85void mod_press(uint16_t tap_code, uint16_t hold_code, int id) {
86 // this first if body makes double modified keys impossible, but stops the
87 // delay when modifying a tap key which would result in the tap key not
88 // getting modified.
89 if (last_mod != id && last_mod != 10) {
90 tap_code16(tap_code);
91 last_mod = 10;
92 } else {
93 tap_timer = timer_read();
94 last_mod = id;
95 register_code(hold_code);
96 }
61} 97}
62 98
63void mod_lift(uint16_t tap_code, uint16_t hold_code, int id) { 99void mod_lift(uint16_t tap_code, uint16_t hold_code, int id) {
64 unregister_code(hold_code); 100 unregister_code(hold_code);
65 if (last_mod == id && timer_elapsed(tap_timers[id]) < TAPPING_TERM) { 101 if (last_mod == id && timer_elapsed(tap_timer) < TAPPING_TERM) {
66 tap_code16(tap_code); 102 tap_code16(tap_code);
67 last_mod = -1; 103 last_mod = 10;
68 } 104 }
69} 105}
70 106
71bool process_record_user(uint16_t keycode, keyrecord_t *record) { 107bool process_record_user(uint16_t keycode, keyrecord_t *record) {
72 switch (keycode) { 108 switch (keycode) {
73 case DVORAK: 109
74 if (record->event.pressed) { 110case KC_DVORAK:
75 set_single_persistent_default_layer(_DVORAK); 111if (record->event.pressed) {
76 } 112 set_single_persistent_default_layer(_DVORAK);
77 return false; 113}
78 break; 114return true;
115break;
116
117case KC_QWERTY:
118if (record->event.pressed) {
119 set_single_persistent_default_layer(_QWERTY);
120}
121return true;
122break;
79 123
80case KC_T_LALT: 124case KC_T_LALT:
81if (record->event.pressed) { 125if (record->event.pressed) {
82 mod_press(KC_LALT, 0); 126 mod_press(S(KC_9), KC_LALT, 0);
83 } else { 127} else {
84 mod_lift(S(KC_9), KC_LALT, 0); 128 mod_lift(S(KC_9), KC_LALT, 0);
85 } 129}
86return false; 130return false;
87break; 131break;
88case KC_T_RALT: 132case KC_T_RALT:
89if (record->event.pressed) { 133if (record->event.pressed) {
90 mod_press(KC_RALT, 1); 134 mod_press(S(KC_0), KC_RALT, 1);
91 } else { 135} else {
92 mod_lift(S(KC_0), KC_RALT, 1); 136 mod_lift(S(KC_0), KC_RALT, 1);
93 } 137}
94return false; 138return false;
95break; 139break;
96 140
97case KC_T_LGUI: 141case KC_T_LGUI:
98if (record->event.pressed) { 142if (record->event.pressed) {
99 mod_press(KC_LGUI, 2); 143 mod_press(KC_GRAVE, KC_LGUI, 2);
100 } else { 144} else {
101 mod_lift(KC_GRAVE, KC_LGUI, 2); 145 mod_lift(KC_GRAVE, KC_LGUI, 2);
102 } 146}
103return false; 147return false;
104break; 148break;
105case KC_T_RGUI: 149case KC_T_RGUI:
106if (record->event.pressed) { 150if (record->event.pressed) {
107 mod_press(KC_RGUI, 3); 151 mod_press(KC_BSLASH, KC_RGUI, 3);
108 } else { 152} else {
109 mod_lift(KC_BSLASH, KC_RGUI, 3); 153 mod_lift(KC_BSLASH, KC_RGUI, 3);
110 } 154}
111return false; 155return false;
112break; 156break;
113 157
114case KC_T_LCTL: 158case KC_T_LCTL:
115if (record->event.pressed) { 159if (record->event.pressed) {
116 mod_press(KC_LCTL, 4); 160 mod_press(KC_LBRACKET, KC_LCTL, 4);
117 } else { 161} else {
118 mod_lift(KC_LBRACKET, KC_LCTL, 4); 162 mod_lift(KC_LBRACKET, KC_LCTL, 4);
119 } 163}
120return false; 164return false;
121break; 165break;
122case KC_T_RCTL: 166case KC_T_RCTL:
123if (record->event.pressed) { 167if (record->event.pressed) {
124 mod_press(KC_RCTL, 5); 168 mod_press(KC_RBRACKET, KC_RCTL, 5);
125 } else { 169} else {
126 mod_lift(KC_RBRACKET, KC_RCTL, 5); 170 mod_lift(KC_RBRACKET, KC_RCTL, 5);
127 } 171}
128return false; 172return false;
129break; 173break;
130 174
131case KC_T_LSFT: 175case KC_T_LSFT:
132if (record->event.pressed) { 176if (record->event.pressed) {
133 mod_press(KC_LSFT, 6); 177 mod_press(KC_EQUAL, KC_LSFT, 6);
134 } else { 178} else {
135 mod_lift(KC_EQUAL, KC_LSFT, 6); 179 mod_lift(KC_EQUAL, KC_LSFT, 6);
136 } 180}
137return false; 181return false;
138break; 182break;
139case KC_T_RSFT: 183case KC_T_RSFT:
140if (record->event.pressed) { 184if (record->event.pressed) {
141 mod_press(KC_RSFT, 7); 185 mod_press(KC_MINUS, KC_RSFT, 7);
142 } else { 186} else {
143 mod_lift(KC_MINUS, KC_RSFT, 7); 187 mod_lift(KC_MINUS, KC_RSFT, 7);
144 } 188}
145return false; 189return false;
146break; 190break;
147 191
148case KC_T_LRSE: 192case KC_T_LRSE:
149if (record->event.pressed) { 193if (record->event.pressed) {
150 tap_timers[8] = timer_read(); 194 tap_timer = timer_read();
151 last_mod = 8; 195 last_mod = 8;
152 layer_on(_RISE); 196 layer_on(_RISE);
153 } else { 197} else {
154 layer_off(_RISE); 198 layer_off(_RISE);
155 if (last_mod == 8 && timer_elapsed(tap_timers[8]) < TAPPING_TERM) { 199 if (last_mod == 8 && timer_elapsed(tap_timer) < TAPPING_TERM) {
156 tap_code16(KC_DELETE); 200 tap_code16(KC_DELETE);
157 last_mod = -1; 201 last_mod = 10;
158 } 202 }
159 } 203}
160return false; 204return false;
161break; 205break;
162case KC_T_RRSE: 206case KC_T_RRSE:
163if (record->event.pressed) { 207if (record->event.pressed) {
164 tap_timers[9] = timer_read(); 208 tap_timer = timer_read();
165 last_mod = 9; 209 last_mod = 9;
166 layer_on(_RISE); 210 layer_on(_RISE);
167 } else { 211} else {
168 layer_off(_RISE); 212 layer_off(_RISE);
169 if (last_mod == 9 && timer_elapsed(tap_timers[9]) < TAPPING_TERM) { 213 if (last_mod == 9 && timer_elapsed(tap_timer) < TAPPING_TERM) {
170 tap_code16(KC_SLASH); 214 tap_code16(KC_SLASH);
171 last_mod = -1; 215 last_mod = 10;
172 } 216 }
173 } 217}
218return false;
219break;
220
221case KC_EZSHFT:
222if (record->event.pressed) {
223 set_oneshot_mods(MOD_LSFT);
224 last_mod = 10;
225}
226return false;
227break;
228case KC_EZCTRL:
229if (record->event.pressed) {
230 set_oneshot_mods(MOD_LCTL);
231 last_mod = 10;
232}
233return false;
234break;
235case KC_EZALT:
236if (record->event.pressed) {
237 set_oneshot_mods(MOD_LALT);
238 last_mod = 10;
239}
240return false;
241break;
242case KC_EZGUI:
243if (record->event.pressed) {
244 set_oneshot_mods(MOD_LGUI);
245 last_mod = 10;
246}
174return false; 247return false;
175break; 248break;
176 249
177case KC_EZRGHT: 250case KC_EZRGHT:
178if (record->event.pressed) { 251if (record->event.pressed) {
179 register_code(KC_LCTL); 252 register_code(KC_LCTL);
180 tap_code16(S(KC_RGHT)); 253 tap_code16(S(KC_RGHT));
181 unregister_code(KC_LCTL); 254 unregister_code(KC_LCTL);
182 last_mod = -1; 255 last_mod = 10;
183 } 256}
184return false; 257return false;
185break; 258break;
186case KC_EZLEFT: 259case KC_EZLEFT:
187if (record->event.pressed) { 260if (record->event.pressed) {
188 register_code(KC_LCTL); 261 register_code(KC_LCTL);
189 tap_code16(S(KC_LEFT)); 262 tap_code16(S(KC_LEFT));
190 unregister_code(KC_LCTL); 263 unregister_code(KC_LCTL);
191 last_mod = -1; 264 last_mod = 10;
192 } 265}
193return false; 266return false;
194break; 267break;
195case KC_EZDOWN: 268case KC_EZDOWN:
196if (record->event.pressed) { 269if (record->event.pressed) {
197 register_code(KC_LCTL); 270 register_code(KC_LCTL);
198 tap_code16(S(KC_DOWN)); 271 tap_code16(S(KC_DOWN));
199 unregister_code(KC_LCTL); 272 unregister_code(KC_LCTL);
200 last_mod = -1; 273 last_mod = 10;
201 } 274}
202return false; 275return false;
203break; 276break;
204case KC_EZUP: 277case KC_EZUP:
205if (record->event.pressed) { 278if (record->event.pressed) {
206 register_code(KC_LCTL); 279 register_code(KC_LCTL);
207 tap_code16(S(KC_UP)); 280 tap_code16(S(KC_UP));
208 unregister_code(KC_LCTL); 281 unregister_code(KC_LCTL);
209 last_mod = -1; 282 last_mod = 10;
210 } 283}
211return false; 284return false;
212break; 285break;
286
213case KC_EZUNDO: 287case KC_EZUNDO:
214if (record->event.pressed) { 288if (record->event.pressed) {
215 tap_code16(C(KC_Z)); 289 tap_code16(C(KC_Z));
216 last_mod = -1; 290 last_mod = 10;
217} 291}
218return false; 292return false;
219break; 293break;
220case KC_EZCOPY: 294case KC_EZCOPY:
221if (record->event.pressed) { 295if (record->event.pressed) {
222 tap_code16(C(KC_C)); 296 tap_code16(C(KC_C));
223 last_mod = -1; 297 last_mod = 10;
224} 298}
225return false; 299return false;
226break; 300break;
227case KC_EZCUT: 301case KC_EZCUT:
228if (record->event.pressed) { 302if (record->event.pressed) {
229 tap_code16(C(KC_X)); 303 tap_code16(C(KC_X));
230 last_mod = -1; 304 last_mod = 10;
231} 305}
232return false; 306return false;
233break; 307break;
234case KC_EZPSTE: 308case KC_EZPSTE:
235if (record->event.pressed) { 309if (record->event.pressed) {
236 tap_code16(C(KC_P)); 310 tap_code16(C(KC_V));
237 last_mod = -1; 311 last_mod = 10;
238} 312}
239return false; 313return false;
240break; 314break;
241 315
242 } 316case KC_COM:
243 last_mod = -1; 317if (record->event.pressed) {
244 return true; 318 layer_on(_COMMAND);
319 set_oneshot_layer(_COMMAND, ONESHOT_START);
320 last_mod = 10;
321} else {
322 clear_oneshot_layer_state (ONESHOT_PRESSED);
323}
324return false;
325break;
326
327case KC_USER:
328if (record->event.pressed) {
329 send_string("mhostley");
330 last_mod = 10;
331}
332return true;
333break;
334case KC_EMAIL:
335if (record->event.pressed) {
336 send_string("mhostley@gmail.com");
337 last_mod = 10;
338}
339return true;
340break;
341case KC_NAME:
342if (record->event.pressed) {
343 send_string("Samuel Jahnke");
344 last_mod = 10;
345}
346return true;
347break;
348case KC_DIR:
349if (record->event.pressed) {
350 send_string("home/mhostley/");
351 last_mod = 10;
352}
353return true;
354break;
355
356}
357last_mod = 10;
358return true;
245} 359}