diff options
Diffstat (limited to 'dot/local/bin/pavol')
-rwxr-xr-x | dot/local/bin/pavol | 61 |
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 |
2 | sink_index() | 2 | default_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 | ||
7 | boost=${1:-200} | 7 | die() |
8 | { | ||
9 | printf 'Error: %s\n' "$1" >&2 | ||
10 | exit 1 | ||
11 | } | ||
12 | |||
13 | sink=$(default_sink_name) || die "could not determine default sink" | ||
14 | |||
15 | set_volume() # uses $sink | ||
16 | { | ||
17 | pactl -- set-sink-volume "$sink" "$1"% | ||
18 | } | ||
19 | |||
20 | show_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 | |||
36 | show_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 | ||
9 | for sink in $(sink_index); do | 53 | case "$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 )) ;; |
12 | done | 56 | '') show_volume_number ;; |
13 | exit 1 | 57 | *) die 'usage' ;; |
58 | esac | ||