]> git.giacomolli.uk - onechat/blobdiff - terminal.go
Accept owner photos and image files in Telegram
[onechat] / terminal.go
index 203cb5e64adb2d6a8054f71e2b0431536e5c1331..9945620bdb5fd5329ef6e9e1bc32b922f2cef31a 100644 (file)
@@ -134,8 +134,10 @@ func terminalSendLines(ctx context.Context, conn net.Conn, in io.Reader) error {
 
 // 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)
 
@@ -157,7 +159,24 @@ func terminalShowEvents(conn net.Conn, out io.Writer) error {
                        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)
                }