volume: allow to pass multiple arguments to amixer (#44)

* Added option for a table to configure volume widget, allowing device specification also.

* Updated README.md with new configuration options for volume widget

* volume: allow passing a list of commandline arguments
This commit is contained in:
Brandon Hartshorn 2017-10-08 08:33:32 -06:00 committed by Jörg Thalheim
parent 983253a27f
commit 750532a1d8
2 changed files with 14 additions and 3 deletions

View File

@ -447,8 +447,10 @@ Provides volume levels and state of requested mixers.
Supported platforms: Linux (required tool: amixer), FreeBSD.
- Arguments (per platform):
* Linux: takes the ALSA mixer control as an argument, i.e. `"Master"`,
optionally append the card ID or other options, i.e. `"PCM -c 0"`
* Linux: takes either a single argument containing the ALSA mixer control as
an argument, i.e. `"Master"`, or a table passed as command line arguments
to [amixer(1)](https://linux.die.net/man/1/amixer),
i.e `{"PCM", "-c", "0"}` or `{"Master", "-D", "pulse"}`.
* FreeBSD: takes the mixer control as an argument, i.e. `"vol"`
- Returns:
* Linux: returns 1st value as the volume level and 2nd as the mute state of

View File

@ -26,8 +26,17 @@ local function worker(format, warg)
["off"] = "" -- "M"
}
if type(warg) ~= "table" then
warg = { warg }
end
local cmd = "amixer -M get "
for _, arg in ipairs(warg) do
cmd = cmd .. " " .. helpers.shellquote(arg)
end
-- Get mixer control contents
local f = io.popen("amixer -M get " .. helpers.shellquote(warg))
local f = io.popen(cmd)
local mixer = f:read("*all")
f:close()