Skip to content

Latest commit

 

History

History
97 lines (71 loc) · 10.1 KB

README.ru.md

File metadata and controls

97 lines (71 loc) · 10.1 KB

На других языках: English

Puny Switcher

Скрипт для исправления текста, набранного не в той раскладке, и безусловного переключения раскладок в 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 существует в значительной степени за счет небольших пожертвований индивидуальных жертвователей. Мы благодарны за любую помощь — спасибо!

Лицензия

Hippocratic License 3.0 (HL3-CORE)