Можно ли назначить язык клавиатуры по умолчанию для конкретных приложений? Я знаю, что есть возможность всегда запускать приложение с языком клавиатуры по умолчанию, но это не то, что я хочу.
Я ищу что-то похожее на «фиксированные рабочие пространства», которые вы можете установить с помощью CompizConfig (вы устанавливаете Chrome всегда открывающимся в X1Y1, терминалом в X2Y1 и т. Д.). Что-то, где я бы установил Chrome: чешский, терминал: английский, Spotify: английский, ...
Ответы:
Вступление
Сценарий ниже устанавливает язык для каждой пользовательской программы в соответствии с положением этого языка в языковом меню. Например, если мой порядок: английский (1), китайский (2) и русский (3), я могу установить для Firefox язык 2, для терминала язык 1, а для LibreOffice язык 3.
Сценарий состоит из двух частей: первая часть представляет собой фактический сценарий, выполняющий эту работу, а второй сценарий выполняет роль управляющего элемента. Идея состоит в том, чтобы запустить сценарий языковых настроек в качестве запускаемого приложения, и всякий раз, когда вам нужно вручную изменить язык - дважды щелкните ярлык на сценарии контроллера.
Предпосылки
wmctrl
программу с помощьюsudo apt-get install wmctrl
.скрипт
Скрипт контроллера
Файл запуска (.desktop) для скрипта set-lang.sh
Файл запуска (.desktop) для set-lang-controller.sh
Заставить скрипт работать
bin
. Вы можете сделать это в файловом менеджере или использовать командуmkdir $HOME/bin
в терминалеbin
папке создайте два файла:set-lang.sh
иset-lang-control.sh
. Сохранить скрипт вset-lang.sh
и контроллер скрипт вset-lang-control.sh
. Сделайте оба скрипта исполняемыми сsudo chmod +x $HOME/bin/set-lang-control.sh $HOME/bin/set-lang.sh
.desktop
файла. Один естьset-lang.desktop
. Должен быть размещен в скрытом.config/autostart
каталоге. Второйset-lang-controller.desktop
, может быть помещен в вашуbin
папку. Затем перетащите и запуститеset-lang-controller.desktop
файл запуска . Это станет ярлыком для временной остановки и возобновления выполнения скрипта.Обратите внимание, что строка
Exec=
должна быть изменена, чтобы фактическое имя пользователя указывалось в пути к скрипту (потому что это фактический домашний каталог). Например, мой будетExec=/home/serg/bin/set-lang.sh
Объяснение и настройка:
Сам скрипт выполняется в бесконечном цикле while и проверяет текущее активное окно. Если текущее активное окно соответствует одному из параметров в структуре дела, мы переключаемся на соответствующий язык. Чтобы избежать установки констант, каждая часть структуры case имеет оператор if, который проверяет, задан ли для языка желаемое значение.
Двойной щелчок на панели запуска для
set-lang-controller.sh
проверки состоянияset-lang.sh
скрипта; если скрипт запущен - он будет приостановлен, а если скрипт приостановлен, он будет возобновлен. Уведомление будет показано с соответствующим сообщением.Чтобы настроить скрипт, вы можете открыть нужные приложения, запустить
wmctrl -lx
и отметить третий столбец - класс окна. Пример вывода:Выберите соответствующие классы окна для каждой программы. Затем перейдите к той части скрипта, которая позволяет выполнить настройку, и добавьте две записи для PROG_CLASS и LANG. Затем добавьте соответствующую запись в структуру дела.
Например, если я хочу добавить Writer LibreOffice, я открываю окно Writer LibreOffice, перехожу в терминал и запускаю
wmctrl -lx
. Это скажет мне, что у окна Writer есть классlibreoffice.libreoffice-writer
. Далее я пойду к сценарию, добавлюPROG_CLASS_4=libreoffice.libreoffice-writer
иLANG4=3
в соответствующую область. Обратите внимание на совпадение с номером 4. Затем перейдите к структуре дела и добавьте следующую запись между last;;
иesac
:Опять же, обратите внимание на знак $ и соответствующий номер 4.
Кроме того, если скрипт работает как элемент автозапуска, и вы хотите временно остановить его, чтобы настроить его, используйте
pkill set-lang.sh
и возобновите сnohup set-lang.sh > /dev/null 2&>1 &
Небольшое примечание: еще один способ выяснить класс окна для программы (то, что идет перед одинарной круглой скобкой в структуре case) - использовать это
xprop
иawk
oneliner:xprop | awk '/WM_CLASS/ {gsub(/"/," "); print $3"."$5}
источник
kill -STOP $(pgrep set-lang.sh)
затем возобновить выполнение сценарияkill -CONT $(pgrep set-lang.sh)
. Таким образом, вы можете приостановить его, переключить языки в обычном режиме, а затем возобновить.~/bin
файлам не нужен ни путь (ни расширение), поскольку он находится$PATH
после повторного входа в систему, см. Lintian.debian.org/tags/script-with-language-extension .html ), и вы можете объединить остановки / запуска в одном.desktop
файле; либо в быстром списке или функции переключения. выглядит довольно идеально для меня.Вы можете установить
gxneur
для этого, запустивЭто программное обеспечение может автоматически переключать макеты, но оно не идеально с этим.
Но у него есть очень хорошие инструменты для настройки ручных переключателей макета.
Вы можете делать именно то, что вы хотите. Чтобы установить конкретные макеты для конкретных приложений.
источник
Сценарий ниже является отредактированной версией этого , которая была опубликована как похожее решение для одного приложения (
gnome-terminal
) некоторое время назад.Сценарий был частично переписан для этого вопроса, чтобы можно было использовать его для автоматической настройки языков для нескольких приложений.
Как использовать на практике; автоматически запоминать установленный язык для приложения
Если скрипт запускается в первый раз, текущий язык считается языком по умолчанию, который запоминается в скрытом файле:
~/.lang_set
.Тогда использование простое: если вы запускаете, например,
gedit
в самом переднем окне и устанавливаете другой язык,gedit
с этого момента этот язык автоматически подключается , пока вы не измените язык снова с помощьюgedit
впереди.Количество конкретных языков / приложений в принципе не ограничено; просто запустите приложение и установите язык с окном приложения впереди. Приложение будет автоматически установлено и запомнено без редактирования кода.
Событие управляемое?
Хотя скрипт выполняется в цикле, потребление ресурсов минимально. Событие управляемое будет означать, что событие - это изменение в переднем окне. Я не вижу другого выбора, кроме как «шпионить» за самым передним окном, кроме проверки в цикле.
Сценарий
Как настроить
Скрипт использует
xdotool
иwmctrl
:Скопируйте приведенный выше скрипт в пустой файл, сохраните его как
set_language.py
Протестируйте его командой:
Если все работает должным образом, добавьте его в «Автозагрузка приложений»: «Добавить в автозагрузку приложений»: «Тире»> «Автозагрузка приложений»> «Добавить». Добавьте команду:
источник