summaryrefslogtreecommitdiff
path: root/pomodoroarc-widget/pomodoroarc.lua
diff options
context:
space:
mode:
Diffstat (limited to 'pomodoroarc-widget/pomodoroarc.lua')
-rw-r--r--pomodoroarc-widget/pomodoroarc.lua134
1 files changed, 134 insertions, 0 deletions
diff --git a/pomodoroarc-widget/pomodoroarc.lua b/pomodoroarc-widget/pomodoroarc.lua
new file mode 100644
index 0000000..5158570
--- /dev/null
+++ b/pomodoroarc-widget/pomodoroarc.lua
@@ -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