package main import ( "image" "log" "fmt" "time" "github.com/mattn/go-tty" ui "github.com/gizak/termui" ) func main() { var _ = QueryTerm("\033[14t") if err := ui.Init(); err != nil { log.Fatalf("failed to initialize termui: %v", err) } defer ui.Close() c := ui.NewCanvas() c.SetRect(0, 0, 50, 50) c.SetLine(image.Pt(0, 0), image.Pt(10, 20), ui.ColorWhite) ui.Render(c) for e := range ui.PollEvents() { if e.Type == ui.KeyboardEvent { break } } } func QueryTerm(qs string) (ret [][]rune) { var b []rune tty, err := tty.Open() if err != nil {return} defer tty.Close() ch := make(chan bool, 1) // defer close(ch) go func() { // query terminal fmt.Printf(qs) for { r, err := tty.ReadRune() if err != nil {return} // handle key event switch r { case 'c', 't': ret = append(ret, b) goto afterLoop case '?', ';': ret = append(ret, b) b = []rune{} default : b = append(b, r) } } afterLoop: ch <- true // close(ch) }() timer := time.NewTimer(50 * time.Millisecond) defer timer.Stop() select { case <-ch: defer close(ch) case <-timer.C: } return }