86 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | #!/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 |