Skip to content
Oleg Shevchuk edited this page Oct 17, 2026 · 2 revisions

KeySwitch: вики разработчика

KeySwitch исправляет текст, набранный не в той раскладке (русская и английская), в Linux (X11), Windows и macOS. Пользователь печатает ghbdtn и пробел — KeySwitch стирает слово, набирает привет и переключает системную раскладку. Решение принимают небольшие обученные модели, которые работают на компьютере пользователя, без сети. Движок исполняет решение так, чтобы не потерять и не добавить ни одного символа.

Вики — для тех, кто разрабатывает KeySwitch: как устроено приложение, как обучаются и проверяются модели, как тестировать и выпускать. Установка и настройка для пользователя — в README.

С чего начать

  1. Быстрый старт разработчика — запуск из исходников, проверки перед PR, порядок работы.
  2. Архитектура — модули, поток данных, платформы, настройки.
  3. Движок — что происходит с каждым нажатием и словом.

Разделы

Приложение

  • Архитектура
  • Движок — границы, ранняя смена, ожидание и пауза, исполнение исправления, Pause и отмена, переспрос, взгляд назад, особые случаи
  • Чтение поля, журнал и приватность — UI Automation, AT-SPI, Accessibility, текст справа от курсора, технический журнал, маскирование паролей

Модели

Качество и выпуск

Справка

Главные принципы

  • Решает модель, исполняет движок. Языковое решение отдаётся модели. Отменить его может только явное, видимое пользователю исключение. Ошибки модели на классе слов исправляются данными и признаками, а не запретами.
  • Ни символа не потерять. Каждое исправление проверяет фокус и текст поля, удерживает клавиши, которые пользователь жмёт прямо сейчас, и отказывается от исправления, если поле изменилось.
  • Приватность. Пароли не читаются и не попадают в журнал. Текст поля живёт только в памяти. Сеть нужна только для обновлений.
  • Проверка до выпуска. Модель проходит сравнение с выпущенной, проверку на реальном наборе и два запечатанных test, каждый из которых читается один раз. Приложение проходит полный набор тестов со 100% покрытием на трёх платформах.

Clone this wiki locally