stripes/mover

84 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
# Originally by https://github.com/windelicato/
size=${2:-'20'}
dir=$1
transplanter() {
bspc node "${dir}" -p south && bspc node -n "${dir}"
}
northplanter() {
bspc node north -p north && bspc node -n north
}
rootplanter() {
bspc node @/ -p "${dir}" && bspc node -n @/ || bspc node -s next.local && bspc node -n @/
bspc node @/ -p cancel
}
bspc config pointer_follows_focus true
# Find current window mode
is_floating() {
bspc query -T -n | grep -q '"state":"floating"'
}
# If the window is floating, move it
if is_floating; then
#only parse input if window is floating,tiled windows accept input as is
case "$dir" in
west) switch="-x"
sign="-"
;;
east) switch="-x"
sign="+"
;;
north) switch="-y"
sign="-"
;;
*) switch="-y"
sign="+"
;;
esac
xdo move "${switch}" "${sign}${size}"
# Otherwise, window is tiled: switch with window in given direction
else
if [ "$(bspc query -N -n .local.\!floating | wc -l)" != 2 ]; then
case "$dir" in
north) northplanter || rootplanter;;
*) transplanter || rootplanter;;
esac
else
case "$dir" in
east) bspc node -s east || bspc query -N -n west.local || \
if bspc query -N -n south.local ; then
bspc node @/ -R 90
else
bspc node @/ -R 270
fi
;;
west) bspc node -s west || bspc query -N -n east.local || \
if bspc query -N -n north.local ; then
bspc node @/ -R 90
else
bspc node @/ -R 270
fi
;;
south) bspc node -s south || bspc query -N -n north.local || \
if bspc query -N -n west.local ; then
bspc node @/ -R 90
else
bspc node @/ -R 270
fi
;;
*) bspc node -s north || bspc query -N -n south.local || \
if bspc query -N -n west.local ; then
bspc node @/ -R 270
else
bspc node @/ -R 90
fi
;;
esac
fi
fi