Comment puis-je trouver l'emplacement (sur le bureau) d'une fenêtre sur la ligne de commande?

19

J'essaie d'écrire un petit script pour aider à gérer mes fenêtres via des raccourcis clavier.

Pour faire ce que je veux, je dois être capable de trouver l'emplacement actuel et la taille de la fenêtre "active" (focalisée). Par emplacement, je veux dire les coordonnées X, Y de la fenêtre sur le bureau, et par taille, je veux dire la hauteur et la largeur de la fenêtre.

Existe-t-il un utilitaire de ligne de commande qui peut récupérer ces informations?

TM.
la source

Réponses:

22

Vous pouvez obtenir toutes les informations pour la fenêtre active actuelle en utilisant cette commande:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

ou

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

Analysez simplement la sortie pour les coordonnées dont vous avez besoin. Voici quelques commandes utiles lors de l'interaction avec Windows:

  • xwininfo vous donnera la géométrie relative et absolue.
  • xprop vous dira beaucoup d'informations, y compris si la fenêtre est active, mais pas sa géométrie
  • xdpyinfo vous donnera également l'id de la fenêtre active, mais pas d'informations supplémentaires.
  • wmctrl vous obtiendra une liste d'informations sur les fenêtres et vous permettra de sélectionner la fenêtre active à modifier, mais pas les informations.

Par exemple, pour changer le titre de la fenêtre active en "Nouveau nom":

wmctrl -r :ACTIVE: -N "New Name"

Ou pour changer la position de la fenêtre active:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

Considérez wmctrlsi vous devez simplement changer quelque chose de simple, comme la géométrie de la fenêtre. Envisagez d'utiliser les autres scripts mentionnés ci-dessus uniquement si vous souhaitez effectuer d'autres tâches plus complexes.

Martin Owens -doctormo-
la source
1
Je voudrais juste noter que j'obtiens des résultats différents lors de l'exécution de la deuxième commande. Le premier fonctionne comme je m'y attendais.
TM.
1
J'utilise Arch, mais cela pourrait aider quelqu'un ici à l'avenir. Le 1er n'a pas fonctionné pour moi, le 2ème n'a pas fourni les dimensions correctes peut-être à cause du WM. Mais la combinaison des deux a fonctionné. xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
Sev
Merci! Mais je suis d'accord avec les deux premiers commentaires. La deuxième commande, xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)me montre une fenêtre enfant (sans nom) de mon Terminal. Quand je viens de le xdpyinfo | grep focusfaire focus: window 0x435b877, revert to Parent, et 0x435b877 est l'id de la fenêtre retournée par la première commande (qui fonctionne pour moi). C'est sur Trusty 14.04.1 LTS
nealmcb
8

Avec "xdotool", vous pouvez facilement interagir avec les fenêtres en utilisant les événements du clavier ou de la souris.

Exemple d'envoi d'une CtrlCséquence vers la fenêtre active:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

Si vous avez vraiment besoin de la position de la fenêtre:

eval $(xdotool getmouselocation --shell); echo $X $Y

Pour plus d'actions / options, consultez la page de manuel .

João Pinto
la source
Intéressant, mais je comprends Error: Invalid key sequence 'ctrl-c'.
l0b0