// terminalShowEvents writes each event from the daemon to out until the
// connection closes. Only replies and work messages use Markdown styles, and
-// only when out is a terminal.
+// only when out is a terminal. Terminal output ends each shown idle event with
+// an input prompt and clears that prompt before the next shown event.
func terminalShowEvents(conn net.Conn, out io.Writer) error {
+ busy, prompt := false, false
scanner := bufio.NewScanner(conn)
scanner.Buffer(make([]byte, 64*1024), socketRequestBytes)
text = strings.Join(terminalMarkdown(text, columns), "\n")
}
- _, err = io.WriteString(out, text+"\n")
+ switch event.Kind {
+ case "busy":
+ busy = true
+ case "idle":
+ busy = false
+ }
+
+ text += "\n"
+ if prompt {
+ text = "\r\x1b[2K" + text
+ }
+
+ prompt = columns > 0 && !busy
+ if prompt {
+ text += "> "
+ }
+
+ _, err = io.WriteString(out, text)
if err != nil {
return fmt.Errorf("write terminal event: %w", err)
}