 32d03eef90
			
		
	
	
		32d03eef90
		
			
		
	
	
	
	
		
			
			* feat(build): added script for compiling with docker easily * chore: bring my own build with docker to master * chore: delete a file that does not make sense anymore * feat: first redox for danielo * chore: basic compatibility between redox and my space * refactor: removed some old stuff * feat: added go coding symbols * feat: name control_k and alt_j * chore: reduce combo term * feat: improved first layer of redox * feat: add configurations to the redox * feat: make alt tab more portable * feat: small improvements to redox layout * feat: added leader * refactor: move leader defs to my userspace config * chore: movement modified * feat: more predefined keys and a a new combo * feat: redox alt tab functionality * refactor: move alt_tab processing to a separate file * refactor: early return * refactor: move process record to a separate file * format leader function * chore: backspace on digits layer * feat: add extra combo * feat: added more combos * implement guard proposed by @drashna Co-Authored-By: Drashna Jaelre <drashna@live.com> * chore: include @drashna placeholder suggestion Co-Authored-By: Drashna Jaelre <drashna@live.com> Co-authored-by: Drashna Jaelre <drashna@live.com>
		
			
				
	
	
		
			167 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "process_records.h"
 | |
| #include "alt_tab.h"
 | |
| extern bool onMac;
 | |
| // ======== INCREMENTAL MACROS STUFF =============
 | |
| #define MAX_INCREMENTAL_MACRO 20
 | |
| #define TAP_ROTATION_TIMEOUT 400
 | |
| uint16_t latest_kc = 0;
 | |
| uint16_t latest_rotation = 0;
 | |
| int key_count = 0;
 | |
| 
 | |
| const char incremental_macros[][MAX_INCREMENTAL_MACRO] = { "String1"SS_TAP(X_HOME)"X-", "String2"SS_TAP(X_HOME) };
 | |
| 
 | |
| bool process_incremental_macro(uint16_t kc) {
 | |
|     if (kc < INC_MACROS_START || kc > INC_MACROS_END) {
 | |
|         return false;
 | |
|     }
 | |
|     int  macro_idx     = (int)(kc - INC_MACROS_START) - 1;
 | |
|     char tempstring[3] = {0};
 | |
|     tempstring[0]      = incremental_macros[macro_idx][key_count];
 | |
|     // Special cases of SS_TAP SS_UP and SS_DOWN, they require two characters so get both once and skip on next iteration
 | |
|     if (tempstring[0] == '\1' || tempstring[0] == '\2' || tempstring[0] == '\3') {
 | |
|         tempstring[1] = incremental_macros[macro_idx][++key_count];
 | |
|     }
 | |
|     if (tempstring[0] == '\0') {
 | |
|         key_count = 0;
 | |
|     }
 | |
|     send_string(tempstring);
 | |
| 
 | |
|     return true;
 | |
| };
 | |
| 
 | |
| void refresh_incremental_macros(uint16_t kc) {
 | |
|     if (kc == latest_kc) {
 | |
|         if ((timer_elapsed(latest_rotation) > TAP_ROTATION_TIMEOUT) || (key_count >= MAX_INCREMENTAL_MACRO))
 | |
|             key_count = 0;
 | |
|         else
 | |
|             key_count++;
 | |
|     } else {
 | |
|         key_count = 0;
 | |
|         latest_kc = kc;
 | |
|     }
 | |
| 
 | |
|     latest_rotation = timer_read();
 | |
| }
 | |
| // Send control or GUI depending if we are on windows or mac
 | |
| bool CMD(uint16_t kc) {
 | |
|     if(onMac){ tap_code16(LGUI(kc)); } else { tap_code16(LCTL(kc)); }
 | |
|     return false;
 | |
| }
 | |
| 
 | |
| bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | |
|     bool pressed = record->event.pressed;
 | |
