X ウィンドウがマップされている (表示されている) かどうかを確認するにはどうすればよいでしょうか?

X ウィンドウがマップされている (表示されている) かどうかを確認するにはどうすればよいでしょうか?

私は xdotool を使用して、ドックのようなウィンドウのセットをマップ/アンマップします。現在、xdotool にはトグル (マップ/アンマップ) コマンドが付属しておらず、複数のウィンドウで同時に同じ操作を実行することもできません。そのため、スクリプトを使用して、クラブ トグルを実行しようとしています。最新の操作がマップだったのか、アンマップだったのかを確認する方法が必要です。

答え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 ...

スクリプトはシェルのパスに存在する必要があります。

関連情報