96 lines
1.8 KiB
Nim
96 lines
1.8 KiB
Nim
import std/times
|
|
import std/os
|
|
import i3bar_base
|
|
|
|
proc get_hour(hr: int): string
|
|
proc get_minute(min: int): string
|
|
|
|
proc get_fuzzytime(): string =
|
|
let tm = now()
|
|
var hr = tm.hour()
|
|
let min = tm.minute()
|
|
var link = "past"
|
|
if min > 32 :
|
|
link = "to"
|
|
case hr:
|
|
of 23:
|
|
hr = 0
|
|
else:
|
|
hr = hr + 1
|
|
if min >= 58 or min <= 02:
|
|
return get_hour(hr) & " " & get_minute(min)
|
|
else:
|
|
return get_minute(min) & " " & link & " " & get_hour(hr)
|
|
|
|
proc get_hour(hr: int): string =
|
|
case hr:
|
|
of 1, 13:
|
|
return "one"
|
|
of 2, 14:
|
|
return "two"
|
|
of 3, 15:
|
|
return "three"
|
|
of 4, 16:
|
|
return "four"
|
|
of 5, 17:
|
|
return "five"
|
|
of 6, 18:
|
|
return "six"
|
|
of 7, 19:
|
|
return "seven"
|
|
of 8, 20:
|
|
return "eight"
|
|
of 9, 21:
|
|
return "nine"
|
|
of 10, 22:
|
|
return "ten"
|
|
of 11, 23:
|
|
return "eleven"
|
|
of 0, 12, 24:
|
|
return "twelve"
|
|
else:
|
|
return "error"
|
|
|
|
proc get_minute(min: int): string =
|
|
case min:
|
|
of 58,59,0,1,2:
|
|
return "o'clock"
|
|
of 3,4,5,6,7,53,54,55,56,57:
|
|
return "five"
|
|
of 8,9,10,11,12,48,49,50,51,52:
|
|
return "ten"
|
|
of 13,14,15,16,17,43,44,45,46,47:
|
|
return "quarter"
|
|
of 18,19,20,21,22,38,39,40,41,42:
|
|
return "twenty"
|
|
of 23,24,25,26,27,33,34,35,36,37:
|
|
return "twenty-five"
|
|
of 28,29,30,31,32:
|
|
return "half"
|
|
else:
|
|
return "error"
|
|
|
|
proc getObject(time: string): i3barData =
|
|
var data = newi3barData()
|
|
data.title = "Fuzzy Time :"
|
|
data.full_text = time
|
|
data.color = foreground
|
|
data.border = lightblue
|
|
return data
|
|
|
|
|
|
proc main() =
|
|
var last_time = ""
|
|
while true:
|
|
let time = get_fuzzytime()
|
|
if time != last_time:
|
|
let data = getObject(time)
|
|
outputJSON(data)
|
|
if stoploop:
|
|
break
|
|
last_time = time
|
|
|
|
sleep(2000)
|
|
|
|
if isMainModule:
|
|
main()
|