На других языках: English
Скрипт для исправления текста, набранного не в той раскладке, и безусловного переключения раскладок в X11 и GNOME.
- Исправление последнего слова / всей строки до курсора / выделенного текста
- Безусловное переключение раскладки: каждому языку свой хоткей
- Буфер обмена сохраняется
- Нет кейлоггинга
- Нет имитации клавиатурного ввода
- Нет мониторинга клавиатуры
- Нет ремаппинга клавиш
- Есть альтернативные версии функций для cистем без GNOME и systemd
- Установить расширение для GNOME для программного переключения раскладки (репозиторий).
- Установить xsel для манипуляций буфером обмена и выделением (репозиторий).
- Уcтановить kanata (а именно — версию
kanata_cmd_allowed
, позволяющую исполнять внешние команды) или любой другой ремаппер клавиатуры, умеющий макросы и вызов внешних команд. - Разрешить kanata доступ к системе ввода, как описано в инструкции.
- Сохранить скрипт в
~/.local/bin/
. Изучить его содержимое, по необходимости отредактировав. - Разрешить его исполнение:
chmod +x ~/.local/bin/puny-switcher.sh
- Сохранить конфиг для kanata в
$XDG_CONFIG_HOME/kanata/
(обычно это~/.config/kanata/
). Изучить его содержимое, по необходимости отредактировав. - Сохранить конфиг для systemd в
$XDG_CONFIG_HOME/systemd/user/
(обычно это~/.config/systemd/user/
) для запуска kanata в качестве сервиса. - Запустить сервис и проверить его состояние:
systemctl --user daemon-reload
systemctl --user enable --now kanata@puny-switcher.service
systemctl --user status kanata@puny-switcher.service
По умолчанию в конфиге для kanata настроены следующие клавиши:
- одиночный левый Shift: переключить раскладку на первую по счёту
- одиночный правый Shift: переключить раскладку на вторую по счёту
- двойной Shift: сконвертировать последнее слово и переключить раскладку
- тройной Shift: сконвертировать всю строку до курсора и переключить раскладку
- удержание Shift: обычное поведение Shift (после таймаута)
- Shift+любая клавиша: обычное поведение Shift (сразу)
- Pause: сконвертировать последнее слово и переключить раскладку
- Сtrl+Pause: сконвертировать всю строку до курсора и переключить раскладку
- Shift+Pause: сконвертировать выделенный текст и переключить раскладку
Клавиши можно переопределить в разделе defsrc
конфига. Например, вместо Pause можно использовать PrtSc, заменив там pause
на sys
. Список названий клавиш можно посмотреть в функциях str_to_oscode
и default_mappings
в исходнике kanata.
puny-switcher.sh command [LAYOUT]
commands:
get вывести список доступных раскладок, текущую раскладку и её символы
set LAYOUT_NAME переключить раскладку на указанную (us|ru)
iset LAYOUT_INDEX переключить раскладку на указанную (0|1)
switch переключить раскладку на противоположную
convert сконвертировать выделенный текст и сохранить результат в буфер обмена
restore восстановить прежнее содержимое буфера обмена
- Зависит от стороннего ПО
- Не работает в эмуляторах терминала
- Пока умеет переключаться только между английским и русским языками
- Не учитывает варианты раскладок (Дворак, машинопись и т.д.)
- Не проверялось на системах без GNOME и systemd
Если нужна переключалка-исправлялка "всё в одном", можно попробовать xswitcher. Другие похожие проекты типа xneur
давно заброшены, и большинство из них не работает в последних версиях GNOME.
Если же у вас уже есть ремаппер клавиатуры (или вы предпочитаете модульный подход), то его наверняка можно без проблем настроить для работы со скриптом Puny Switcher. Вот несколько популярных ремапперов. В KMonad, к примеру, формат конфига похож на формат kanata. Главное, чтобы была возможнось вызова внешних команд для запуска puny-switcher.sh
с параметрами. Если у вас получится настроить какой-нибудь ещё ремаппер, я с радостью добавлю конфиг в проект.
В GNOME 41+ программно переключать раскладки стало ещё сложнее. На данный момент, кроме Shyriiwook, работает только расширение g3kb-switch. Если же поддержка GNOME не нужна, то расширение не требуется — можно обойтись командой setxkbmap
. Функции с ней есть в скрипте под названиями *-nognome
.
Вместо xsel для работы с буфером обмена можно при желании использовать xclip, только нужно переписать команды вызова в puny-switcher.sh
с нужными аргументами.
Аналогично, вместо команды busctl
можно использовать gdbus
: функции с ней тоже есть в puny-switcher.sh
.
Queer Svit — независимая команда волонтёров со всего мира. С вашей поддержкой мы помогаем ЛГБТК+ сообществу и небелым* людям из Украины, России, Беларуси и других стран региона ВЕЦА. Мы помогаем людям, пострадавшим от войны и/или политических репрессий, оказываем поддержку при переезде — проводим консультации, приобретаем билеты, находим бесплатное жильё и предоставляем гуманитарную помощь.
Война, как и всякая катастрофа, сильнее всего бьет по наиболее уязвимым членам общества. Так, маргинализированные группы (включая ЛГБТК+ и небелых* людей) находятся в большей опасности, но об их проблемах общество почти не слышит. Но так как наша команда и состоит из квир- и небелых* людей, мы не понаслышке знаем о трудностях, с которыми сталкиваются наши бенефициары, и хорошо понимаем, как им помочь.
Ваши пожертвования имеют значение; Queer Svit существует в значительной степени за счет небольших пожертвований индивидуальных жертвователей. Мы благодарны за любую помощь — спасибо!