99 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include USERSPACE_H
 | |
| #include <stdbool.h>
 | |
| #include <stdint.h>
 | |
| 
 | |
| bool shift_for_two(uint16_t keycode, keyrecord_t *record){
 | |
|   uint16_t mod_state = get_mods();
 | |
| 
 | |
|   bool is_shifted = (get_mods() & MOD_MASK_SHIFT) ||
 | |
|     (get_oneshot_mods() & MOD_MASK_SHIFT);
 | |
| 
 | |
|   if(record ->event.pressed) {
 | |
|     // If shifted, double these common punctuation marks.
 | |
|     if(is_shifted){
 | |
|       // clear shift temporarily
 | |
|       del_mods(MOD_MASK_SHIFT);
 | |
|       del_oneshot_mods(MOD_MASK_SHIFT);
 | |
| 
 | |
|       tap_code16(keycode);
 | |
|       tap_code16(keycode);
 | |
| 
 | |
|       // restore previous shift state
 | |
|       set_mods(mod_state);
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| bool shift_for_three(uint16_t keycode, keyrecord_t *record){
 | |
|   uint16_t mod_state = get_mods();
 | |
| 
 | |
|   bool is_shifted = (get_mods() & MOD_MASK_SHIFT) ||
 | |
|     (get_oneshot_mods() & MOD_MASK_SHIFT);
 | |
| 
 | |
|   if(record ->event.pressed) {
 | |
|     // If shifted, double these common punctuation marks.
 | |
|     if(is_shifted){
 | |
|       // clear shift temporarily
 | |
|       del_mods(MOD_MASK_SHIFT);
 | |
|       del_oneshot_mods(MOD_MASK_SHIFT);
 | |
| 
 | |
|       tap_code16(keycode);
 | |
|       tap_code16(keycode);
 | |
|       tap_code16(keycode);
 | |
| 
 | |
|       // restore previous shift state
 | |
|       set_mods(mod_state);
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   return true;
 | |
|   }
 | |
| 
 | |
| bool override_shift(uint16_t keycode,
 | |
|                     uint16_t shift_keycode,
 | |
|                     keyrecord_t *record
 | |
|                     ) {
 | |
| 
 | |
|   bool is_shifted = (get_mods() & MOD_MASK_SHIFT) ||
 | |
|     (get_oneshot_mods() & MOD_MASK_SHIFT);
 | |
| 
 | |
|   if (record->event.pressed) {
 | |
|     if (is_shifted) {
 | |
|       uint8_t mod_state = get_mods();
 | |
|       del_mods(MOD_MASK_SHIFT);
 | |
|       del_oneshot_mods(MOD_MASK_SHIFT);
 | |
| 
 | |
|       tap_code16(shift_keycode);
 | |
| 
 | |
|       set_mods(mod_state);
 | |
|     } else {
 | |
|       //tap_code16(keycode);
 | |
|     }
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| // macros for use in alt_shift.defs.
 | |
| #define ALT_SHIFT(KCKEY, KC01)            \
 | |
|   case KCKEY:                                   \
 | |
|   return override_shift(KCKEY, KC01, record);   \
 | |
|   break;
 | |
| 
 | |
| #define SHIFT_FOR_2(KCKEY)                      \
 | |
|   case KCKEY:                                   \
 | |
|   return shift_for_two(KCKEY, record);          \
 | |
|   break;
 | |
| 
 | |
| #define SHIFT_FOR_3(KCKEY)                \
 | |
|   case KCKEY:                                   \
 | |
|   return shift_for_three(KCKEY, record);        \
 | |
|   break;
 | |
| 
 | |
| bool process_alt_shift_user(uint16_t keycode, keyrecord_t *record) {
 | |
|   switch(keycode){
 | |
| #include "alt_shift.def"
 | |
|   }
 | |
|   return true;
 | |
| }
 | 
