diff options
| author | sigoden <sigoden@gmail.com> | 2023-11-03 18:36:17 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-03 18:36:17 +0800 |
| commit | 887bf0a744646c6d9cfb361ba0c929d4a4342337 (patch) | |
| tree | 3e3144e000f4f738fd495d8f5261d1f67f4dc3a0 /src/render/repl.rs | |
| parent | 811e605fbfd5b4973cbff9439db14c76c76b140f (diff) | |
| download | aichat-887bf0a744646c6d9cfb361ba0c929d4a4342337.tar.gz | |
fix: fix rendering markdown in REPL (#207)
Diffstat (limited to 'src/render/repl.rs')
| -rw-r--r-- | src/render/repl.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/render/repl.rs b/src/render/repl.rs index 31c597e..34212c3 100644 --- a/src/render/repl.rs +++ b/src/render/repl.rs @@ -70,7 +70,9 @@ fn repl_render_stream_inner( cursor::MoveTo(0, 0), )?; } - queue!(writer, terminal::Clear(terminal::ClearType::UntilNewLine))?; + + // No guarantee that text returned by render will not be re-layouted, so it is better to clear it. + queue!(writer, terminal::Clear(terminal::ClearType::FromCursorDown))?; if text.contains('\n') { let text = format!("{buffer}{text}"); @@ -79,6 +81,9 @@ fn repl_render_stream_inner( let output = render.render(head); print_block(writer, &output, columns)?; queue!(writer, style::Print(&buffer),)?; + + // No guarantee the buffer width of the buffer will not exceed the number of columns. + // So we calcuate the number of rows needed, rather than setting it directly to 1. buffer_rows = need_rows(&buffer, columns); } else { buffer = format!("{buffer}{text}"); @@ -87,6 +92,8 @@ fn repl_render_stream_inner( let (head, tail) = split_line_tail(&output); buffer_rows = print_block(writer, head, columns)?; queue!(writer, style::Print(&tail),)?; + + // Same as above. buffer_rows += need_rows(tail, columns); } else { queue!(writer, style::Print(&output))?; |
