web-dev-qa-db-fra.com

Séparer les raccourcis clavier pour basculer entre les dispositions de clavier

J'ai quelques configurations de clavier de langue installées dans 12.04. j'utilise Ctrl-Shift raccourci clavier pour basculer entre les dispositions de langue. Une telle méthode de commutation prend beaucoup de temps.

Est-il possible de configurer un raccourci clavier différent pour chaque disposition de clavier linguistique?

Par exemple:

Ctrl-Shift-1 (Mise en page anglaise),

Ctrl-Shift-2 (Mise en page en polonais),

Ctrl-Shift-3 (Mise en page italienne), etc.

4
Vitaliy

Simple: allez dans les paramètres du clavier, cliquez sur "Raccourcis" et ajoutez "Raccourci personnalisé". Pour chaque raccourci, ajoutez la commande respective qui choisit une disposition. Les commandes sont

setxkbmap -layout en
setxkbmap -layout pl
setxkbmap -layout it

etc.

2
January

Le problème avec la solution de janvier est que cela ne fonctionne pas bien avec l'indicateur de Unity.

Vous trouverez ci-dessous un petit script python que vous pouvez utiliser à la place de setxkbmap:

#!/usr/bin/env python

import argparse
from gi.repository import Gio

setting = Gio.Settings.new("org.gnome.desktop.input-sources")
keymaps = [keymap for (_, keymap) in setting['sources']]

parser = argparse.ArgumentParser(prog='keymap_cycle', description='Cycle through a subset of enabled keymaps.')
group = parser.add_mutually_exclusive_group(required=False)
group.add_argument('-s', '--show', action='store_true', help='show available keymaps')
group.add_argument('-k', '--keymaps', default=','.join(keymaps), help='cycle through keymaps (default: %(default)s)')
arguments = parser.parse_args()


if arguments.show:
    print 'Available keymaps: %s' % ', '.join(keymaps)
else:
    cycle = arguments.keymaps.split(',')

    current_language = keymaps[setting['current']]

    try:
        current_cycle_index = cycle.index(current_language)
        desired_cycle_index = (current_cycle_index + 1) % len(cycle)
    except ValueError:
        desired_cycle_index = 0

    desired_language = cycle[desired_cycle_index]

    try:
        desired_language_index = keymaps.index(desired_language)
        setting['current'] = desired_language_index
    except ValueError:
        pass

Enregistrez-le dans $HOME/.local/bin (ou à un autre endroit de votre choix), puis chmod +x. Ajoutez tous les keymaps que vous voulez via l'écran de configuration standard de keymap d'Ubuntu.

Ensuite, la question initiale pourrait être résolue en liant un raccourci pour chacune des commandes suivantes:

keymap_cycle --keymap en
keymap_cycle --keymap pt
keymap_cycle --keymap it

Mais ça peut faire encore plus! Par exemple, keymap_cycle --keymap en,it effectuerait un cycle des keymaps comme ceci: en-> it-> en-> it ... à chaque appel.

Pour afficher toutes les keymaps disponibles que vous avez ajoutées via l'écran de configuration de keymap d'Ubuntu, exécutez keymap_cycle --show.

Félicitations à @bjonen et son réponse pour la perspicacité magique de gsettings.

3
Ihor Kaharlichenko

Vous pouvez utiliser la commande gsettings avec des raccourcis personnalisés. Lisez plus de détails ici: https://askubuntu.com/a/984981/619

0
Alexey