web-dev-qa-db-fra.com

Comment puis-je afficher / masquer par programmation ma fenêtre d'application avec la touche de raccourci globale?

J'écris un clone Notational Velocity pour Gnome/Ubuntu en utilisant Quickly (PyGI) et je veux permettre aux utilisateurs de définir une touche de raccourci globale qui basculera la visibilité de la fenêtre de l'application lorsque l'application est en cours d'exécution (quelque chose comme Tilda fait pour son émulateur de terminal). C'est-à-dire qu'une fois l'application lancée, un utilisateur peut appuyer sur F2 pour masquer la fenêtre, puis appuyer à nouveau sur F2 pour la rendre visible et la mettre en avant. Je ne veux pas utiliser une application de raccourci clavier externe ou quoi que ce soit qui nécessite des paramètres hors application. Comment pourrais-je m'y prendre?

Il y a une question similaire ici: Comment puis-je écouter sur un événement global de pression de touche? mais la réponse principale est une solution non programmatique grossière. Un commentateur mentionne "saisir le clavier avec un appel api X" mais je ne sais pas par où commencer.

6
monotasker

La bibliothèque Keybinder fait exactement ceci . Si vous cochez les demandes d'extraction, il y a des demandes d'exemples utilisant pygi, dont moi pour py3k.

4
RobotHumans

Je me rends compte qu'il s'agit d'un paramètre externe, pas dans l'application, mais j'ai pensé écrire comment procéder car je n'ai pas pu trouver de documentation en ligne.

J'ai eu besoin de lire récemment certains paramètres de compiz pour mon programme, donc trouver comment les modifier était assez simple. Vous pouvez définir par programmation les paramètres de compiz dans python en utilisant python-compizconfig. J'ai joué avec un peu et vous pouvez définir des valeurs comme ceci:

import compizconfig
context=compizconfig.Context()
commandplugin=context.Plugins['commands']
c0=commandplugin.Screen['command0']
c0.Value='xeyes'
key0=commandplugin.Screen['run_command0_key']
key0.Value='<Control><Primary>g'
context.Write()   #Note that sometimes you have to pass False to get it to update settings

Ce qui précède définit le plugin de commandes de compiz pour exécuter xeyes en utilisant la combinaison de touches control-g. Vous devrez probablement faire une vérification pour vous assurer que le plugin était en cours d'exécution (le mien était désactivé en ccsm par défaut). Notez que pour obtenir de nombreux paramètres, vous pouvez utiliser la fonction keys() pour les répertorier (c'est-à-dire) context.Plugins.keys()

Voici un lien vers du code qui m'a aidé à comprendre comment cela fonctionne, car je ne trouve aucune documentation: http://Bazaar.launchpad.net/~ubuntu-branches/ubuntu/precise/compizconfig-python/ précis/vue/tête: /src/compizconfig.pyx

2
Ian B.