From f753cb281f85e0769bc8991c50e8ab2a2f732e63 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Tue, 28 Jun 2016 03:07:03 -0400 Subject: improve pavol --- dot/local/bin/pavol | 61 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/dot/local/bin/pavol b/dot/local/bin/pavol index bddf613..4a8361f 100755 --- a/dot/local/bin/pavol +++ b/dot/local/bin/pavol @@ -1,13 +1,58 @@ #!/bin/sh -sink_index() +default_sink_name() { - pacmd list-sinks | sed -ne 's/ *\* index: //p' + pacmd stat | sed -ne 's/^Default sink name: //p' } -boost=${1:-200} +die() +{ + printf 'Error: %s\n' "$1" >&2 + exit 1 +} + +sink=$(default_sink_name) || die "could not determine default sink" + +set_volume() # uses $sink +{ + pactl -- set-sink-volume "$sink" "$1"% +} + +show_volume_line() # uses $sink +{ + local want_next= + pacmd list-sinks | while read line; do + case "$line" in + 'name: <'$sink'>') want_next=1 ;; + 'name: <'*) want_next= ;; + 'volume: '*) + [ "$want_next" ] || continue + echo "$line" + break + ;; + esac + done +} + +show_volume_number() # uses $sink +{ + set -- $(show_volume_line) + local total=0 num=0 p + for p; do + case "$p" in + *%) + total=$((total + ${p%%%})) + num=$((num + 1)) + ;; + esac + done + if [ "$num" -gt 0 ]; then + echo $(( total / num )) + fi +} -for sink in $(sink_index); do - pactl -- set-sink-volume "$sink" "$boost"% - exit -done -exit 1 +case "$1" in + [0-9]*) set_volume "$1" ;; + [-+*/][0-9]*) set_volume $(( $(show_volume_number) $1 )) ;; + '') show_volume_number ;; + *) die 'usage' ;; +esac -- cgit v1.2.3