我编写了一堆破折号脚本,可以调整窗口大小和移动窗口以提高效率。
结构如下:我有一排 8 个窗口,它们堆叠在屏幕底部,如果你愿意的话,就像缩略图一样。我们将每个窗口称为 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
}