mirror of
https://github.com/elenapan/dotfiles.git
synced 2026-01-10 11:12:37 +08:00
112 lines
3.2 KiB
Lua
112 lines
3.2 KiB
Lua
-- Provides:
|
|
-- evil::mpd
|
|
-- artist (string)
|
|
-- song (string)
|
|
-- paused (boolean)
|
|
-- evil::mpd_volume
|
|
-- value (integer from 0 to 100)
|
|
-- evil::mpd_options
|
|
-- loop (boolean)
|
|
-- random (boolean)
|
|
local awful = require("awful")
|
|
|
|
local function emit_info()
|
|
awful.spawn.easy_async({"mpc", "-f", "[[%artist%@@%title%@]]"},
|
|
function(stdout)
|
|
local artist = stdout:match('(.*)@@')
|
|
local title = stdout:match('@@(.*)@')
|
|
local status = stdout:match('%[(.*)%]')
|
|
status = string.gsub(status, '^%s*(.-)%s*$', '%1')
|
|
|
|
local paused
|
|
if status == "playing" then
|
|
paused = false
|
|
else
|
|
paused = true
|
|
end
|
|
|
|
awesome.emit_signal("evil::mpd", artist, title, paused)
|
|
end
|
|
)
|
|
end
|
|
|
|
-- Run once to initialize widgets
|
|
emit_info()
|
|
|
|
-- Sleeps until mpd changes state (pause/play/next/prev)
|
|
local mpd_script = [[
|
|
sh -c '
|
|
mpc idleloop player
|
|
']]
|
|
|
|
-- Kill old mpc idleloop player process
|
|
awful.spawn.easy_async_with_shell("ps x | grep \"mpc idleloop player\" | grep -v grep | awk '{print $1}' | xargs kill", function ()
|
|
-- Emit song info with each line printed
|
|
awful.spawn.with_line_callback(mpd_script, {
|
|
stdout = function()
|
|
emit_info()
|
|
end
|
|
})
|
|
end)
|
|
|
|
----------------------------------------------------------
|
|
|
|
-- MPD Volume
|
|
local function emit_volume_info()
|
|
awful.spawn.easy_async_with_shell("mpc volume | awk '{print substr($2, 1, length($2)-1)}'",
|
|
function(stdout)
|
|
awesome.emit_signal("evil::mpd_volume", tonumber(stdout))
|
|
end
|
|
)
|
|
end
|
|
|
|
-- Run once to initialize widgets
|
|
emit_volume_info()
|
|
|
|
-- Sleeps until mpd volume changes
|
|
-- >> We use `sed '1~2d'` to remove every other line since the mixer event
|
|
-- is printed twice for every volume update.
|
|
-- >> The `-u` option forces sed to work in unbuffered mode in order to print
|
|
-- without waiting for `mpc idleloop mixer` to finish
|
|
local mpd_volume_script = [[
|
|
sh -c "
|
|
mpc idleloop mixer | sed -u '1~2d'
|
|
"]]
|
|
|
|
-- Kill old mpc idleloop mixer process
|
|
awful.spawn.easy_async_with_shell("ps x | grep \"mpc idleloop mixer\" | grep -v grep | awk '{print $1}' | xargs kill", function ()
|
|
-- Emit song info with each line printed
|
|
awful.spawn.with_line_callback(mpd_volume_script, {
|
|
stdout = function()
|
|
emit_volume_info()
|
|
end
|
|
})
|
|
end)
|
|
|
|
local mpd_options_script = [[
|
|
sh -c "
|
|
mpc idleloop options
|
|
"]]
|
|
|
|
local function emit_options_info()
|
|
awful.spawn.easy_async_with_shell("mpc | tail -1",
|
|
function(stdout)
|
|
local loop = stdout:match('repeat: (.*)')
|
|
local random = stdout:match('random: (.*)')
|
|
awesome.emit_signal("evil::mpd_options", loop:sub(1, 2) == "on", random:sub(1, 2) == "on")
|
|
end
|
|
)
|
|
end
|
|
|
|
-- Run once to initialize widgets
|
|
emit_options_info()
|
|
|
|
-- Kill old mpc idleloop options process
|
|
awful.spawn.easy_async_with_shell("ps x | grep \"mpc idleloop options\" | grep -v grep | awk '{print $1}' | xargs kill", function ()
|
|
-- Emit song info with each line printed
|
|
awful.spawn.with_line_callback(mpd_options_script, {
|
|
stdout = function()
|
|
emit_options_info()
|
|
end
|
|
})
|
|
end)
|