Merge pull request #33 from KMKfw/topic-macros-have-codes
Handle macros more consistently
This commit is contained in:
		@@ -30,6 +30,8 @@ def process_internal_key_event(state, action_type, changed_key, logger=None):
 | 
				
			|||||||
        return grave_escape(state, action_type, logger=logger)
 | 
					        return grave_escape(state, action_type, logger=logger)
 | 
				
			||||||
    elif changed_key.code == RawKeycodes.KC_UC_MODE:
 | 
					    elif changed_key.code == RawKeycodes.KC_UC_MODE:
 | 
				
			||||||
        return unicode_mode(state, action_type, changed_key, logger=logger)
 | 
					        return unicode_mode(state, action_type, changed_key, logger=logger)
 | 
				
			||||||
 | 
					    elif changed_key.code == RawKeycodes.KC_MACRO:
 | 
				
			||||||
 | 
					        return macro(state, action_type, changed_key, logger=logger)
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        return state
 | 
					        return state
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -111,3 +113,15 @@ def unicode_mode(state, action_type, changed_key, logger):
 | 
				
			|||||||
        state.unicode_mode = changed_key.mode
 | 
					        state.unicode_mode = changed_key.mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return state
 | 
					    return state
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def macro(state, action_type, changed_key, logger):
 | 
				
			||||||
 | 
					    if action_type == KEY_UP_EVENT:
 | 
				
			||||||
 | 
					        if changed_key.keyup:
 | 
				
			||||||
 | 
					            state.macro_pending = changed_key.keyup
 | 
				
			||||||
 | 
					            return state
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    elif action_type == KEY_DOWN_EVENT:
 | 
				
			||||||
 | 
					        if changed_key.keydown:
 | 
				
			||||||
 | 
					            state.macro_pending = changed_key.keydown
 | 
				
			||||||
 | 
					            return state
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,6 @@ from kmk.common.event_defs import (HID_REPORT_EVENT, INIT_FIRMWARE_EVENT,
 | 
				
			|||||||
                                   MACRO_COMPLETE_EVENT, NEW_MATRIX_EVENT)
 | 
					                                   MACRO_COMPLETE_EVENT, NEW_MATRIX_EVENT)
 | 
				
			||||||
from kmk.common.internal_keycodes import process_internal_key_event
 | 
					from kmk.common.internal_keycodes import process_internal_key_event
 | 
				
			||||||
from kmk.common.keycodes import FIRST_KMK_INTERNAL_KEYCODE, Keycodes
 | 
					from kmk.common.keycodes import FIRST_KMK_INTERNAL_KEYCODE, Keycodes
 | 
				
			||||||
from kmk.common.macros import KMKMacro
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ReduxStore:
 | 
					class ReduxStore:
 | 
				
			||||||
