xdotool vous permet de rechercher des fenêtres à l'aide de sa sous-commande de recherche. J'ai besoin de localiser une fenêtre, qui a la classe 'gvim' et le titre contenant le mot 'TODO'. Comment puis-je faire cela?
Ce que j'ai essayé:
- Vous pouvez le faire
xdotool search --name --class
, mais il n'accepterait qu'un seul modèle pour le nom et le titre. - xdotool prend en charge le chaînage de commandes, mais je n'ai pas trouvé de moyen de chaîner deux appels de recherche - le second remplace simplement le premier.
xdotool
suce ... c'est une opération si simple et il n'y a aucun moyen de le faire avec élégance.Réponses:
Mon aide xdotool m'informe que vos deux commutateurs sont identiques (xdotool version 3.20150503.1),
et en tant que tel ne fait rien. Mon xdotool fait la même chose que la vôtre en remplaçant la pile de fenêtres, donc je l'ai fait avec un script shell. Un script shell faisant ce que vous voulez est fourni ci-dessous:
Les astérisques de l'instruction if sont là afin de faire une correspondance de sous-chaîne pour
TODO
qu'elle puisse apparaître n'importe où dans le titre.la source
J'ai pu identifier une solution courte et unix:
la source
Voici une autre solution adhérant à la méthode UNIX!
À première vue, il n'est pas aussi beau que le vôtre, @ t7ko:
Mais supporte-moi! Il y a une beauté cachée en elle.
Bref, il
(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 (
|
):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) commex,y
, comme42,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:
Maintenant, il commence à être lisible:
La
xdotool
commandesearch
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é commePID
'(identificateurs de processus).Pour chacun
PID
, enxargs
exécute un autrexdotool search
, en vérifiant le "nom" pour notre exemple de modèleTODO
- après avoir vérifié lePID
.(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:
La partie restante répertorie certains détails sur la fenêtre, y compris la position. La
sed
commande correspond et renvoie uniquement lax,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:*) Avertissement: je préfère le code de @ t7ko. Beaucoup!
la source
--onlyvisible
est agréable. M'a aidé avec un problème similaire. Thunderbird peut démarrer avec 14 fenêtres et seulement une ou deux sont sur le bureau. Je ne sais pas à quoi servent les autres. BTW seuls les moyens visibles peuvent être affichés - pas seulement immédiatement affichés sur le bureau actuel.Réponse courte et élégante (qui utilise
wmctrl
):L'ID de fenêtre résultant est en hexadécimal, vous devez donc le convertir en décimal (utilisé par
xdotool
):Ensuite, vous pouvez faire quoi que ce soit avec
xdotool
.la source
wmctrl
le manuel indique qu'il-l
n'imprime pas la classe de fenêtre, seulement le titre; donc votre extrait de code ne résout pas mon problème "recherche par titre ET classe".wmctrl -lx
ne fournit la classe.