X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/5a1a02a63dc9e203f1df9a39ca657fd62677a258..42070bba6e69b17cf6db4eae3456ff65a159924b:/widgets/alsa.lua

diff --git a/widgets/alsa.lua b/widgets/alsa.lua
index 5a4335e..85d5311 100644
--- a/widgets/alsa.lua
+++ b/widgets/alsa.lua
@@ -8,10 +8,10 @@
 --]]
 
 local newtimer        = require("lain.helpers").newtimer
+local read_pipe       = require("lain.helpers").read_pipe
 
 local wibox           = require("wibox")
 
-local io              = { popen  = io.popen }
 local string          = { match  = string.match,
                           format = string.format }
 
@@ -23,17 +23,16 @@ local alsa = {}
 
 local function worker(args)
     local args     = args or {}
-    local card     = args.card or "0"
     local timeout  = args.timeout or 5
-    local channel  = args.channel or "Master"
     local settings = args.settings or function() end
 
+    alsa.cmd     = args.cmd or "amixer"
+    alsa.channel = args.channel or "Master"
+
     alsa.widget = wibox.widget.textbox('')
 
     function alsa.update()
-        local f = assert(io.popen(string.format("amixer -c %s -M get %s", card, channel)))
-        local mixer = f:read("*a")
-        f:close()
+        local mixer = read_pipe(string.format("%s get %s", alsa.cmd, alsa.channel))
 
         volume_now = {}
 
@@ -59,7 +58,9 @@ local function worker(args)
         settings()
     end
 
-    newtimer("alsa", timeout, alsa.update)
+    timer_id = string.format("alsa-%s-%s", alsa.cmd, alsa.channel)
+
+    newtimer(timer_id, timeout, alsa.update)
 
     return setmetatable(alsa, { __index = alsa.widget })
 end