dotwryn/bin/i3/launch-or-show
2022-08-09 22:27:11 -06:00

63 lines
1.5 KiB
Bash
Executable File

#!/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"
ALWAYS_LAUNCH=0
RESIZE=1
XFFSET=0.0
YFFSET=0.0
FACTOR=0.8
xrandr | grep primary | awk '{print $4;}' | grep -q '^3840' \
&& FACTOR=0.5
case $APPLICATION in
pavucontrol ) FACTOR=0.4 YFFSET=200 ;;
discord ) ALWAYS_LAUNCH=1 ;;
android-messages-desktop ) ALWAYS_LAUNCH=1 ;;
scrcpy ) RESIZE=0 ;;
esac
LAUNCH_APP=0
xdotool search --class "$CLIENT_CLASS" || LAUNCH_APP=1
[[ $ALWAYS_LAUNCH -eq 1 ]] && LAUNCH_APP=1
[[ $LAUNCH_APP -eq 1 ]] && {
i3-msg "exec --no-startup-id $APPLICATION;"
sleep .5
}
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"
[[ $RESIZE -eq 1 ]] && i3-msg "[class=$CLIENT_CLASS] resize set $WINDOW_SIZE"
i3-msg "[class=$CLIENT_CLASS] scratchpad show"
i3-msg "[class=$CLIENT_CLASS] move position center"