awesome-www/recipes/countdown.mdwn

68 lines
2.5 KiB
Plaintext
Raw Permalink Normal View History

2017-04-07 21:40:12 +02:00
# Countdown widget
Add the following in your `rc.lua`:
```lua
local countdown = {
widget = wibox.widget.textbox(),
checkbox = wibox.widget {
checked = false,
check_color = beautiful.fg_focus, -- customize
border_color = beautiful.fg_normal, -- customize
border_width = 2, -- customize
shape = gears.shape.circle,
widget = wibox.widget.checkbox
}
}
function countdown.set()
awful.prompt.run {
prompt = "Countdown minutes: ", -- floats accepted
textbox = awful.screen.focused().mypromptbox.widget,
exe_callback = function(timeout)
countdown.seconds = tonumber(timeout)
if not countdown.seconds then return end
countdown.checkbox.checked = false
countdown.minute_t = countdown.seconds > 1 and "minutes" or "minute"
countdown.seconds = countdown.seconds * 60
countdown.timer = gears.timer({ timeout = 1 })
countdown.timer:connect_signal("timeout", function()
if countdown.seconds > 0 then
local minutes = math.floor(countdown.seconds / 60)
local seconds = math.fmod(countdown.seconds, 60)
countdown.widget:set_markup(string.format("%d:%02d", minutes, seconds))
countdown.seconds = countdown.seconds - 1
else
naughty.notify({
title = "Countdown",
text = string.format("%s %s timeout", timeout, countdown.minute_t)
})
countdown.widget:set_markup("")
countdown.checkbox.checked = true
countdown.timer:stop()
end
end)
countdown.timer:start()
end
}
end
countdown.checkbox:buttons(awful.util.table.join(
awful.button({}, 1, function() countdown.set() end), -- left click
awful.button({}, 3, function() -- right click
if countdown.timer and countdown.timer.started then
countdown.widget:set_markup("")
countdown.checkbox.checked = false
countdown.timer:stop()
naughty.notify({ title = "Countdown", text = "Timer stopped" })
end
end)
))
```
then, add `countdown.widget` and `countdown.checkbox` to your favourite `wibox`.
Left clicking on the `checkbox` will prompt for a countdown, right clicking will stop the timer.
The `widget` will display the countdown.