1 #include "spacebarracecar.h"
4 // These indicate if left and right shift are physically pressed
8 // Interrupt and times for space cadet shift
11 uint16_t lshift_timer = 0;
12 uint16_t rshift_timer = 0;
14 // Number of items that are saved in prev_kcs
15 uint8_t prev_indx = 0;
16 // Used to save the last 6 actual keycodes activated by frankenkeycodes
17 uint16_t prev_kcs[6] = {0, 0, 0, 0, 0, 0};
19 // If true the deadkey characters grave and circonflexe are not automatically escaped
23 Used to add a keycode to a prev_kcs to remember it.
24 When full the last code gets discarded and replaced by
27 void add_to_prev(uint16_t kc){
28 for (int i=0; i<prev_indx; i++){
29 if (kc == prev_kcs[i])
33 for (int i=5; i>0; i--){
34 prev_kcs[i] = prev_kcs[i-1];
38 prev_kcs[prev_indx] = kc;
44 Unregisters all codes saved in prev_kcs and resets prev_indx.
45 gets called on multiple occasions mainly when shift is released
46 and when frankenkeycodes are pressed. Prevents output of
47 wrong characters when really specific key combinations
48 that would never occur during normal usage are pressed.
50 void unreg_prev(void){
53 for (int i=0; i<prev_indx; i++){
54 unregister_code(prev_kcs[i]);
60 // Interrupt and times for Nav/Esc
62 uint16_t navesc_timer = 0;
64 // If true Gui keys and Space Cadet Shift get disabled
67 // Interrupts all timers
68 void timer_timeout(void){
76 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
79 if(record->event.pressed) {
83 // allows keymap to execute further commands when CU_GAME is pressed, for example enabling a macro layer
84 return process_record_keymap(keycode, record) && false;
87 if (record->event.pressed)
94 if(record->event.pressed) {
96 navesc_timer = timer_read();
99 if (timer_elapsed(navesc_timer) < 200 && navesc) {
100 register_code(KC_ESC);
101 unregister_code(KC_ESC);
107 if(record->event.pressed) {
109 register_code(KC_P0);
110 unregister_code(KC_P0);
111 register_code(KC_P0);
112 unregister_code(KC_P0);
116 #ifdef RGBLIGHT_ENABLE
118 if(record->event.pressed) {
120 if (rgblight_get_val()+32>255)
121 rgblight_sethsv(rgblight_get_hue(), rgblight_get_sat(), 31);
123 rgblight_sethsv(rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val()+32);
130 if(record->event.pressed) {
132 lshift_timer = timer_read();
133 unregister_code(KC_LSFT);
134 register_code(KC_LSFT);
137 if (timer_elapsed(lshift_timer) < 200 && lshiftp && !game) {
138 register_code(KC_LSFT);
140 unregister_code(KC_8);
141 unregister_code(KC_LSFT);
145 unregister_code(KC_LSFT);
150 if(record->event.pressed) {
152 rshift_timer = timer_read();
153 unregister_code(KC_LSFT);
154 register_code(KC_LSFT);
157 if (timer_elapsed(rshift_timer) < 200 && rshiftp && !game) {
158 register_code(KC_LSFT);
160 unregister_code(KC_9);
161 unregister_code(KC_LSFT);
165 unregister_code(KC_LSFT);
170 if(record->event.pressed) {
182 if(record->event.pressed) {
184 unregister_code(KC_LSFT);
185 register_code(DE_SS);
186 unregister_code(DE_SS);
187 if (lshift || rshift)
188 register_code(KC_LSFT);
193 if(record->event.pressed) {
195 register_code(KC_LSFT);
197 unregister_code(KC_2);
198 if (!lshift && !rshift)
199 unregister_code(KC_LSFT);
204 if(record->event.pressed) {
210 if(record->event.pressed) {
212 if (lshift || rshift){
213 unregister_code(KC_LSFT);
214 register_code(DE_ALGR);
215 unregister_code(DE_PLUS);
216 register_code(DE_PLUS);
217 unregister_code(DE_PLUS);
218 unregister_code(DE_ALGR);
219 register_code(KC_LSFT);
221 register_code(KC_LSFT);
222 unregister_code(DE_ACUT);
223 register_code(DE_ACUT);
224 unregister_code(DE_ACUT);
225 unregister_code(KC_LSFT);
227 register_code(KC_SPC);
228 unregister_code(KC_SPC);
234 if(record->event.pressed) {
236 unregister_code(KC_LSFT);
237 unregister_code(DE_CIRC);
238 register_code(DE_CIRC);
239 unregister_code(DE_CIRC);
241 register_code(KC_SPC);
242 unregister_code(KC_SPC);
244 if (lshift || rshift)
245 register_code(KC_LSFT);
249 if(record->event.pressed){
251 register_code(KC_LSFT);
252 if (lshift || rshift){
255 unregister_code(DE_HASH);
256 register_code(DE_HASH);
257 add_to_prev(DE_HASH);
260 unregister_code(DE_HASH);
262 if (lshift || rshift)
263 register_code(KC_LSFT);
265 unregister_code(KC_LSFT);
269 if(record->event.pressed){
271 unregister_code(KC_LSFT);
272 if (lshift || rshift){
273 unregister_code(DE_CIRC);
274 register_code(DE_CIRC);
275 unregister_code(DE_CIRC);
277 register_code(KC_SPC);
278 unregister_code(KC_SPC);
280 register_code(KC_LSFT);
285 unregister_code(DE_6);
289 SHIFT_NO(DE_COMM, DE_LESS)
291 SHIFT_NORM(DE_DOT, DE_LESS)
293 SHIFT_ALL(DE_7, DE_SS)
295 SHIFT_ALL(DE_COMM, DE_DOT)
297 SHIFT_NO(DE_3, DE_HASH)
299 SHIFT_NORM(DE_7, DE_6)
301 SHIFT_NORM(DE_8, DE_PLUS)
303 SHIFT_NORM(DE_9, DE_8)
305 SHIFT_NORM(DE_0, DE_9)
307 SHIFT_SWITCH(DE_0, DE_PLUS)
309 SHIFT_ALGR(DE_8, DE_7)
311 SHIFT_ALGR(DE_9, DE_0)
313 SHIFT_ALGR(DE_SS, DE_LESS)
320 if(!record->event.pressed) {
322 unregister_code(KC_Z);
323 unregister_code(KC_Y);
329 if(record->event.pressed) {
333 if (lshift || rshift)
334 register_code(KC_LSFT);
336 unregister_code(KC_LSFT);
340 return process_record_keymap(keycode, record);