foodotfiles/home/Scripts/panextsink.sh
Marko Korhonen b1335a3628 Removed commit history
Signed-off-by: Marko Korhonen <marko.korhonen@reekynet.com>
2019-10-26 20:05:31 +03:00

33 lines
1.4 KiB
Bash

#!/bin/bash
# Get the pid of the window that is to be moved to the next sink
pid_to_move=$(swaymsg -t get_tree | jq -r '.nodes[]?.nodes[]?.nodes[]?.nodes[]?.nodes[] | select(.focused==true).pid')
# Assign all the sink indices into an array
sink_array=($(pacmd list-sinks | grep index | sed 's/index://' | sed 's/*//' | xargs))
# Get the sink inputs to prepare to be inserted into array of arrays
# The following raw string format is index sink pid\nindex sink pid
sink_inputs_raw=$(pacmd list-sink-inputs | grep -e index -e sink: -e process.id | sed 's/<[^"]*>//' | sed 's/[^0-9]*//g' | tr '\n' ' ' | xargs | sed 's/\([[:digit:]]*\) \([[:digit:]]*\) \([[:digit:]]*\) /\1 \2 \3\n/g')
# Find the corresponding pid
sink_input_selected_pid=$(echo "$sink_inputs_raw" | grep $pid_to_move)
# Parse the individual values from the info retrieved above
selected_input_index=$(echo $sink_input_selected_pid | awk '{print $1;}')
selected_input_sink=$(echo $sink_input_selected_pid | awk '{print $2;}')
selected_input_pid=$(echo $sink_input_selected_pid | awk '{print $3;}')
len=${#sink_array[@]}
for (( i=0; i<$len; i++ )); do
if [[ $selected_input_sink == "${sink_array[$i]}" ]]; then
len_idx=$((len-1))
if (( $i == $len_idx )); then
pacmd move-sink-input $selected_input_index ${sink_array[0]}
else
pacmd move-sink-input $selected_input_index ${sink_array[$((i+1))]}
fi
fi
done