5.5 KiB
apply — применение YAML-конфига
Применяет конфиг из YAML-файла: вместо длинных команд — один файл со всеми настройками.
Файл можно хранить в любом месте (например ~/.config/katana.yaml), в репозитории лежит пример katana.yaml.example.
./katana.py apply ~/my-katana.yaml # применить конфиг
./katana.py apply katana.yaml.example # применить пример из репозитория
Зависимость: PyYAML (pip install pyyaml, см. install.md).
Порядок применения и сохранение
Секции применяются всегда в одном порядке, независимо от их порядка в файле:
remap— таблица переназначений (04 11), save;paint— per-key раскраска, включает режим 0x80, save;lighting— финальный режим подсветки (mode/off/default), перекрывает 0x80 от paint, save;raw— произвольный payload (для экспериментов);macros— ВСЕ слоты одним блобом (04 19), save;remapиlighting— повторно (если секции были в конфиге), со save.
Модель сохранения (проверена на железе): каждая область прошивки (bind-таблица, paint-таблица, режим, макросы) сохраняется во флеш только своим собственным save (04 f0) — чужой save чужую область ни сохраняет, ни затирает. Поэтому в apply каждая секция несёт свой save.
Почему remap и lighting повторяются после макросов: запись макросов (04 19) сбивает bind-таблицу и режим подсветки в RAM (во флеше они остаются). Повторная отправка восстанавливает их в RAM и заодно фиксирует save'ом.
Почему все макросы одним блобом: каждый вызов macro set обнуляет прочие слоты — несколько макросов нужно писать за одну транзакцию (apply так и делает).
Ключ save в секциях конфига не поддерживается — apply управляет save'ами сам (написанный по ошибке save: false отклоняется как неизвестный ключ).
Каждая секция прогоняется через соответствующую команду CLI — валидация значений та же самая.
Перед каждым шагом печатается apply [...] ..., после — итоговый список применённого.
Команды keys, scan, reset в конфиге не нужны: это диагностика, а не состояние.
Секции
macros — содержимое макросов (см. macro.md)
Все слоты пишутся одним блобом (пропуски между номерами — пустые слоты).
Ключ — номер слота 0..99, значение — tokens (список) или xml (файл).
macros:
0:
tokens: ["+lctrl", "a@50", "-lctrl"] # Ctrl+A
1:
xml: raw-data/katana-v1/test.xml
remap — переназначение клавиш (см. remap.md)
remap:
keys:
caps: macro0 # КЛЮЧ: ДЕЙСТВИЕ — те же, что у remap --key
menu: meta+e
# clear: true # вместо keys: сбросить ВСЕ переназначения
paint — раскраска клавиш (см. paint.md)
paint:
all: black # база (или black: true / keep: true)
keys:
esc: "ff0000" # КЛЮЧ: ЦВЕТ
wasd: dodgerblue # shorthand-алиасы CLI: wasd, numpad, alpha, punct, digits, arrows
rows:
1: "202020" # ряды 1..6
brightness: 15
lighting — режим подсветки (см. color-modes.md)
mode — имя или номер 1..19, а также off и default (применяются как команды off/default).
lighting:
mode: static
color: red
brightness: 15 # 1..15
# speed: 5 # 2..15
# rainbow: true # статика: спектр вместо color
# direction: north-south
raw — сырой payload (см. raw.md)
raw: "80 00 ... aa 55" # hex-строка или список строк
Валидация
- Неизвестные секции и неизвестные ключи внутри секций отклоняются с указанием опечатки.
macros: слот должен иметь либоtokens, либоxml(не оба и не ни одного).- Значения проверяются тем же парсером, что и CLI-команды (
parse_color,parse_mode, диапазоны).
Офлайн-тесты — tests/test_apply.py (пример конфига разбирается и превращается в валидные argv).