Better widgets
This commit is contained in:
33
awesome-wm-widgets/spotify-widget/README.md
Normal file
33
awesome-wm-widgets/spotify-widget/README.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Spotify widget
|
||||
|
||||
This widget displays currently playing song on [Spotify for Linux](https://www.spotify.com/download/linux/) client:  and consists of two parts:
|
||||
|
||||
- status icon which shows if music is currently playing
|
||||
- artist and name of the current song playing
|
||||
|
||||
## Controls
|
||||
|
||||
- left click - play/pause
|
||||
- scroll up - play next song
|
||||
- scroll down - play previous song
|
||||
|
||||
## Dependencies
|
||||
|
||||
Note that widget uses the Arc icon theme, so it should be [installed](https://github.com/horst3180/arc-icon-theme#installation) first under **/usr/share/icons/Arc/** folder.
|
||||
|
||||
## Installation
|
||||
|
||||
First you need to have spotify CLI installed. Here is how you can do it (except widget part): [pavelmakhov.com/2016/02/awesome-wm-spotify](http://pavelmakhov.com/2016/02/awesome-wm-spotify)
|
||||
|
||||
To use this widget clone repo under **~/.config/awesome/** and then add it in **rc.lua**:
|
||||
|
||||
```lua
|
||||
local spotify_widget = require("awesome-wm-widgets.spotify-widget.spotify")
|
||||
...
|
||||
s.mytasklist, -- Middle widget
|
||||
{ -- Right widgets
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
...
|
||||
spotify_widget,
|
||||
...
|
||||
```
|
||||
BIN
awesome-wm-widgets/spotify-widget/spo-wid-1.png
Normal file
BIN
awesome-wm-widgets/spotify-widget/spo-wid-1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
72
awesome-wm-widgets/spotify-widget/spotify.lua
Normal file
72
awesome-wm-widgets/spotify-widget/spotify.lua
Normal file
@@ -0,0 +1,72 @@
|
||||
-------------------------------------------------
|
||||
-- Spotify Widget for Awesome Window Manager
|
||||
-- Shows currently playing song on Spotify for Linux client
|
||||
-- More details could be found here:
|
||||
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/spotify-widget
|
||||
|
||||
-- @author Pavel Makhov
|
||||
-- @copyright 2018 Pavel Makhov
|
||||
-------------------------------------------------
|
||||
|
||||
local awful = require("awful")
|
||||
local wibox = require("wibox")
|
||||
local watch = require("awful.widget.watch")
|
||||
|
||||
local GET_SPOTIFY_STATUS_CMD = 'sp status'
|
||||
local GET_CURRENT_SONG_CMD = 'sp current-oneline'
|
||||
local PATH_TO_ICONS = "/usr/share/icons/Arc"
|
||||
|
||||
local spotify_widget = wibox.widget {
|
||||
{
|
||||
id = "icon",
|
||||
widget = wibox.widget.imagebox,
|
||||
},
|
||||
{
|
||||
id = 'current_song',
|
||||
widget = wibox.widget.textbox,
|
||||
font = 'Play 9'
|
||||
},
|
||||
layout = wibox.layout.align.horizontal,
|
||||
set_status = function(self, is_playing)
|
||||
self.icon.image = PATH_TO_ICONS ..
|
||||
(is_playing and "/actions/24/player_play.png"
|
||||
or "/actions/24/player_pause.png")
|
||||
end,
|
||||
set_text = function(self, path)
|
||||
self.current_song.markup = path
|
||||
end,
|
||||
}
|
||||
|
||||
local update_widget_icon = function(widget, stdout, _, _, _)
|
||||
stdout = string.gsub(stdout, "\n", "")
|
||||
widget:set_status(stdout == 'Playing' and true or false)
|
||||
end
|
||||
|
||||
local update_widget_text = function(widget, stdout, _, _, _)
|
||||
if string.find(stdout, 'Error: Spotify is not running.') ~= nil then
|
||||
widget:set_text('')
|
||||
widget:set_visible(false)
|
||||
else
|
||||
widget:set_text(stdout)
|
||||
widget:set_visible(true)
|
||||
end
|
||||
end
|
||||
|
||||
watch(GET_SPOTIFY_STATUS_CMD, 1, update_widget_icon, spotify_widget)
|
||||
watch(GET_CURRENT_SONG_CMD, 1, update_widget_text, spotify_widget)
|
||||
|
||||
--- Adds mouse controls to the widget:
|
||||
-- - left click - play/pause
|
||||
-- - scroll up - play next song
|
||||
-- - scroll down - play previous song
|
||||
spotify_widget:connect_signal("button::press", function(_, _, _, button)
|
||||
if (button == 1) then awful.spawn("sp play", false) -- left click
|
||||
elseif (button == 4) then awful.spawn("sp next", false) -- scroll up
|
||||
elseif (button == 5) then awful.spawn("sp prev", false) -- scroll down
|
||||
end
|
||||
awful.spawn.easy_async(GET_SPOTIFY_STATUS_CMD, function(stdout, stderr, exitreason, exitcode)
|
||||
update_widget_icon(spotify_widget, stdout, stderr, exitreason, exitcode)
|
||||
end)
|
||||
end)
|
||||
|
||||
return spotify_widget
|
||||
Reference in New Issue
Block a user