İşte UNIX yoluna bağlı başka bir çözüm!
İlk bakışta seninki kadar güzel değil, @ 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'
Ama benimle kal! İçinde gizli bir güzellik var.
Kısacası,
- iki boyut yerine bir ağaç yapısı yerine doğrusal bir yapıya sahiptir.
- daha iyi bilinen kabuk sözdizimini kullanır .
- aslında sorunuzu cevaplıyor: Pencereyi bulur .
(Bu noktaların avantaj olup olmadığı bağlama bağlıdır - sadece bu yönü görmezden gelelim * .)
Adım adım daha kolay anlaşılmasını sağlamak için aynı kodu aşağıdaki daha yapılandırılmış düzende göstereceğim.
Ancak girintinin komutu açıklamak olduğuna dikkat edin - iç içe geçmeyi göstermez veya hepsi, hepsi hala doğrusal bir UNIX boru hattıdır.
Aynı komut, borulardan sonra bölünür ( |):
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'
Tam komut, yukarıda gösterildiği gibi, gvimgeçerli (muhtemelen sanal) ekranın sol üst köşesine göre piksel koordinatlarını , dört veya dört sanal ekranın ilkinde olduğu x,ygibi 42,433veya belki de pencerenin piksel konumunu verir. -5375,-3809ve mevcut olan sağ tarafta bir yerlerde.
Şimdilik, sadece bir X11 pencere kimliği bulma komutunu kısaltacağım - belki de OP tarafından gerçekten ihtiyaç duyulan şey bu değil, emin değilim:
Kısaltılmış komut boru hattı, her satırda ayrı bir kabuk komutu:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO'
Şimdi, okunabilir olmaya başlıyor:
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool search --all --pid {} --name 'TODO'
xdotoolKomut search"ile pencereleri bulmak için kullanılan sınıfın " gvimbazı "iç" pencereleri dışarıda bırakarak. Sonuç PID's olarak listelenir (işlem tanımlayıcıları).
Her biri için PID, xargsbaşka çalışır xdotool searchörneğimiz modeli için "adı" kontrol TODOiçin kontrol ettikten sonra - PID.
(Her ihtimale karşı: Devam çizgileri olarak \adlandırılan - ile biten satırların, aslında yeni satırdan \önce boşlukla bitmesi ve boşluk olmaması gerekir .)
Şimdi orijinal komuta geri dönelim:
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'
Kalan kısım, konum da dahil olmak üzere pencere hakkında bazı ayrıntıları listeler. sedKomut maçları ve iadeler sadece x,ykonum değeri.
Örneğin, 16. sanal ekranımda (4'ten 4'e kadar) üstteki komutu gvimekran 1'de "TODO" ile çalıştırmak:
$ 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
*) Feragatname: @ t7ko'nun kodunu tercih ederim. Çok!
xdotoolberbat ... Bu çok basit bir işlem ve zarif bir şekilde yapmanın bir yolu yok.