Посчитайте свернутые окна в Linux с помощью bash

Я пытаюсь создать скрипт, который проверяет, что окна в XFCE свернуты, прежде чем отображать выбранное мной окно (это часть более крупного проекта)

Я попытался восстановить количество открытых окон с помощью wmctrl, но это не свернутые окна:

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

Я тоже пытаюсь с xdotool, но безуспешно:(

Мне было интересно, знаете ли вы какой-нибудь способ получить эту информацию. Я на XFCE, но другой способ с любым инструментом был бы отличным

Большое спасибо!

1 ответ

Решение

Учитывая окно и его идентификатор, как указано в wmctrl Вы можете использовать следующую функцию, чтобы определить, свернуто ли это окно. Обратите внимание, что свернутые окна в 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'
}

Для подсчета открытых окон вы можете перебрать список идентификаторов окон.

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

Вы можете настроить фильтрацию в соответствии с вашими потребностями. В этом случае учитываются все открытые и неприлипающие окна на всех рабочих пространствах / рабочих столах.

Другие вопросы по тегам