volumearc - externalize config
This commit is contained in:
parent
a1636558f5
commit
c06b097031
|
@ -2,24 +2,39 @@
|
||||||
|
|
||||||
Almost the same as [volumebar widget](https://github.com/streetturtle/awesome-wm-widgets/tree/master/volumebar-widget), but using arcchart:
|
Almost the same as [volumebar widget](https://github.com/streetturtle/awesome-wm-widgets/tree/master/volumebar-widget), but using arcchart:
|
||||||
|
|
||||||
![screenshot](out.gif)
|
![screenshot]({{'/assets/img/screenshots/volumearc-widget.gif' | relative_url }}){:.center-image}
|
||||||
|
|
||||||
Supports:
|
|
||||||
- scroll up - increase volume,
|
|
||||||
- scroll down - decrease volume,
|
|
||||||
- left click - mute/unmute.
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Clone repo, include widget and use it in **rc.lua**:
|
1. Clone this repo under **~/.config/awesome/**
|
||||||
|
|
||||||
```lua
|
```bash
|
||||||
require("volumearc")
|
git clone https://github.com/streetturtle/awesome-wm-widgets.git ~/.config/awesome/
|
||||||
...
|
```
|
||||||
s.mytasklist, -- Middle widget
|
|
||||||
{ -- Right widgets
|
1. Require volumearc widget at the beginning of **rc.lua**:
|
||||||
layout = wibox.layout.fixed.horizontal,
|
|
||||||
...
|
```lua
|
||||||
volumearc_widget,
|
local volumearc_widget = require("awesome-wm-widgets.volumearc-widget.volumearc")
|
||||||
...
|
```
|
||||||
```
|
|
||||||
|
1. Add widget to the tasklist:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
s.mytasklist, -- Middle widget
|
||||||
|
{ -- Right widgets
|
||||||
|
layout = wibox.layout.fixed.horizontal,
|
||||||
|
...
|
||||||
|
--[[default]]
|
||||||
|
volumearc_widget(),
|
||||||
|
--[[or customized]]
|
||||||
|
volumearc_widget({
|
||||||
|
main_color = '#0000ff',
|
||||||
|
mute_color = '#ff0000',
|
||||||
|
path_to_icon = '/usr/share/icons/Arc/actions/symbolic/view-grid-symbolic.svg',
|
||||||
|
thickness = 5,
|
||||||
|
height = 25
|
||||||
|
}),
|
||||||
|
|
||||||
|
...
|
||||||
|
```
|
|
@ -21,47 +21,68 @@ local TOG_VOLUME_CMD = 'amixer -D pulse sset Master toggle'
|
||||||
|
|
||||||
local PATH_TO_ICON = "/usr/share/icons/Arc/status/symbolic/audio-volume-muted-symbolic.svg"
|
local PATH_TO_ICON = "/usr/share/icons/Arc/status/symbolic/audio-volume-muted-symbolic.svg"
|
||||||
|
|
||||||
local icon = {
|
local widget = {}
|
||||||
id = "icon",
|
|
||||||
image = PATH_TO_ICON,
|
|
||||||
resize = true,
|
|
||||||
widget = wibox.widget.imagebox,
|
|
||||||
}
|
|
||||||
|
|
||||||
local volumearc = wibox.widget {
|
local function worker(args)
|
||||||
icon,
|
|
||||||
max_value = 1,
|
|
||||||
thickness = 2,
|
|
||||||
start_angle = 4.71238898, -- 2pi*3/4
|
|
||||||
forced_height = 18,
|
|
||||||
forced_width = 18,
|
|
||||||
bg = "#ffffff11",
|
|
||||||
paddings = 2,
|
|
||||||
widget = wibox.container.arcchart
|
|
||||||
}
|
|
||||||
|
|
||||||
local update_graphic = function(widget, stdout, _, _, _)
|
local args = args or {}
|
||||||
local mute = string.match(stdout, "%[(o%D%D?)%]")
|
|
||||||
local volume = string.match(stdout, "(%d?%d?%d)%%")
|
|
||||||
volume = tonumber(string.format("% 3d", volume))
|
|
||||||
|
|
||||||
widget.value = volume / 100;
|
local main_color = args.main_color or beautiful.widget_main_color
|
||||||
widget.colors = mute == 'off' and { beautiful.widget_red }
|
local mute_color = args.mute_color or beautiful.widget_red
|
||||||
or { beautiful.widget_main_color }
|
local path_to_icon = args.path_to_icon or PATH_TO_ICON
|
||||||
|
local thickness = args.thickness or 2
|
||||||
|
local height = args.height or 18
|
||||||
|
|
||||||
end
|
local get_volume_cmd = args.get_volume_cmd or GET_VOLUME_CMD
|
||||||
|
local inc_volume_cmd = args.inc_volume_cmd or INC_VOLUME_CMD
|
||||||
|
local dec_volume_cmd = args.dec_volume_cmd or DEC_VOLUME_CMD
|
||||||
|
local tog_volume_cmd = args.tog_volume_cmd or TOG_VOLUME_CMD
|
||||||
|
|
||||||
volumearc:connect_signal("button::press", function(_, _, _, button)
|
|
||||||
if (button == 4) then awful.spawn(INC_VOLUME_CMD, false)
|
local icon = {
|
||||||
elseif (button == 5) then awful.spawn(DEC_VOLUME_CMD, false)
|
id = "icon",
|
||||||
elseif (button == 1) then awful.spawn(TOG_VOLUME_CMD, false)
|
image = path_to_icon,
|
||||||
|
resize = true,
|
||||||
|
widget = wibox.widget.imagebox,
|
||||||
|
}
|
||||||
|
|
||||||
|
local volumearc = wibox.widget {
|
||||||
|
icon,
|
||||||
|
max_value = 1,
|
||||||
|
thickness = thickness,
|
||||||
|
start_angle = 4.71238898, -- 2pi*3/4
|
||||||
|
forced_height = height,
|
||||||
|
forced_width = height,
|
||||||
|
bg = "#ffffff11",
|
||||||
|
paddings = 2,
|
||||||
|
widget = wibox.container.arcchart
|
||||||
|
}
|
||||||
|
|
||||||
|
local update_graphic = function(widget, stdout, _, _, _)
|
||||||
|
local mute = string.match(stdout, "%[(o%D%D?)%]")
|
||||||
|
local volume = string.match(stdout, "(%d?%d?%d)%%")
|
||||||
|
volume = tonumber(string.format("% 3d", volume))
|
||||||
|
|
||||||
|
widget.value = volume / 100;
|
||||||
|
widget.colors = mute == 'off'
|
||||||
|
and { mute_color }
|
||||||
|
or { main_color }
|
||||||
end
|
end
|
||||||
|
|
||||||
spawn.easy_async(GET_VOLUME_CMD, function(stdout, stderr, exitreason, exitcode)
|
volumearc:connect_signal("button::press", function(_, _, _, button)
|
||||||
update_graphic(volumearc, stdout, stderr, exitreason, exitcode)
|
if (button == 4) then awful.spawn(inc_volume_cmd, false)
|
||||||
|
elseif (button == 5) then awful.spawn(dec_volume_cmd, false)
|
||||||
|
elseif (button == 1) then awful.spawn(tog_volume_cmd, false)
|
||||||
|
end
|
||||||
|
|
||||||
|
spawn.easy_async(get_volume_cmd, function(stdout, stderr, exitreason, exitcode)
|
||||||
|
update_graphic(volumearc, stdout, stderr, exitreason, exitcode)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
end)
|
|
||||||
|
|
||||||
watch(GET_VOLUME_CMD, 1, update_graphic, volumearc)
|
watch(get_volume_cmd, 1, update_graphic, volumearc)
|
||||||
|
|
||||||
return volumearc
|
return volumearc
|
||||||
|
end
|
||||||
|
|
||||||
|
return setmetatable(widget, { __call = function(_, ...) return worker(...) end })
|
||||||
|
|
Loading…
Reference in New Issue