summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2016-06-28 03:07:03 -0400
committerAndrew Cady <d@jerkface.net>2016-06-28 03:07:03 -0400
commitf753cb281f85e0769bc8991c50e8ab2a2f732e63 (patch)
tree0b869b07b9a4d9d137e71446812beff8c646a5f7
parentf9f60b53c39aba76de4594b833058c31bd23e0cb (diff)
improve pavol
-rwxr-xr-xdot/local/bin/pavol61
1 files 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 @@
1#!/bin/sh 1#!/bin/sh
2sink_index() 2default_sink_name()
3{ 3{
4 pacmd list-sinks | sed -ne 's/ *\* index: //p' 4 pacmd stat | sed -ne 's/^Default sink name: //p'
5} 5}
6 6
7boost=${1:-200} 7die()
8{
9 printf 'Error: %s\n' "$1" >&2
10 exit 1
11}
12
13sink=$(default_sink_name) || die "could not determine default sink"
14
15set_volume() # uses $sink
16{
17 pactl -- set-sink-volume "$sink" "$1"%
18}
19
20show_volume_line() # uses $sink
21{
22 local want_next=
23 pacmd list-sinks | while read line; do
24 case "$line" in
25 'name: <'$sink'>') want_next=1 ;;
26 'name: <'*) want_next= ;;
27 'volume: '*)
28 [ "$want_next" ] || continue
29 echo "$line"
30 break
31 ;;
32 esac
33 done
34}
35
36show_volume_number() # uses $sink
37{
38 set -- $(show_volume_line)
39 local total=0 num=0 p
40 for p; do
41 case "$p" in
42 *%)
43 total=$((total + ${p%%%}))
44 num=$((num + 1))
45 ;;
46 esac
47 done
48 if [ "$num" -gt 0 ]; then
49 echo $(( total / num ))
50 fi
51}
8 52
9for sink in $(sink_index); do 53case "$1" in
10 pactl -- set-sink-volume "$sink" "$boost"% 54 [0-9]*) set_volume "$1" ;;
11 exit 55 [-+*/][0-9]*) set_volume $(( $(show_volume_number) $1 )) ;;
12done 56 '') show_volume_number ;;
13exit 1 57 *) die 'usage' ;;
58esac