2017-01-04 5 views
7

Je veux écrire une extension qui fait l'opposé du paramètre "focus-follows mouse" dans GNOME Shell: Je veux que mon pointeur se déplace au centre de la fenêtre actuellement focalisée. Est-ce que cela peut être fait dans une extension GNOME Shell?Les extensions GNOME Shell peuvent-elles déplacer le pointeur? Si c'est le cas, comment?

Je vois du code GNOME qui enveloppe xfixes cursor, mais je ne trouve aucune référence aux mises à jour programmatiques du pointeur dans le noyau Javascript ou dans les extensions existantes. (Suis-je juste mauvais chez Google?)

Les réponses valides incluent (1) le code d'exemple qui le fait ou (2) la citation d'une source canonique qui indique qu'il ne peut pas être fait.

+0

Pour les curieux: Pourquoi voudrais-je faire cela? Parce que je me concentre entièrement sur les raccourcis clavier et que je suis fatigué de devoir déplacer manuellement ma souris sur trois écrans lorsque, évidemment, je le veux dans la fenêtre où je suis actuellement concentré. – BrianTheLion

+0

Qu'est-il arrivé à ce @BrianTheLion? Ce que vous décrivez serait une extension impressionnante. Ce comportement de i3 me manque vraiment. De même, comment gérez-vous la mise au point avec les raccourcis clavier? J'utilise actuellement l'extension "Put Windows" mais je trouve que c'est un peu bogué. – paldepind

+0

@paldepind Je n'ai rien fait à ce sujet. La réponse fournie par JosephFarah semble raisonnable, mais j'espérais que quelqu'un de GNOME interviendrait avec quelque chose d'officiel. – BrianTheLion

Répondre

0

Êtes-vous prêt à écrire votre propre script? Si vous êtes, j'ai trouvé trois outils, qui, s'ils sont utilisés ensemble, peuvent faire le travail pour vous.

D'abord, utilisez pour obtenir le PID de la fenêtre sur laquelle vous avez cliqué.

Ensuite, utilisez xwininfo pour obtenir les dimensions et les informations de position de la fenêtre en fonction de son ID de processus.

Enfin, utilisez xdotool pour calculer la position centrale de la fenêtre et déplacez le curseur sur cette position exacte.

Espérons que cela aide. Je n'ai pas assez de temps pour écrire le script (désolé), mais cela devrait suffire pour commencer.

EDIT: Basé sur votre commentaire, vous voulez rester dans GNOME js. Totalement compréhensible. Vous pouvez appeler xdotool (ce qui est la façon la plus efficace de changer la position du curseur à l'écran) à partir de GNOME js par l'utilisation de quelque chose comme:

const Util = imports.misc.util; 
Util.spawn(['/bin/bash', '-c', "xrandr --query | awk 'something'"]) # replace the code here wih your own 

This code was found at this thread.

+0

Merci pour l'effort, mais je cherche vraiment une réponse qui me garde dans le code de l'extension GNOME (JS). Dans l'état actuel des choses, l'API GNOME Shell JS me donne tout dans votre solution sauf la dernière partie où la souris se déplace ... ce qui semble bizarre. – BrianTheLion

+0

@BrianTheLion désolé, je ne peux pas aider plus! Est-il possible d'appeler 'xdotool' depuis l'API JS du shell GNOME? Cela résoudrait facilement votre problème. Edit: Il semble que vous pouvez, basé sur cette question: https: // stackoverflow.com/questions/33911776/gnome-shell-extensions-comment-exécuter-une-commande-avec-pipes –

+0

Belle trouvaille! Si quelqu'un ne revient pas avec une réponse canonique dans le JS, alors vous obtenez les points. – BrianTheLion

2

Trouvé ce code dans overview.js

Gdk = imports.gi.Gdk 
let display = Gdk.Display.get_default(); 
let deviceManager = display.get_device_manager(); 
let pointer = deviceManager.get_client_pointer(); 
let [screen, pointerX, pointerY] = pointer.get_position(); 
pointer.warp(screen, 10, 10);