Advertisement
pveselov

change sinks

Oct 6th, 2021
993
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.19 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. set -e
  4.  
  5. is_next=false
  6. is_prev=false
  7. if test "$1" = "next"; then
  8.     is_next=true
  9. fi
  10. if test "$1" = "prev"; then
  11.     is_prev=true
  12. fi
  13.  
  14. if ! $is_next && ! $is_prev; then
  15.     is_next=true
  16. fi
  17.  
  18. pacmd list-sinks | fgrep ' index: ' | {
  19.     index=0
  20.     cur_pos=0
  21.     declare sinks[0]
  22.     while read -r line; do
  23.         index=$((index+1))
  24.         echo "$line" | fgrep -q '*' && cur_pos=$index
  25.         sinks[$index]=$(echo "$line"|awk '{print $NF}')
  26.     done
  27.  
  28.     # we are forced to continue here, or we lose the vars
  29.  
  30.     len="${#sinks[@]}"
  31.     if test $len -le 0; then
  32.         echo "no sinks!"
  33.         exit 1
  34.     fi
  35.  
  36.     if $is_next; then
  37.         if test $cur_pos -ge $len; then
  38.             new_pos=1
  39.         else
  40.             new_pos=$((cur_pos+1))
  41.         fi
  42.     fi
  43.     if $is_prev; then
  44.         if test $cur_pos -le 1; then
  45.             new_pos=$len
  46.         else
  47.             new_pos=$((cur_pos-1))
  48.         fi
  49.     fi
  50.  
  51.     if test $new_pos -eq $cur_pos; then
  52.         echo "nothing to do (only 1 sink?)"
  53.         exit 0
  54.     fi
  55.  
  56.     new_idx="${sinks[$new_pos]}"
  57.     echo "Switching to $new_pos, pulse index $new_idx"
  58.     pacmd set-default-sink $new_idx
  59.  
  60. }
  61.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement