Package: xmobar
Version: 0.33-1
Followup-For: Bug #920555

Users looking for a non-polling solution to ALSA volume may be able to adapt
my script for it:

    #!/usr/bin/python3

    import re
    import subprocess
    import sys

    r = re.compile(r"\[(\d+)%\].*\[(on|off)\]$")

    args = "stdbuf -oL alsactl monitor".split()
    p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while True:
        data = subprocess.check_output(["amixer", "get", "Master"])
        vline = data.rsplit(b"\n", 2)[-2].decode("utf-8")

        m = r.search(vline)
        assert(m)
        vol = m.group(1)
        onoff = m.group(2)
        muted = "%" if onoff == "on" else "M"

        sys.stdout.write(f"({vol}{muted})\n")
        sys.stdout.flush()

        p.stdout.readline() # type: ignore

Thanks,
--Robbie

Reply via email to