コマンドラインからXウィンドウの境界線の幅を取得するには?

コマンドラインからXウィンドウの境界線の幅を取得するには?

xdotoolxwininfoおよびを試しましたが、xpropすべて境界線の幅を含まないウィンドウのコンテンツサイズを返すようです。この境界線の幅を見つけるためのコマンドラインツールはありますか?このツールは、さまざまなEWMH互換ウィンドウマネージャで動作できることを願っています。

答え1

xwininfo -tree -rootウィンドウマネージャに応じて、すべてのウィンドウ階層を一覧表示し、ターゲットウィンドウからウィンドウマネージャがターゲットの周囲に配置するウィンドウフレームまでツリーを操作するために使用できます。

次のスクリプトはこの操作を繰り返し実行します。xwininfo -treeターゲットペインでのみ実行して親ペインを見つけ、親ペインがルートペイン()になるまでツリーをステップごとに上に移動するプロセスを繰り返しますParent window id: ...(the root window)。ルートの親ウィンドウが希望のフレームであるとします。

追加すると、-statsウィンドウの幅と高さに簡単にアクセスできます。たとえば、xterm724 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

xwdtppnmnetpbmパッケージから

関連情報