diff options
-rw-r--r-- | bin/dzen2_pgrp.sh | 5 | ||||
-rwxr-xr-x | bin/mixer-wrapper.py | 40 |
2 files changed, 43 insertions, 2 deletions
diff --git a/bin/dzen2_pgrp.sh b/bin/dzen2_pgrp.sh index 277a197..61349b1 100644 --- a/bin/dzen2_pgrp.sh +++ b/bin/dzen2_pgrp.sh @@ -27,8 +27,9 @@ OFFSET=$((OFFSET - 17)) $DIR/bin/pulse-dbus-receive.py | \ $DZEN2 -xs "$SCREEN" -x "$OFFSET" -tw 17 -w 100 -fn "$FONT" -bg black -sa c -l 1 \ -e "entertitle=uncollapse,unhide;leavetitle=collapse;button2=exec:pavucontrol\ - ;button1=exec:$MIXER toggle;button3=exec:$MIXER 80%\ - ;button4=exec:$MIXER 2%+;button5=exec:$MIXER 2%-" & + ;button1=print:sset Master toggle;button3=print:sset Master 80%\ + ;button4=print:sset Master 2%+;button5=print:sset Master 2%-" | + $DIR/bin/mixer-wrapper.py "amixer -s" & # fill the rest of the screen with the information from xmonad cat $* | $DZEN2 -xs "$SCREEN" -x 0 -w "$OFFSET" -ta l -fn "$FONT" -bg black -e 'button1=none' & diff --git a/bin/mixer-wrapper.py b/bin/mixer-wrapper.py new file mode 100755 index 0000000..1424f36 --- /dev/null +++ b/bin/mixer-wrapper.py @@ -0,0 +1,40 @@ +#!/usr/bin/python2 + +import os +import select +import sys +import subprocess +import termios +import pty +from itertools import chain + +def main(cmd=None): + (pipe_in, pipe_out) = pty.openpty() + pipe = os.fdopen(pipe_in) + + mixer = subprocess.Popen(sys.argv[1], stdin=subprocess.PIPE, + stdout=pipe_out, stderr=subprocess.STDOUT, + shell=True, bufsize=0, close_fds=True) + + input = iter(sys.stdin.readline, '') + if cmd is not None: + input = chain([cmd], input) + + for line in input: + mixer.stdin.write(b"%s\n" % line) + mixer.stdin.flush() + + termios.tcflush(pipe_in, termios.TCIFLUSH) + fds = select.select([pipe_in], [], [], 0.2)[0] + if len(fds) <= 0: + mixer.stdin.close() + mixer.wait() + if cmd is None or line != cmd: + return line + return None + + +if __name__ == '__main__': + cmd = None + while True: + cmd = main(cmd) |