xdotool
、xwininfo
およびを試しましたが、xprop
すべて境界線の幅を含まないウィンドウのコンテンツサイズを返すようです。この境界線の幅を見つけるためのコマンドラインツールはありますか?このツールは、さまざまなEWMH互換ウィンドウマネージャで動作できることを願っています。
答え1
xwininfo -tree -root
ウィンドウマネージャに応じて、すべてのウィンドウ階層を一覧表示し、ターゲットウィンドウからウィンドウマネージャがターゲットの周囲に配置するウィンドウフレームまでツリーを操作するために使用できます。
次のスクリプトはこの操作を繰り返し実行します。xwininfo -tree
ターゲットペインでのみ実行して親ペインを見つけ、親ペインがルートペイン()になるまでツリーをステップごとに上に移動するプロセスを繰り返しますParent window id: ...(the root window)
。ルートの親ウィンドウが希望のフレームであるとします。
追加すると、-stats
ウィンドウの幅と高さに簡単にアクセスできます。たとえば、xterm
724 x 1069 ピクセルでは、742 x 1087 ピクセルのフレームを取得します。
$ xwininfo -tree -stats -id $WINDOWID
Parent window id: 0x8002ff (has no name)
...
Width: 724
Height: 1069
$ xwininfo -tree -stats -id 0x8002ff
Parent window id: 0x8002fe (has no name)
...
Width: 724
Height: 1069
$ xwininfo -tree -stats -id 0x8002fe
Parent window id: 0xc1 (the root window) (has no name)
...
Width: 742
Height: 1087
以下は、ウィンドウID番号をパラメータとして使用するスクリプトです。
#!/bin/bash
# http://unix.stackexchange.com/a/331516/119298
getwh(){
xwininfo -tree -stats -id "$id" |
awk '/Parent window id:/{ parent = ($0~/the root window/)?0:$4; }
/ Width:/ { w = $2 }
/ Height:/ { h = $2 }
END { printf "%s %d %d\n",parent,w,h }'
}
id=${1:-${WINDOWID?}}
set -- $(getwh "$id")
w=$2 h=$3
while id=$1
[ "$id" != 0 ]
do set -- $(getwh "$id")
done
let bw=$2-w bh=$3-h
echo "total border w and h $bw $bh"
印刷され、total border w and h 18 18
境界線の幅が対称になるようにするには、これを2で割る必要があります。そうでない場合は、たとえば、タイトルバーが大きい場合は、xオフセットとyオフセットの違いを使用して、上、下、左、右の境界を計算する必要があります。
答え2
回避策は、xwdを使用して内容をダンプし、結果の画像を測定することです。
xwd -frame | xwdtopnm | head -2
xwdtppnm
netpbmパッケージから