X11.Как узнать полный размер окна (с размером его украшений) - PullRequest
4 голосов
/ 16 июня 2011

Я хотел бы получить полный размер любых окон в 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

Высота Kicker равна 40, а разрешение экрана составляет 1920x1200, поэтому, если бы я хотел изменить размер Konsole, чтобы он занимал весь экран, но размер кикера должен быть 1920x1160 (1200-40).

Но когда я это делаю, Konsole перекрывает размер кикера. Поэтому я предполагаю, что это означает, что украшения окон могут быть не приняты во внимание здесь.

Как узнать размер украшений, которые мне нужно добавить к размеру окон, заданному wmctrl?

Спасибо

1 Ответ

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
...