Add toggle functionality
This commit is contained in:
parent
654127bac7
commit
b55942731d
@ -28,6 +28,7 @@ The RapidFire keycode has a few different options:
|
|||||||
| `wait` | `200` | The delay before starting to repeat. Useful if you want to be able to type with keys that have a low `repeat` value. |
|
| `wait` | `200` | The delay before starting to repeat. Useful if you want to be able to type with keys that have a low `repeat` value. |
|
||||||
| `randomize_repeat` | `False` | Randomize the value of `repeat`. Useful for making the repetitive input look human in instances where you may be flagged as a bot otherwise. |
|
| `randomize_repeat` | `False` | Randomize the value of `repeat`. Useful for making the repetitive input look human in instances where you may be flagged as a bot otherwise. |
|
||||||
| `randomize_magnitude` | `15` | The magnitude of the randomization. If randomization is enabled, the repeat delay will be `repeat` plus or minus a random value up to this amount. |
|
| `randomize_magnitude` | `15` | The magnitude of the randomization. If randomization is enabled, the repeat delay will be `repeat` plus or minus a random value up to this amount. |
|
||||||
|
| `toggle` | `False` | Toggle RapidFire state on keypress rather than needing to be held. |
|
||||||
|
|
||||||
### Example Code
|
### Example Code
|
||||||
|
|
||||||
@ -36,9 +37,9 @@ from kmk.modules.rapidfire import RapidFire
|
|||||||
|
|
||||||
keyboard.modules.append(RapidFire())
|
keyboard.modules.append(RapidFire())
|
||||||
|
|
||||||
# After 200 milliseconds, repeatedly send Shift+A every 75-125 milliseconds while the RapidFire key is held
|
# After 200 milliseconds, repeatedly send Shift+A every 75-125 milliseconds until the button is pressed again
|
||||||
keyboard.keymap = [[
|
keyboard.keymap = [[
|
||||||
KC.RF(KC.LSFT(KC.A), wait=200, repeat=100, randomize_repeat=True, randomize_magnitude=25)
|
KC.RF(KC.LSFT(KC.A), wait=200, repeat=100, randomize_repeat=True, randomize_magnitude=25, toggle=True)
|
||||||
]]
|
]]
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -6,17 +6,25 @@ from kmk.modules import Module
|
|||||||
|
|
||||||
class RapidFireMeta:
|
class RapidFireMeta:
|
||||||
def __init__(
|
def __init__(
|
||||||
self, kc, repeat=100, wait=200, randomize_repeat=False, randomize_magnitude=15
|
self,
|
||||||
|
kc,
|
||||||
|
repeat=100,
|
||||||
|
wait=200,
|
||||||
|
randomize_repeat=False,
|
||||||
|
randomize_magnitude=15,
|
||||||
|
toggle=False,
|
||||||
):
|
):
|
||||||
self.kc = kc
|
self.kc = kc
|
||||||
self.repeat = repeat
|
self.repeat = repeat
|
||||||
self.wait = wait
|
self.wait = wait
|
||||||
self.randomize_repeat = randomize_repeat
|
self.randomize_repeat = randomize_repeat
|
||||||
self.randomize_magnitude = randomize_magnitude
|
self.randomize_magnitude = randomize_magnitude
|
||||||
|
self.toggle = toggle
|
||||||
|
|
||||||
|
|
||||||
class RapidFire(Module):
|
class RapidFire(Module):
|
||||||
_active_keys = {}
|
_active_keys = {}
|
||||||
|
_toggled_keys = []
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
make_argumented_key(
|
make_argumented_key(
|
||||||
@ -40,13 +48,19 @@ class RapidFire(Module):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def _rf_pressed(self, key, keyboard, *args, **kwargs):
|
def _rf_pressed(self, key, keyboard, *args, **kwargs):
|
||||||
|
if key in self._toggled_keys:
|
||||||
|
self._toggled_keys.remove(key)
|
||||||
|
self._rf_released(key, keyboard)
|
||||||
|
return
|
||||||
keyboard.tap_key(key.meta.kc)
|
keyboard.tap_key(key.meta.kc)
|
||||||
|
if key.meta.toggle:
|
||||||
|
self._toggled_keys.append(key)
|
||||||
self._active_keys[key] = keyboard.set_timeout(
|
self._active_keys[key] = keyboard.set_timeout(
|
||||||
key.meta.wait, lambda: self._on_timer_timeout(key, keyboard)
|
key.meta.wait, lambda: self._on_timer_timeout(key, keyboard)
|
||||||
)
|
)
|
||||||
|
|
||||||
def _rf_released(self, key, keyboard, *args, **kwargs):
|
def _rf_released(self, key, keyboard, *args, **kwargs):
|
||||||
if key in self._active_keys:
|
if key in self._active_keys and key not in self._toggled_keys:
|
||||||
keyboard.cancel_timeout(self._active_keys[key])
|
keyboard.cancel_timeout(self._active_keys[key])
|
||||||
self._active_keys.pop(key)
|
self._active_keys.pop(key)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user