Quel est le moyen le plus simple de lier (globalement) une combinaison de touches (par exemple <Super>+A
) à une fonction dans une extension de shell gnome?
En inspectant quelques extensions, j'ai rencontré le code suivant:
global.display.add_keybinding('random-name',
new Gio.Settings({schema: 'org.gnome.shell.keybindings'}),
Meta.KeyBindingFlags.NONE,
function() { /* ... some code */ });
Je comprends que la combinaison de touches est spécifiée par le paramètre de schéma et qu'il est possible de créer un fichier XML décrivant la combinaison. Existe-t-il un moyen plus simple de procéder?
Réponses:
TL; DR
Voici une classe:
Et c'est comme ça que vous l'utilisez:
Vous allez avoir besoin d'importations:
Pour arrêter d'écouter:
Explication
Je me trompe peut-être terriblement, mais c'est ce que j'ai compris ces derniers jours.
Tout d'abord, c'est Mutter qui est responsable de l'écoute des raccourcis clavier. Mutter est un cadre pour créer des gestionnaires de fenêtres, ce n'est pas un gestionnaire de fenêtres lui-même. Gnome Shell a une classe écrite en JS et appelée "Window Manager" - c'est le vrai Window Manager qui utilise Mutter en interne pour faire toutes les choses de bas niveau. Mutter a un objet MetaDisplay. Il s'agit de l'objet que vous utilisez pour demander l'écoute d'un raccourci clavier. Mais! Mais Mutter demandera au gestionnaire de fenêtres d'approuver l'utilisation de ce raccourci clavier. Que se passe-t-il donc lorsque la touche de raccourci est enfoncée? - MetaDisplay génère un événement 'filtre-raccourci clavier'. - Le gestionnaire de fenêtres dans Gnome Shell vérifie si cette touche de raccourci a pu être traitée. - Le gestionnaire de fenêtres renvoie la valeur appropriée à MetaDisplay - S'il est autorisé à traiter ce raccourci clavier, MetaDisplay génère l'événement «activé par l'accélérateur»
la source
gconf-editor
pourrait faire ce que vous voulez: lienla source