package tui import ( "os" "os/signal" "golang.org/x/term" "unicode" "syscall" "bufio" ) type Event interface {} type TextInput rune type Paste string type Resize Dims var evChan chan Event func Events() <-chan Event { if evChan != nil { return evChan } evChan = make(chan Event, 1) go func() { rd := bufio.NewReader(os.Stdin) for { r, _, err := rd.ReadRune() if err != nil { evChan <- err return } switch { case r == '\033': // todo case unicode.IsControl(r): default: evChan <- TextInput(r) } } }() sigs := make(chan os.Signal, 1) signal.Notify(sigs, syscall.SIGWINCH) go func() { for _ = range sigs { w, h, err := term.GetSize(0) if err == nil { evChan <- Resize {w, h} } else { evChan <- err } } }() return evChan }