現在のウィンドウのサイズをシェルスクリプトから取得したい...
本当に他に言うことはあまりありません... wmctrlを使用したいと思います。
wmctrl -lG
次のようなものを提供します:
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: ~
これにより、grep
およびcut
を下に落とすことができるため、ジオメトリ値(列3〜6)が残ります。
manページ を引用して、列が何であるかを正確に理解する:
-l
ウィンドウマネージャによって管理されているウィンドウを一覧表示します。ウィンドウごとに1行が出力され、その行はスペースで区切られた列に分割されます。最初の列には常に16進整数としてウィンドウIDが含まれ、2番目の列には常にデスクトップ番号が含まれます(スティッキーウィンドウの識別には-1が使用されます)。 -pオプションが指定されている場合、次の列にはウィンドウのPIDが10進整数として含まれます。 -Gオプションが指定されている場合、x-offset、y-offset、width、heightの4つの整数列が続きます。次の列には常にクライアントマシン名が含まれます。行の残りの部分には、ウィンドウのタイトルが含まれます(タイトルに複数のスペースが含まれる場合があります)。
WmctrlにはnotにはactiveウィンドウIDを直接見つけるためのオプションがあります。
誰かがそれを行う方法を知っているなら、私は知りたいと思います。
とはいえ、アクティブウィンドウのサイズを出力するスクリプトをいくつか紹介します。
これは、wmctrl + xdotool ...(sedを使用しない)です。
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
これは、xwininfo + xdotool + sedです。
xwininfo
は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"
xprop
またはxwininfo
を使用します。どちらもデフォルトでインストールされ、インストールは不要です
両方のコマンドは、特定のウィンドウを選択できるようにカーソルを正方形/十字に変えます。
$ xprop _NET_WM_OPAQUE_REGION
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
または、コマンドラインでXID形式でウィンドウを指定できます
$ 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
特に、xwininfo
は、次のAskUbuntuの質問などで、私がscripsに積極的に使用しています。
tput cols
が非常にうまく機能することがわかりました!
シェルスクリプトは、ウィンドウを認識または気にしません。せいぜい端末で実行されます(ウィンドウに表示される場合とされない場合があります)。端末の幅と高さを文字で取得する場合は、sttyユーティリティを使用します。