aboutsummaryrefslogtreecommitdiff
path: root/volume.lua
diff options
context:
space:
mode:
authorAdrian C. (anrxc) <anrxc@sysphere.org>2010-03-06 22:12:47 +0100
committerAdrian C. (anrxc) <anrxc@sysphere.org>2010-03-06 22:12:47 +0100
commit9371839401f89afacf6919671fff4a414b4bb841 (patch)
tree23cea127ebf91a5bd308bbbb2296bd90a15f9989 /volume.lua
parentdbd6c7b03edf6250b2f5acdf054b3392ace243e9 (diff)
downloadvicious-legacy-9371839401f89afacf6919671fff4a414b4bb841.tar.xz
volume: added real mute support
Widge type returns 1st value as the volume level and 2nd as the mute state of the requested channel represented as a symbol.
Diffstat (limited to 'volume.lua')
-rw-r--r--volume.lua32
1 files changed, 22 insertions, 10 deletions
diff --git a/volume.lua b/volume.lua
index 37303c9..070f3bf 100644
--- a/volume.lua
+++ b/volume.lua
@@ -7,31 +7,43 @@
local tonumber = tonumber
local io = { popen = io.popen }
local setmetatable = setmetatable
-local string = {
- find = string.find,
- match = string.match
-}
+local string = { match = string.match }
-- }}}
--- Volume: provides volume levels of requested ALSA mixers
+-- Volume: provides volume levels and state of requested ALSA mixers
module("vicious.volume")
-- {{{ Volume widget type
local function worker(format, warg)
+ local mixer_state = {
+ ["on"] = "♫", -- "",
+ ["off"] = "♩" -- "M"
+ }
+
-- Get mixer control contents
local f = io.popen("amixer get " .. warg)
local mixer = f:read("*all")
f:close()
- local vol = tonumber(string.match(mixer, "([%d]?[%d]?[%d])%%"))
- -- If mute return 0 (not "Mute") so we don't break progressbars
- if string.find(mixer, "%[off%]") or vol == nil then
- vol = 0
+ -- Capture mixer control state: [5%] ... ... [on]
+ local volu, mute = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
+ -- Handle mixers without data
+ if volu == nil then
+ return {0, mixer_state["off"]}
+ end
+
+ -- Handle mixers without mute
+ if mute == "" and volu == "0"
+ -- Handle mixers that are muted
+ or mute == "off" then
+ mute = mixer_state["off"]
+ else
+ mute = mixer_state["on"]
end
- return {vol}
+ return {tonumber(volu), mute}
end
-- }}}