Merge pull request #42 from raphaelfournier/pomodoroarc
First commit of the pomodoroarc widget
This commit is contained in:
commit
1431b325c0
|
@ -0,0 +1,134 @@
|
|||
-------------------------------------------------
|
||||
-- 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 = "/home/raph/scripts/pomo/pomo.sh clock"
|
||||
local PAUSE_pomodoro_CMD = "/home/raph/scripts/pomo/pomo.sh pause"
|
||||
local START_pomodoro_CMD = "/home/raph/scripts/pomo/pomo.sh start"
|
||||
local STOP_pomodoro_CMD = "/home/raph/scripts/pomo/pomo.sh 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
|
||||
|
||||
--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
|
||||
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
|
Loading…
Reference in New Issue