summaryrefslogtreecommitdiff
path: root/widgets
diff options
context:
space:
mode:
authorNicolas Schodet2011-03-28 19:00:50 +0200
committerNicolas Schodet2011-03-28 19:00:50 +0200
commitc047d077189127f8086cb05d1364e4107149bdc9 (patch)
treef5583ca9f2caba234703222f1e212bab1a42234e /widgets
parentb385090be29a26dd1a1173430c9cfb5ca2514d28 (diff)
add volume widget
Diffstat (limited to 'widgets')
-rw-r--r--widgets/volume.lua63
1 files changed, 63 insertions, 0 deletions
diff --git a/widgets/volume.lua b/widgets/volume.lua
new file mode 100644
index 0000000..80d170f
--- /dev/null
+++ b/widgets/volume.lua
@@ -0,0 +1,63 @@
+-- Inspired by https://awesome.naquadah.org/wiki/Farhavens_volume_widget
+
+local setmetatable = setmetatable
+local io = io
+local string = string
+local tonumber = tonumber
+local capi = { widget = widget }
+local awful = require ("awful")
+local beautiful = require ("beautiful")
+
+module("widgets.volume")
+
+local cardid = 0
+local channel = "Master"
+
+-- command must start with a space!
+local function mixercommand(w, command)
+ local fd = io.popen("amixer -c " .. cardid .. command)
+ local status = fd:read("*all")
+ fd:close()
+ local volume = string.match(status, "(%d?%d?%d)%%")
+ status = string.match(status, "%[(o[^%]]*)%]")
+ w:set_value(tonumber(volume))
+ if string.find(status, "on", 1, true) then
+ w:set_border_color(beautiful.fg_normal)
+ else
+ w:set_border_color(beautiful.bg_normal)
+ end
+end
+
+local function update(w)
+ mixercommand(w, " sget " .. channel)
+end
+local function up()
+ mixercommand(w, " sset " .. channel .. " 10%+")
+end
+local function down()
+ mixercommand(w, " sset " .. channel .. " 10%-")
+end
+local function toggle()
+ mixercommand(w, " sset " .. channel .. " toggle")
+end
+
+function new(args)
+ local args = args or {}
+ args.width = args.width or 8
+ args.height = args.height or beautiful.wibox_height or 16
+ w = awful.widget.progressbar(args)
+ w:set_vertical(true)
+ w:set_background_color(beautiful.bg_normal)
+ w:set_color(beautiful.fg_normal)
+ w:set_max_value(100)
+ w:set_value(50)
+ w.widget:buttons(awful.util.table.join(
+ awful.button({}, 1, nil, function () toggle(w) end),
+ awful.button({}, 4, nil, function () up(w) end),
+ awful.button({}, 5, nil, function () down(w) end)
+ ))
+ update(w)
+ return w.widget
+end
+
+setmetatable(_M, { __call = function(_, ...) return new(...) end })