update volumebar widget

This commit is contained in:
streetturtle 2019-04-13 22:44:47 -04:00
parent aa6f0363ad
commit ed8bd0a96a
3 changed files with 100 additions and 45 deletions

View File

@ -9,21 +9,62 @@ Supports
- scroll down - decrease volume, - scroll down - decrease volume,
- left click - mute/unmute. - left click - mute/unmute.
## Installation ## Customization
Clone repo, include widget and use it in **rc.lua**: It is possible to customize widget by providing a table with all or some of the following config parameters:
```lua ```lua
local volumebar_widget = require("awesome-wm-widgets.volumebar-widget.volumebar") volumebar_widget({
... main_color = '#af13f7',
s.mytasklist, -- Middle widget mute_color = '#ff0000',
{ -- Right widgets width = 80,
layout = wibox.layout.fixed.horizontal, shape = 'rounded_bar', -- octogon, hexagon, powerline, etc
... -- bar's height = wibar's height minus 2x margins
volumebar_widget, margins = 8
... })
``` ```
Above config results in following widget:
![custom](./custom.png)
## Installation
1. Clone this repo under **~/.config/awesome/**
```bash
git clone https://github.com/streetturtle/awesome-wm-widgets.git ~/.config/awesome/
```
1. Require volumebar widget at the beginning of **rc.lua**:
```lua
local volumebar_widget = require("awesome-wm-widgets.volumebar-widget.volumebar")
```
1. Add widget to the tasklist:
```lua
s.mytasklist, -- Middle widget
{ -- Right widgets
layout = wibox.layout.fixed.horizontal,
...
--[[default]]
volumebar_widget(),
--[[or customized]]
volumebar_widget({
main_color = '#af13f7',
mute_color = '#ff0000',
width = 80,
shape = 'rounded_bar', -- octogon, hexagon, powerline, etc
-- bar's height = wibar's height minus 2x margins
margins = 8
}),
...
```
## Troubleshooting ## Troubleshooting
If the bar is not showing up, try to decrease top or bottom margin - widget uses hardcoded margins for vertical alignment, so if your wibox is too small then bar is simply hidden by the margins. If the bar is not showing up, try to decrease top or bottom margin - widget uses hardcoded margins for vertical alignment, so if your wibox is too small then bar is simply hidden by the margins.

BIN
volumebar-widget/custom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -9,6 +9,7 @@
------------------------------------------------- -------------------------------------------------
local awful = require("awful") local awful = require("awful")
local beautiful = require("beautiful")
local gears = require("gears") local gears = require("gears")
local spawn = require("awful.spawn") local spawn = require("awful.spawn")
local watch = require("awful.widget.watch") local watch = require("awful.widget.watch")
@ -19,48 +20,61 @@ local INC_VOLUME_CMD = 'amixer -D pulse sset Master 5%+'
local DEC_VOLUME_CMD = 'amixer -D pulse sset Master 5%-' local DEC_VOLUME_CMD = 'amixer -D pulse sset Master 5%-'
local TOG_VOLUME_CMD = 'amixer -D pulse sset Master toggle' local TOG_VOLUME_CMD = 'amixer -D pulse sset Master toggle'
local bar_color = "#74aeab" local widget = {}
local mute_color = "#ff0000"
local background_color = "#3a3a3a"
local volumebar_widget = wibox.widget { local function worker(args)
max_value = 1,
forced_width = 50,
paddings = 0,
border_width = 0.5,
color = bar_color,
background_color = background_color,
shape = gears.shape.bar,
clip = true,
margins = {
top = 10,
bottom = 10,
},
widget = wibox.widget.progressbar
}
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.color = mute == "off" and mute_color local mute_color = args.mute_color or beautiful.widget_red
or bar_color local width = args.width or 50
local shape = args.shape or 'bar'
local margins = args.margins or 10
end local volumebar_widget = wibox.widget {
max_value = 1,
forced_width = width,
color = main_color,
background_color = '#ffffff11',
shape = gears.shape[shape],
margins = {
top = margins,
bottom = margins,
},
widget = wibox.widget.progressbar
}
local update_graphic = function(widget, stdout, _, _, _)
local mute = string.match(stdout, "%[(o%D%D?)%]") -- \[(o\D\D?)\] - [on] or [off]
local volume = string.match(stdout, "(%d?%d?%d)%%") -- (\d?\d?\d)\%)
volume = tonumber(string.format("% 3d", volume))
widget.value = volume / 100;
widget.color = mute == "off"
and mute_color
or main_color
volumebar_widget:connect_signal("button::press", function(_,_,_,button)
if (button == 4) then awful.spawn(INC_VOLUME_CMD)
elseif (button == 5) then awful.spawn(DEC_VOLUME_CMD)
elseif (button == 1) then awful.spawn(TOG_VOLUME_CMD)
end end
spawn.easy_async(GET_VOLUME_CMD, function(stdout, stderr, exitreason, exitcode) volumebar_widget:connect_signal("button::press", function(_, _, _, button)
update_graphic(volumebar_widget, stdout, stderr, exitreason, exitcode) if (button == 4) then
awful.spawn(INC_VOLUME_CMD)
elseif (button == 5) then
awful.spawn(DEC_VOLUME_CMD)
elseif (button == 1) then
awful.spawn(TOG_VOLUME_CMD)
end
spawn.easy_async(GET_VOLUME_CMD, function(stdout, stderr, exitreason, exitcode)
update_graphic(volumebar_widget, stdout, stderr, exitreason, exitcode)
end)
end) end)
end)
watch(GET_VOLUME_CMD, 1, update_graphic, volumebar_widget) watch(GET_VOLUME_CMD, 1, update_graphic, volumebar_widget)
return volumebar_widget
end
return setmetatable(widget, { __call = function(_, ...) return worker(...) end })
return volumebar_widget