Added mod carry over from press to release. (#5866)
Update docs/feature_space_cadet.md Co-Authored-By: fauxpark <fauxpark@gmail.com>
This commit is contained in:
		
							parent
							
								
									a07da6e245
								
							
						
					
					
						commit
						d16db69367
					
				| @ -43,6 +43,7 @@ By default Space Cadet assumes a US ANSI layout, but if your layout uses differe | |||||||
| |`LAPO_KEYS`     |`KC_LALT, KC_LSFT, KC_9`       |Send `KC_LALT` when held, the mod `KC_LSFT` with the key `KC_9` when tapped.     | | |`LAPO_KEYS`     |`KC_LALT, KC_LSFT, KC_9`       |Send `KC_LALT` when held, the mod `KC_LSFT` with the key `KC_9` when tapped.     | | ||||||
| |`RAPC_KEYS`     |`KC_RALT, KC_RSFT, KC_0`       |Send `KC_RALT` when held, the mod `KC_RSFT` with the key `KC_0` when tapped.     | | |`RAPC_KEYS`     |`KC_RALT, KC_RSFT, KC_0`       |Send `KC_RALT` when held, the mod `KC_RSFT` with the key `KC_0` when tapped.     | | ||||||
| |`SFTENT_KEYS`   |`KC_RSFT, KC_TRNS, SFTENT_KEY` |Send `KC_RSFT` when held, no mod with the key `SFTENT_KEY` when tapped.          | | |`SFTENT_KEYS`   |`KC_RSFT, KC_TRNS, SFTENT_KEY` |Send `KC_RSFT` when held, no mod with the key `SFTENT_KEY` when tapped.          | | ||||||
|  | |`SPACE_CADET_MODIFIER_CARRYOVER`   |*Not defined* |Store current modifiers before the hold mod is pressed and use them with the tap mod and keycode. Useful for when you frequently release a modifier before triggering Space Cadet.  | | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ## Obsolete Configuration | ## Obsolete Configuration | ||||||
|  | |||||||
| @ -81,11 +81,17 @@ | |||||||
| 
 | 
 | ||||||
| static uint8_t sc_last = 0; | static uint8_t sc_last = 0; | ||||||
| static uint16_t sc_timer = 0; | static uint16_t sc_timer = 0; | ||||||
|  | #ifdef SPACE_CADET_MODIFIER_CARRYOVER | ||||||
|  | static uint8_t sc_mods = 0; | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| void perform_space_cadet(keyrecord_t *record, uint8_t holdMod, uint8_t tapMod, uint8_t keycode) { | void perform_space_cadet(keyrecord_t *record, uint8_t holdMod, uint8_t tapMod, uint8_t keycode) { | ||||||
|   if (record->event.pressed) { |   if (record->event.pressed) { | ||||||
|     sc_last = holdMod; |     sc_last = holdMod; | ||||||
|     sc_timer = timer_read (); |     sc_timer = timer_read (); | ||||||
|  | #ifdef SPACE_CADET_MODIFIER_CARRYOVER | ||||||
|  |     sc_mods = get_mods(); | ||||||
|  | #endif | ||||||
|     if (IS_MOD(holdMod)) { |     if (IS_MOD(holdMod)) { | ||||||
|       register_mods(MOD_BIT(holdMod)); |       register_mods(MOD_BIT(holdMod)); | ||||||
|     } |     } | ||||||
| @ -100,7 +106,13 @@ void perform_space_cadet(keyrecord_t *record, uint8_t holdMod, uint8_t tapMod, u | |||||||
|           register_mods(MOD_BIT(tapMod)); |           register_mods(MOD_BIT(tapMod)); | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  | #ifdef SPACE_CADET_MODIFIER_CARRYOVER | ||||||
|  |     set_weak_mods(sc_mods); | ||||||
|  | #endif | ||||||
|       tap_code(keycode); |       tap_code(keycode); | ||||||
|  | #ifdef SPACE_CADET_MODIFIER_CARRYOVER | ||||||
|  |     clear_weak_mods(); | ||||||
|  | #endif | ||||||
|       if (IS_MOD(tapMod)) { |       if (IS_MOD(tapMod)) { | ||||||
|         unregister_mods(MOD_BIT(tapMod)); |         unregister_mods(MOD_BIT(tapMod)); | ||||||
|       } |       } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user