我想从 shell 脚本中获取当前窗口的大小...
真的没有什么可说的...我更喜欢使用 wmctrl。
答案1
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 列)。
引用手册页这样您就可以清楚地了解这些列是什么:
-l
列出窗口管理器管理的窗口。每个窗口输出一行,行被分成空格分隔的列。第一列始终包含窗口标识(十六进制整数),第二列始终包含桌面编号(-1 用于标识粘性窗口)。如果指定了 -p 选项,下一列将包含窗口的 PID(十进制整数)。如果指定了 -G 选项接下来是四个整数列:x 偏移量、y 偏移量、宽度和高度。下一列始终包含客户端计算机名称。行的其余部分包含窗口标题(标题中可能包含多个空格)。
答案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 问题上:
答案3
我相信 wmctrl 可以不是有任何选择来找到积极的窗口 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"
答案4
我发现tput cols
工作相当好!