#!/bin/sh # read resolution from xrandr: "1920x1080 60.03*+" RES=$(xrandr | grep "*+" | awk '{print $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) # XXX st is resized properly when hidden, st takes rows, # columns as size input. We don't have that so that's just # what echo $COLUMNS $LINES reports after the resize. # So on the first start, the windows is "almost" correctly # sized and we fix it later (when hidden). sterm -c scratchpad -g 134x29+$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. 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 wmctrl -i -r $WID -t 11 # 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 fi fi