Lightweight keyboard layout switcher for macOS
Free and open-source alternative to PuntoSwitcher
Typed ghbdtn when you meant привет? Just tap Option ⌥ and RuSwitcher converts the last word into the right layout — typing it directly, no copy-paste. Works with any pair of installed keyboard layouts — Russian, Ukrainian, Belarusian, German, French, and more — and the trigger key is fully configurable.
| Action | Result |
|---|---|
| Type a word, tap Option ⌥ | Last typed word is converted |
| Tap Option ⌥ again | Reverse conversion (undo) |
| Select text, tap Option ⌥ | Selected text is converted |
The trigger is configurable — Option, Command, Control or Shift, left or right side, single or double-tap.
RuSwitcher can also fix the layout automatically as you type, with no key press. Turn it on in Settings → Auto-conversion (off by default). When you finish a word (space), it checks the word against the macOS system dictionary and — only when confident — converts it and switches the layout for you.
Precision-first: to avoid false fixes it deliberately skips short words (< 3 letters), words with digits / punctuation / URLs, ALL-CAPS acronyms typed with Shift, camelCase / mixed-script code identifiers, terminals / IDEs / password managers, and password fields. It targets layout pairs that have a macOS system dictionary (English ↔ Russian / Ukrainian / German / French… are reliable); languages without one (Belarusian, Armenian, Georgian) keep using the manual trigger.
Three exception lists let you tune it (Settings → Auto-conversion):
- Apps — where auto-conversion stays off (terminals, IDEs and password managers are pre-filled; password managers can't be removed).
- Never convert — words it must never touch (nicknames, logins, brands). After a wrong fix, tap the trigger to undo and RuSwitcher offers to add the word here.
- Always convert — words to always fix even if they aren't in the dictionary (compound words, slang). Add the target word — the result you want.
- Any two layouts — configure any pair from your installed system layouts. No hardcoded tables.
- Configurable trigger — pick Option, Command, Control or Shift; left or right side; single or double-tap.
- Automatic conversion (beta) — optionally fix the layout as you type, with a precision-first system-dictionary check. Off by default.
- Exception lists — a per-app exclusion list plus never-convert and always-convert word lists.
- Universal binary — runs natively on both Apple Silicon and Intel Macs.
- Clipboard-free — the converted word is typed directly via synthesized Unicode, so it works even in Electron / VS Code / Atom-class editors. Your clipboard is never touched (it's only a fallback for unusual apps).
- Smart word detection — converts the last typed word, including punctuation.
- Selected text — select any text and tap the trigger to convert it in place.
- Tap again to undo — reverse conversion if you changed your mind.
- Per-app layout memory — remembers the active layout for each application and restores it when you switch back.
- 16 interface languages — English, Русский, Українська, Беларуская, Deutsch, Français, Español, Português, Polski, 中文, 日本語, 한국어, Ελληνικά, Български, Հայերեն, ქართული.
- Auto-start at login — set and forget.
- Minimal footprint — no Electron, no web views, pure Swift + AppKit.
- No telemetry — your keystrokes stay on your Mac.
Homebrew (recommended)
brew tap rashn/ruswitcher
brew install --cask ruswitcherTo upgrade later: brew upgrade --cask ruswitcher.
Download DMG
Grab the latest .dmg from Releases, open it and drag RuSwitcher to Applications.
Build from source
git clone https://github.com/rashn/RuSwitcher.git
cd RuSwitcher
bash build_app.sh
cp -R RuSwitcher.app /Applications/Requires macOS 13+ and Xcode Command Line Tools.
On first launch, RuSwitcher requests two macOS permissions:
- Accessibility — to read and modify text in applications.
- Input Monitoring — to detect keyboard events.
The app adds itself to the permission lists automatically — you only need to flip the toggles. The built-in permission wizard walks you through it step by step.
CGEventTap(passive, listen-only) for keyboard monitoring.UCKeyTranslate(Carbon) for dynamic character mapping between any layout pair.CGEvent.keyboardSetUnicodeStringto type the converted text directly — no clipboard, no pasteboard side effects.CGEventSource.userDatamarker to filter the app's own simulated events.AXUIElementAPI for focused element detection.SMAppServicefor login item management.- No hardcoded layout tables — works with any installed layouts.
Access via the menu bar icon → Settings (⌘,).
- General — conversion trigger, per-app layout memory, launch at login, interface language, layout pair.
- Auto-conversion — automatic conversion toggle and the three exception lists (apps, never-convert, always-convert).
- About — version, donate, contact, check updates.
- Advanced — debug logging, log management.
If you find RuSwitcher useful:
- Boosty — donate
- Star this repo on GitHub
MIT — free to use, modify, and distribute.
Набрали ghbdtn вместо привет? Просто нажмите Option ⌥ — и RuSwitcher сконвертирует последнее слово в правильную раскладку, печатая его напрямую, без копипасты. Работает с любой парой установленных раскладок — русская, украинская, белорусская, немецкая, французская и другие — а клавишу-триггер можно настроить.
| Действие | Результат |
|---|---|
| Набрать слово, нажать Option ⌥ | Последнее слово сконвертировано |
| Нажать Option ⌥ повторно | Обратная конвертация (отмена) |
| Выделить текст, нажать Option ⌥ | Выделенный текст сконвертирован |
Триггер настраивается — Option, Command, Control или Shift, левый или правый, одиночный или двойной тап.
RuSwitcher умеет исправлять раскладку автоматически по ходу набора, без нажатий. Включается в Настройки → Автоконверсия (по умолчанию выключено). Когда вы заканчиваете слово (пробел), приложение сверяет его с системным словарём macOS и — только при уверенности — конвертирует и само переключает раскладку.
Точность важнее полноты: чтобы не сработать зря, авто-конверсия намеренно пропускает короткие слова (< 3 букв), слова с цифрами / пунктуацией / URL, акронимы капсом через Shift, camelCase / смешанные алфавиты (идентификаторы кода), терминалы / IDE / менеджеры паролей и поля паролей. Работает для пар раскладок, у которых есть системный словарь macOS (английский ↔ русский / украинский / немецкий / французский… — надёжно); для языков без словаря (белорусский, армянский, грузинский) остаётся ручной триггер.
Три списка исключений для тонкой настройки (Настройки → Автоконверсия):
- Приложения — где авто-конверсия выключена (терминалы, IDE, менеджеры паролей уже в списке; менеджеры паролей удалить нельзя).
- Никогда не конвертировать — слова, которые трогать нельзя (ники, логины, бренды). После ошибочной замены нажмите триггер для отмены — RuSwitcher предложит добавить слово сюда.
- Всегда конвертировать — слова, которые исправлять всегда, даже если их нет в словаре (составные слова, сленг). Добавляйте целевое слово — то, что должно получиться.
- Любая пара раскладок — настраивается любая пара из установленных в системе. Без захардкоженных таблиц.
- Настраиваемый триггер — Option, Command, Control или Shift; левый или правый; одиночный или двойной тап.
- Автоматическая конверсия (бета) — опционально исправляет раскладку по ходу набора, с проверкой по системному словарю. По умолчанию выключено.
- Списки исключений — список приложений плюс словари never-convert и always-convert.
- Universal-сборка — нативно на Apple Silicon и Intel.
- Без буфера обмена — конвертированное слово печатается напрямую через синтез Unicode, поэтому работает даже в Electron / VS Code / Atom. Буфер обмена не трогается (только как запасной вариант для нестандартных приложений).
- Умное определение слова — конвертирует последнее набранное слово, включая знаки препинания.
- Выделенный текст — выделите любой текст и нажмите триггер для конвертации на месте.
- Повторное нажатие — отмена — обратная конвертация, если передумали.
- Память раскладки по приложению — запоминает активную раскладку для каждой программы и восстанавливает при возврате.
- 16 языков интерфейса — English, Русский, Українська, Беларуская, Deutsch, Français, Español, Português, Polski, 中文, 日本語, 한국어, Ελληνικά, Български, Հայերեն, ქართული.
- Автозапуск при входе — настроил и забыл.
- Минимальное потребление — без Electron и веб-вьюх, чистый Swift + AppKit.
- Без телеметрии — ваши нажатия остаются на вашем Mac.
Homebrew (рекомендуется)
brew tap rashn/ruswitcher
brew install --cask ruswitcherДля обновления: brew upgrade --cask ruswitcher.
Скачать DMG
Скачайте последний .dmg со страницы Releases, откройте и перетащите RuSwitcher в «Программы».
Сборка из исходников
git clone https://github.com/rashn/RuSwitcher.git
cd RuSwitcher
bash build_app.sh
cp -R RuSwitcher.app /Applications/Требуется macOS 13+ и Xcode Command Line Tools.
При первом запуске RuSwitcher запросит два системных разрешения macOS:
- Универсальный доступ (Accessibility) — для чтения и изменения текста в приложениях.
- Мониторинг ввода (Input Monitoring) — для отслеживания нажатий клавиш.
Программа автоматически добавляется в списки разрешений — вам нужно только включить тумблеры. Встроенный мастер разрешений проведёт по шагам.
CGEventTap(пассивный, только чтение) для мониторинга клавиатуры.UCKeyTranslate(Carbon) для динамического маппинга символов между любой парой раскладок.CGEvent.keyboardSetUnicodeStringдля прямой печати конвертированного текста — без буфера обмена и побочных эффектов с pasteboard.- Маркер
CGEventSource.userDataдля фильтрации собственных симулированных событий. AXUIElementAPI для определения сфокусированного элемента.SMAppServiceдля управления автозапуском.- Без захардкоженных таблиц — работает с любыми установленными раскладками.
Доступ через иконку в строке меню → Настройки (⌘,).
- Общие — триггер конвертации, память раскладки по приложению, автозапуск, язык интерфейса, пара раскладок.
- Автоконверсия — тумблер автоматической конверсии и три списка исключений (приложения, never-convert, always-convert).
- О программе — версия, донат, контакт, проверка обновлений.
- Дополнительно — режим отладки, управление логами.
Если RuSwitcher вам полезен:
- Boosty — донат
- Star на GitHub
MIT — свободное использование, модификация и распространение.