mirror of
				https://github.com/ItsDrike/dotfiles.git
				synced 2025-11-04 09:16:36 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
	
		
			941 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			941 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env zsh
 | 
						|
 | 
						|
PANEL_FIFO="$1"
 | 
						|
PREFIX="$2"
 | 
						|
DELAY="$3"
 | 
						|
MAX_LEN="$(("$4"-3))"
 | 
						|
 | 
						|
exec 5>"$PANEL_FIFO"
 | 
						|
 | 
						|
main() {
 | 
						|
    local win_id="$(bspc query -N -n focused)"
 | 
						|
    local win_name="$(xprop -id "$win_id" | grep "^WM_NAME" | cut -d' ' -f3- | tr -d '"')"
 | 
						|
    local trimmed_win_name="${win_name:0:$MAX_LEN}"
 | 
						|
    if [[ "$win_name" != "$trimmed_win_name" ]]; then
 | 
						|
        win_name="${trimmed_win_name}..."
 | 
						|
    fi
 | 
						|
 | 
						|
    REPLY="$trimmed_win_name"
 | 
						|
}
 | 
						|
 | 
						|
# Run 2 loops here, one for instant updates once other window is focused
 | 
						|
# in bspwm, other for timed updates, in case the window changes it's title
 | 
						|
# on it's own (such as when we switch a tab in firefox)
 | 
						|
 | 
						|
{print init; stdbuf -oL bspc subscribe node} | while read line; do
 | 
						|
    case ${line} in
 | 
						|
        node_focus* ) main ;;
 | 
						|
        init ) main ;;
 | 
						|
        * ) continue ;;
 | 
						|
    esac
 | 
						|
 | 
						|
    echo "$PREFIX $REPLY" >&5
 | 
						|
done &
 | 
						|
 | 
						|
while :; do
 | 
						|
    main
 | 
						|
    echo "$PREFIX $REPLY" >&5
 | 
						|
    sleep "$DELAY"
 | 
						|
done
 | 
						|
 | 
						|
wait $!
 |