summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Schodet2019-07-31 20:38:19 +0200
committerNicolas Schodet2019-07-31 20:38:19 +0200
commit635faf4dc3377b4fc9dfcda2eafed57e785b2b3a (patch)
treea84890031b33d9c7951132b4ca7132082dfb2ec7
parentc10d06e4c55a3bbaf1d42d88217c4f9b775c9478 (diff)
widgets/volume: use asynchronous APIHEADmaster
-rw-r--r--widgets/volume.lua115
1 files changed, 59 insertions, 56 deletions
diff --git a/widgets/volume.lua b/widgets/volume.lua
index 18bc2e2..e73ad37 100644
--- a/widgets/volume.lua
+++ b/widgets/volume.lua
@@ -1,5 +1,3 @@
--- Inspired by https://awesome.naquadah.org/wiki/Farhavens_volume_widget
-
local awful = require('awful')
local wibox = require('wibox')
local beautiful = require('beautiful')
@@ -7,74 +5,79 @@ local beautiful = require('beautiful')
local cardid = nil
local channel = 'Master'
--- command must start with a space!
-local function mixercommand(w, command)
- local cmd = 'amixer'
- if cardid then
- cmd = cmd .. ' -c ' .. cardid
- end
- local fd = io.popen(cmd .. command)
- local status = fd:read('*all')
- fd:close()
- if status == '' then
- w.visible = false
- else
- local p = w:get_children_by_id('p')[1]
- local volume = string.match(status, '(%d?%d?%d)%%')
- status = string.match(status, '%[(o[^%]]*)%]')
- p.value = tonumber(volume)
- if string.find(status, 'on', 1, true) then
- p.border_color = beautiful.fg_normal
- else
- p.border_color = beautiful.bg_normal
- end
- end
+local function mixercommand(w, command, arg)
+ local cmd = {'amixer'}
+ if cardid then
+ table.insert(cmd, '-c')
+ table.insert(cmd, cardid)
+ end
+ table.insert(cmd, command)
+ table.insert(cmd, channel)
+ if arg then
+ table.insert(cmd, arg)
+ end
+ awful.spawn.easy_async(cmd, function(out)
+ if out == '' then
+ w.visible = false
+ else
+ local p = w:get_children_by_id('p')[1]
+ local volume = string.match(out, '(%d?%d?%d)%%')
+ local status = string.match(out, '%[(o[^%]]*)%]')
+ p.value = tonumber(volume)
+ if status == 'on' then
+ p.border_color = beautiful.fg_normal
+ else
+ p.border_color = beautiful.bg_normal
+ end
+ end
+
+ end)
end
local function update(w)
- mixercommand(w, ' sget ' .. channel)
+ mixercommand(w, 'sget')
end
local function up(w)
- mixercommand(w, ' sset ' .. channel .. ' 10%+')
+ mixercommand(w, 'sset', '10%+')
end
local function down(w)
- mixercommand(w, ' sset ' .. channel .. ' 10%-')
+ mixercommand(w, 'sset', '10%-')
end
local function toggle(w)
- mixercommand(w, ' sset ' .. channel .. ' toggle')
+ mixercommand(w, 'sset', 'toggle')
end
local function new(args)
- local args = args or {}
- local w = wibox.widget{
- {
- image = beautiful.widget_vol,
- widget = wibox.widget.imagebox,
- },
+ local args = args or {}
+ local w = wibox.widget{
+ {
+ image = beautiful.widget_vol,
+ widget = wibox.widget.imagebox,
+ },
+ {
{
- {
- id = 'p',
- forced_height = args.width or 8,
- forced_width = args.height or beautiful.wibox_height or 16,
- border_width = 1,
- color = beautiful.fg_normal,
- background_color = beautiful.bg_normal,
- value = 10,
- max_value = 100,
- widget = wibox.widget.progressbar,
- },
- direction = 'east',
- layout = wibox.container.rotate,
+ id = 'p',
+ forced_height = args.width or 8,
+ forced_width = args.height or beautiful.wibox_height or 16,
+ border_width = 1,
+ color = beautiful.fg_normal,
+ background_color = beautiful.bg_normal,
+ value = 10,
+ max_value = 100,
+ widget = wibox.widget.progressbar,
},
- layout = wibox.layout.fixed.horizontal,
- }
- w: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
+ direction = 'east',
+ layout = wibox.container.rotate,
+ },
+ layout = wibox.layout.fixed.horizontal,
+ }
+ w: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
end
return new