39 lines
948 B
Bash
39 lines
948 B
Bash
|
#!/usr/bin/bash
|
||
|
|
||
|
# resize focused window to aspect ratio
|
||
|
# arguments: aspectX aspectY (default 16 9)
|
||
|
# dependencies: bc, jq
|
||
|
|
||
|
x=16
|
||
|
y=9
|
||
|
if [ $# -eq 2 ]; then
|
||
|
x=$1
|
||
|
y=$2
|
||
|
fi
|
||
|
|
||
|
node=($(bspc query -T -n | jq -r .client.tiledRectangle.width,.client.tiledRectangle.height,.id))
|
||
|
parent=($(bspc query -T -n @parent | jq -r .splitType,.firstChild.id))
|
||
|
|
||
|
# vertical split: adjust width
|
||
|
if [ "${parent[0]}" = "vertical" ]; then
|
||
|
width=$(printf "%.0f" $(echo "scale=4;${node[1]}*$x/$y" | bc))
|
||
|
# left window
|
||
|
if [ "${node[2]}" = "${parent[1]}" ]; then
|
||
|
bspc node -z right $((width-node[0])) 0
|
||
|
# right window
|
||
|
else
|
||
|
bspc node -z left $((node[0]-width)) 0
|
||
|
fi
|
||
|
|
||
|
# horizontal split: adjust height
|
||
|
else
|
||
|
height=$(printf "%.0f\n" $(echo "scale=4;${node[0]}*$y/$x" | bc))
|
||
|
# top window
|
||
|
if [ "${node[2]}" = "${parent[1]}" ]; then
|
||
|
bspc node -z bottom 0 $((height-node[1]))
|
||
|
# bottom window
|
||
|
else
|
||
|
bspc node -z top 0 $((node[1]-height))
|
||
|
fi
|
||
|
fi
|