如何查明 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 ....

該腳本必須駐留在 shell 的路徑中。

相關內容