2016-07-22 4 views
3

Je suis en train d'écrire ma première extension de Shell et - comme chaque billet de blog là-bas - je me bats aussi avec le manque de mise à jour la documentation ...Comment saisir les frappes dans Gnome Shell

a savoir que je suis en train de saisir toutes les frappes du clavier, et - regardant le code en ligne et d'anciens messages de la liste de diffusion - il semble que jusqu'à récemment la bonne façon de faire était:

const Shell = imports.gi.Shell; 
global.set_stage_input_mode(Shell.StageInputMode.FULLSCREEN); 
global.stage.connect('key-press-event', myCallbackHere); 

Toutefois, cela ne semble pas travailler. Tant la fonction set_stage_input_mode et la propriété StageInputMode semblent avoir disparu, au moins sur mon Fedora 24 exécutant GTK 3.20.6.

Quelle est la manière correcte et actuelle de faire en sorte que mon extension saisisse toutes les frappes effectuées par l'utilisateur?

Répondre

4

Je ne pense pas qu'il existe une façon correcte de le faire pour le moment. Vous pouvez pirater quelque chose qui soit spécifique à X ou spécifique à Wayland ou peut-être que vous pourriez patcher Gnome Shell pour fournir cette information. Pour Wayland, vous pouvez commencer à https://github.com/MaartenBaert/wayland-keylogger et pour X, vous pouvez commencer par réutiliser la détection de clé de autokey (https://github.com/autokey/autokey/blob/master/src/lib/interface.py).

Je peux deviner que ce n'est pas la réponse que vous espériez, parce que sur IRC vous avez écrit que vous voulez écrire un remplacement pour autokey. Pour obtenir une entrée d'un programme externe, vous pouvez utiliser GLib.spawn_async_with_pipes (https://people.gnome.org/~gcampagna/docs/GLib-2.0/GLib.spawn_async_with_pipes.html).

J'ai écrit il y a quelques temps du code d'extension Shell pour interroger xinput test et noter grossièrement ce qui se passe (pensez à toute clé alphanumérique vs ctrl gauche vs clé de retour). Vous pouvez regarder ce code ici: https://gist.github.com/daniellandau/7679741bf8bbc5c345591593ca05e9f6. Ce n'est pas assez robuste pour faire n'importe quel type d'expansion de macro, donc je vous recommande de réutiliser le code de détection d'autokey.

En général, les documents à https://people.gnome.org/~gcampagna/docs sont l'emplacement où trouver les références d'API pour les bibliothèques utilisables à partir des extensions Shell Gnome. J'espère que vous allez de l'avant avec votre projet. Commencer à écrire des extensions est frustrant mais finalement très amusant une fois que vous avez compris.

+0

Hey! Merci pour ça. Je vais vérifier les liens dès que j'aurai du temps libre pour des projets personnels, pour l'instant merci de l'avoir écrit. Je reviendrai là-dessus et j'approuverai/suivrai avec des questions. :) – mac