如何使用 wmctrl 检查某个 WM_ICON_NAME(STRING) 是否存在?

如何使用 wmctrl 检查某个 WM_ICON_NAME(STRING) 是否存在?

我正在使用 I3 并使用 WM_ICON_NAME(STRING) 来识别我的窗口。

我正在寻找与此类似的东西,但带有 WM_ICON_NAME(STRING)。有可能实现这一点吗?谢谢。

if test $(wmctrl -l | grep "name of my window" 2>&1 | wc -l) -eq 1; then 
    echo "the window exists"
fi

答案1

使用的工具并不多,WM_ICON_NAME因为它通常被假设设置为与 相同WM_NAME。您可以列出所有窗口 ID 并xprop在每个窗口上运行以获取一行,例如

WM_ICON_NAME(STRING) = "myname"

然后使用awk(或类似的)提取其中的引用部分并将其与所需的字符串进行比较。下面是一个 bash 函数,findicon它使用一个参数来执行此操作:

findicon(){ 
    local myname=${1?}
    wmctrl -l |
    while read id rest
    do xprop -id "$id" WM_ICON_NAME
    done |
    awk -F'"' -v myname="$myname" '
        {if($2==myname)found=1} 
        END {exit !found}'
}

if findicon 'my icon name'
then echo 'found'
fi

答案2

您可以xdotool通过类名称和标题来搜索现有窗口。

if xdotool search --name "name of my window" > /dev/null; then
    echo "Window found"
else
    echo "Window not found"
fi

在上面的代码示例中,如果有一些窗口的标题包含xdotool,命令将返回退出状态0和找到的窗口 ID 的列表"name of my window"

相关内容