summaryrefslogtreecommitdiffstats
path: root/src/render/mod.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2023-10-30 10:07:01 +0800
committerGitHub <noreply@github.com>2023-10-30 10:07:01 +0800
commitb276dfedd2d13de9918b9b87a3d543e7b5eca95e (patch)
tree33e1f864ef38e45ebc297e15ce519ee8105b8757 /src/render/mod.rs
parent632a6fcc0bfb5b33858cd0fa3876e43ce2073cb3 (diff)
downloadaichat-b276dfedd2d13de9918b9b87a3d543e7b5eca95e.tar.gz
feat: support textwrap (#171)
* feat: support textwrap * improve cmd_render_stream * done cmd_render_stream * add `-w` alias to `--wrap` * done repl_render_stream * add `config.wrap_code` * remove cached config.wrap_width * fix unxpected duplicate lines on kitty * refactor markdown render * improve render * fix test
Diffstat (limited to 'src/render/mod.rs')
-rw-r--r--src/render/mod.rs25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/render/mod.rs b/src/render/mod.rs
index e7c6228..9d7b06a 100644
--- a/src/render/mod.rs
+++ b/src/render/mod.rs
@@ -4,7 +4,7 @@ mod repl;
use self::cmd::cmd_render_stream;
#[allow(clippy::module_name_repetitions)]
-pub use self::markdown::MarkdownRender;
+pub use self::markdown::{MarkdownRender, RenderOptions};
use self::repl::repl_render_stream;
use crate::client::Client;
@@ -26,26 +26,27 @@ pub fn render_stream(
abort: SharedAbortSignal,
wg: WaitGroup,
) -> Result<String> {
- let (highlight, light_theme) = config.read().get_render_options();
- let mut stream_handler = if highlight {
+ let render_options = config.read().get_render_options();
+ let mut stream_handler = {
let (tx, rx) = unbounded();
let abort_clone = abort.clone();
spawn(move || {
- let err = if repl {
- repl_render_stream(&rx, light_theme, &abort)
- } else {
- cmd_render_stream(&rx, light_theme, &abort)
+ let run = move || {
+ if repl {
+ let mut render = MarkdownRender::init(render_options)?;
+ repl_render_stream(&rx, &mut render, &abort)
+ } else {
+ let mut render = MarkdownRender::init(render_options)?;
+ cmd_render_stream(&rx, &mut render, &abort)
+ }
};
- if let Err(err) = err {
+ if let Err(err) = run() {
let err = format!("{err:?}");
print_now!("{}\n\n", err.trim());
}
drop(wg);
});
- ReplyStreamHandler::new(Some(tx), repl, abort_clone)
- } else {
- drop(wg);
- ReplyStreamHandler::new(None, repl, abort)
+ ReplyStreamHandler::new(tx, abort_clone)
};
client.send_message_streaming(input, &mut stream_handler)?;
let buffer = stream_handler.get_buffer();