#!/bin/zsh ##################################################################### USAGE="$0 APPLICATION CLIENT_CLASS" function ERROR() { local ERROR_CODE=$1 local MESSAGE="$2" echo -e "$MESSAGE\n\nUSAGE : $USAGE\n" >&2 [ $MESSAGE ] && notify-send "Application Launcher" "$MESSAGE" exit $ERROR_CODE } ##################################################################### APPLICATION="$1" which $APPLICATION >/dev/null 2>&1 \ || ERROR 2 "Application '$APPLICATION' not found" CLIENT_CLASS="${@:2}" [ ! $CLIENT_CLASS ] && CLIENT_CLASS="$APPLICATION" XFFSET=0.0 YFFSET=0.0 FACTOR=0.8 case $APPLICATION in pavucontrol ) FACTOR=0.4 YFFSET=200 ;; esac xdotool search --class "$CLIENT_CLASS" >/dev/null 2>&1 || { i3-msg "exec --no-startup-id $APPLICATION;" } WINDOW_SIZE=$(\ xrandr \ | grep 'connected primary' \ | sed 's/.*connected primary \([^x]*\)x\([^+]*\).*/\1 \2/' \ | awk -v f=$FACTOR -v x=$XFFSET -v y=$YFFSET \ '{print int($1*f+x)," ",int($2*f+y);}'\ ) i3-msg "[class=$CLIENT_CLASS] move scratchpad" i3-msg "[class=$CLIENT_CLASS] resize set $WINDOW_SIZE" i3-msg "[class=$CLIENT_CLASS] scratchpad show" i3-msg "[class=$CLIENT_CLASS] move position center"