xdotool umożliwia wyszukiwanie okien za pomocą podkomendy wyszukiwania. Muszę znaleźć okno, które ma klasę „gvim” i tytuł zawierający słowo „TODO”. Jak mam to zrobic?
Co próbowałem:
- Możesz to zrobić
xdotool search --name --class
, ale zaakceptowałby tylko jeden wzorzec dla imienia i tytułu. - xdotool obsługuje łańcuch poleceń, ale nie mogłem znaleźć sposobu na połączenie dwóch wywołań wyszukiwania - drugie po prostu zastępuje pierwsze.
xdotool
do bani ... to taka prosta operacja i nie ma sposobu, aby zrobić to elegancko.Odpowiedzi:
Moja pomoc xdotool informuje mnie, że twoje dwa przełączniki są takie same (xdotool wersja 3.20150503.1),
i jako taki nic nie robi. Mój xdotool robi to samo co twój, zastępując stos okien, więc zrobiłem to za pomocą skryptu powłoki. Skrypt powłoki wykonujący to, co chcesz, znajduje się poniżej:
Gwiazdki w instrukcji if są tam, aby wykonać dopasowanie podłańcuchowe
TODO
, aby mogło wystąpić w dowolnym miejscu w tytule.źródło
Byłem w stanie zidentyfikować krótkie i unikalne rozwiązanie:
źródło
Oto kolejne rozwiązanie zgodne ze sposobem UNIX!
Na pierwszy rzut oka nie jest tak piękny jak twój, @ t7ko:
Ale znoś mnie! Jest w tym trochę ukrytego piękna.
Krótko mówiąc, to
(To, czy te punkty są zaletami, zależy od kontekstu - zignorujmy ten aspekt * ).
Pokażę ten sam kod w bardziej uporządkowanym układzie poniżej, aby ułatwić zrozumienie krok po kroku.
Zauważ jednak, że wcięcie ma na celu wyjaśnienie polecenia - nie oznacza to zagnieżdżenia, wszystko jest nadal liniowym potokiem UNIX.
To samo polecenie, po prostu podzielone za potokami (
|
):Pełne polecenie, jak pokazano powyżej, podaje lokalizację
gvim
okna w pikselach, zwracając współrzędne pikseli względem lewego górnego rogu bieżącego (ewentualnie wirtualnego) ekranux,y
, tak jak42,433
, a może,-5375,-3809
gdy jest on na pierwszym z czterech na czterech wirtualnych ekranach , a obecny jest gdzieś po prawej stronie.Na razie skrócę polecenie, aby znaleźć tylko identyfikator okna X11 - może to wszystko, czego faktycznie potrzebował OP, nie jestem pewien:
Skrócony potok poleceń, osobne polecenie powłoki w każdym wierszu:
Teraz zaczyna być czytelny:
xdotool
Komendasearch
służy do znalezienia okna z „ klasą ”gvim
, pozostawiając pewne „wewnętrzne” okna. Wynik jest wymieniony jakoPID
„s” (identyfikatory procesu).Dla każdego
PID
,xargs
uruchamia kolejnyxdotool search
, sprawdzając „name” dla naszego przykładowego wzorcaTODO
- po sprawdzeniu dlaPID
.(Na wszelki wypadek: linie kończące się na
\
- tak zwane linie kontynuacji - muszą faktycznie kończyć\
się znakiem spacji przed znakiem nowej linii i bez białych znaków).Teraz wróć do pierwotnego polecenia:
W pozostałej części wymieniono niektóre szczegóły dotyczące okna, w tym pozycję. Te
sed
mecze dowodzenia i powroty tylkox,y
wartość pozycji.Na przykład uruchomienie polecenia u góry na moim 16. wirtualnym ekranie (4 na 4), z „DO ZROBIENIA”
gvim
na ekranie 1:*) Zastrzeżenie: Wolę kod @ t7ko. Dużo!
źródło
--onlyvisible
jest przyjemne. Pomógł mi z podobnym problemem. Thunderbird można uruchomić z 14 oknami i tylko jedno lub dwa są na pulpicie. Nie mam pojęcia do czego służą inne. BTW mogą być wyświetlane tylko widoczne środki - nie tylko natychmiast widoczne na bieżącym pulpicie.Krótka i elegancka odpowiedź (która wykorzystuje
wmctrl
):Wynikowy identyfikator okna jest w formacie szesnastkowym, więc musisz przekonwertować go na dziesiętny (używany przez
xdotool
):Wtedy możesz zrobić cokolwiek
xdotool
.źródło
wmctrl
instrukcja mówi, że-l
nie drukuje klasy okna, tylko tytuł; więc fragment kodu nie rozwiązuje mojego problemu „szukaj według tytułu ORAZ klasy”.wmctrl -lx
zapewnia klasę.