summaryrefslogtreecommitdiff
path: root/volumearc-widget
diff options
context:
space:
mode:
authorstreetturtle <streetturtle@gmail.com>2021-03-19 20:49:00 -0400
committerstreetturtle <streetturtle@gmail.com>2021-03-19 20:49:00 -0400
commit25d9eecfc68df3251dc96008aaa4cd7c81900da6 (patch)
tree7f0b6a6c125ea622e099e5b569115b80dcad3753 /volumearc-widget
parenta37e0a673ee3e6655f3d4be2c5a2f6c832476456 (diff)
[volume] BREAKING CHANGE - new widget instead of old ones
Having three widgets for volume led to a problem of code duplication - same logic was duplicated three times. However when an issue was discovered and fixed, it was fixed in only one of three widgets. So I decided to create a volume widget from scratch, adding new features, such as selecting input/output, better responsiveness, easily customizable widget ui (bar, text, icon, icon and text, arc). Should close #199, #198, #185, #182, #47, #122, #183.
Diffstat (limited to 'volumearc-widget')
-rw-r--r--volumearc-widget/README.md69
-rw-r--r--volumearc-widget/custom.pngbin9424 -> 0 bytes
-rw-r--r--volumearc-widget/out.gifbin7288 -> 0 bytes
-rw-r--r--volumearc-widget/volumearc.lua140
4 files changed, 0 insertions, 209 deletions
diff --git a/volumearc-widget/README.md b/volumearc-widget/README.md
deleted file mode 100644
index 496797e..0000000
--- a/volumearc-widget/README.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# Volumearc widget
-
-Almost the same as [volumebar widget](https://github.com/streetturtle/awesome-wm-widgets/tree/master/volumebar-widget), but using [arcchart](https://awesomewm.org/doc/api/classes/wibox.container.arcchart.html):
-
-![screenshot](./out.gif)
-
-Supports
- - scroll up - increase volume,
- - scroll down - decrease volume,
- - left click - mute/unmute.
-
-## Customization
-
-It is possible to customize widget by providing a table with all or some of the following config parameters:
-
-| Name | Default | Description |
-|---|---|---|
-| `main_color` | `beautiful.fg_normal` | Color of the arc |
-| `bg_color` | `#ffffff11` | Color of the arc's background |
-| `mute_color` | `beautiful.fg_urgent` | Color of the arc when mute |
-| `path_to_icon` | /usr/share/icons/Arc/status/symbolic/audio-volume-muted-symbolic.svg | Path to the icon |
-| `thickness` | 2 | The arc thickness |
-| `height` | `beautiful.fg_normal` | Widget height |
-| `timeout` | 1 | How often in seconds the widget refreshes |
-| `get_volume_cmd` | `amixer -D pulse sget Master` | Get current volume level |
-| `inc_volume_cmd` | `amixer -D pulse sset Master 5%+` | Increase volume level |
-| `dec_volume_cmd` | `amixer -D pulse sset Master 5%-` | Decrease volume level |
-| `tog_volume_cmd` | `amixer -D pulse sset Master toggle` | Mute / unmute |
-| `button_press` | `function(_, _, _, button) <sane default logic> end` | Overwrite the 'button\_press' signal for this widget |
-
-### Example:
-
-```lua
-volumearc_widget({
- main_color = '#af13f7',
- mute_color = '#ff0000',
- thickness = 5,
- height = 25,
- button_press = function(_, _, _, button) -- Overwrites the button press behaviour to open pavucontrol when clicked
- if (button == 1) then awful.spawn('pavucontrol --tab=3', false)
- end
- end
-})
-```
-
-The config above results in the 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/awesome-wm-widgets
- ```
-
-1. Require volumearc widget at the beginning of **rc.lua**:
-
-```lua
-local volumearc_widget = require("awesome-wm-widgets.volumearc-widget.volumearc")
-...
-s.mytasklist, -- Middle widget
- { -- Right widgets
- layout = wibox.layout.fixed.horizontal,
- ...
- volumearc_widget(),
- ...
-```
diff --git a/volumearc-widget/custom.png b/volumearc-widget/custom.png
deleted file mode 100644
index f187345..0000000
--- a/volumearc-widget/custom.png
+++ /dev/null
Binary files differ
diff --git a/volumearc-widget/out.gif b/volumearc-widget/out.gif
deleted file mode 100644
index 61fa486..0000000
--- a/volumearc-widget/out.gif
+++ /dev/null
Binary files differ
diff --git a/volumearc-widget/volumearc.lua b/volumearc-widget/volumearc.lua
deleted file mode 100644
index b104ad3..0000000
--- a/volumearc-widget/volumearc.lua
+++ /dev/null
@@ -1,140 +0,0 @@
--------------------------------------------------
--- Volume Arc Widget for Awesome Window Manager
--- Shows the current volume level
--- More details could be found here:
--- https://github.com/streetturtle/awesome-wm-widgets/tree/master/volumearc-widget
-
--- @author Pavel Makhov
--- @copyright 2018 Pavel Makhov
--------------------------------------------------
-
-local awful = require("awful")
-local beautiful = require("beautiful")
-local spawn = require("awful.spawn")
-local watch = require("awful.widget.watch")
-local wibox = require("wibox")
-local gears = require("gears")
-
-local GET_VOLUME_CMD = 'amixer -D pulse sget Master'
-local INC_VOLUME_CMD = 'amixer -q -D pulse sset Master 5%+'
-local DEC_VOLUME_CMD = 'amixer -q -D pulse sset Master 5%-'
-local TOG_VOLUME_CMD = 'amixer -q -D pulse sset Master toggle'
-
-local PATH_TO_ICON = "/usr/share/icons/Arc/status/symbolic/audio-volume-muted-symbolic.svg"
-
-local widget = {}
-
-local popup = awful.popup{
- ontop = true,
- visible = false,
- shape = gears.shape.rounded_rect,
- border_width = 1,
- border_color = beautiful.bg_focus,
- maximum_width = 400,
- offset = { y = 5 },
- widget = {}
-}
-local rows = {
- { widget = wibox.widget.textbox },
- layout = wibox.layout.fixed.vertical,
-}
-local function worker(user_args)
-
- local args = user_args or {}
-
- local main_color = args.main_color or beautiful.fg_color
- local bg_color = args.bg_color or '#ffffff11'
- local mute_color = args.mute_color or beautiful.fg_urgent
- local path_to_icon = args.path_to_icon or PATH_TO_ICON
- local thickness = args.thickness or 2
- local margins = args.height or 18
- local timeout = args.timeout or 1
-
- 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
-
- local icon = {
- id = "icon",
- 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 = margins,
- forced_width = margins,
- bg = bg_color,
- paddings = 2,
- widget = wibox.container.arcchart
- }
-
- local update_graphic = function(widget, stdout, _, _, _)
- local mute = "on"
- local volume = 0
- if not (stdout == nil or stdout == '') then
- mute = string.match(stdout, "%[(o%D%D?)%]") -- \[(o\D\D?)\] - [on] or [off]
- volume = string.match(tostring(stdout), "(%d?%d?%d)%%") -- (\d?\d?\d)\%)
- volume = tonumber(string.format("% 3d", volume))
- end
- widget.value = volume / 100;
- widget.colors = mute == 'off'
- and { mute_color }
- or { main_color }
- end
-
- local button_press = args.button_press or function(_, _, _, button)
- 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
- volumearc:connect_signal("button::press", button_press)
-
- local rebuild_widget = function(stdout)
- for i = 0, #rows do rows[i]=nil end
-
- for line in stdout:gmatch("[^\r\n]+") do
-
- local row = wibox.widget {
- text = line,
- widget = wibox.widget.textbox
- }
- table.insert(rows, row)
- end
-
- popup:setup(rows)
- end
-
- volumearc:buttons(
- awful.util.table.join(
- awful.button({}, 3, function()
- if popup.visible then
- popup.visible = not popup.visible
- else
- spawn.easy_async([[bash -c "cat /proc/asound/cards"]], function(stdout, stderr)
- rebuild_widget(stdout, stderr)
- popup:move_next_to(mouse.current_widget_geometry)
- end)
- end
- end)
- )
- )
-
-
-
- watch(get_volume_cmd, timeout, update_graphic, volumearc)
-
- return volumearc
-end
-
-return setmetatable(widget, { __call = function(_, ...) return worker(...) end })