Key Mapping

Configurable key-to-direction mappings for customizable navigation keys.

KeyMapping

Maps physical keys to navigation directions, allowing customization of navigation keys.


source

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.

# 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 None

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.


source

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.


source

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"