package main import ( "fmt" "github.com/nsf/termbox-go" "time" ) func tbPrint(x, y int, fg, bg termbox.Attribute, msg string) { for _, c := range msg { termbox.SetCell(x, y, c, fg, bg) x++ } } func draw(i int) { termbox.Clear(termbox.ColorDefault, termbox.ColorDefault) defer termbox.Flush() w, h := termbox.Size() s := fmt.Sprintf("count = %d", i) tbPrint((w/2)-(len(s)/2), h/2, termbox.ColorRed, termbox.ColorDefault, s) } func main() { err := termbox.Init() if err != nil { panic(err) } termbox.SetInputMode(termbox.InputEsc) go func() { time.Sleep(5 * time.Second) termbox.Interrupt() // This should never run - the Interrupt(), above, should cause the event // loop below to exit, which then exits the process. If something goes // wrong, this panic will trigger and show what happened. time.Sleep(1 * time.Second) panic("this should never run") }() var count int draw(count) mainloop: for { switch ev := termbox.PollEvent(); ev.Type { case termbox.EventKey: if ev.Ch == '+' { count++ } else if ev.Ch == '-' { count-- } case termbox.EventError: panic(ev.Err) case termbox.EventInterrupt: break mainloop } draw(count) } termbox.Close() fmt.Println("Finished") }