Files
2026-09-11 19:47:15 +03:00

43 lines
1.7 KiB
Python

"""Модуль 5: hotkeys — клавиши управления (событийные бэкенды).
Использование:
from modules.hotkeys import KeyEvents, get_backend
events = KeyEvents(on_talk_down=..., on_talk_up=..., on_stop=...,
on_repeat=..., on_quit=...)
backend = get_backend("console", events) # или "keys" (Windows / root-Linux)
backend.start()
"""
from __future__ import annotations
import os
from .base import KeyEvents
from .console import ConsoleBackend
from .keyboard_hook import KeyboardHookBackend
__all__ = ["KeyEvents", "ConsoleBackend", "KeyboardHookBackend", "get_backend"]
_BACKENDS = {
ConsoleBackend.name: ConsoleBackend,
KeyboardHookBackend.name: KeyboardHookBackend,
}
def get_backend(name: str, events: KeyEvents, **kwargs):
"""Фабрика бэкендов клавиш."""
if name == KeyboardHookBackend.name:
# Клавиши можно переопределить через переменные окружения/.env:
# HOTKEY_DIALOG (пробел-тумблер), HOTKEY_TALK, HOTKEY_STOP, HOTKEY_REPEAT
kwargs.setdefault("dialog", os.environ.get("HOTKEY_DIALOG", "space"))
kwargs.setdefault("talk", os.environ.get("HOTKEY_TALK", "num 0"))
kwargs.setdefault("stop_key", os.environ.get("HOTKEY_STOP", "esc"))
kwargs.setdefault("repeat", os.environ.get("HOTKEY_REPEAT", "enter"))
try:
backend_cls = _BACKENDS[name]
except KeyError:
raise ValueError(
f"Неизвестный бэкенд клавиш: {name!r}. Доступны: {sorted(_BACKENDS)}"
) from None
return backend_cls(events, **kwargs)