Как узнать, отображено (видимо) ли окно X или нет?

Как узнать, отображено (видимо) ли окно X или нет?

Я использую xdotool для сопоставления/отмены сопоставления набора окон типа dock. Теперь, xdotool не поставляется с командой переключения (map/unmap), и не поставляется с выполнением той же операции с несколькими окнами одновременно. Поэтому я пытаюсь выполнить дублированное переключение с помощью скрипта. Мне нужен способ узнать, была ли последняя операция сопоставлением или отменой сопоставления.

решение1

В некотором смысле, файлы можно рассматривать как простой способ хранения глобальных переменных, глобальных, чтобы они были видны отовсюду. Таким образом, состояние (отображено/неотображено) можно хранить как строку в файле.

Не самая элегантная вещь, но этот скрипт (названный xctl) на данный момент должен подойти.

#!/usr/bin/env zsh

# This file serves as a global variable value holder showing if the windows are mapped or not.
state=/tmp/state

for process in ${@:1}; do
    case $1 in
        (show) xdotool search --class $process windowmap %@ windowraise %@;;
        (hide) xdotool search --onlyvisible --class $process windowunmap %@;;
        (*) break;;
    esac
done

[[ $1 == toggle ]] && {
    [[ -f $state ]] && [[ `cat $state` == show ]] && xctl hide ${@:1} || xctl show ${@:1}
} || echo $1 > $state

Чтобы переключить набор окон, запустите xctl toggle window1 window2 ....

Скрипт должен находиться в пути оболочки.

Связанный контент