first commit
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
"""Модуль 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)
|
||||
Reference in New Issue
Block a user