73 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 |