func interactive(c *g9pc.Client) { reader, ok := bufio.NewReaderSize(os.Stdin, 8192) if ok != nil { fmt.Fprintf(os.Stderr, "can't create reader buffer: %s\n", ok) } done := make(chan error) go func() { e := c.Wait() fmt.Printf("wait finished (%v)\n", e) done <- e }() loop: for { select { case e := <-done: fmt.Fprintf(os.Stderr, "server: %v\n", e) break loop default: } fmt.Print(*prompt) line, ok := reader.ReadSlice('\n') if ok != nil { fmt.Fprintf(os.Stderr, "exiting...\n") break } str := strings.TrimSpace(string(line)) // TODO: handle larger input lines by doubling buffer in := strings.Split(str, "\n") for i := range in { if len(in[i]) > 0 { cmd(c, in[i]) } } } }