İş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, gvim
geç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,y
gibi 42,433
veya belki de pencerenin piksel konumunu verir. -5375,-3809
ve 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'
xdotool
Komut search
"ile pencereleri bulmak için kullanılan sınıfın " gvim
bazı "iç" pencereleri dışarıda bırakarak. Sonuç PID
's olarak listelenir (işlem tanımlayıcıları).
Her biri için PID
, xargs
başka çalışır xdotool search
örneğimiz modeli için "adı" kontrol TODO
iç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. sed
Komut maçları ve iadeler sadece x,y
konum değeri.
Örneğin, 16. sanal ekranımda (4'ten 4'e kadar) üstteki komutu gvim
ekran 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!
xdotool
berbat ... Bu çok basit bir işlem ve zarif bir şekilde yapmanın bir yolu yok.