Est-il possible d'attribuer la langue du clavier par défaut à des applications spécifiques? Je sais qu'il existe une option pour toujours démarrer une application avec une langue de clavier par défaut, mais ce n'est pas ce que je veux.
Je recherche quelque chose de similaire aux "espaces de travail fixes" que vous pouvez définir à l'aide de CompizConfig (vous définissez Chrome pour qu'il s'ouvre toujours à X1Y1, le terminal à X2Y1, etc.). Quelque chose où je définirais Chrome: tchèque, terminal: anglais, Spotify: anglais, ...
Réponses:
introduction
Le script ci-dessous définit la langue de chaque programme défini par l'utilisateur, en fonction de la position de cette langue dans le menu des langues. Par exemple, si ma commande est: anglais (1), chinois (2) et russe (3), je peux configurer Firefox pour avoir la langue 2, le terminal pour avoir la langue 1 et LibreOffice pour avoir la langue 3.
Le script est divisé en deux parties: la première partie est le script réel qui fait le travail, le deuxième script sert d'élément de contrôle. L'idée est d'exécuter le script de paramétrage de la langue en tant qu'application de démarrage et chaque fois que vous devez modifier manuellement la langue - double-cliquez sur le raccourci vers le script du contrôleur.
Conditions préalables
wmctrl
programme avecsudo apt-get install wmctrl
.Scénario
Script du contrôleur
Fichier de lancement (.desktop) pour le script set-lang.sh
Fichier de lancement (.desktop) pour set-lang-controller.sh
Faire fonctionner le script
bin
. Vous pouvez le faire dans le gestionnaire de fichiers ou utiliser la commandemkdir $HOME/bin
dans le terminalbin
dossier, créez deux fichiers:set-lang.sh
etset-lang-control.sh
. Enregistrer le script dansset-lang.sh
et le script du contrôleur dansset-lang-control.sh
. Rendez les deux scripts exécutables avecsudo chmod +x $HOME/bin/set-lang-control.sh $HOME/bin/set-lang.sh
.desktop
fichiers. L'un estset-lang.desktop
. Doit être placé dans le.config/autostart
répertoire caché . Le second estset-lang-controller.desktop
, peut être placé dans votrebin
dossier. Faites ensuite glisser et épingler au lanceur leset-lang-controller.desktop
fichier. Cela deviendra le raccourci pour arrêter et reprendre temporairement l'exécution du script.REMARQUE : la ligne
Exec=
doit être modifiée pour avoir votre nom d'utilisateur réel dans le chemin d'accès au script (car il s'agit de votre répertoire personnel). Par exemple, le mien seraitExec=/home/serg/bin/set-lang.sh
Explication et personnalisation:
Le script lui-même s'exécute dans une boucle while infinie et vérifie la fenêtre active actuelle. Si la fenêtre active actuelle correspond à l'une des options de la structure de cas, nous basculons vers la langue appropriée. Pour éviter un réglage constant, chaque partie de la structure de cas possède une instruction if qui vérifie si la langue a déjà été définie sur la valeur souhaitée.
Le double-clic sur le lanceur pour
set-lang-controller.sh
vérifiera l'état duset-lang.sh
script; si le script est en cours d'exécution - il sera suspendu, et si le script est suspendu, il sera repris. Une notification sera affichée avec le message approprié.Afin de personnaliser le script, vous pouvez ouvrir les applications souhaitées, exécuter
wmctrl -lx
et noter la troisième colonne - la classe de fenêtre. Exemple de sortie:Sélectionnez les classes de fenêtres appropriées pour chaque programme. Ensuite, accédez à la partie du script qui permet la personnalisation et ajoutez deux entrées pour PROG_CLASS et LANG. Ajoutez ensuite l'entrée appropriée dans la structure de cas.
Par exemple, si je veux ajouter, LibreOffice's Writer, j'ouvre la fenêtre de LibreOffice Writer, vais dans le terminal et je lance
wmctrl -lx
. Il me dira que la fenêtre Writer a une classelibreoffice.libreoffice-writer
. Ensuite, je vais aller au script, ajouterPROG_CLASS_4=libreoffice.libreoffice-writer
etLANG4=3
dans la zone appropriée. Remarquez le numéro 4 correspondant. Ensuite, accédez à la structure de cas et ajoutez l'entrée suivante entre le dernier;;
et leesac
:Encore une fois, notez le signe $ et le numéro correspondant 4.
De plus, si le script s'exécute en tant qu'élément de démarrage automatique et que vous souhaitez l'arrêter temporairement pour le personnaliser, utilisez
pkill set-lang.sh
et reprenez avecnohup set-lang.sh > /dev/null 2&>1 &
Petite note: une autre façon de découvrir la classe de fenêtre pour un programme (ce truc qui va avant le crochet rond unique dans la structure du boîtier) est d'utiliser ceci
xprop
etawk
oneliner:xprop | awk '/WM_CLASS/ {gsub(/"/," "); print $3"."$5}
la source
kill -STOP $(pgrep set-lang.sh)
, puis de reprendre le script aveckill -CONT $(pgrep set-lang.sh)
. De cette façon, vous pouvez le suspendre, changer de langue normalement, puis reprendre.~/bin
n'ont pas besoin du chemin (ni de l'extension, car il se trouve$PATH
après une reconnexion , voir: lintian.debian.org/tags/script-with-language-extension .html ), et vous pourriez combiner stop / start dans un seul.desktop
fichier; soit dans une liste rapide ou une fonction à bascule. semble assez parfait pour moi.Vous pouvez installer
gxneur
pour cela en exécutantCe logiciel peut changer automatiquement de disposition, mais il n'est pas parfait avec cela.
Mais il a de très bons outils pour configurer des commutateurs de disposition manuels.
Vous pouvez faire exactement ce que vous voulez. Pour définir des dispositions spécifiques pour des applications spécifiques.
la source
Le script ci-dessous est une version modifiée de celui-ci , qui a été publiée il y a quelque temps comme une solution similaire pour une seule application (
gnome-terminal
).Le script a été partiellement réécrit pour cette question, afin de pouvoir l'utiliser pour définir automatiquement les langues pour plusieurs applications.
Comment utiliser dans la pratique; mémoriser automatiquement la langue définie par application
Si le script est lancé pour la première fois, la langue courante est supposée être la langue par défaut, dont on se souvient dans un fichier caché:
~/.lang_set
.Ensuite, l'utilisation est simple: si vous exécutez par exemple
gedit
dans la fenêtre la plus en avant et définissez une langue différente, cette langue est automatiquement connectée àgedit
partir de là, jusqu'à ce que vous changiez à nouveau la langue avecgedit
en face.Le nombre de langues / applications spécifiques est en principe illimité; exécutez simplement l'application et définissez la langue avec la fenêtre d'application en face. L'application sera automatiquement définie et mémorisée sans modifier le code.
Evénementiel?
Bien que le script s'exécute en boucle, la consommation de ressources est minime. L'événement piloté signifierait que l' événement est un changement dans la fenêtre la plus en avant. Je ne vois pas d'autre option que "d'espionner" la fenêtre la plus en avant que de vérifier dans une boucle.
Le scénario
Comment installer
Le script utilise à la fois
xdotool
etwmctrl
:Copiez le script ci-dessus dans un fichier vide, enregistrez-le sous
set_language.py
Testez-le par la commande:
Si tout fonctionne comme prévu, ajoutez-le aux applications de démarrage: Ajouter aux applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
la source