awesome-wm-widgets/pomodoroarc-widget/pomodoroarc.lua
2020-12-05 20:57:04 -05:00

135 lines
4.5 KiB
Lua

-------------------------------------------------
-- Pomodoro Arc Widget for Awesome Window Manager
-- Modelled after Pavel Makhov's work
-- @author Raphaël Fournier-S'niehotta
-- @copyright 2018 Raphaël Fournier-S'niehotta
-------------------------------------------------
local awful = require("awful")
local beautiful = require("beautiful")
local spawn = require("awful.spawn")
local watch = require("awful.widget.watch")
local wibox = require("wibox")
local naughty = require("naughty")
local GET_pomodoro_CMD = "pomo clock"
local PAUSE_pomodoro_CMD = "pomo pause"
local START_pomodoro_CMD = "pomo start"
local STOP_pomodoro_CMD = "pomo stop"
local text = wibox.widget {
id = "txt",
--font = "Play 12",
font = "Inconsolata Medium 13",
widget = wibox.widget.textbox
}
-- mirror the text, because the whole widget will be mirrored after
local mirrored_text = wibox.container.margin(wibox.container.mirror(text, { horizontal = true }))
mirrored_text.right = 5 -- pour centrer le texte dans le rond
--
--local mirrored_text = wibox.container.mirror(text, { horizontal = true })
-- mirrored text with background
local mirrored_text_with_background = wibox.container.background(mirrored_text)
local pomodoroarc = wibox.widget {
mirrored_text_with_background,
max_value = 1,
thickness = 2,
start_angle = 4.71238898, -- 2pi*3/4
forced_height = 32,
forced_width = 32,
rounded_edge = true,
bg = "#ffffff11",
paddings = 0,
widget = wibox.container.arcchart
}
local pomodoroarc_widget = wibox.container.mirror(pomodoroarc, { horizontal = true })
local update_graphic = function(widget, stdout, _, _, _)
local pomostatus = string.match(stdout, " (%D?%D?):%D?%D?")
if pomostatus == "--" then
text.font = "Inconsolata Medium 13"
widget.colors = { beautiful.widget_main_color }
text.text = "25"
widget.value = 1
else
text.font = "Inconsolata Medium 13"
local pomomin = string.match(stdout, "[ P]?[BW](%d?%d?):%d?%d?")
local pomosec = string.match(stdout, "[ P]?[BW]%d?%d?:(%d?%d?)")
local pomodoro = pomomin * 60 + pomosec
local status = string.match(stdout, "([ P]?)[BW]%d?%d?:%d?%d?")
local workbreak = string.match(stdout, "[ P]?([BW])%d?%d?:%d?%d?")
text.text = pomomin
-- Helps debugging
--naughty.notify {
--text = pomomin,
--title = "pomodoro debug",
--timeout = 5,
--hover_timeout = 0.5,
--width = 200,
--}
if status == " " then -- clock ticking
if workbreak == "W" then
widget.value = tonumber(pomodoro/(25*60))
if tonumber(pomomin) < 5 then -- last 5 min of pomo
widget.colors = { beautiful.widget_red }
else
widget.colors = { beautiful.widget_blue }
end
elseif workbreak == "B" then -- color during pause
widget.colors = { beautiful.widget_green }
widget.value = tonumber(pomodoro/(5*60))
end
elseif status == "P" then -- paused
if workbreak == "W" then
widget.colors = { beautiful.widget_yellow }
widget.value = tonumber(pomodoro/(25*60))
text.font = "Inconsolata Medium 13"
text.text = "PW"
elseif workbreak == "B" then
widget.colors = { beautiful.widget_yellow }
widget.value = tonumber(pomodoro/(5*60))
text.font = "Inconsolata Medium 13"
text.text = "PB"
end
end
end
end
pomodoroarc:connect_signal("button::press", function(_, _, _, button)
if (button == 2) then awful.spawn(PAUSE_pomodoro_CMD, false)
elseif (button == 1) then awful.spawn(START_pomodoro_CMD, false)
elseif (button == 3) then awful.spawn(STOP_pomodoro_CMD, false)
end
spawn.easy_async(GET_pomodoro_CMD, function(stdout, stderr, exitreason, exitcode)
update_graphic(pomodoroarc, stdout, stderr, exitreason, exitcode)
end)
end)
local notification
local function show_pomodoro_status()
spawn.easy_async(GET_pomodoro_CMD,
function(stdout, _, _, _)
notification = naughty.notify {
text = stdout,
title = "pomodoro status",
timeout = 5,
hover_timeout = 0.5,
width = 200,
}
end)
end
pomodoroarc:connect_signal("mouse::enter", function() show_pomodoro_status() end)
pomodoroarc:connect_signal("mouse::leave", function() naughty.destroy(notification) end)
watch(GET_pomodoro_CMD, 1, update_graphic, pomodoroarc)
return pomodoroarc_widget