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

スクリプトはシェルパスになければなりません。

関連情報