¿Cómo saber si una ventana X está mapeada (visible) o no?

¿Cómo saber si una ventana X está mapeada (visible) o no?

Utilizo xdotool para asignar/desasignar un conjunto de ventanas tipo muelle. Ahora, xdotool no viene con un comando de alternancia (asignar/desasignar), ni tampoco viene con la posibilidad de realizar la misma operación con varias ventanas a la vez. Entonces estoy tratando de realizar el cambio de palo usando un script. Necesito una manera de saber si la operación más reciente fue un mapa o un mapa.

Respuesta1

En cierto modo, los archivos pueden considerarse como una forma sencilla de almacenar variables globales, globales para que sean visibles desde todas partes. Por lo tanto, el estado (asignado/no asignado) se puede almacenar como una cadena en un archivo.

No es lo más elegante, pero este script (llamado xctl) debería funcionar por ahora.

#!/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 un conjunto de ventanas, ejecute xctl toggle window1 window2 ....

El script debe residir en la ruta del shell.

información relacionada