review updates and renamed to Sticky Mod

This commit is contained in:
Syed Hussaini
2022-04-28 11:05:59 -05:00
committed by xs5871
parent a0efbb92d5
commit 660b751c87
5 changed files with 96 additions and 93 deletions

View File

@@ -1,65 +0,0 @@
from kmk.keys import make_argumented_key
from kmk.modules import Module
class ModHoldAndTapValidator:
def __init__(self, kc, mod):
self.kc = kc
self.mod = mod
class ModHoldAndTap(Module):
def __init__(self):
self._timeout_key = False
self._active = False
self._prev_key = None
make_argumented_key(
names=('MHAT',),
validator=ModHoldAndTapValidator,
)
def during_bootup(self, keyboard):
return
def before_matrix_scan(self, keyboard):
return
def process_key(self, keyboard, key, is_pressed, int_coord):
if isinstance(key.meta, ModHoldAndTapValidator):
if self._active and self._prev_key is not None and is_pressed:
# release previous key
self.release(keyboard, self._prev_key)
self._prev_key = key
if is_pressed:
keyboard.process_key(key.meta.mod, is_pressed)
self._active = True
keyboard.process_key(key.meta.kc, is_pressed)
elif self._active:
# release previous key if any other key is pressed
if self._prev_key is not None:
self.release(keyboard, self._prev_key)
return key
def before_hid_send(self, keyboard):
return
def after_hid_send(self, keyboard):
return
def on_powersave_enable(self, keyboard):
return
def on_powersave_disable(self, keyboard):
return
def after_matrix_scan(self, keyboard):
return
def release(self, keyboard, key):
keyboard.process_key(key.meta.mod, False)
self._active = False
self._prev_key = None

68
kmk/modules/sticky_mod.py Normal file
View File

@@ -0,0 +1,68 @@
from kmk.keys import make_argumented_key
from kmk.modules import Module
class StickyModMeta:
def __init__(self, kc, mod):
self.kc = kc
self.mod = mod
class StickyMod(Module):
def __init__(self):
self._active = False
self._active_key = None
make_argumented_key(
names=('SM',),
validator=StickyModMeta,
on_press=self.sm_pressed,
on_release=self.sm_released,
)
def during_bootup(self, keyboard):
return
def before_matrix_scan(self, keyboard):
return
def process_key(self, keyboard, key, is_pressed, int_coord):
if self._active:
# release previous key if any other key is pressed
if self._active_key is not None:
self.release_key(keyboard, self._active_key)
return key
def before_hid_send(self, keyboard):
return
def after_hid_send(self, keyboard):
return
def on_powersave_enable(self, keyboard):
return
def on_powersave_disable(self, keyboard):
return
def after_matrix_scan(self, keyboard):
return
def release_key(self, keyboard, key):
keyboard.process_key(key.meta.mod, False)
self._active = False
self._active_key = None
def sm_pressed(self, key, keyboard, *args, **kwargs):
if self._active and self._active_key is not None:
# release previous key
self.release_key(keyboard, self._active_key)
keyboard.process_key(key.meta.mod, True)
keyboard.process_key(key.meta.kc, True)
self._active_key = key
def sm_released(self, key, keyboard, *args, **kwargs):
keyboard.process_key(key.meta.kc, False)
self._active_key = key
self._active = True