38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #define ENABLE_ONESHOT
 | |
| #ifdef ENABLE_ONESHOT
 | |
| #pragma once
 | |
| 
 | |
| typedef enum {
 | |
|   ONESHOT_LCTL = 0,
 | |
|   ONESHOT_LSFT = 1,
 | |
|   ONESHOT_LALT = 2,
 | |
|   ONESHOT_LGUI = 3,
 | |
|   ONESHOT_RCTL = 4,
 | |
|   ONESHOT_RSFT = 5,
 | |
|   ONESHOT_RALT = 6,
 | |
|   ONESHOT_RGUI = 7,
 | |
|   ONESHOT_NONE = 8,
 | |
|   ONESHOT_MOD_COUNT = 8,
 | |
| } oneshot_mod;
 | |
| 
 | |
| 
 | |
| // This function should be called inside proces_record_user and does everything needed to get one shot modifiers working.
 | |
| // Returns true if the keycode needs further handling, false otherwise.
 | |
| int8_t update_oneshot_modifiers(uint16_t keycode, keyrecord_t *record, int8_t keycode_consumed);
 | |
| int8_t turnoff_oneshot_modifiers(void);
 | |
| 
 | |
| // TO BE IMPLEMENTED BY THE USER
 | |
| // This function should return one of the oneshot_mod enumerations (see keymap.c implementation)
 | |
| oneshot_mod get_modifier_for_trigger_key(uint16_t keycode);
 | |
| 
 | |
| // TO BE IMPLEMENTED BY THE USER
 | |
| // This function should return true for keycodes that must be ignored in the oneshot modifier behaviour.
 | |
| // You probably want to ignore layer keys. Trigger keys don't need to be specified here.
 | |
| bool is_oneshot_modifier_ignored_key(uint16_t keycode);
 | |
| 
 | |
| // TO BE IMPLEMENTED BY THE USER
 | |
| // This function should return true for keycodes that should reset all oneshot modifiers.
 | |
| bool is_oneshot_modifier_cancel_key(uint16_t keycode);
 | |
| 
 | |
| #endif
 |