summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2023-03-10 07:44:34 +0800
committersigoden <sigoden@gmail.com>2023-03-10 07:55:53 +0800
commit54e6edbf2121c780c3bf297ec5e30d80f68e3763 (patch)
tree24ef2a4be0b1547496c328c147ea59558bc59dfc /src/render
parent865fb49af90a96c6fbed146c6a7ad55f516c1ec3 (diff)
downloadaichat-54e6edbf2121c780c3bf297ec5e30d80f68e3763.tar.gz
chore: recovery cursor in case of stream abort
Diffstat (limited to 'src/render')
-rw-r--r--src/render/repl.rs11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/render/repl.rs b/src/render/repl.rs
index 80fc9a7..d7ccbc1 100644
--- a/src/render/repl.rs
+++ b/src/render/repl.rs
@@ -70,11 +70,16 @@ fn repl_render_stream_inner(
}
ReplyStreamEvent::Done => {
let output = markdown_render.render_line_stateless(&buffer);
- queue!(writer, style::Print(output.trim_end()), style::Print("\n"))?;
- if cfg!(windows) {
- queue!(writer, style::Print("\n"))?;
+ let trimed_output = output.trim_end();
+ if !trimed_output.is_empty() {
+ queue!(writer, style::Print(output.trim_end()))?;
+ writer.flush()?;
}
+
+ let (_, row) = cursor::position()?;
+ queue!(writer, cursor::MoveTo(0, row), style::Print("\n\n"))?;
writer.flush()?;
+
break;
}
}