@@ -147,22 +146,12 @@ def kmk_reducer(state=None, action=None, logger=None):
 | 
				
			|||||||
        for changed_key in released:
 | 
					        for changed_key in released:
 | 
				
			||||||
            if not changed_key:
 | 
					            if not changed_key:
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
 | 
					 | 
				
			||||||
            elif isinstance(changed_key, KMKMacro):
 | 
					 | 
				
			||||||
                if changed_key.keyup:
 | 
					 | 
				
			||||||
                    state.macro_pending = changed_key.keyup
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            elif changed_key.code >= FIRST_KMK_INTERNAL_KEYCODE:
 | 
					            elif changed_key.code >= FIRST_KMK_INTERNAL_KEYCODE:
 | 
				
			||||||
                state = process_internal_key_event(state, KEY_UP_EVENT, changed_key, logger=logger)
 | 
					                state = process_internal_key_event(state, KEY_UP_EVENT, changed_key, logger=logger)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for changed_key in pressed:
 | 
					        for changed_key in pressed:
 | 
				
			||||||
            if not changed_key:
 | 
					            if not changed_key:
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
 | 
					 | 
				
			||||||
            elif isinstance(changed_key, KMKMacro):
 | 
					 | 
				
			||||||
                if changed_key.keydown:
 | 
					 | 
				
			||||||
                    state.macro_pending = changed_key.keydown
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            elif changed_key.code >= FIRST_KMK_INTERNAL_KEYCODE:
 | 
					            elif changed_key.code >= FIRST_KMK_INTERNAL_KEYCODE:
 | 
				
			||||||
                state = process_internal_key_event(
 | 
					                state = process_internal_key_event(
 | 
				
			||||||
                    state,
 | 
					                    state,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,7 +40,8 @@ class RawKeycodes:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    KC_UC_MODE = 1109
 | 
					    KC_UC_MODE = 1109
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    KC_MACRO_SLEEP_MS = 1110
 | 
					    KC_MACRO = 1110
 | 
				
			||||||
 | 
					    KC_MACRO_SLEEP_MS = 1111
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# These shouldn't have all the fancy shenanigans Keycode allows
 | 
					# These shouldn't have all the fancy shenanigans Keycode allows
 | 
				
			||||||
@@ -99,6 +100,23 @@ class ConsumerKeycode(Keycode):
 | 
				
			|||||||
    pass
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Macro:
 | 
				
			||||||
 | 
					    '''
 | 
				
			||||||
 | 
					    A special "key" which triggers a macro.
 | 
				
			||||||
 | 
					    '''
 | 
				
			||||||
 | 
					    code = RawKeycodes.KC_MACRO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, keydown=None, keyup=None):
 | 
				
			||||||
 | 
					        self.keydown = keydown
 | 
				
			||||||
 | 
					        self.keyup = keyup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def on_keydown(self):
 | 
				
			||||||
 | 
					        return self.keydown() if self.keydown else None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def on_keyup(self):
 | 
				
			||||||
 | 
					        return self.keyup() if self.keyup else None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class KeycodeCategory(type):
 | 
					class KeycodeCategory(type):
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def to_dict(cls):
 | 
					    def to_dict(cls):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
class KMKMacro:
 | 
					 | 
				
			||||||
    def __init__(self, keydown=None, keyup=None):
 | 
					 | 
				
			||||||
        self.keydown = keydown
 | 
					 | 
				
			||||||
        self.keyup = keyup
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def on_keydown(self):
 | 
					 | 
				
			||||||
        return self.keydown() if self.keydown else None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def on_keyup(self):
 | 
					 | 
				
			||||||
        return self.keyup() if self.keyup else None
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,7 @@ import string
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from kmk.common.event_defs import (hid_report_event, keycode_down_event,
 | 
					from kmk.common.event_defs import (hid_report_event, keycode_down_event,
 | 
				
			||||||
                                   keycode_up_event)
 | 
					                                   keycode_up_event)
 | 
				
			||||||
from kmk.common.keycodes import Keycodes, RawKeycodes, char_lookup
 | 
					from kmk.common.keycodes import Keycodes, Macro, RawKeycodes, char_lookup
 | 
				
			||||||
from kmk.common.macros import KMKMacro
 | 
					 | 
				
			||||||
from kmk.common.util import sleep_ms
 | 
					from kmk.common.util import sleep_ms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -22,7 +21,7 @@ def simple_key_sequence(seq):
 | 
				
			|||||||
                yield keycode_up_event(key)
 | 
					                yield keycode_up_event(key)
 | 
				
			||||||
                yield hid_report_event()
 | 
					                yield hid_report_event()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return KMKMacro(keydown=_simple_key_sequence)
 | 
					    return Macro(keydown=_simple_key_sequence)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def send_string(message):
 | 
					def send_string(message):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,7 @@
 | 
				
			|||||||
from kmk.common.consts import UnicodeModes
 | 
					from kmk.common.consts import UnicodeModes
 | 
				
			||||||
from kmk.common.event_defs import (hid_report_event, keycode_down_event,
 | 
					from kmk.common.event_defs import (hid_report_event, keycode_down_event,
 | 
				
			||||||
                                   keycode_up_event)
 | 
					                                   keycode_up_event)
 | 
				
			||||||
from kmk.common.keycodes import Common, Modifiers
 | 
					from kmk.common.keycodes import Common, Macro, Modifiers
 | 
				
			||||||
from kmk.common.macros import KMKMacro
 | 
					 | 
				
			||||||
from kmk.common.macros.simple import simple_key_sequence
 | 
					from kmk.common.macros.simple import simple_key_sequence
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IBUS_KEY_COMBO = Modifiers.KC_LCTRL(Modifiers.KC_LSHIFT(Common.KC_U))
 | 
					IBUS_KEY_COMBO = Modifiers.KC_LCTRL(Modifiers.KC_LSHIFT(Common.KC_U))
 | 
				
			||||||
@@ -34,7 +33,7 @@ def unicode_sequence(codepoints):
 | 
				
			|||||||
        elif state.unicode_mode == UnicodeModes.WINC:
 | 
					        elif state.unicode_mode == UnicodeModes.WINC:
 | 
				
			||||||
            yield from _winc_unicode_sequence(codepoints, state)
 | 
					            yield from _winc_unicode_sequence(codepoints, state)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return KMKMacro(keydown=_unicode_sequence)
 | 
					    return Macro(keydown=_unicode_sequence)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _ralt_unicode_sequence(codepoints, state):
 | 
					def _ralt_unicode_sequence(codepoints, state):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,6 @@ from kmk.common.consts import HID_REPORT_STRUCTURE, HIDReportTypes
 | 
				
			|||||||
from kmk.common.event_defs import HID_REPORT_EVENT
 | 
					from kmk.common.event_defs import HID_REPORT_EVENT
 | 
				
			||||||
from kmk.common.keycodes import (FIRST_KMK_INTERNAL_KEYCODE, ConsumerKeycode,
 | 
					from kmk.common.keycodes import (FIRST_KMK_INTERNAL_KEYCODE, ConsumerKeycode,
 | 
				
			||||||
                                 ModifierKeycode)
 | 
					                                 ModifierKeycode)
 | 
				
			||||||
from kmk.common.macros import KMKMacro
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def generate_pyb_hid_descriptor():
 | 
					def generate_pyb_hid_descriptor():
 | 
				
			||||||
@@ -72,7 +71,7 @@ class HIDHelper:
 | 
				
			|||||||
                self.add_key(consumer_key)
 | 
					                self.add_key(consumer_key)
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                for key in state.keys_pressed:
 | 
					                for key in state.keys_pressed:
 | 
				
			||||||
                    if isinstance(key, KMKMacro) or key.code >= FIRST_KMK_INTERNAL_KEYCODE:
 | 
					                    if key.code >= FIRST_KMK_INTERNAL_KEYCODE:
 | 
				
			||||||
                        continue
 | 
					                        continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if isinstance(key, ModifierKeycode):
 | 
					                    if isinstance(key, ModifierKeycode):
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user