効率のために、ウィンドウのサイズを変更して移動できるダッシュスクリプトをいくつか作成しました。
構造は次のとおりです。サムネイルのように、画面の下部に8つのウィンドウが1行に積み上げられています。各ウィンドウをminiportal_1、...、miniportal_8と呼びます。
これらのいずれかを使用したい場合、スクリプトは行の上のサイズを変更して画面の残りの部分を占有し、デフォルトのポータルになります。
より良い視覚化のために、このコンセプトは戦闘機F-35ディスプレイ(写真を見る)
私がやりたいことは、すでにデフォルトポータルがある場合は、サイズ変更されたミニポータルウィンドウがそれを置き換え、デフォルトのポータルウィンドウもサイズ変更されて古いミニポータルイメージに移動することです。簡単に言えば、ミニポータルとポータルウィンドウを交換したいです。
私の考えでは、次のようにする必要があるようです。
1/wmctrl を使用して表示されるすべてのウィンドウの ID、ジオメトリ、座標を保存します。
visible_windows_ID_array=wmctrl -l -G | awk '{print S1}'
visible_windows_geometry=same but with different awk option
visible_windows_coordinates= same but with different awk option
2 / ifテストを使用してforループを実行して、デフォルトのポータルウィンドウのIDを取得します。
for((i=0;i<${#get_visible_windows_ID_array[@]}; i++ )) do
ここでIfテストの正しい構文が見つかりません。私はこのようなことをしたい:
if visible_windows_geometry[i]= mainportal geometry && visible_windows_coordinates[i]= mainportal coordinates then
get visible_windows_ID[i]
fi
done
デフォルトのポータルウィンドウIDがある場合は、wmctrl -rを使用してサイズを変更できます。
どうすればいいのかご存知ですか?
答え1
解決策が見つかりました。ここに例があります。ポータルウィンドウをマイクロポータルに戻してマイクロポータルウィンドウをポータルに切り替えることができる場合は、すでに存在するマイクロポータルウィンドウのIDを見つけます。
function getportalwindowID {
IFS=$'\n'
W=5
H=6
X=3
Y=4
ID=1
windowsID=($(wmctrl -l -G | awk -v ID=$ID '{print $ID}'))
windowsgeometry_w=($(wmctrl -l -G | awk -v W=$W '{print $W}'))
windowsgeometry_h=($(wmctrl -l -G | awk -v H=$H '{print $H}'))
windowscoordinates_x=($(wmctrl -l -G | awk -v X=$X '{print $X}'))
windowscoordinates_y=($(wmctrl -l -G | awk -v Y=$Y '{print $Y}'))
for ((i=0; i<${#windowsID[*]}; i++));
do
if [ ${windowsgeometry_h[i]} = 180 ] && [ ${windowsgeometry_w[i]} = 320 ] && [ ${windowscoordinates_x[i]} = $(($activescreendisthorizontal+ 0)) ] && [ ${windowscoordinates_y[i]} = 1260 ]; then
portalwindowid=${windowsID[i]}
echo $portalwindowid
fi
done
}