kclock/main.go

65 lines
1.1 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
var (
Version = "0.0.0"
Build = "alpha"
)
func main() {
var local string
var flagVer bool
flag.StringVar(&local, "local", fmt.Sprint(time.Local), "set local manually")
flag.BoolVar(&flagVer, "v", false, "show version")
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage: kclock [options]\n")
flag.PrintDefaults()
}
flag.Parse()
if flagVer {
fmt.Printf("%v - %v\n", Version, Build)
return
}
l, err := time.LoadLocation(local)
if err != nil {
panic(err)
}
time.Local = l
watch()
}
func watch() {
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
start := time.Now()
next := time.Now().Truncate(time.Second).Add(time.Second)
<-time.After(time.Until(next))
tick := time.Tick(time.Second)
fmt.Printf("\n")
for {
fmt.Printf("\r\033[1A\033[0K\033[92m%v\033[0m\n", time.Now().Truncate(time.Second))
select {
case <-tick:
case <-quit:
fmt.Printf("\r\033[0Ktime elapsed: \033[94m%v\033[0m\n", time.Since(start))
return
}
}
}