dotfiles/.bin/OLD/bspswallow

73 lines
1.7 KiB
Plaintext
Raw Normal View History

#!/bin/sh -x
# Get class of a wid
get_class() {
set -x
[ ! -z "$1" ] \
&& xprop -id "$1" -notype WM_CLASS | cut -d'"' -f2
}
get_pid() {
set -x
[ ! -z "$1" ] \
&& xprop -id "$1" -notype _NET_WM_PID | cut -d'=' -f2
}
get_parentpid() {
ps -o "ppid=" -f -p $1
}
get_command() {
ps -o comm= -p $1
}
swallow() {
set -x
addedtodesktop=$2
lasttermdesktop=$(bspc query -D -n last)
swallowerid=$1
swallowingid=$(bspc query -N -n last)
if [ "$addedtodesktop" == "$lasttermdesktop" ]; then
grep "^$(get_class "$swallowerid")$" ~/.config/bspwm/swallow || return
grep "^$(get_class "$swallowingid")$" ~/.config/bspwm/terminals || return
echo "$swallowerid $swallowingid" >> /tmp/swallowids
bspc node "$swallowingid" --flag hidden=on
fi
}
spit() {
spitterid=$1
spitterdesktop=$2
grep "^$spitterid" /tmp/swallowids \
|| return
spittingid=$(grep "^$spitterid" /tmp/swallowids | head -n1 | awk '{ print $2 }')
bspc node "$spittingid" --flag hidden=off
termdesktop=$(bspc query -D -n "$spittingid")
[ "$termdesktop" == "$spitterdesktop" ] \
|| bspc node "$spittingid" -d "$spitterdesktop"
bspc node "$spittingid" -f
sed -i "/^$spitterid/d" /tmp/swallowids
}
bspc subscribe node_add node_remove | while read -r event
do
case $(echo "$event" | awk '{ print $1 }') in
node_add)
swallow $(echo "$event" | awk '{ print $5 " " $3}')
;;
node_remove)
spit $(echo "$event" | awk '{ print $4 " " $3}')
;;
esac
done