mirror of
https://github.com/swaywm/sway.git
synced 2026-04-21 06:46:22 -04:00
sway-grid-move: helper script for floating window management
This commit is contained in:
parent
51c9376c07
commit
324caed013
1 changed files with 108 additions and 0 deletions
108
contrib/sway-grid-move
Executable file
108
contrib/sway-grid-move
Executable file
|
|
@ -0,0 +1,108 @@
|
|||
#!/bin/sh
|
||||
|
||||
PROG=$(basename "$0")
|
||||
case $1 in
|
||||
top-left|top-mid|top-right|mid-left|mid-mid|mid-right|bottom-left|bottom-mid|bottom-right|left|right|top|bottom)
|
||||
dest="$1"
|
||||
;;
|
||||
*)
|
||||
echo "$PROG moves floating windows on a 3x3 grid in a workspace or snaps to edges."
|
||||
echo "Usage:"
|
||||
echo " $PROG top-left|top-mid|top-right|mid-left|mid-mid|mid-right|bottom-left|bottom-mid|bottom-right|left|right|top|bottom"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
wintree=($(swaymsg -t get_tree | jq -r '..|select(.type? == "root")|(.rect.width,.rect.height),(..|select(.type? == "output") | select(.active? == true) | .nodes|.[0]|.rect|.width,.height), (..|select(.focused? == true) | .id,.rect.width,.rect.height,.rect.x,.rect.y,.deco_rect.width,.deco_rect.height,.type)'))
|
||||
output_width=${wintree[0]}
|
||||
output_height=${wintree[1]}
|
||||
workspace_width=${wintree[2]}
|
||||
workspace_height=${wintree[3]}
|
||||
|
||||
bar_width=$(( output_width - workspace_width ))
|
||||
bar_height=$(( output_height - workspace_height ))
|
||||
|
||||
win_id=${wintree[4]}
|
||||
win_width=${wintree[5]}
|
||||
win_height=${wintree[6]}
|
||||
new_x=${wintree[7]}
|
||||
new_y=${wintree[8]}
|
||||
deco_width=${wintree[9]}
|
||||
deco_height=${wintree[10]}
|
||||
win_type=${wintree[11]}
|
||||
|
||||
case "$win_type" in
|
||||
"floating_con")
|
||||
case $dest in
|
||||
top-left)
|
||||
new_x=0
|
||||
new_y=0
|
||||
;;
|
||||
|
||||
top-mid)
|
||||
new_x=$(( (workspace_width - win_width) / 2 ))
|
||||
new_y=0
|
||||
;;
|
||||
|
||||
top-right)
|
||||
new_x=$(( workspace_width - win_width ))
|
||||
new_y=0
|
||||
;;
|
||||
|
||||
mid-left)
|
||||
new_x=0
|
||||
new_y=$(( (workspace_height - win_height - deco_height) / 2 ))
|
||||
;;
|
||||
|
||||
mid-mid)
|
||||
new_x=$(( (workspace_width - win_width) / 2 ))
|
||||
new_y=$(( (workspace_height - win_height - deco_height) / 2 ))
|
||||
;;
|
||||
|
||||
mid-right)
|
||||
new_x=$(( workspace_width - win_width ))
|
||||
new_y=$(( (workspace_height - win_height - deco_height) / 2))
|
||||
;;
|
||||
|
||||
bottom-left)
|
||||
new_x=0
|
||||
new_y=$(( workspace_height - win_height - deco_height ))
|
||||
;;
|
||||
|
||||
bottom-mid)
|
||||
new_x=$(( (workspace_width - win_width) / 2 ))
|
||||
new_y=$(( workspace_height - win_height - deco_height ))
|
||||
;;
|
||||
|
||||
bottom-right)
|
||||
new_x=$(( workspace_width - win_width ))
|
||||
new_y=$(( workspace_height - win_height - deco_height ))
|
||||
;;
|
||||
|
||||
left)
|
||||
new_x=0
|
||||
new_y=$(( new_y - deco_height - bar_height ))
|
||||
;;
|
||||
|
||||
right)
|
||||
new_x=$(( workspace_width - win_width ))
|
||||
new_y=$(( new_y - deco_height - bar_height ))
|
||||
;;
|
||||
top)
|
||||
new_y=0
|
||||
;;
|
||||
|
||||
bottom)
|
||||
new_y=$(( workspace_height - win_height - deco_height ))
|
||||
;;
|
||||
esac
|
||||
|
||||
swaymsg "[con_id=$win_id] move position $new_x $new_y"
|
||||
;;
|
||||
|
||||
"con")
|
||||
# no-op
|
||||
echo "$PROG: can't move tiled windows"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
Loading…
Add table
Add a link
Reference in a new issue