我想要做的是:
我的问题是,我似乎无法正确地处理打开的wmctrl窗口id和xdotool焦点窗口之间的检查(一个是整数,一个是六进制)。我的if语句需要工作,但我在找出如何根据包含wmcrtl窗口id数据的数组正确检查xdotool窗口数据时遇到了问题。
fid =焦点窗口idappArray在数组中包含wmctrl窗口id。echo -e "-------Current array of active windows-----"
for i in ${appArray[@]}; do echo $i; done
while :
do
#UPDATES CURRENT WINDOW FOCUS
fid=$(xdotool getactivewindow)
#CHECK IF WINDOW OF FOCUS IS AT TOP OF THE ARRAY
if [ $appArray == $(printf 0x0%x $fid) ] ;
#IF IT IS THEN DO NOTHING
then
echo -e "----current window is at top of array, and active------"
else
#IF IT ISNT THEN UPDATE ARRAY
echo -e "\n------Adding new focus window to top of array------"
appArray=($(printf 0x0%x $fid) "${appArray[@]}");
#find location of duplicate if any
newArray=$(echo "${appArray[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')
appArray=("${newArray[@]}")
#prints the array of applications
for i in ${appArray[@]}; do echo $i; done
echo "----------------------------------------------------"
fi
done发布于 2016-12-04 02:22:57
一种方法是将数组中的每个窗口向下移动一个位置,直到找到目标为止。
target="$(printf '0x0%x' "$fid")"
prev="$target"
# Loop over array indices
for i in "${!appArray[@]}"; do
curr="${appArray[$i]}"
appArray[$i]="$prev"
prev="$curr"
if [ "$curr" = "$target" ]; then
break
fi
done另一种方法是循环索引以查找目标的索引,并使用该索引更新数组。
target="$(printf '0x0%x' "$fid")"
for i in "${!appArray[@]}"; do
if [ "${appArray[$i]}" = "$target" ]; then
unset appArray[$i]
break
fi
done
appArray=("$target" "${appArray[@]}")https://stackoverflow.com/questions/40954369
复制相似问题