|     if(pressed){
 | |
|         refresh_incremental_macros(keycode);
 | |
|         if(process_incremental_macro(keycode)){
 | |
|             return false;
 | |
|         }
 | |
|         switch (keycode) {
 | |
|             case MAC_TGL:
 | |
|             onMac = !onMac;
 | |
|             onMac ? SEND_STRING("On mac") : SEND_STRING("Not on MAC");
 | |
|             return false;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     switch (keycode) {
 | |
|     case QWERTY:
 | |
|         if (record->event.pressed) {
 | |
|         #ifdef AUDIO_ENABLE
 | |
|         PLAY_SONG(tone_qwerty);
 | |
|         #endif
 | |
|         layer_on(_QWERTY);
 | |
|         }
 | |
|         return false;
 | |
|     case LOWER:
 | |
|         if (record->event.pressed) {
 | |
|         layer_on(_LOWER);
 | |
|         } else {
 | |
|         layer_off(_LOWER);
 | |
|         }
 | |
|         return false;
 | |
|     case RAISE:
 | |
|         if (record->event.pressed) {
 | |
|         layer_on(_RAISE);
 | |
|         } else {
 | |
|         layer_off(_RAISE);
 | |
|         }
 | |
|         return false;
 | |
|     case ADJUST:
 | |
|     if (record->event.pressed) {
 | |
|         layer_on(_ADJUST);
 | |
|         } else {
 | |
|         layer_off(_ADJUST);
 | |
|         }
 | |
|         return false;
 | |
|  // == Macros START ===
 | |
|     case IARROW: if (record->event.pressed) SEND_STRING("<-"); return false;
 | |
|     case ARROW: if (record->event.pressed) SEND_STRING("->"); return false;
 | |
|     case F_ARROW: if (record->event.pressed) SEND_STRING("=>"); return false;
 | |
|     case GREP: if (record->event.pressed) SEND_STRING(" | grep "); return false;
 | |
|     case CLN_EQ: if (record->event.pressed) SEND_STRING(":="); return false;
 | |
|  // == Macros END ===
 | |
|  // == Multi Os START ===
 | |
|   case KC_HOME:// make the home behave the same on OSX
 | |
|     if (record->event.pressed && onMac) {
 | |
|         SEND_STRING(SS_LCTRL("a"));
 | |
|         return false;
 | |
|     }
 | |
|   case KC_END:// make the end behave the same on OSX
 | |
|     if (record->event.pressed && onMac) {
 | |
|         tap_code16(C(KC_E));
 | |
|         return false;
 | |
|     }
 | |
|   case AC_A:// Accent á
 | |
|     if (record->event.pressed) SEND_STRING(SS_LALT("e") "a"); return false;
 | |
|   case AC_E:// Accent é
 | |
|     if (record->event.pressed) SEND_STRING(SS_LALT("e") "e"); return false;
 | |
|   case AC_I:// Accent í
 | |
|     if (record->event.pressed) SEND_STRING(SS_LALT("e") "i"); return false;
 | |
|   case AC_O:// Accent ó
 | |
|     if (record->event.pressed) SEND_STRING(SS_LALT("e") "o"); return false;
 | |
|   case CUT: if (record->event.pressed) return CMD(KC_X);
 | |
|   case COPY:
 | |
|     if (record->event.pressed) {
 | |
|      onMac ?  SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c"));
 | |
|     }
 | |
|     return false;
 | |
|   case PASTE:
 | |
|     if (record->event.pressed) {
 | |
|      onMac ?  SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v"));
 | |
|     }
 | |
|     return false;
 | |
|   case SAVE:
 | |
|     if (record->event.pressed) {
 | |
|      onMac ?  SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTRL("s"));
 | |
|     }
 | |
|     return false;
 | |
|   case UNDO:
 | |
|     if (record->event.pressed) {
 | |
|      onMac ?  SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTRL("z"));
 | |
|     }
 | |
|     return false;
 | |
|   case FIND:
 | |
|     if (record->event.pressed) {
 | |
|      onMac ?  SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTRL("f"));
 | |
|     }
 | |
|     return false;
 | |
|   case CHG_LAYOUT:
 | |
|     if (record->event.pressed) {
 | |
|      onMac ?  SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f"));
 | |
|     }
 | |
|     return false;
 | |
|  // == Multi Os END ===
 | |
| #ifdef RGBLIGHT_ENABLE
 | |
|   case RGB_SLD:
 | |
|     if (record->event.pressed) { rgblight_mode(1); }
 | |
|     return false;
 | |
|     break;
 | |
|     //First time alt + tab, and alt stays sticky. Next press we just send tab. Any other key releases the alt
 | |
| #endif
 | |
|   }
 | |
| // =============== ALT_TAB single key handling
 | |
|   return process_alt_tab(keycode, record);
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 |