prepare layers for tapdance refactor

This commit is contained in:
xs5871 2022-05-03 17:23:58 +00:00 committed by Kyle Brown
parent 385263e0e6
commit 7af0e11f75
3 changed files with 21 additions and 66 deletions

View File

@ -11,9 +11,7 @@ def key_seq_sleep_validator(ms):
return KeySeqSleepMeta(ms) return KeySeqSleepMeta(ms)
def layer_key_validator( def layer_key_validator(layer):
layer, kc=None, prefer_hold=False, tap_interrupted=False, tap_time=None
):
''' '''
Validates the syntax (but not semantics) of a layer key call. We won't Validates the syntax (but not semantics) of a layer key call. We won't
have access to the keymap here, so we can't verify much of anything useful have access to the keymap here, so we can't verify much of anything useful
@ -21,13 +19,7 @@ def layer_key_validator(
existing is mostly that Python will catch extraneous args/kwargs and error existing is mostly that Python will catch extraneous args/kwargs and error
out. out.
''' '''
return LayerKeyMeta( return LayerKeyMeta(layer)
layer=layer,
kc=kc,
prefer_hold=prefer_hold,
tap_interrupted=tap_interrupted,
tap_time=tap_time,
)
def mod_tap_validator( def mod_tap_validator(

View File

@ -1,26 +1,18 @@
'''One layer isn't enough. Adds keys to get to more of them''' '''One layer isn't enough. Adds keys to get to more of them'''
from micropython import const
from kmk.key_validators import layer_key_validator from kmk.key_validators import layer_key_validator
from kmk.keys import make_argumented_key from kmk.keys import KC, make_argumented_key
from kmk.modules.holdtap import ActivationType, HoldTap from kmk.modules.holdtap import ActivationType, HoldTap
from kmk.types import HoldTapKeyMeta
class LayerType: def layer_key_validator_lt(layer, kc, prefer_hold=False, **kwargs):
'''Defines layer types to be passed on as on_press and on_release kwargs where needed''' return HoldTapKeyMeta(tap=kc, hold=KC.MO(layer), prefer_hold=prefer_hold, **kwargs)
LT = const(0)
TT = const(1)
def curry(fn, *args, **kwargs): def layer_key_validator_tt(layer, prefer_hold=True, **kwargs):
def curried(*fn_args, **fn_kwargs): return HoldTapKeyMeta(
merged_args = args + fn_args tap=KC.TG(layer), hold=KC.MO(layer), prefer_hold=prefer_hold, **kwargs
merged_kwargs = kwargs.copy() )
merged_kwargs.update(fn_kwargs)
return fn(*merged_args, **merged_kwargs)
return curried
class Layers(HoldTap): class Layers(HoldTap):
@ -44,12 +36,6 @@ class Layers(HoldTap):
on_press=self._lm_pressed, on_press=self._lm_pressed,
on_release=self._lm_released, on_release=self._lm_released,
) )
make_argumented_key(
validator=layer_key_validator,
names=('LT',),
on_press=curry(self.ht_pressed, key_type=LayerType.LT),
on_release=curry(self.ht_released, key_type=LayerType.LT),
)
make_argumented_key( make_argumented_key(
validator=layer_key_validator, names=('TG',), on_press=self._tg_pressed validator=layer_key_validator, names=('TG',), on_press=self._tg_pressed
) )
@ -57,10 +43,16 @@ class Layers(HoldTap):
validator=layer_key_validator, names=('TO',), on_press=self._to_pressed validator=layer_key_validator, names=('TO',), on_press=self._to_pressed
) )
make_argumented_key( make_argumented_key(
validator=curry(layer_key_validator, prefer_hold=True), validator=layer_key_validator_lt,
names=('LT',),
on_press=self.ht_pressed,
on_release=self.ht_released,
)
make_argumented_key(
validator=layer_key_validator_tt,
names=('TT',), names=('TT',),
on_press=curry(self.ht_pressed, key_type=LayerType.TT), on_press=self.ht_pressed,
on_release=curry(self.ht_released, key_type=LayerType.TT), on_release=self.ht_released,
) )
def process_key(self, keyboard, key, is_pressed, int_coord): def process_key(self, keyboard, key, is_pressed, int_coord):
@ -153,31 +145,3 @@ class Layers(HoldTap):
''' '''
keyboard.active_layers.clear() keyboard.active_layers.clear()
keyboard.active_layers.insert(0, key.meta.layer) keyboard.active_layers.insert(0, key.meta.layer)
def ht_activate_hold(self, key, keyboard, *args, **kwargs):
key_type = kwargs['key_type']
if key_type == LayerType.LT:
self._mo_pressed(key, keyboard, *args, **kwargs)
elif key_type == LayerType.TT:
self._tg_pressed(key, keyboard, *args, **kwargs)
def ht_deactivate_hold(self, key, keyboard, *args, **kwargs):
key_type = kwargs['key_type']
if key_type == LayerType.LT:
self._mo_released(key, keyboard, *args, **kwargs)
elif key_type == LayerType.TT:
self._tg_pressed(key, keyboard, *args, **kwargs)
def ht_activate_tap(self, key, keyboard, *args, **kwargs):
key_type = kwargs['key_type']
if key_type == LayerType.LT:
keyboard.hid_pending = True
keyboard.keys_pressed.add(key.meta.kc)
elif key_type == LayerType.TT:
self._tg_pressed(key, keyboard, *args, **kwargs)
def ht_deactivate_tap(self, key, keyboard, *args, **kwargs):
key_type = kwargs['key_type']
if key_type == LayerType.LT:
keyboard.hid_pending = True
keyboard.keys_pressed.discard(key.meta.kc)

View File

@ -27,9 +27,8 @@ class HoldTapKeyMeta:
self.tap_time = tap_time self.tap_time = tap_time
class LayerKeyMeta(HoldTapKeyMeta): class LayerKeyMeta:
def __init__(self, layer, **kwargs): def __init__(self, layer):
super().__init__(**kwargs)
self.layer = layer self.layer = layer