Add tap_code_delay(code, delay) (#11913)
				
					
				
			Co-authored-by: Drashna Jaelre <drashna@live.com>
This commit is contained in:
		
							parent
							
								
									cdb9d55956
								
							
						
					
					
						commit
						3345ce2686
					
				
					 3 changed files with 23 additions and 11 deletions
				
			
		| 
						 | 
					@ -233,9 +233,15 @@ Parallel to `register_code` function, this sends the `<kc>` keyup event to the c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### `tap_code(<kc>);`
 | 
					### `tap_code(<kc>);`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This will send `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
 | 
					Sends `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you're having issues with taps (un)registering, you can add a delay between the register and unregister events by setting `#define TAP_CODE_DELAY 100` in your `config.h` file. The value is in milliseconds.
 | 
					If `TAP_CODE_DELAY` is defined (default 0), this function waits that many milliseconds before calling `unregister_code(<kc>)`. This can be useful when you are having issues with taps (un)registering.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If the keycode is `KC_CAPS`, it waits `TAP_HOLD_CAPS_DELAY` milliseconds instead (default 80), as macOS prevents accidental Caps Lock activation by waiting for the key to be held for a certain amount of time.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### `tap_code_delay(<kc>, <delay>);`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Like `tap_code(<kc>)`, but with a `delay` parameter for specifying arbitrary intervals before sending the unregister event.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### `register_code16(<kc>);`, `unregister_code16(<kc>);` and `tap_code16(<kc>);`
 | 
					### `register_code16(<kc>);`, `unregister_code16(<kc>);` and `tap_code16(<kc>);`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -940,18 +940,23 @@ void unregister_code(uint8_t code) {
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** \brief Utilities for actions. (FIXME: Needs better description)
 | 
					/** \brief Tap a keycode with a delay.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * FIXME: Needs documentation.
 | 
					 * \param code The basic keycode to tap.
 | 
				
			||||||
 | 
					 * \param delay The amount of time in milliseconds to leave the keycode registered, before unregistering it.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void tap_code_delay(uint8_t code, uint16_t delay) {
 | 
				
			||||||
 | 
					    register_code(code);
 | 
				
			||||||
 | 
					    wait_ms(delay);
 | 
				
			||||||
 | 
					    unregister_code(code);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** \brief Tap a keycode with the default delay.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \param code The basic keycode to tap. If `code` is `KC_CAPS`, the delay will be `TAP_HOLD_CAPS_DELAY`, otherwise `TAP_CODE_DELAY`, if defined.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void tap_code(uint8_t code) {
 | 
					void tap_code(uint8_t code) {
 | 
				
			||||||
    register_code(code);
 | 
					    tap_code_delay(code, code == KC_CAPS ? TAP_HOLD_CAPS_DELAY : TAP_CODE_DELAY);
 | 
				
			||||||
    if (code == KC_CAPS) {
 | 
					 | 
				
			||||||
        wait_ms(TAP_HOLD_CAPS_DELAY);
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        wait_ms(TAP_CODE_DELAY);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    unregister_code(code);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** \brief Adds the given physically pressed modifiers and sends a keyboard report immediately.
 | 
					/** \brief Adds the given physically pressed modifiers and sends a keyboard report immediately.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -100,6 +100,7 @@ void process_action(keyrecord_t *record, action_t action);
 | 
				
			||||||
void register_code(uint8_t code);
 | 
					void register_code(uint8_t code);
 | 
				
			||||||
void unregister_code(uint8_t code);
 | 
					void unregister_code(uint8_t code);
 | 
				
			||||||
void tap_code(uint8_t code);
 | 
					void tap_code(uint8_t code);
 | 
				
			||||||
 | 
					void tap_code_delay(uint8_t code, uint16_t delay);
 | 
				
			||||||
void register_mods(uint8_t mods);
 | 
					void register_mods(uint8_t mods);
 | 
				
			||||||
void unregister_mods(uint8_t mods);
 | 
					void unregister_mods(uint8_t mods);
 | 
				
			||||||
void register_weak_mods(uint8_t mods);
 | 
					void register_weak_mods(uint8_t mods);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue