Voici une autre solution adhérant à la méthode UNIX!
À première vue, il n'est pas aussi beau que le vôtre, @ t7ko:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ | xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry | sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
Mais supporte-moi! Il y a une beauté cachée en elle.
Bref, il
- a une structure linéaire , au lieu d'une structure arborescente, comme une au lieu de deux dimensions
- utilise une syntaxe shell plus connue .
- répond en fait à votre question: il localise la fenêtre.
(Que ces points soient des avantages dépend du contexte - ignorons simplement cet aspect * .)
Je vais montrer le même code dans une mise en page plus structurée ci-dessous, pour faciliter la compréhension étape par étape.
Mais notez que l'indentation est d'expliquer la commande - elle n'indique pas l'imbrication ou tout, tout est toujours un pipeline UNIX linéaire.
La même commande, juste divisée après les pipes ( |
):
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry |
sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
La commande complète, comme indiqué ci-dessus, donne l'emplacement des pixels de la gvim
fenêtre, renvoyant les coordonnées des pixels par rapport au coin supérieur gauche de l'écran actuel (éventuellement virtuel) comme x,y
, comme 42,433
, ou peut -5375,-3809
- être quand il se trouve sur le premier des quatre à quatre écrans virtuels et l'actuel se trouve quelque part sur le côté droit.
Pour l'instant, je raccourcirai la commande pour ne trouver qu'un ID de fenêtre X11 - c'est peut-être tout ce dont avait réellement besoin l'OP, pas sûr:
Le pipeline de commandes raccourci, une commande shell distincte sur chaque ligne:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO'
Maintenant, il commence à être lisible:
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool search --all --pid {} --name 'TODO'
La xdotool
commande search
est utilisée pour rechercher des fenêtres avec la " classe " gvim
, en laissant de côté certaines fenêtres "internes". Le résultat est répertorié comme PID
'(identificateurs de processus).
Pour chacun PID
, en xargs
exécute un autre xdotool search
, en vérifiant le "nom" pour notre exemple de modèle TODO
- après avoir vérifié le PID
.
(Juste au cas où: les lignes se terminant par \
- appelées lignes de continuation - doivent en fait se terminer par un \
et aucun espace avant la nouvelle ligne.)
Revenons maintenant à la commande d'origine:
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool \
search --all --pid {} --name 'TODO' \
getwindowgeometry |
sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
La partie restante répertorie certains détails sur la fenêtre, y compris la position. La sed
commande correspond et renvoie uniquement la x,y
valeur de position.
Par exemple, exécuter la commande en haut sur mon 16ème écran virtuel (de 4 par 4), avec un "TODO" gvim
sur l'écran 1:
$ xdotool search --onlyvisible --class 'gvim' getwindowpid %@ | xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry | sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
-7653,-4732
*) Avertissement: je préfère le code de @ t7ko. Beaucoup!
xdotool
suce ... c'est une opération si simple et il n'y a aucun moyen de le faire avec élégance.