Skip to content

About

Open-source Punto/Caramba Switcher alternative for Windows: auto-fix wrong keyboard layout (Ru-En), Shift-tap layout switching, dark/light theme. C# WinForms, zero dependencies.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

193 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenSwitcher

Автоисправление слов, набранных не в той раскладке (Ru ⇄ En) — открытый аналог Punto Switcher / Caramba Switcher. Два приложения в одном репозитории:

Папка Платформа Стек Сборка
win/ Windows 10/11 C# (.NET Framework 4.x, WinForms) cd win && build.cmd
macos/ macOS 13+ (Apple Silicon и Intel) Swift 5.9, AppKit + CGEventTap + TIS cd macos && ./build.sh [arm64|x86_64|universal]

Логика детектора общая и зафиксирована в docs/SPEC.md (v3): частоты/биграммы, ворота конвертации, одиночные буквы по «словности», хвост-двойник, самообучение, откат. Mac-порт синхронизирован со спекой и проходит общий selftest детектора.

Скачать

Готовые сборки — в Releases по тегам:

  • OpenSwitcher-win.zip — Windows (anycpu, .NET Framework 4.x предустановлен);
  • OpenSwitcher-macOS-AppleSilicon-M1-M6.app.zip — Mac на чипах M1…M-серии;
  • OpenSwitcher-macOS-Intel-old-Macs.app.zip — старые Mac на Intel.

Не знаешь, какой у тебя процессор: меню → «Об этом Mac» — строка «Чип» (Apple Silicon) или «Процессор» (Intel).

Первый запуск

  • Windows: OpenSwitcher.exe — иконка в трее. Настройки — левый клик.
  • macOS: нужны оба разрешения — «Мониторинг ввода» (чтение клавиш) и «Универсальный доступ» (внесение исправлений); без второго приложение читает клавиши, но не исправляет текст. В меню иконки есть «Проверить разрешения». Подробнее в macos/README.md.

Подпись и нотаризация (macOS)

Сборки подписываются сертификатом Developer ID Application и отправляются в Apple на нотаризацию (Gatekeeper). Локально:

cd macos
./build.sh arm64
codesign --force --deep --options runtime --timestamp \
  --sign "Developer ID Application: <Имя> (TEAMID)" build/OpenSwitcher.app
cd build && ditto -c -k --keepParent OpenSwitcher.app OpenSwitcher.app.zip && cd ..
APPLE_ID=... APPLE_APP_SPECIFIC_PASSWORD=... TEAM_ID=... ./notarize.sh build/OpenSwitcher.app

Автоматически — в CI по тегу (секреты SIGN_IDENTITY, DEVELOPER_ID_P12, P12_PASSWORD, APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD, TEAM_ID). Без нотаризации Gatekeeper попросит ПКМ → «Открыть» при первом запуске.

Структура

docs/SPEC.md   поведенческая спецификация (норматив для обеих платформ)
win/           Windows-приложение (C#): src, tools, build.cmd
macos/         macOS-приложение (Swift): Package.swift, Sources, build.sh

Возможности

  • Автоисправление по концу слова — «ghbdtn,» + пробел → «привет,». Цель конвертации обязана быть словарным (или морфологически валидным) словом — правильный текст никогда не портится.
  • Одиночные буквы-предлоги — «f» + пробел → «а» (по словности: «f» — не английское слово, «а» — русское; предлоги а/и/в/к/о/с/у/я и "a"/"i" неприкосновенны).
  • Слова с б/ю/ж/э/х/ъ/ё — не рвутся при наборе в чужой раскладке; «ghbdtn,» хвост трактуется знаком («етб» — невозможность, как у Caramba).
  • Break — откат последней замены (15 с, то же окно/поле ввода); Break при нечего-отменять — принудительный переворот последнего слова (повторный Break возвращает как было).
  • Ctrl+Space — точное исправление последнего слова (каретка после слова, или слово слева от каретки).
  • Shift+Break — перевод выделенного текста (буфер обмена восстанавливается; смешанное выделение — отказ).
  • Тапы Shift — левый → русский, правый → английский; буквы, набранные в просвете применения раскладки, доставляются уже в новой.
  • Как в Caramba — Option-тап — короткий голый тап Option принудительно переворачивает набранное/последнее слово «пинг-понгом» (без rejected-блокировок и самообучения); нет свежего слова — выделит слово слева и переключит его.
  • Вставить без форматирования — Cmd+Shift+V (как в Caramba): заменяет буфер обмена чистым текстом и вставляет; хоткей переназначается в настройках.
  • Оба Shift — зажать левый + правый Shift: вкл/выкл автопереключения (как в Caramba; по умолчанию выключено).
  • Самообучение: заменённое слово, не отменённое за 15 с, запоминается и конвертируется всегда; отменённое — никогда больше (файлы accepted.txt / learned.txt, ≤1000 записей).
  • Исключения по процессам, пауза, плашка «было → стало» у каретки, тема (системная/светлая/тёмная), ручные хоткеи — всё в настройках.

Отладка (режим разработчика)

  • Настройки → «Режим разработчика» — включает журнал решений в файл (%APPDATA%\OpenSwitcher\log.txt, ротация 2 МБ). По умолчанию выключен: без него не записывается ни одно нажатие.
  • F8 — метка в журнале: снимок состояния (процесс, раскладка, буфер, откат, последняя конвертация) на момент глюка.
  • OpenSwitcher.exe --selftest файл — автотесты детектора (18 кейсов); --simtest слово — прогон строки через реальные раскладки.

Сборка (Windows)

cd win
build.cmd

Соберёт win/OpenSwitcher.exe (в корень репозитория ставить не нужно) и прогонит selftest детектора. Нужен только .NET Framework 4.x — ничего устанавливать не надо. Подпись exe — win/tools/sign.ps1 (локальный сертификат).

Файлы и настройки

  • settings.ini, log.txt, accepted.txt, learned.txt — %APPDATA%\OpenSwitcher\.
  • Лок после ручного выбора языка по умолчанию включён (macOS; классика Punto/Caramba: ручной тап глушит автодетект до смены окна или паузы 3 с; в Windows-версии пока выключен); исключения — точные имена процессов («notepad.exe»), через запятую.

Лицензия

GPL-3.0 — anyone who builds on this code must release their version under the same license. Закрытые форки и платные сборки на основе этого кода запрещены. Коммерческое лицензирование вне GPL — по согласованию с автором (@nick8cyber).

About

Open-source Punto/Caramba Switcher alternative for Windows: auto-fix wrong keyboard layout (Ru-En), Shift-tap layout switching, dark/light theme. C# WinForms, zero dependencies.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages