linux - 使用 bash 计算 Linux 上最小化的窗口

标签 linux bash xdotool wmctrl

我正在尝试构建一个脚本来检查 XFCE 下的窗口在显示我选择的窗口之前是否已最小化(它是一个更大项目的一部分)

我试图用 wmctrl 恢复打开窗口的计数 但这些不是最小化的窗口:

CURRWORKSPACE=$(wmctrl -d | grep '*' | cut -d ' ' -f1)
OPENWINDOWS=$(wmctrl -l | cut -d ' ' -f3 | grep $CURRWORKSPACE | wc -l)

我也尝试使用 xdotool,但没有成功 :(

我想知道您是否知道任何获取此信息的方法。 我在 XFCE 上,但使用任何工具的另一种方式会很棒

非常感谢!

最佳答案

给定一个窗口及其由 wmctrl 列出的 ID,您可以使用以下函数来确定该窗口是否已最小化。请注意,最小化 窗口在 X 中称为图标

# usage: isMinimized <windowId>
# returns status 0 if and only if window with given id is minimized
isMinimized() {
    xprop -id "$1" | grep -Fq 'window state: Iconic'
}

为了计算打开的窗口,您可以遍历窗口 ID 列表。

openWindows() {
    count=0
    for id in $(wmctrl -l | cut -f1 -d' '); do
        isMinimized "$id" || ((count++))
    done
    echo $count
}

至少在我的桌面环境 (Cinnamon) 上,一些“窗口”总是打开的。这些窗口例如是桌面。我通过在循环之前过滤掉这些窗口来调整功能。因为它们是粘性的,我通常不使用粘性窗口,所以我忽略了所有粘性窗口:$(wmctrl -l | grep -vE '^0x\w* -1' | cut -f1 -d' ')

您可以根据需要调整过滤条件。在这种情况下,所有工作区/桌面上的所有打开和非粘性窗口都被计算在内。

关于linux - 使用 bash 计算 Linux 上最小化的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52906771/

相关文章:

svn - 如何检查提交给 SVN 的文件是否使用预提交 Hook 以 UTF-8 编码?

linux - 如何从电子应用程序的 PID 中获取 Windowid

bash - xdotool - 为什么在运行命令之前要 sleep ?

linux - 与进程的双向通信

linux - Geany:如何查找和计数?

linux - 不能在 awk 命令中使用 "["符号

linux - 如何使用 xdotool 打开新选项卡,切换到它并在其中运行命令

linux - GNU makefile 中的 Qt 资源

python - 您如何使用 vi(或其他编辑器)作为另一个命令的一部分来编辑某些内容并将其返回给该命令?

linux - bash 脚本 : find and replace multiword string