2011-06-16 87 views
4

我想檢索X11中任何窗口的完整大小以自動調整大小。X11。如何知道窗口的大小(與其裝飾的大小)

到目前爲止,我已經使用wmctrl,但大小似乎不完整。 例如

>$ wmctrl -lG 
0x00e0000f -1 0 0 1920 1200 tclogin1 KDE Desktop 
0x010000ee -1 0 1160 1920 40 tclogin1 kicker 
0x01200008 0 4 28 1920 1127 tclogin1 ...p7zip_9.13/bin - Shell No. 8 - Konsole 

起腳高度爲40,屏幕分辨率爲1920x1200,所以如果我想調整我的Konsole採取所有屏幕,但起腳其大小應爲1920x1160(一二〇〇年至1240年)。

但是當我這樣做時,Konsole會重疊踢球者的身材。 所以我認爲這意味着Windows裝飾在這裏可能沒有考慮到。

我怎麼能知道裝飾的大小,我將不得不添加到wmctrl給出的窗口大小?

感謝

+0

我問錯了問題。我如何知道X11窗口的裝飾大小? – zoobert 2011-06-16 14:42:24

回答

3
$ cat allborders.sh 
# assumptions: 
# windows ids are at least 5 digits long 
# we dont need to bother with windows that have no name 
# "first argument" from the pipe is east (could be west) 
# 

WINDOW_IDS=`xwininfo -int -root -tree |\ 
    grep '[0-9]*\ (has no name)' -v  |\ 
    grep -Eo '[0-9]{5,}'` 

for win in $WINDOW_IDS; 
do 
    xprop -id $win |\ 
     grep -Ee '^(_NET_FRAME_EXTENTS|WM_CLASS)' |\ 
     sed 's/.*=\ //' |\ 
     sed -e :a -e '/$/N;s/\n/ /;ta' |\ 
     grep ^[0-9] |\ 
    while read line; 
    do 
     set -- $line 
     E=`echo $1|sed 's/,$//'` 
     W=`echo $2|sed 's/,$//'` 
     N=`echo $3|sed 's/,$//'` 
     S=`echo $4|sed 's/,$//'` 
     NAME=`echo $5|sed 's/,$//'` 
     CLASS=`echo $6|sed 's/,$//'` 
     echo -e "$CLASS $NAME $N $E $S $W" 
    done 
done 
$ ./allborders.sh 
"URxvt" "urxvt" 1 1 1 1 
"XTerm" "aterm" 0 0 0 0 
"XTerm" "aterm" 0 0 0 0 
"Firefox" "Navigator" 18 1 3 1 
"Gmpc" "gmpc" 18 1 3 1 
"XTerm" "aterm" 0 0 0 0 
"XTerm" "one" 0 0 0 0 
"XTerm" "aterm" 0 0 0 0 
"XTerm" "one" 0 0 0 0 
"XTerm" "aterm" 0 0 0 0 
"XTerm" "aterm" 0 0 0 0 
"XTerm" "aterm" 0 0 0 0 
"XTerm" "aterm" 0 0 0 0 
"XTerm" "aterm" 0 0 0 0 
"FbPager" "fbpager" 0 0 0 0 
+0

你如何得到裝飾品的大小,因爲這是我想要的 – zoobert 2011-06-16 15:00:44

+0

我認爲xwininfo給沒有裝飾的信息。讓我們舉個例子:我想讓firefox佔用所有的屏幕,但是在使用KDE時不會與kicker重疊。踢球者是x = 0,y = 1160,w = 1920,h = 40。所以如果分辨率是1920x1200,火狐座標和變暗應該是x = 0,y = 0,w = 1920和h = 1160。如果我這樣做,firefox重疊踢球,並在右邊的屏幕上出現一點點。正確的大小是w = 1914和h = 1128(使用wmctrl完成)。所以裝飾品是w = 6和h = 32。我如何獲得每個窗口的這些信息?感謝您的幫助 – zoobert 2011-06-17 12:25:28

+0

Alrite ...我錯了。檢查我的bash腳本。 – 2011-06-17 17:59:57