53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
# read resolution from xrandr: "1920x1080     60.03*+"
 | 
						|
RES=$(xrandr | grep "*+" | awk '{print $1}' | head -1)
 | 
						|
 | 
						|
# parse xrandr output
 | 
						|
RESH=${RES%x*}
 | 
						|
RESV=${RES#*x}
 | 
						|
 | 
						|
# calculate pixel gap that should surround the window
 | 
						|
GAP=$(( RESH / 12 ))
 | 
						|
 | 
						|
# Calculate the horzontal/vertical dimensions of the window
 | 
						|
H=$(( RESH - 2 * GAP ))
 | 
						|
V=$(( RESV - 2 * GAP ))
 | 
						|
 | 
						|
# set the quirk in .config/spectrwm/spectrwm.conf
 | 
						|
# quirk[scratchpad] = FLOAT + ANYWHERE + FOCUSPREV
 | 
						|
 | 
						|
# get scratchpad window id
 | 
						|
WID=$(wmctrl -x -l scratchpad | fgrep '.scratchpad' | cut -d" " -f1)
 | 
						|
 | 
						|
if [ -z "$WID" ]
 | 
						|
then
 | 
						|
    # start terminal (sterm is st.suckless.org)
 | 
						|
    sterm -c scratchpad -g 159x42+$GAP+$GAP &
 | 
						|
    # XXX we cannot resize with wmctrl here, because the window is not
 | 
						|
    # mapped yet. Adding a sleep here and resize then is visually
 | 
						|
    # unpleasant. Therefore st is started with hardcoded dimensions
 | 
						|
    # and resized when hidden.
 | 
						|
else
 | 
						|
    # check if window is iconified or on another WS (or both)
 | 
						|
    if xwininfo -id $WID | fgrep -q IsUnMapped
 | 
						|
    then
 | 
						|
        # move window to current workspace
 | 
						|
        [ -z $_SWM_WS ] \
 | 
						|
            && wmctrl -i -r $WID -t $(xprop -root _NET_CURRENT_DESKTOP | cut -d'=' -f2) \
 | 
						|
            || wmctrl -i -r $WID -t $_SWM_WS
 | 
						|
        # remove hidden flag
 | 
						|
        wmctrl -i -r $WID -b remove,hidden
 | 
						|
        # activate (give focus)
 | 
						|
        wmctrl -i -a $WID
 | 
						|
    else
 | 
						|
        # window is visible => hide
 | 
						|
        wmctrl -i -r $WID -b add,hidden
 | 
						|
        # correct size while hidden
 | 
						|
        wmctrl -i -r $WID -e 0,$GAP,$GAP,$H,$V
 | 
						|
        # move it beyond the WS limit to completely hide it from the bar
 | 
						|
        # XXX could also be skip_pager / skip_taskbar?
 | 
						|
        wmctrl -i -r $WID -t 11
 | 
						|
    fi
 | 
						|
fi
 |