Expanded function of volume script
authorCian Bagshaw <cian@cianb.xyz>
Thu, 15 Jun 2023 23:44:18 +0000 (00:44 +0100)
committerCian Bagshaw <cian@cianb.xyz>
Thu, 15 Jun 2023 23:50:54 +0000 (00:50 +0100)
Previously the volume was changed manually with 'amixer' and then 'gvol' ("get
volume") was called to display the updated value, by again calling amixer.
These two calls are unnecessary as the same output is given each time. Thus the
whole process has been integrated into 'gvol', which can now set the volume as
well as displaying it.

.local/bin/gvol

index edbf5ba..26cd776 100755 (executable)
@@ -1,8 +1,11 @@
 #!/bin/sh
-# gvol - get volume of alsa control using amixer, with $1 as the control name,
-# defaulting to Master if blank
+# vol - get/set volume of alsa control using amixer
+# $1: control name (default is 'Master')
+# $2: set the volume to value (optional)
 
-amixer get \
-       $( [ -z "$1" ] && echo "Master" || echo "$1") \
-       | sed   -e '/\[on\]/    { s/\].*//; s/.*\[//;   p; q }' \
-                       -e '/\[off\]/   { s/^.*$/MUTE/;                 p; q }' -n
+amixer \
+       $( [ -z "$2" ] && echo "get"    || echo "set" ) \
+       $( [ -z "$1" ] && echo "Master" || echo "$1" ) \
+       "$2" \
+       | sed -nE       -e '/\[on\]/    { s/.*\[([0-9]+%)\].*/\1/;      p; q }' \
+                               -e '/\[off\]/   { s/.*/MUTE/;                           p; q }'