diff options
Diffstat (limited to 'text-clock-widget')
-rw-r--r-- | text-clock-widget/text-clock.lua | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/text-clock-widget/text-clock.lua b/text-clock-widget/text-clock.lua new file mode 100644 index 0000000..98505a4 --- /dev/null +++ b/text-clock-widget/text-clock.lua @@ -0,0 +1,98 @@ +------------------------------------------------- +-- Text Clock Widget for Awesome Window Manager +-- Shows current time in words, e.g. 11.54 -> eleven fifty four +-- More details could be found here: +-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/text-clock-widget + +-- @author Pavel Makhov +-- @copyright 2020 Pavel Makhov +------------------------------------------------- + +local wibox = require("wibox") +local beautiful = require("beautiful") +local gears = require("gears") + +local function tablelength(T) + local count = 0 + for _ in pairs(T) do count = count + 1 end + return count +end + +local function convertNumberToName(num) + num = tonumber(num) + local lowNames = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", + "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", + "eighteen", "nineteen"}; + local tensNames = {"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"} + local tens, ones, result + + if num < tablelength(lowNames) then + result = lowNames[num + 1]; + else + tens = math.floor(num / 10); + ones = num % 10; + if (tens <= 9) then + result = tensNames[tens - 2 + 1]; + if (ones > 0) then + result = result .. " " .. lowNames[ones + 1]; + end + else + result = "unknown" + end + end + return result; +end + +local text_clock = {} + +local function worker(args) + + local args = args or {} + + text_clock = wibox.widget { + { + id = 'hours', + font = 'Play 12', + widget = wibox.widget.textbox, + }, + { + id = "minutes", + font = 'Play 12', + widget = wibox.widget.textbox, + }, + layout = wibox.layout.align.horizontal, + set_text = function(self, hours, minutes) + self:get_children_by_id('hours')[1]:set_text(hours) + + if string.match(minutes, " ") then + local f,s = minutes:match("(%w+)%s(%w+)") + self:get_children_by_id('minutes')[1]:set_markup('<span font_weight="bold" color="' .. beautiful.fg_urgent .. '">' .. f .. '</span>' .. s) + else + self:get_children_by_id('minutes')[1]:set_markup('<span font_weight="bold"> color="' .. beautiful.fg_urgent .. '">' .. minutes .. '</span>') + end + + end + } + + gears.timer { + timeout = 1, + call_now = true, + autostart = true, + callback = function() + local time = os.date("%I:%M") + local h,m = time:match('(%d+):(%d+)') + local hw = convertNumberToName(h) + local mw = convertNumberToName(m) + print(hw) + print(mw) + text_clock:set_text(hw, mw) + end + } + + return text_clock + +end + +return setmetatable(text_clock, { __call = function(_, ...) + return worker(...) +end })
\ No newline at end of file |