用 bash 计算 Linux 上的最小化 windows
Count the minimized windows on Linux with bash
我正在尝试构建一个脚本来检查 XFCE 下的 windows 在显示我选择的 window 之前是否已最小化(它是一个更大项目的一部分)
我尝试用 wmctrl 恢复打开 windows 的计数
但这些不是最小化的 windows :
CURRWORKSPACE=$(wmctrl -d | grep '*' | cut -d ' ' -f1)
OPENWINDOWS=$(wmctrl -l | cut -d ' ' -f3 | grep $CURRWORKSPACE | wc -l)
我也尝试使用 xdotool,但没有成功:(
我想知道您是否知道获取此信息的任何方法。
我在使用 XFCE,但使用任何工具的另一种方式会很棒
非常感谢!
给定 window 及其由 wmctrl
列出的 ID,您可以使用以下函数来确定 window 是否已最小化。请注意 minimized windows 在 X 中称为 iconic。
# usage: isMinimized <windowId>
# returns status 0 if and only if window with given id is minimized
isMinimized() {
xprop -id "" | grep -Fq 'window state: Iconic'
}
为了计算打开 windows,您可以遍历 window 个 ID 的列表。
openWindows() {
count=0
for id in $(wmctrl -l | cut -f1 -d' '); do
isMinimized "$id" || ((count++))
done
echo $count
}
至少在我的桌面环境 (Cinnamon) 中,某些 "windows" 始终处于打开状态。例如,这些 windows 是桌面。我通过在循环之前过滤掉这些 windows 来调整函数。因为它们很粘而且我通常不使用粘性 windows 我只是忽略了所有粘性 windows: $(wmctrl -l | grep -vE '^0x\w* -1' | cut -f1 -d' ')
.
您可以根据需要调整过滤条件。在这种情况下,所有 workspaces/desktops 上的所有打开和非粘性 windows 都被计算在内。
我正在尝试构建一个脚本来检查 XFCE 下的 windows 在显示我选择的 window 之前是否已最小化(它是一个更大项目的一部分)
我尝试用 wmctrl 恢复打开 windows 的计数 但这些不是最小化的 windows :
CURRWORKSPACE=$(wmctrl -d | grep '*' | cut -d ' ' -f1)
OPENWINDOWS=$(wmctrl -l | cut -d ' ' -f3 | grep $CURRWORKSPACE | wc -l)
我也尝试使用 xdotool,但没有成功:(
我想知道您是否知道获取此信息的任何方法。 我在使用 XFCE,但使用任何工具的另一种方式会很棒
非常感谢!
给定 window 及其由 wmctrl
列出的 ID,您可以使用以下函数来确定 window 是否已最小化。请注意 minimized windows 在 X 中称为 iconic。
# usage: isMinimized <windowId>
# returns status 0 if and only if window with given id is minimized
isMinimized() {
xprop -id "" | grep -Fq 'window state: Iconic'
}
为了计算打开 windows,您可以遍历 window 个 ID 的列表。
openWindows() {
count=0
for id in $(wmctrl -l | cut -f1 -d' '); do
isMinimized "$id" || ((count++))
done
echo $count
}
至少在我的桌面环境 (Cinnamon) 中,某些 "windows" 始终处于打开状态。例如,这些 windows 是桌面。我通过在循环之前过滤掉这些 windows 来调整函数。因为它们很粘而且我通常不使用粘性 windows 我只是忽略了所有粘性 windows: $(wmctrl -l | grep -vE '^0x\w* -1' | cut -f1 -d' ')
.
您可以根据需要调整过滤条件。在这种情况下,所有 workspaces/desktops 上的所有打开和非粘性 windows 都被计算在内。