Allow natural LEADER_MODE rollover

This commit is contained in:
Josh Klar 2018-10-08 02:51:31 -07:00
parent c6d8e5b406
commit bf8ad1319a
No known key found for this signature in database
GPG Key ID: 220F99BD7DB7A99E
2 changed files with 20 additions and 7 deletions

View File

@ -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 = []

View File

@ -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