Czy można przypisać domyślny język klawiatury dla określonych aplikacji? Wiem, że istnieje opcja, aby zawsze uruchamiać aplikację z domyślnym językiem klawiatury, ale nie tego chcę.
Szukam czegoś podobnego do „stałych obszarów roboczych”, które można ustawić za pomocą CompizConfig (Chrome ustawia się tak, aby zawsze otwierał się na X1Y1, terminal na X2Y1 itp.). Coś, w czym ustawiłbym Chrome: czeski, terminal: angielski, Spotify: angielski, ...
Odpowiedzi:
Wprowadzenie
Skrypt poniżej ustawia język dla każdego programu zdefiniowanego przez użytkownika, zgodnie z pozycją tego języka w menu języka. Na przykład, jeśli moje zamówienie to: angielski (1), chiński (2) i rosyjski (3), mogę ustawić Firefoksa na język 2, terminal na język 1 i LibreOffice na język 3.
Skrypt składa się z dwóch części: pierwsza to skrypt, który wykonuje zadanie, drugi skrypt służy jako element sterujący. Chodzi o to, aby uruchomić skrypt ustawiania języka jako aplikację startową i ilekroć trzeba ręcznie zmienić język - dwukrotnie kliknij skrót do skryptu kontrolera.
Warunki wstępne
wmctrl
program za pomocąsudo apt-get install wmctrl
.Scenariusz
Skrypt kontrolera
Plik uruchamiający (.desktop) dla skryptu set-lang.sh
Plik uruchamiania (.desktop) dla set-lang-controller.sh
Uruchamianie skryptu
bin
. Możesz to zrobić w menedżerze plików lub użyć poleceniamkdir $HOME/bin
w terminalubin
folderze utwórz dwa pliki:set-lang.sh
iset-lang-control.sh
. Zapisz skryptset-lang.sh
i skrypt kontrolera wset-lang-control.sh
. Spraw, by oba skrypty były uruchamialnesudo chmod +x $HOME/bin/set-lang-control.sh $HOME/bin/set-lang.sh
.desktop
pliki. Jednym jestset-lang.desktop
. Musi być umieszczony w ukrytym.config/autostart
katalogu. Drugim jestset-lang-controller.desktop
umieszczenie go wbin
folderze. Następnie przeciągnij i przypnij do programu uruchamiającegoset-lang-controller.desktop
plik. Stanie się skrótem do tymczasowego zatrzymania i wznowienia wykonywania skryptu.UWAGA: wiersz
Exec=
musi zostać zmieniony, aby rzeczywista nazwa użytkownika znajdowała się w ścieżce do skryptu (ponieważ jest to rzeczywisty katalog domowy). Na przykład mój byłbyExec=/home/serg/bin/set-lang.sh
Objaśnienie i dostosowanie:
Sam skrypt działa w nieskończonej pętli while i sprawdza bieżące aktywne okno. Jeśli bieżące aktywne okno pasuje do jednej z opcji w strukturze sprawy, przełączamy się na odpowiedni język. Aby uniknąć ciągłego ustawiania, każda część struktury sprawy ma instrukcję if, która sprawdza, czy język został już ustawiony na żądaną wartość.
Podwójne kliknięcie programu uruchamiającego
set-lang-controller.sh
spowoduje sprawdzenie stanuset-lang.sh
skryptu; jeśli skrypt jest uruchomiony - zostanie wstrzymany, a jeśli skrypt zostanie wstrzymany, zostanie wznowiony. Powiadomienie zostanie wyświetlone z odpowiednim komunikatem.Aby dostosować skrypt, możesz otworzyć żądane aplikacje, uruchomić
wmctrl -lx
i zanotować trzecią kolumnę - klasę okna. Przykładowe dane wyjściowe:Wybierz odpowiednie klasy okien dla każdego programu. Następnie przejdź do części skryptu, która umożliwia dostosowanie i dodaj dwa wpisy dla PROG_CLASS i LANG. Następnie dodaj odpowiedni wpis w strukturze sprawy.
Na przykład, jeśli chcę dodać, LibreOffice's Writer, otwieram okno LibreOffice Writer, idę do terminalu i uruchamiam
wmctrl -lx
. Powie mi, że okno Writer ma klasęlibreoffice.libreoffice-writer
. Następnie przejdę do skryptu, dodamPROG_CLASS_4=libreoffice.libreoffice-writer
iLANG4=3
w odpowiednim obszarze. Zwróć uwagę na pasujący numer 4. Następnie przejdź do struktury sprawy i dodaj następujący wpis między ostatnim;;
aesac
:Ponownie zauważ znak $ i pasującą liczbę 4.
Ponadto, jeśli skrypt działa jako element autostartu i chcesz go tymczasowo zatrzymać, aby go dostosować, użyj
pkill set-lang.sh
i wznów znohup set-lang.sh > /dev/null 2&>1 &
Mała uwaga: innym sposobem na znalezienie klasy okna dla programu (rzeczy, które występują przed pojedynczym okrągłym nawiasiem w strukturze obudowy) jest użycie tego
xprop
iawk
oneliner:xprop | awk '/WM_CLASS/ {gsub(/"/," "); print $3"."$5}
źródło
kill -STOP $(pgrep set-lang.sh)
a następnie wznowieniem skryptukill -CONT $(pgrep set-lang.sh)
. W ten sposób możesz go zatrzymać, normalnie zmienić języki, a następnie wznowić.~/bin
nie potrzebują ścieżki (ani rozszerzenia, ponieważ jest ona dostępna$PATH
po ponownym zalogowaniu, zobacz: lintian.debian.org/tags/script-with-language-extension .html ), a można połączyć stop / start w jednym.desktop
pliku; na szybkiej liście lub w funkcji przełączania. wygląda mi idealnie.Możesz zainstalować
gxneur
w tym celu, uruchamiającTo oprogramowanie może automatycznie przełączać układy, ale nie jest do tego idealne.
Ale ma bardzo ładne narzędzia do konfigurowania ręcznych przełączników układu.
Możesz robić dokładnie to, co chcesz. Aby ustawić określone układy dla określonych aplikacji.
źródło
Poniższy skrypt to edytowana wersja tego , która jakiś czas temu została opublikowana jako podobne rozwiązanie dla pojedynczej aplikacji (
gnome-terminal
).Skrypt został częściowo przepisany na to pytanie, aby można go było używać do automatycznego ustawiania języków dla wielu aplikacji.
Jak korzystać w praktyce; automatycznie zapamiętuje ustawiony język dla aplikacji
Jeśli skrypt jest uruchamiany po raz pierwszy, obecny język jest przyjmowany jako domyślny język, który jest pamiętany w ukrytym pliku:
~/.lang_set
.Użycie jest wtedy proste: jeśli uruchomisz np.
gedit
W najbardziej wysuniętym oknie i ustawisz inny język, język ten jest automatycznie łączonygedit
od tego momentu, dopóki nie zmienisz języka ponownie zgedit
przodu.Liczba określonych języków / aplikacji jest w zasadzie nieograniczona; wystarczy uruchomić aplikację i ustawić język z oknem aplikacji z przodu. Aplikacja zostanie automatycznie ustawiona i zapamiętana bez edycji kodu.
Zdarzenie napędzane?
Chociaż skrypt działa w pętli, zużycie zasobów jest minimalne. Kierowanie zdarzeniem oznaczałoby, że zdarzenie jest zmianą w oknie z przodu. Nie widzę innej opcji niż „szpiegowanie” okna z przodu, jak tylko sprawdzenie w pętli.
Scenariusz
Jak skonfigurować
Skrypt korzysta zarówno
xdotool
awmctrl
:Skopiuj powyższy skrypt do pustego pliku i zapisz go jako
set_language.py
Uruchom go testowo za pomocą polecenia:
Jeśli wszystko działa zgodnie z oczekiwaniami, dodaj go do aplikacji startowych: Dodaj do aplikacji startowych: Dash> Aplikacje startowe> Dodaj. Dodaj polecenie:
źródło