Add `tap_code_delay(code, delay)` (#11913)

Co-authored-by: Drashna Jaelre <drashna@live.com>
master
Ryan 2021-02-17 07:26:52 +11:00 committed by GitHub
parent cdb9d55956
commit 3345ce2686
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 11 deletions

View File

@ -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>);`

View File

@ -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.

View File

@ -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);