From 7af0e11f757905bc20f3f8208ab08cefc11298e5 Mon Sep 17 00:00:00 2001 From: xs5871 Date: Tue, 3 May 2022 17:23:58 +0000 Subject: [PATCH] prepare layers for tapdance refactor --- kmk/key_validators.py | 12 ++------ kmk/modules/layers.py | 70 +++++++++++-------------------------------- kmk/types.py | 5 ++-- 3 files changed, 21 insertions(+), 66 deletions(-) diff --git a/kmk/key_validators.py b/kmk/key_validators.py index 8a4ba25..dfe0642 100644 --- a/kmk/key_validators.py +++ b/kmk/key_validators.py @@ -11,9 +11,7 @@ def key_seq_sleep_validator(ms): return KeySeqSleepMeta(ms) -def layer_key_validator( - layer, kc=None, prefer_hold=False, tap_interrupted=False, tap_time=None -): +def layer_key_validator(layer): ''' 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 @@ -21,13 +19,7 @@ def layer_key_validator( existing is mostly that Python will catch extraneous args/kwargs and error out. ''' - return LayerKeyMeta( - layer=layer, - kc=kc, - prefer_hold=prefer_hold, - tap_interrupted=tap_interrupted, - tap_time=tap_time, - ) + return LayerKeyMeta(layer) def mod_tap_validator( diff --git a/kmk/modules/layers.py b/kmk/modules/layers.py index 7a7fdc1..75584f5 100644 --- a/kmk/modules/layers.py +++ b/kmk/modules/layers.py @@ -1,26 +1,18 @@ '''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.keys import make_argumented_key +from kmk.keys import KC, make_argumented_key from kmk.modules.holdtap import ActivationType, HoldTap +from kmk.types import HoldTapKeyMeta -class LayerType: - '''Defines layer types to be passed on as on_press and on_release kwargs where needed''' - - LT = const(0) - TT = const(1) +def layer_key_validator_lt(layer, kc, prefer_hold=False, **kwargs): + return HoldTapKeyMeta(tap=kc, hold=KC.MO(layer), prefer_hold=prefer_hold, **kwargs) -def curry(fn, *args, **kwargs): - def curried(*fn_args, **fn_kwargs): - merged_args = args + fn_args - merged_kwargs = kwargs.copy() - merged_kwargs.update(fn_kwargs) - return fn(*merged_args, **merged_kwargs) - - return curried +def layer_key_validator_tt(layer, prefer_hold=True, **kwargs): + return HoldTapKeyMeta( + tap=KC.TG(layer), hold=KC.MO(layer), prefer_hold=prefer_hold, **kwargs + ) class Layers(HoldTap): @@ -44,12 +36,6 @@ class Layers(HoldTap): on_press=self._lm_pressed, 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( 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 ) 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',), - on_press=curry(self.ht_pressed, key_type=LayerType.TT), - on_release=curry(self.ht_released, key_type=LayerType.TT), + on_press=self.ht_pressed, + on_release=self.ht_released, ) def process_key(self, keyboard, key, is_pressed, int_coord): @@ -153,31 +145,3 @@ class Layers(HoldTap): ''' keyboard.active_layers.clear() 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) diff --git a/kmk/types.py b/kmk/types.py index f23baba..2877ef0 100644 --- a/kmk/types.py +++ b/kmk/types.py @@ -27,9 +27,8 @@ class HoldTapKeyMeta: self.tap_time = tap_time -class LayerKeyMeta(HoldTapKeyMeta): - def __init__(self, layer, **kwargs): - super().__init__(**kwargs) +class LayerKeyMeta: + def __init__(self, layer): self.layer = layer