Komut satırında bir pencerenin konumunu (masaüstünde) nasıl bulabilirim?


19

Klavye kısayolları aracılığıyla pencerelerimi yönetmeye yardımcı olacak küçük bir komut dosyası yazmaya çalışıyorum.

İstediğimi yapabilmek için "aktif" (odaklanmış) pencerenin geçerli konumunu ve boyutunu bulabilmem gerekiyor. Konuma göre, masaüstündeki pencerenin X, Y koordinatlarını ve boyuta göre pencerenin yüksekliğini ve genişliğini kastediyorum.

Bu bilgileri alabilecek bir komut satırı yardımcı programı var mı?

Yanıtlar:


22

Bu komutu kullanarak geçerli etkin pencerenin tüm bilgilerini alabilirsiniz:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

veya

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

Çıktıyı ihtiyacınız olan koordinatlar için ayrıştırın. Windows ile etkileşime girerken bazı yararlı komutlar şunlardır:

  • xwininfo size göreceli ve mutlak geometri verecektir.
  • xprop , pencerenin etkin olup olmadığı da dahil olmak üzere çok fazla bilgi söyleyecektir, ancak geometrisi değil
  • xdpyinfo size aktif pencerenin kimliğini de alır, ancak fazladan bilgi vermez.
  • wmctrl , pencereler hakkında bir bilgi listesi alır ve değişiklik için etkin pencereyi seçmenize izin verir, ancak bilgi almaz.

Örneğin, etkin pencerenin başlığını "Yeni Ad" olarak değiştirmek için:

wmctrl -r :ACTIVE: -N "New Name"

Veya etkin pencerenin konumunu değiştirmek için:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

wmctrlPencerenin geometrisi gibi basit bir şeyi değiştirmeniz gerekip gerekmediğini düşünün . Yukarıda belirtilen diğer komut dosyalarını yalnızca daha karmaşık şeyler yapmak istiyorsanız kullanmayı düşünün.


1
Sadece ikinci komutu çalıştırırken farklı sonuçlar aldığımı belirtmek isterim. İlki beklediğim gibi çalışıyor.
TM.

1
Arch kullanıyorum ama gelecekte birisine yardımcı olabilir. Birincisi benim için çalışmadı, ikincisi belki WM nedeniyle doğru boyutları vermedi. Ama ikisinin kombinasyonu çalıştı. xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
Sev

Teşekkürler! Ama ilk iki yoruma katılıyorum. İkinci komut, xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)Terminalimin alt penceresini (adı yok) gösteriyor. Ben sadece xdpyinfo | grep focusolsun focus: window 0x435b877, revert to Parent, ve 0x435b877 ilk komut (bu benim için çalışır) tarafından döndürülen pencerenin kimliğidir. Bu üzerinde Güvenilir 14.04.1 LTS
nealmcb

8

"Xdotool" ile klavye veya fare olaylarını kullanarak pencerelerle kolayca etkileşim kurabilirsiniz.

CtrlCEtkin pencereye sıra gönderme örneği :

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

Gerçekten pencere konumuna ihtiyacınız varsa:

eval $(xdotool getmouselocation --shell); echo $X $Y

Daha fazla işlem / seçenek için kılavuz sayfasını kontrol edin .


İlginç, ama anladım Error: Invalid key sequence 'ctrl-c'.
l0b0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.