在 shell 中获取窗口大小

在 shell 中获取窗口大小

我想从 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

使用xpropxwininfo。两者都是默认的,无需安装

使用示例:

这两个命令都会将光标变成方块/十字形,以允许选择特定的窗口。

$ 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工作相当好!

相关内容