From b276dfedd2d13de9918b9b87a3d543e7b5eca95e Mon Sep 17 00:00:00 2001 From: sigoden Date: Mon, 30 Oct 2023 10:07:01 +0800 Subject: 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 --- src/render/mod.rs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'src/render/mod.rs') 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 { - 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(); -- cgit v1.2.3