Kabukta Pencere boyutunu al


18

Bir kabuk komut dosyasından geçerli pencerenin boyutunu almak istiyorum ...

Gerçekten söyleyecek çok şey yok ... wmctrl kullanmayı tercih ederim.

Yanıtlar:


23
wmctrl -lG

Size şöyle bir şey verecek:

oli@bert:~$ wmctrl -lG
0x0384c0d5 -1 1590 1030 330  170  bert N/A
0x01200023 -1 0    0    3840 1200 bert x-nautilus-desktop
0x01000003 -1 3840 2352 1920 24   bert Bottom Expanded Edge Panel
0x01000028 -1 0    2352 1920 24   bert Bottom Expanded Edge Panel
0x0500003e  0 676  252  1404 1015 bert Chromium
0x02e00021  0 3860 160  1361 1084 bert Liferea
0x02000047  0 6650 940  506  683  bert Social broadcast messages
0x04600004  0 4546 460  1263 833  bert oli@bert: ~

Bununla bunları yapabilirsiniz grepve cutaşağı yapabilirsiniz , böylece geometri değerleriyle (sütun 3-6) kalırsınız.

Sütunların tam olarak ne olduğunu anlayabilmeniz için man sayfasını alıntılamak için :

-l

Pencere yöneticisi tarafından yönetilen pencereleri listeleyin. Her pencere için bir satır çıkar ve satır boşlukla ayrılmış sütunlara bölünür. İlk sütun her zaman onaltılık bir tamsayı olarak pencere kimliğini içerir ve ikinci sütun her zaman masaüstü numarasını içerir (yapışkan bir pencereyi tanımlamak için -1 kullanılır). -P seçeneği belirtilirse, bir sonraki sütun ondalık sayı olarak pencere için PID değerini içerir. -G seçeneği belirtilirse, dört tamsayı sütunu izler: x-ofseti, y-ofseti, genişlik ve yükseklik. Sonraki sütun her zaman istemci makine adını içerir. Satırın geri kalan kısmı pencere başlığını içerir (muhtemelen başlıkta birden çok boşluk bulunur).


Bunu kullanacağım!
Allan

1
Bilgisayarınızın bert olarak adlandırılmasını seviyorum :)
drnessie

5

Wmctrl doğrudan etkin pencere kimliği bulmak için herhangi bir seçenek olmadığına inanıyorum . Birisi nasıl yapılacağını biliyorsa, bilmek istiyorum .. Bu, aktif pencerenin boyutunu yazdıran birkaç komut dosyası olduğunu söyledi.

Bu: wmctrl + xdotool ... (sed kullanmıyor).

id=$(xdotool getactivewindow)
wmctrl -lpG | while read -a a; do w=${a[0]}; if (($((16#${w:2}))==id)) ; then echo -n "${a[5]} ${a[6]}"; break; fi; done

Bu: xwininfo + xdotool + sed

xwininfo parçası x11-utils

set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p" \
        -e "s/^ \+Height: \([0-9]\+\).*/\1/p")
echo -n "$1 $2"

2

xpropVeya tuşunu kullanın xwininfo. Her ikisi de varsayılan olarak gelir, kurulum gerekmez

Kullanım örnekleri:

Her iki komut da belirli bir pencerenin seçilmesine izin vermek için imleci kare / çarpıya çevirir.

$ xprop _NET_WM_OPAQUE_REGION                                                          
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377


$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'                         
 984
 377

Alternatif olarak, komut satırındaki pencere XID biçiminde belirtilebilir

$ xprop _NET_WM_OPAQUE_REGION -id 83886090                                             
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377

$ xwininfo -id 83886090 | awk -F ':' '/Width/ || /Height/{print $2}'            
 984
 377

Bunların kullanıldığı diğer gönderiler

Özellikle, xwininfobu AskUbuntu soruları gibi senaryolar için benim tarafımdan aktif olarak kullanıldı:


Ortak, bir örnek ekleyin;)
AB

Onları bir yıl sonra ekledi;) Ama hiç olmadığı kadar iyi, değil mi?
Sergiy Kolodyazhnyy

0

Kabuk komut dosyaları pencereleri bilmez veya umursamaz. En iyi ihtimalle bir terminalde çalışırlar (bir pencerede görüntülenebilir veya görüntülenmeyebilir). Terminalin genişliğini ve yüksekliğini karakterlerle almak istiyorsanız, stty yardımcı programını kullanın.


2
Şüphesiz bir kabuk betiği X istemcilerini geometrileri için bir şekilde sorgulayabilir mi? Yoksa X uygulamaları nasıl yazılır?
djeikyb

@ djeikyb X istemcisi olarak yazılır ve X sunucusuyla iletişim kurarlar. Kabuk komut dosyaları, bir X sunucusuna sahip bir ortamda çalışabilen veya çalışamayan bir kabukta çalışır ve X ile ilgilenmemelidir.
psusi

2
Anlaşılır şekilde, evet. Ancak geçici çözümler var! Repo'dan bir paket olan wmctrl kullanarak, çalışma alanını taşıyabilir, yeniden boyutlandırabilir, en aza indirebilir ve hatta değiştirebilirsiniz!
drnessie

@ Psusi'nin mantığı ile masaüstü ortamları mevcut olmamalıdır. Sonuçta, onlar sadece X için yazılan yazılımla etkileşime giren büyük bir komut dosyası koleksiyonudur.
andyn

0

tput colsOldukça güzel buldum !


2
Katkınız için teşekkürler. Cevabınızı geliştirmenizi öneririm: ne yaptığını açıklayın, satır sayısını alma komutunu da değiştirin. Belki sonuçların bir kabuk betiğinde nasıl kullanılacağını göster. - Örnek olarak en çok puan alan cevaplara bakınız.
guntbert

OP'den bahsetmişken wmctrl, konsoldan değil grafiksel ortam pencerelerinden bahsediyoruz.
andyn

0

3 ekran var, bu çıktı boyutları ile 3 satır:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
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.