#!/bin/bash # 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