【问题标题】:Count the minimized windows on Linux with bash使用 bash 计算 Linux 上最小化的窗口
【发布时间】:2018-10-20 14:35:54
【问题描述】:

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

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

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

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

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

非常感谢!

【问题讨论】:

  • 我不认为bash 是最适合这项工作的工具,伙计。
  • 我也觉得,有什么想法吗?
  • 我对 xfce 或 gnome 的编程不太熟悉,但我想 python 更接近你想要的?这只是一个猜测。

标签: linux bash xdotool wmctrl


【解决方案1】:

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

# 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' ')

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

【讨论】:

    猜你喜欢
    • 2019-01-31
    • 2018-08-24
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多