OneShot Keycodes

[!WARNING] OneShot Keys have been deprecated in favor of Sticky Keys and will be removed at a future date.

OneShot keys enable you to have keys that keep staying pressed for a certain time or until another key is pressed and released. If the timeout expires or other keys are pressed, and the OneShot key wasn’t released, it is handled as a regular key hold.

Enable OneShot Keys

from kmk.modules.oneshot import OneShot
oneshot = OneShot()
# optional: set a custom tap timeout in ms (default: 1000ms)
# oneshot.tap_time = 1500
keyboard.modules.append(oneshot)

Keycodes

KeycodeAliasesDescription
KC.OS(KC.ANY)KC.ONESHOTmake a oneshot version of KC.ANY

KC.ONESHOT accepts any valid key code as argument, including modifiers and KMK internal keys like momentary layer shifts.

Custom OneShot Behavior

The full OneShot signature is as follows:

KC.OS(
    KC.TAP, # the oneshot keycode
    tap_time=None # length of the tap timeout in milliseconds
    )

OneShot Modifier Combinations

The OneShot keys can be chained. In this example if you press OS_LCTL and then OS_LSFT followed by KC.TAB, the output will be ctrl+shift+tab.

from kmk.modules.oneshot import OneShot

oneshot = OneShot()
keyboard.modules.append(oneshot)

OS_LCTL = KC.OS(KC.LCTL, tap_time=None)
OS_LSFT = KC.OS(KC.LSFT, tap_time=None)

keyboard.keymap = [[OS_LSFT, OS_LCTL, KC.TAB]]