web-dev-qa-db-fra.com

Comment puis-je basculer rapidement entre deux langues parmi plusieurs?

J'ai 3 sources d'entrée (langues) configurées dans les paramètres de saisie de texte. Appelons-les E (comme en anglais) et A et B pour deux autres langues. Généralement, je bascule entre anglais et A ou anglais et B et presque jamais entre A et B. Toutefois, les touches de raccourci clavier changent toujours dans le sens E-> A-> B ou E <-A <-B. C'est très gênant.

Je cherche un moyen de le faire car il est implémenté sous MacOS, où le commutateur bascule par défaut entre les 2 dernières langues, mais vous pouvez le forcer à passer à la troisième en utilisant un raccourci séparé ou via le menu de la barre d’outils, comme indiqué dans capture d'écran ci-dessous:

enter image description here

Est-il possible de configurer quelque chose comme ça sur Ubuntu?

EDIT: La solution de Jacob ci-dessous permet de créer un raccourci personnalisé pour basculer entre deux langues. J'ai modifié son script pour répliquer le schéma de commutation MacOS, dans lequel les 2 dernières langues sont des cycles automatiquement. Vous pouvez le voir ici . Article de blog expliquant les détails ici .

5
krokodil

1. Basculer entre deux langues (fixes)

Ce que vous décrivez est essentiellement un raccourci clavier permettant de basculer entre deux langues de saisie. Le script ci-dessous offrira l'option.

#!/usr/bin/env python3
import subprocess
import sys

args = sys.argv[1:]
k = ["org.gnome.desktop.input-sources", "current"]

def get(command):  return subprocess.check_output(command).decode("utf-8")

currlang = get(["gsettings", "get", k[0], k[1]]).strip().split()[-1]
newlang = args[1] if currlang == args[0] else args[0]
subprocess.Popen(["gsettings", "set", k[0], k[1], newlang])

Comment utiliser

  1. Copiez le script dans un fichier vide, enregistrez-le sous le nom set_lang.py
  2. Dans une fenêtre de terminal, exécutez la commande:

    gsettings get org.gnome.desktop.input-sources sources
    

    Cela produira comme:

    [('xkb', 'us+intl'), ('xkb', 'us'), ('xkb', 'nl')]
    

    Cette liste représente vos langues d'entrée. Le index des langues est égal à la position dans la liste, commençant par 0, par ex. ('xkb', 'us') a index 1 (dans mon cas).

  3. Testez maintenant le script pour basculer entre deux index. Pour basculer entre ('xkb', 'us+intl') et ('xkb', 'nl') (index 0 et 2):

    python3 /path/to/set_lang.py 1 3
    

    où les langues du bot sont représentées par les arguments

    1 3
    
  4. Si tout fonctionne correctement, ajoutez-le à une touche de raccourci: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

    python3 /path/to/set_lang.py 1 3
    

    à un raccourci de votre choix.

Vous pouvez ensuite utiliser le raccourci existant pour parcourir toutes langues ou (bien sûr) le menu.

Courte explication

  • Les langues disponibles peuvent être récupérées par la commande:

    gsettings get org.gnome.desktop.input-sources sources
    
  • La langue actuellement définie peut être récupérée par la commande:

    gsettings get org.gnome.desktop.input-sources current
    

    qui affichera (a.o.) le index de la langue actuellement définie.

  • Nous pouvons définir la langue avec (par exemple) la commande:

    gsettings set org.gnome.desktop.input-sources current 0
    

    définir la langue sur la première de la liste (index 0)

En bref: si nous exécutons le script avec deux langages (indices) en tant qu'arguments, le script regardera quel est l'index actuel et basculera vers l'autre.




2. Basculer entre les deux dernières langues utilisées

La version du script ci-dessous bascule entre les les deux derniers utilisés langues, qui se sont révélées être similaires au comportement des MacO.

#!/usr/bin/env python3
import subprocess
import os

k = ["org.gnome.desktop.input-sources", "current"]
stored = os.path.join(os.environ["HOME"], ".lastlang")

def get(command):  return subprocess.check_output(command).decode("utf-8")

currlang = get(["gsettings", "get", k[0], k[1]]).strip().split()[-1]
try:
    newlang = open(stored).read().strip()
except FileNotFoundError:
    newlang = currlang

open(stored, "wt").write(currlang)
subprocess.Popen(["gsettings", "set", k[0], k[1], newlang])

J'ai ajouté cette version comme option supplémentaire. Les deux dernières langues utilisées persisteront (seront mémorisées) après le redémarrage.

Comment utiliser

  1. Copiez le script dans un fichier vide, enregistrez-le sous le nom switchlang.py
  2. Test - lancez le script avec la commande:

    python3/ path/to/switchlang.py
    

    Après la première exécution, changez de langue à partir du menu, lancez maintenant

    python3/ path/to/switchlang.py
    

    encore. À partir de ce moment, le script bascule toujours entre les deux dernières langues utilisées.

6
Jacob Vlijm

Allez:> Paramètres système> Entrée de texte

  and add languages to "Input sources to use:"

enter image description here

assurez-vous de cocher "Afficher la source d'entrée actuelle dans la barre de menu", il suffit de sélectionner les sources d'entrée dans le menu déroulant.

2
Thompson Dawes