Como descobrir se uma janela X está mapeada (visível) ou não?

Como descobrir se uma janela X está mapeada (visível) ou não?

Eu uso o xdotool para mapear/desmapear um conjunto de janelas do tipo dock. Agora, xdotool não vem com um comando de alternância (map/unmap), nem faz a mesma operação com várias janelas ao mesmo tempo. Então, estou tentando realizar a alternância usando um script. Preciso descobrir se a operação mais recente foi mapear ou desmapear.

Responder1

De certa forma, os arquivos podem ser pensados ​​​​como uma forma simples de armazenar variáveis ​​globais, globais para que sejam visíveis de qualquer lugar. Portanto, o estado (mapeado/não mapeado) pode ser armazenado como uma string em um arquivo.

Não é a coisa mais elegante, mas este script (chamado xctl) deve servir por enquanto.

#!/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

Para alternar um conjunto de janelas, execute xctl toggle window1 window2 ....

O script deve residir no caminho do shell.

informação relacionada