bspswallow (1344B)
1 #!/bin/sh 2 3 # Get class of a wid 4 get_class() { 5 id=$1 6 if [ -z "$id" ]; then 7 echo "" 8 else 9 xprop -id "$id" | sed -n '/WM_CLASS\|WM_COMMAND/s/.*"\(.*\)".*/\1/p' 10 fi 11 } 12 13 swallow() { 14 addedtodesktop=$2 15 lasttermdesktop=$(bspc query -D -n last) 16 17 swallowerid=$1 18 swallowingid=$(bspc query -N -n last) 19 20 if [ "$addedtodesktop" = "$lasttermdesktop" ]; then 21 cat ~/.config/bspwm/noswallow ~/.config/bspwm/terminals | grep "^$(get_class "$swallowerid")$" && return 22 grep "^$(get_class "$swallowingid")$" ~/.config/bspwm/terminals || return 23 echo "$swallowerid $swallowingid" >> /tmp/swallowids 24 bspc node "$swallowingid" --flag hidden=on 25 fi 26 } 27 28 spit() { 29 spitterid=$1 30 spitterdesktop=$2 31 grep "^$spitterid" /tmp/swallowids || return 32 spittingid=$(grep "^$spitterid" /tmp/swallowids | head -n1 | awk '{print $2}') 33 34 bspc node "$spittingid" --flag hidden=off 35 36 termdesktop=$(bspc query -D -n "$spittingid") 37 [ "$termdesktop" = "$spitterdesktop" ] || bspc node "$spittingid" -d "$spitterdesktop" 38 39 bspc node "$spittingid" -f 40 sed -i "/^$spitterid/d" /tmp/swallowids 41 } 42 43 bspc subscribe node_add node_remove | while read -r event 44 do 45 case $(echo "$event" | awk '{ print $1 }') in 46 node_add) 47 swallow $(echo "$event" | awk '{print $5 " " $3}') 48 ;; 49 node_remove) 50 spit $(echo "$event" | awk '{print $4 " " $3}') 51 ;; 52 esac 53 done