44 lines
1.1 KiB
Fennel
44 lines
1.1 KiB
Fennel
;;; widget/textclock.fnl --- Configurable text clock widget
|
|
|
|
;;; Commentary:
|
|
;; More modular than the standard library
|
|
|
|
;;; Code:
|
|
|
|
(local beautiful (require :beautiful))
|
|
(local gears (require :gears))
|
|
(local glib (. (require :lgi) :GLib))
|
|
(local wibox (require :wibox))
|
|
(local DateTime glib.DateTime)
|
|
(local TimeZone glib.TimeZone)
|
|
|
|
;;;
|
|
;; Functions
|
|
|
|
(fn calc-timeout [real-timeout]
|
|
(% (- real-timeout (os.time)) real-timeout))
|
|
|
|
(fn textclock [format timeout timezone font]
|
|
(let [format (or format " %a %b %d, %H:%M ")
|
|
timeout (or timeout 60)
|
|
timezone (or (and timezone (TimeZone.new timezone))
|
|
(TimeZone.new_local))
|
|
font (or font beautiful.textclock_font beautiful.font)
|
|
w (wibox.widget.textbox)]
|
|
(var t nil)
|
|
|
|
(tset w :font font)
|
|
|
|
(fn w._private.textclock_update_cb []
|
|
(: w :set_markup (: (DateTime.new_now timezone) :format format))
|
|
(tset t :timeout (calc-timeout timeout))
|
|
(: t :again)
|
|
true)
|
|
|
|
(set t (gears.timer.weak_start_new timeout w._private.textclock_update_cb))
|
|
(: t :emit_signal :timeout)
|
|
w))
|
|
|
|
textclock
|
|
;;; widget/textclock.fnl ends here
|