aboutsummaryrefslogtreecommitdiff
path: root/users/spacebarracecar
diff options
context:
space:
mode:
authorSpacebarRacecar <42380065+SpacebarRacecar@users.noreply.github.com>2018-10-05 00:00:33 +0200
committerDrashna Jaelre <drashna@live.com>2018-10-04 15:00:33 -0700
commit26adf3706a7822e05977c0eadb6963c0db2e1c3b (patch)
tree39fe2ec31b10c3b03a305c2cb3c34490fff9a9cc /users/spacebarracecar
parentdad579c8f81bdde08e598f9d99249893d5d779a8 (diff)
downloadqmk_firmware-26adf3706a7822e05977c0eadb6963c0db2e1c3b.tar.gz
qmk_firmware-26adf3706a7822e05977c0eadb6963c0db2e1c3b.zip
Keymap: Added personal userspace and keymaps. (#4073)
* added personal userspace, niu mini, planck and fc660c keymaps * removed unnecessary include and some other minor corrections
Diffstat (limited to 'users/spacebarracecar')
-rw-r--r--users/spacebarracecar/config.h0
-rw-r--r--users/spacebarracecar/rules.mk5
-rw-r--r--users/spacebarracecar/spacebarracecar.c305
-rw-r--r--users/spacebarracecar/spacebarracecar.h242
4 files changed, 552 insertions, 0 deletions
diff --git a/users/spacebarracecar/config.h b/users/spacebarracecar/config.h
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/users/spacebarracecar/config.h
diff --git a/users/spacebarracecar/rules.mk b/users/spacebarracecar/rules.mk
new file mode 100644
index 000000000..319e887ae
--- /dev/null
+++ b/users/spacebarracecar/rules.mk
@@ -0,0 +1,5 @@
1SRC += spacebarracecar.c
2
3ifeq ($(strip $(GERMAN_ENABLE)), yes)
4 OPT_DEFS += -DGERMAN_ENABLE
5endif
diff --git a/users/spacebarracecar/spacebarracecar.c b/users/spacebarracecar/spacebarracecar.c
new file mode 100644
index 000000000..404331f8d
--- /dev/null
+++ b/users/spacebarracecar/spacebarracecar.c
@@ -0,0 +1,305 @@
1#include "spacebarracecar.h"
2
3#ifdef GERMAN_ENABLE
4bool lshift = false;
5bool rshift = false;
6bool lshiftp = false;
7bool rshiftp = false;
8uint16_t lshift_timer = 0;
9uint16_t rshift_timer = 0;
10
11uint8_t prev_indx = 0;
12uint16_t prev_kcs[6] = {0, 0, 0, 0, 0, 0};
13
14bool esct = false;
15
16void add_to_prev(uint16_t kc){
17 for (int i=0; i<prev_indx; i++){
18 if (kc == prev_kcs[i])
19 return;
20 }
21 if (prev_indx == 6){
22 for (int i=5; i>0; i--){
23 prev_kcs[i] = prev_kcs[i-1];
24 }
25 prev_kcs[0] = kc;
26 } else {
27 prev_kcs[prev_indx] = kc;
28 prev_indx++;
29 }
30}
31
32void unreg_prev(void){
33 if (prev_indx == 0)
34 return;
35 for (int i=0; i<prev_indx; i++){
36 unregister_code(prev_kcs[i]);
37 }
38 prev_indx = 0;
39}
40#endif
41
42// stuff for nav esc
43bool navesc = false;
44uint16_t navesc_timer = 0;
45bool game = false;
46
47void timer_timeout(void){
48 #ifdef GERMAN_ENABLE
49 lshiftp = false;
50 rshiftp = false;
51 #endif
52 navesc = false;
53}
54
55bool process_record_userspace(uint16_t keycode, keyrecord_t *record) {
56 switch (keycode) {
57 case CU_GAME:
58 if(record->event.pressed) {
59 game = !game;
60 }
61 return false;
62 case KC_LGUI:
63 case KC_RGUI:
64 if (game)
65 return false;
66 else
67 return true;
68 case CU_NAV:
69 if(record->event.pressed) {
70 navesc = true;
71 navesc_timer = timer_read();
72 layer_on(_NAV);
73 } else {
74 if (timer_elapsed(navesc_timer) < 200 && navesc) {
75 register_code(KC_ESC);
76 unregister_code(KC_ESC);
77 }
78 layer_off(_NAV);
79 }
80 return false;
81
82 #ifdef RGBLIGHT_ENABLE
83 case CU_RGBV:
84 if(record->event.pressed) {
85 if (rgblight_get_val()+32>255)
86 rgblight_sethsv(rgblight_get_hue(), rgblight_get_sat(), 31);
87 else
88 rgblight_sethsv(rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val()+32);
89 }
90 return false;
91 #endif
92
93 #ifdef GERMAN_ENABLE
94 case CU_LSFT:
95 if(record->event.pressed) {
96 lshiftp = true;
97 lshift_timer = timer_read();
98 unregister_code(KC_LSFT);
99 register_code(KC_LSFT);
100 lshift = true;
101 } else {
102 if (timer_elapsed(lshift_timer) < 200 && lshiftp && !game) {
103 register_code(KC_LSFT);
104 register_code(KC_8);
105 unregister_code(KC_8);
106 unregister_code(KC_LSFT);
107 }
108 unreg_prev();
109 if (!rshift)
110 unregister_code(KC_LSFT);
111 lshift = false;
112 }
113 return false;
114 case CU_RSFT:
115 if(record->event.pressed) {
116 rshiftp = true;
117 rshift_timer = timer_read();
118 unregister_code(KC_LSFT);
119 register_code(KC_LSFT);
120 rshift = true;
121 } else {
122 if (timer_elapsed(rshift_timer) < 200 && rshiftp && !game) {
123 register_code(KC_LSFT);
124 register_code(KC_9);
125 unregister_code(KC_9);
126 unregister_code(KC_LSFT);
127 }
128 unreg_prev();
129 if (!lshift)
130 unregister_code(KC_LSFT);
131 rshift = false;
132 }
133 return false;
134 case CU_ESCT:
135 if(record->event.pressed) {
136 esct = !esct;
137 }
138 return false;
139 case CU_AE:
140 UML(DE_AE)
141 case CU_OE:
142 UML(DE_OE)
143 case CU_UE:
144 UML(DE_UE)
145 case CU_SS:
146 if(record->event.pressed) {
147 timer_timeout();
148 unregister_code(KC_LSFT);
149 register_code(DE_SS);
150 unregister_code(DE_SS);
151 if (lshift || rshift)
152 register_code(KC_LSFT);
153 layer_off(_DEADKEY);
154 }
155 return false;
156 case CU_DDQ:
157 if(record->event.pressed) {
158 timer_timeout();
159 register_code(KC_LSFT);
160 register_code(KC_2);
161 unregister_code(KC_2);
162 if (!lshift && !rshift)
163 unregister_code(KC_LSFT);
164 layer_off(_DEADKEY);
165 }
166 return false;
167 case CU_ED:
168 if(record->event.pressed) {
169 timer_timeout();
170 layer_off(_DEADKEY);
171 }
172 return false;
173 case CU_GRV:
174 if(record->event.pressed) {
175 timer_timeout();
176 if (lshift || rshift){
177 unregister_code(KC_LSFT);
178 register_code(DE_ALGR);
179 unregister_code(DE_PLUS);
180 register_code(DE_PLUS);
181 unregister_code(DE_PLUS);
182 unregister_code(DE_ALGR);
183 register_code(KC_LSFT);
184 } else {
185 register_code(KC_LSFT);
186 unregister_code(DE_ACUT);
187 register_code(DE_ACUT);
188 unregister_code(DE_ACUT);
189 unregister_code(KC_LSFT);
190 if (!esct) {
191 register_code(KC_SPC);
192 unregister_code(KC_SPC);
193 }
194 }
195 }
196 return false;
197 case CU_CIRC:
198 if(record->event.pressed) {
199 timer_timeout();
200 unregister_code(KC_LSFT);
201 unregister_code(DE_CIRC);
202 register_code(DE_CIRC);
203 unregister_code(DE_CIRC);
204 if (!esct) {
205 register_code(KC_SPC);
206 unregister_code(KC_SPC);
207 }
208 if (lshift || rshift)
209 register_code(KC_LSFT);
210 }
211 return false;
212 case CU_QUOT:
213 if(record->event.pressed){
214 timer_timeout();
215 register_code(KC_LSFT);
216 if (lshift || rshift){
217 layer_on(_DEADKEY);
218 } else {
219 unregister_code(DE_HASH);
220 register_code(DE_HASH);
221 add_to_prev(DE_HASH);
222 }
223 } else {
224 unregister_code(DE_HASH);
225 unreg_prev();
226 if (lshift || rshift)
227 register_code(KC_LSFT);
228 else
229 unregister_code(KC_LSFT);
230 }
231 return false;
232 case CU_6:
233 if(record->event.pressed){
234 timer_timeout();
235 unregister_code(KC_LSFT);
236 if (lshift || rshift){
237 unregister_code(DE_CIRC);
238 register_code(DE_CIRC);
239 unregister_code(DE_CIRC);
240 if (!esct) {
241 register_code(KC_SPC);
242 unregister_code(KC_SPC);
243 }
244 register_code(KC_LSFT);
245 } else {
246 register_code(DE_6);
247 }
248 } else {
249 unregister_code(DE_6);
250 }
251 return false;
252 case CU_COMM:
253 SHIFT_NO(DE_COMM, DE_LESS)
254 case CU_DOT:
255 SHIFT_NORM(DE_DOT, DE_LESS)
256 case CU_SLSH:
257 SHIFT_ALL(DE_7, DE_SS)
258 case CU_SCLN:
259 SHIFT_ALL(DE_COMM, DE_DOT)
260 case CU_3:
261 SHIFT_NO(DE_3, DE_HASH)
262 case CU_7:
263 SHIFT_NORM(DE_7, DE_6)
264 case CU_8:
265 SHIFT_NORM(DE_8, DE_PLUS)
266 case CU_9:
267 SHIFT_NORM(DE_9, DE_8)
268 case CU_0:
269 SHIFT_NORM(DE_0, DE_9)
270 case CU_EQL:
271 SHIFT_SWITCH(DE_0, DE_PLUS)
272 case CU_LBRC:
273 SHIFT_ALGR(DE_8, DE_7)
274 case CU_RBRC:
275 SHIFT_ALGR(DE_9, DE_0)
276 case CU_BSLS:
277 SHIFT_ALGR(DE_SS, DE_LESS)
278 case CU_Z:
279 CTRL(DE_Z, KC_Z)
280 case CU_Y:
281 CTRL(DE_Y, KC_Y)
282 case KC_LCTL:
283 case KC_RCTL:
284 if(!record->event.pressed) {
285 unregister_code(KC_Z);
286 unregister_code(KC_Y);
287 }
288 return true;
289 #endif
290
291 default:
292 if(record->event.pressed) {
293 timer_timeout();
294
295 #ifdef GERMAN_ENABLE
296 if (lshift || rshift)
297 register_code(KC_LSFT);
298 else
299 unregister_code(KC_LSFT);
300 #endif
301
302 }
303 return true;
304 }
305}
diff --git a/users/spacebarracecar/spacebarracecar.h b/users/spacebarracecar/spacebarracecar.h
new file mode 100644
index 000000000..42879d2ef
--- /dev/null
+++ b/users/spacebarracecar/spacebarracecar.h
@@ -0,0 +1,242 @@
1#pragma once
2
3#include "quantum.h"
4#include "keymap_german.h"
5
6enum userspace_layers {
7 _DEADKEY = 14, //change if more than 16 layers are required
8 _NAV
9};
10
11enum userspace_custom_keycodes {
12 CU_GAME = SAFE_RANGE, // Toggle game mode on/off
13 CU_NAV, // NAV | ESC
14
15 #ifdef GERMAN_ENABLE
16 CU_LSFT, // LSFT | (
17 CU_RSFT, // LSFT | )
18 CU_COMM, // , | <
19 CU_DOT, // . | >
20 CU_SLSH, // / | ?
21 CU_SCLN, // ; | :
22 CU_QUOT, // ' | Enable deadkey layer
23 CU_GRV, // ` | ~
24 CU_CIRC, // ^
25 CU_3, // 3 | #
26 CU_6, // 6 | ^
27 CU_7, // 7 | &
28 CU_8, // 8 | *
29 CU_9, // 9 | (
30 CU_0, // 0 | )
31 CU_EQL, // = | +
32 CU_LBRC, // [ | {
33 CU_RBRC, // ] | }
34 CU_BSLS, // \ | |
35 CU_Z, // Z | Y in conjunction with ctrl
36 CU_Y, // Y | Z in conjunction wiht ctrl
37 CU_ESCT, // Toggle escape of grv and circ on/off
38 // Deadkey Layer
39 CU_AE, // Ä
40 CU_OE, // Ö
41 CU_UE, // Ü
42 CU_SS, // ß
43 CU_DDQ, // "
44 CU_ED, // Escape deadkey layer
45 #endif
46
47 #ifdef RGBLIGHT_ENABLE
48 CU_RGBV, // Cycle through RGB brightness
49 #endif
50
51 NEW_SAFE_RANGE // Use for keymap specific keycodes
52};
53
54#ifdef GERMAN_ENABLE
55// these save the current shift status
56extern bool lshift;
57extern bool rshift;
58// stuff for custom space cadet shift
59extern bool lshiftp;
60extern bool rshiftp;
61extern uint16_t lshift_timer;
62extern uint16_t rshift_timer;
63
64extern uint8_t prev_indx;
65extern uint16_t prev_kcs[6];
66
67void add_to_prev(uint16_t kc);
68void unreg_prev(void);
69
70extern bool esct;
71#endif
72
73// stuff for nav esc
74extern bool navesc;
75extern uint16_t navesc_timer;
76
77extern bool game;
78
79void timer_timeout(void);
80
81bool process_record_userspace(uint16_t keycode, keyrecord_t *record);
82
83#define CTRLX LCTL(KC_X)
84#define CTRLC LCTL(KC_C)
85#define CTRLV LCTL(KC_V)
86
87#define GUIU LGUI(KC_UP)
88#define GUID LGUI(KC_DOWN)
89#define GUIL LGUI(KC_LEFT)
90#define GUIR RGUI(KC_RIGHT)
91
92//
93// Templates for Keys, with custom shifted and non shifted Characters
94//
95
96// Normal shift status
97#define SHIFT_NORM(kc1, kc2) \
98if (record->event.pressed) { \
99 timer_timeout(); \
100 if (lshift || rshift) { \
101 register_code(KC_LSFT); \
102 unregister_code(kc2); \
103 register_code(kc2); \
104 add_to_prev(kc2); \
105 } else { \
106 unregister_code(KC_LSFT); \
107 unregister_code(kc1); \
108 register_code(kc1); \
109 } \
110} else { \
111 unregister_code(kc1); \
112 unregister_code(kc2); \
113} \
114return false;
115
116// Inverted shift status
117#define SHIFT_SWITCH(kc1, kc2) \
118if (record->event.pressed) { \
119 timer_timeout(); \
120 if (lshift || rshift) { \
121 unregister_code(KC_LSFT); \
122 unregister_code(kc2); \
123 register_code(kc2); \
124 add_to_prev(kc2); \
125 } else { \
126 register_code(KC_LSFT); \
127 unregister_code(kc1); \
128 register_code(kc1); \
129 add_to_prev(kc1); \
130 } \
131} else { \
132 unregister_code(kc1); \
133 unregister_code(kc2); \
134 unreg_prev(); \
135 if (lshift || rshift) \
136 register_code(KC_LSFT); \
137 else \
138 unregister_code(KC_LSFT); \
139} \
140return false;
141
142// All shift
143#define SHIFT_ALL(kc1, kc2) \
144if (record->event.pressed) { \
145 timer_timeout(); \
146 register_code(KC_LSFT); \
147 if (lshift || rshift) { \
148 unregister_code(kc2); \
149 register_code(kc2); \
150 add_to_prev(kc2); \
151 } else { \
152 unregister_code(kc1); \
153 register_code(kc1); \
154 add_to_prev(kc1); \
155 } \
156} else { \
157 unregister_code(kc1); \
158 unregister_code(kc2); \
159 unreg_prev(); \
160 if (lshift || rshift) \
161 register_code(KC_LSFT); \
162 else \
163 unregister_code(KC_LSFT); \
164} \
165return false;
166
167// All no shift
168#define SHIFT_NO(kc1, kc2) \
169if (record->event.pressed) { \
170 timer_timeout(); \
171 unregister_code(KC_LSFT); \
172 if (lshift || rshift) { \
173 unregister_code(kc2); \
174 register_code(kc2); \
175 add_to_prev(kc2); \
176 } else { \
177 unregister_code(kc1); \
178 register_code(kc1); \
179 } \
180} else { \
181 unregister_code(kc1); \
182 unregister_code(kc2); \
183 unreg_prev(); \
184 if (lshift || rshift) \
185 register_code(KC_LSFT); \
186 else \
187 unregister_code(KC_LSFT); \
188} \
189return false;
190
191// All algr
192#define SHIFT_ALGR(kc1, kc2) \
193if (record->event.pressed) { \
194 timer_timeout(); \
195 unregister_code(KC_LSFT); \
196 register_code(DE_ALGR); \
197 if (lshift || rshift) { \
198 unregister_code(kc2); \
199 register_code(kc2); \
200 unregister_code(kc2); \
201 register_code(KC_LSFT); \
202 } else { \
203 unregister_code(kc1); \
204 register_code(kc1); \
205 unregister_code(kc1); \
206 } \
207 unregister_code(DE_ALGR); \
208} \
209return false;
210
211// Different keycode for ctrl
212#define CTRL(kc1, kc2) \
213if(record->event.pressed) { \
214 timer_timeout(); \
215 if (lshift || rshift) \
216 register_code(KC_LSFT); \
217 else \
218 unregister_code(KC_LSFT); \
219 if (keyboard_report->mods & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))){ \
220 register_code(kc2); \
221 } else { \
222 register_code(kc1); \
223 } \
224} else { \
225 unregister_code(kc1); \
226 unregister_code(kc2); \
227} \
228return false;
229
230// Umlaute for deadkey layer
231#define UML(kc) \
232if(record->event.pressed) { \
233 timer_timeout(); \
234 if (lshift || rshift) \
235 register_code(KC_LSFT); \
236 else \
237 unregister_code(KC_LSFT); \
238 register_code(kc); \
239 unregister_code(kc); \
240 layer_off(_DEADKEY); \
241} \
242return false;