如何从bash脚本确定窗口是最大化还是最小化

v01*_*dya 12 command-line window-manager xdotool wmctrl xprop

我有一个 bash 脚本,可以在双屏设置中将我的窗口从左屏幕移动到右屏幕。目前它的工作方式是循环浏览由 给出的窗口 id,xdotool search --onlyvisible --maxdepth 2 --class ""然后将它们向右移动屏幕宽度。它已经有效......除非有问题的窗口最大化或最小化。

所以需要的是一种检查窗口当前状态的方法。我找到了一个答案,提供了添加和删除这些位的方法,但是检查它们是否已经设置的方法在哪里?

如果无法通过xdotool 执行,则应该可以重用上述命令提供的窗口 ID。

Jac*_*ijm 12

检索有关窗口状态的信息

您可以从命令中获取信息(以及更多信息):

xprop -id <window_id>
Run Code Online (Sandbox Code Playgroud)

要获得您特别需要的内容:

xprop -id 0x04c00010 | grep "_NET_WM_STATE(ATOM)"
Run Code Online (Sandbox Code Playgroud)

输出将如下所示:

_NET_WM_STATE(ATOM) = _NET_WM_STATE_MAXIMIZED_HORZ, _NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_HIDDEN
Run Code Online (Sandbox Code Playgroud)

在最大化 (h + v) 和同时最小化的窗口上,或者只是

_NET_WM_STATE(ATOM) =
Run Code Online (Sandbox Code Playgroud)

(或根本没有输出)如果这些都不是。

更多乐趣

当然,使用各种语言,您可以使用Wnck,就像下面的 python 片段一样。(来自window-shuffler 的片段)。该代码段输出一个列表,显示窗口名称 +TrueFalse(最小化)。

xprop -id <window_id>
Run Code Online (Sandbox Code Playgroud)

输出看起来像:

xprop -id 0x04c00010 | grep "_NET_WM_STATE(ATOM)"
Run Code Online (Sandbox Code Playgroud)

NB

  • 很好的建议+1。作为评论,我尝试了它(在Linux,X11下)并得到了略有不同的结果。当窗口既不隐藏也不最大化时,“_NET_WM_STATE(ATOM)”不会(如答案所示)显示为空值。相反,它根本不在输出中。 (2认同)