46 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| [ -z "$1" ] && exit # If $1 is left, hovers in the bottom left, if right, the bottom right
 | |
| current=$(xdotool getwindowfocus)
 | |
| 
 | |
| # xrandr is quite slow in execution. displayselect will generate a new one in postrun.
 | |
| # Otherwise if none exist this script will run xrandr once. Changing display setups will not be detected.
 | |
| if [ -f /tmp/dims ]; then
 | |
| 	dims="$(cat /tmp/dims)"
 | |
| else
 | |
| 	dims="$(xrandr --screen 0 | grep ' connected' | grep -v '^\s*$' | sed 's/ primary//' | cut -d ' ' -f3 | tee -i '/tmp/dims')"
 | |
| fi
 | |
| horizontal_offset="$( echo "$dims" | cut -d '+' -f2 )"
 | |
| mouse_location_horizontal="$(xdotool getmouselocation | grep -Eo 'x:[0-9]{1,5}' | tr -d 'x:')"
 | |
| # var passed is an accumulator for screens that fit the current mouse location or less
 | |
| for screen in $horizontal_offset; do
 | |
| 	[ "$screen" -lt "$mouse_location_horizontal" ] && passed="$(printf '%s\n%s\n' "$passed" "$screen")"
 | |
| done
 | |
| # take max of all screens to the left of mouse
 | |
| offset_of_screen_mouse_is_on="$(echo "$passed" | sort -n | tail -n1)"
 | |
| dim="$( echo "$dims" | grep "+$offset_of_screen_mouse_is_on+" )"
 | |
| screenwidth="$( echo "$dim" | grep -Eo '^[0-9]{1,5}x' | tr -d 'x')"
 | |
| screenheight="$( echo "$dim" | grep -Eo 'x[0-9]{1,5}+' | tr -d 'x+')"
 | |
| 
 | |
| # Adjust here for larger/smaller windows
 | |
| newheight=$(( 2 * screenheight / 5 ))
 | |
| newwidth=$(( 2 * screenwidth / 5 ))
 | |
| # fit your borderwidth setup of your WM or windows could bleed over to other display
 | |
| borderwidth=2
 | |
| 
 | |
| # see https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html for gravity specs
 | |
| # I do not believe that gravity is being respected in dwm.
 | |
| case "$1" in
 | |
| 	left)	horizontal=$(( borderwidth ))
 | |
| 		vertical=$(( screenheight - newheight - 2 * borderwidth ))
 | |
| 		gravity=7 #gravity of southwest
 | |
| 		;;
 | |
| 	right)	horizontal=$((  screenwidth - newwidth - 2 * borderwidth ))
 | |
| 		vertical=$(( screenheight - newheight  - 2 * borderwidth ))
 | |
| 		gravity=9 #gravity of southeast
 | |
| 		;;
 | |
| esac
 | |
| 
 | |
| wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz
 | |
| wmctrl -r :ACTIVE: -e $gravity,$horizontal,$vertical,$newwidth,$newheight
 |