diff options
author | EuAndreh <eu@euandre.org> | 2024-01-12 08:56:10 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-01-12 08:56:10 -0300 |
commit | be4074dfcfd22988e7954a8072e3e87ad00fca4c (patch) | |
tree | b3245427c623baa14ffa3213067fd66a0a6795c8 /bin/volume | |
parent | etc/sh/rc: Add idiff() utility function (diff) | |
download | dotfiles-be4074dfcfd22988e7954a8072e3e87ad00fca4c.tar.gz dotfiles-be4074dfcfd22988e7954a8072e3e87ad00fca4c.tar.xz |
bin/volume: Fix rotation beyond 2 sinks
Diffstat (limited to 'bin/volume')
-rwxr-xr-x | bin/volume | 31 |
1 files changed, 17 insertions, 14 deletions
@@ -78,19 +78,6 @@ ACTION="${1:-}" eval "$(assert-arg -- "$ACTION" 'ACTION')" -rotate() { - # This script assumes that at most 2 sinks exist at any time. - # When this premise is no longer true, it needs to be upgraded. - - CURRENT="$(pacmd list-sinks | grep '\* index' | cut -d: -f2 | tr -d ' ')" - OTHER="$(pacmd list-sinks | grep index | grep -v '\* index' | tail -n1 | cut -d: -f2 | tr -d ' ')" - - if [ "$CURRENT" = 0 ]; then - pacmd set-default-sink "$OTHER" - else - pacmd set-default-sink 0 - fi -} case "$ACTION" in up) @@ -103,7 +90,23 @@ case "$ACTION" in pactl set-sink-mute @DEFAULT_SINK@ toggle ;; rotate) - rotate + pacmd set-default-sink "$( + pacmd list-sinks | + grep index | + grep -v 'index: 0$' | + awk ' + { + n = $(NF) + sinks[i++] = n + last = n + if ($1 == "*") { + curr = n + } + } + END { + print curr == last ? sinks[0] : sinks[i - 1] + }' + )" ;; *) printf 'Bad ACTION: %s.\n\n' "$ACTION" >&2 |