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 } } }