我已将以下脚本添加到键绑定中。
假设我打开了 5 个 nemo 实例。它将取出前四个并将它们并排放置。
#!/bin/bash
WINDOW_ID=$(xdotool getactivewindow)
CLASS_NAME=$(xprop -id $WINDOW_ID | grep WM_CLASS | cut -d '"' -f2)
WORKSPACE=$(xdotool get_desktop)
WindowsArray=()
for i in $(xdotool search --desktop $WORKSPACE --classname $CLASS_NAME); do
WindowsArray+=($i)
done
SCREEN_RESOLUTION=$(xdpyinfo | awk '/dimensions/ {print $2}')
SCREEN_WIDTH=$(echo $SCREEN_RESOLUTION | cut -d x -f1)
SCREEN_HEIGHT=$(echo $SCREEN_RESOLUTION | cut -d x -f2)
W=$(( $SCREEN_WIDTH / 4 ))
H=$(( $SCREEN_HEIGHT - 2 ))
allX=(0 $(( $SCREEN_WIDTH / 4 )) $(( $SCREEN_WIDTH / 2 )) $(( $SCREEN_WIDTH / 4 * 3 )))
echo "$W"
echo "$H"
echo "${allX[*]}"
ITER=0
for X in ${allX[@]}; do
echo "$X"
xdotool windowsize "${WindowsArray[$ITER]}" $W $H
xdotool windowmove "${WindowsArray[$ITER]}" $X 0
xdotool windowactivate "${WindowsArray[$ITER]}"
((ITER++))
done
问题是,我有两个显示器。第一个显示器中有一个任务栏。
如果我在第二个监视器中打开四个 nemo 窗口,则脚本将不起作用。它将第二个监视器中的所有四个窗口重叠。
另一个问题是任务栏高度。在第一个显示器中,有一个任务栏。我怎样才能得到它的高度以便我可以减去它?
答案1
我找到了几种方法来实现这一目标乌班图18.04(使用单显示器)。在这两种变体中,起始x
坐标是通过将第一个窗口放置到0, 0
坐标并随后请求真实坐标来确定的。X的偏移量由xwininfo
程序决定。在变体1从根窗口的宽度中减去该偏移量以获得可用宽度并在变体2可用宽度是通过将第一个窗口增加到 100% 并检查其大小来确定的。
窗口最大化会导致明显的眨眼。我尝试在最大化之前取消映射窗口以使其不可见 ( xdotool windowunmap
),但在这种情况下偏移值消失 - 变得等于零,因此不可能在一次xwininfo
执行中获取两个值。但是,如果父窗口在x
轴上有两个面板,不仅在左侧(如 Ubuntu 启动器),而且在右侧,这种方法可能会很有用。
变体1
#!/bin/bash
window_num=${1:-4}
arr=( $(xdotool search --class xlogo) )
xdotool windowmove ${arr[0]} 0 0
xw_info_window_0=$(xwininfo -id ${arr[0]})
x_abs_offset=$(awk -F': +' '/Absolute upper-left X/{print $2}' <<< "$xw_info_window_0")
xw_info_root=$(xwininfo -root)
root_wdth=$(awk -F': +' '/Width/{print $2}' <<< "$xw_info_root")
root_hght=$(awk -F': +' '/Height/{print $2}' <<< "$xw_info_root")
avail_wdth=$((root_wdth - x_abs_offset))
new_wdth=$((avail_wdth / window_num))
new_hght=200
for i in $(seq 0 $((window_num - 1))); do
xdotool windowsize ${arr[$i]} "$new_wdth" "$new_hght"
xdotool windowmove ${arr[$i]} $(($((new_wdth * i)) + x_abs_offset)) 0
done
变体2
#!/bin/bash
window_num=${1:-4}
arr=( $(xdotool search --class xlogo) )
xdotool windowsize ${arr[0]} 100% 100%
xdotool windowmove ${arr[0]} 0 0
xw_info=$(xwininfo -id ${arr[0]})
avail_wdth=$(awk -F': +' '/Width/{print $2}' <<< "$xw_info")
avail_hght=$(awk -F': +' '/Height/{print $2}' <<< "$xw_info")
x_abs_offset=$(awk -F': +' '/Absolute upper-left X/{print $2}' <<< "$xw_info")
new_wdth=$((avail_wdth / window_num))
new_hght=200
for i in $(seq 0 $((window_num - 1))); do
xdotool windowsize ${arr[$i]} "$new_wdth" "$new_hght"
xdotool windowmove ${arr[$i]} $(($((new_wdth * i)) + x_abs_offset)) 0
done
第一个变体的演示: