Allow natural LEADER_MODE rollover
This commit is contained in:
parent
c6d8e5b406
commit
bf8ad1319a
@ -70,6 +70,7 @@ class InternalState:
|
|||||||
pending_keys = set()
|
pending_keys = set()
|
||||||
macro_pending = None
|
macro_pending = None
|
||||||
leader_pending = None
|
leader_pending = None
|
||||||
|
leader_last_len = 0
|
||||||
hid_pending = False
|
hid_pending = False
|
||||||
keymap = []
|
keymap = []
|
||||||
row_pins = []
|
row_pins = []
|
||||||
|
@ -27,11 +27,19 @@ class LeaderHelper:
|
|||||||
:return state:
|
:return state:
|
||||||
"""
|
"""
|
||||||
if state.leader_mode % 2 == 1:
|
if state.leader_mode % 2 == 1:
|
||||||
for key in state.keys_pressed:
|
keys_pressed = state.keys_pressed
|
||||||
|
|
||||||
|
if state.leader_last_len and state.leader_mode_history:
|
||||||
|
history_set = set(state.leader_mode_history)
|
||||||
|
|
||||||
|
keys_pressed = keys_pressed - history_set
|
||||||
|
|
||||||
|
state.leader_last_len = len(state.keys_pressed)
|
||||||
|
|
||||||
|
for key in keys_pressed:
|
||||||
if key == Keycodes.Common.KC_ENT:
|
if key == Keycodes.Common.KC_ENT:
|
||||||
# Process the action and remove the extra KC.ENT that was added to get here
|
# Process the action and remove the extra KC.ENT that was added to get here
|
||||||
state = process(state)
|
state = process(state)
|
||||||
state.keys_pressed.discard(Keycodes.Common.KC_ENT)
|
|
||||||
return clean_exit(state)
|
return clean_exit(state)
|
||||||
elif key == Keycodes.Common.KC_ESC:
|
elif key == Keycodes.Common.KC_ESC:
|
||||||
# Clean state and turn leader mode off.
|
# Clean state and turn leader mode off.
|
||||||
@ -42,7 +50,7 @@ class LeaderHelper:
|
|||||||
# Add key if not needing to escape
|
# Add key if not needing to escape
|
||||||
# This needs replaced later with a proper debounce
|
# This needs replaced later with a proper debounce
|
||||||
state.leader_mode_history.append(key)
|
state.leader_mode_history.append(key)
|
||||||
return state.keys_pressed.discard(key)
|
return state
|
||||||
|
|
||||||
return state
|
return state
|
||||||
|
|
||||||
@ -55,7 +63,8 @@ def clean_exit(state):
|
|||||||
"""
|
"""
|
||||||
state.leader_mode_history = []
|
state.leader_mode_history = []
|
||||||
state.leader_mode -= 1
|
state.leader_mode -= 1
|
||||||
state.keys_pressed.discard(Keycodes.Common.KC_ESC)
|
state.leader_last_len = 0
|
||||||
|
state.keys_pressed.clear()
|
||||||
return state
|
return state
|
||||||
|
|
||||||
|
|
||||||
@ -68,7 +77,10 @@ def process(state):
|
|||||||
:return state:
|
:return state:
|
||||||
"""
|
"""
|
||||||
lmh = tuple(state.leader_mode_history)
|
lmh = tuple(state.leader_mode_history)
|
||||||
for k, v in state.LEADER_DICTIONARY.items():
|
|
||||||
if k == lmh:
|
if lmh in state.LEADER_DICTIONARY:
|
||||||
state.macro_pending = v.keydown
|
state.macro_pending = state.LEADER_DICTIONARY[lmh].keydown
|
||||||
|
|
||||||
|
state.keys_pressed.clear()
|
||||||
|
|
||||||
return state
|
return state
|
||||||
|
Loading…
x
Reference in New Issue
Block a user