Mit xdotool können Sie mit dem Unterbefehl search nach Windows suchen. Ich muss ein Fenster suchen, das die Klasse 'gvim' und den Titel mit dem Wort 'TODO' enthält. Wie mache ich das?
Was ich versucht habe:
- Sie können dies tun
xdotool search --name --class
, es wird jedoch nur ein Muster für Name und Titel akzeptiert . - xdotool unterstützt die Befehlsverkettung, aber ich konnte keine Möglichkeit finden, zwei Suchaufrufe zu verketten - der zweite überschreibt einfach den ersten.
xdotool
saugt ... das ist so eine einfache Operation und es gibt keine Möglichkeit, es elegant zu machen.Antworten:
Meine xdotool-Hilfe informiert mich darüber, dass Ihre beiden Switches identisch sind (xdotool Version 3.20150503.1).
und als solche macht nichts. Mein xdotool macht dasselbe wie deins mit dem Ersetzen des Fensterstapels, also habe ich es mit einem Shell-Skript gemacht. Ein Shell-Skript, das das tut, was Sie wollen, wird unten geliefert:
Die Sternchen in der if-Anweisung sind vorhanden, um eine Teilstring-Übereinstimmung für durchzuführen
TODO
, damit sie überall im Titel auftreten kann.quelle
Ich konnte eine Kurz- und Unix-Lösung identifizieren:
quelle
Hier ist eine weitere Lösung, die dem UNIX-Weg entspricht!
Auf den ersten Blick ist es nicht so schön wie deins, @ t7ko:
Aber ertrage es mit mir! Es ist eine verborgene Schönheit darin.
Kurz gesagt, es
(Ob diese Punkte Vorteile sind, hängt vom Kontext ab - ignorieren wir diesen Aspekt einfach * .)
Ich werde den gleichen Code in einem strukturierteren Layout unten zeigen, um das Verständnis Schritt für Schritt zu erleichtern.
Beachten Sie jedoch, dass der Einzug den Befehl erklären soll - er zeigt keine Verschachtelung an oder so, alles ist immer noch eine lineare UNIX-Pipeline.
Der gleiche Befehl, nur nach den pipes (
|
) geteilt:Der vollständige Befehl gibt, wie oben gezeigt, die Pixelposition des
gvim
Fensters an und gibt Pixelkoordinaten relativ zur oberen linken Ecke des aktuellen (möglicherweise virtuellen) Bildschirms zurückx,y
, wie42,433
oder vielleicht,-5375,-3809
wenn er sich auf dem ersten von vier mal vier virtuellen Bildschirmen befindet und der aktuelle ist irgendwo unten auf der rechten Seite.Im Moment werde ich den Befehl verkürzen, um nur eine X11-Fenster-ID zu finden - vielleicht ist das alles, was das OP tatsächlich benötigt, nicht sicher:
Die verkürzte Befehlspipeline, ein separater Shell-Befehl in jeder Zeile:
Jetzt beginnt es lesbar zu werden:
Der
xdotool
Befehlsearch
wird verwendet, um Fenster mit der " Klasse " zu findengvim
, wobei einige "interne" Fenster weggelassen werden. Das Ergebnis wird alsPID
's (Prozesskennungen) aufgeführt.Für jeden
PID
,xargs
läuft eine anderexdotool search
, den „Namen“ für unser Beispiel - Pattern - PrüfungTODO
- nach für die ÜberprüfungPID
.(Nur für den Fall: Die Zeilen, die mit
\
- als Fortsetzungszeilen bezeichnet - enden, müssen tatsächlich mit\
und ohne Leerzeichen vor der neuen Zeile enden.)Nun zurück zum ursprünglichen Befehl:
Der verbleibende Teil listet einige Details zum Fenster auf, einschließlich der Position. Der
sed
Befehl stimmt überein und gibt nur denx,y
Positionswert zurück.Beispiel: Führen Sie den Befehl oben auf meinem 16. virtuellen Bildschirm (4 x 4) mit einem "TODO"
gvim
auf Bildschirm 1 aus:*) Haftungsausschluss: Ich bevorzuge den Code von @ t7ko. Viel!
quelle
--onlyvisible
ist schön. Hat mir bei einem ähnlichen Problem geholfen. Thunderbird kann mit 14 Fenstern beginnen und nur ein oder zwei befinden sich auf dem Desktop. Ich habe keine Ahnung, wofür die anderen sind. Übrigens können nur sichtbare Mittel angezeigt werden - nicht nur sofort auf dem aktuellen Desktop.Kurze und elegante Antwort (die verwendet
wmctrl
):Die resultierende Fenster-ID ist hexadezimal, daher müssen Sie sie in eine Dezimalzahl konvertieren (verwendet von
xdotool
):Dann kannst du was auch immer machen
xdotool
.quelle
wmctrl
Handbuch sagt, dass-l
nicht Fensterklasse druckt, nur Titel; Ihr Code-Snippet löst also nicht mein Problem "Suche nach Titel UND Klasse".wmctrl -lx
bietet die Klasse.