# Test KeyMapping basics
km = KeyMapping()
assert km.get_direction("ArrowUp") == "up"
assert km.get_direction("ArrowDown") == "down"
assert km.get_direction("ArrowLeft") == "left"
assert km.get_direction("ArrowRight") == "right"
assert km.get_direction("x") is NoneKey Mapping
Configurable key-to-direction mappings for customizable navigation keys.
KeyMapping
Maps physical keys to navigation directions, allowing customization of navigation keys.
KeyMapping
def KeyMapping(
up:tuple[str, ...]=('ArrowUp',), down:tuple[str, ...]=('ArrowDown',), left:tuple[str, ...]=('ArrowLeft',),
right:tuple[str, ...]=('ArrowRight',)
)->None:
Maps physical keys to navigation directions.
Preset Key Mappings
Common key mapping presets for different use cases.
# Test presets
assert WASD_KEYS.get_direction("w") == "up"
assert WASD_KEYS.get_direction("W") == "up"
assert VIM_KEYS.get_direction("j") == "down"
assert VIM_KEYS.get_direction("k") == "up"
assert NUMPAD_KEYS.get_direction("8") == "up"
assert ARROWS_AND_WASD.get_direction("ArrowUp") == "up"
assert ARROWS_AND_WASD.get_direction("w") == "up"Key Display Formatting
Utilities for formatting keys for user display.
format_key_for_display
def format_key_for_display(
key:str, # the JavaScript key name
)->str: # human-readable display string
Format a key name for user display.
format_key_combo
def format_key_combo(
key:str, # the main key
modifiers:frozenset[str]=frozenset(), # modifier keys (shift, ctrl, alt, meta)
)->str: # formatted string like "Ctrl+Shift+A"
Format a key combination for display.
# Test display formatting
assert format_key_for_display("ArrowUp") == "↑"
assert format_key_for_display(" ") == "Space"
assert format_key_for_display("a") == "a" # passthrough
assert format_key_combo("ArrowUp") == "↑"
assert format_key_combo("ArrowUp", frozenset({"shift"})) == "Shift+↑"
assert format_key_combo("a", frozenset({"ctrl", "shift"})) == "Ctrl+Shift+a"