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