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