scripts

Utilitity scripts
git clone git://gtms.dev:scripts
Log | Files | Refs

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