diff options
Diffstat (limited to 'src/render/cmd.rs')
| -rw-r--r-- | src/render/cmd.rs | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/src/render/cmd.rs b/src/render/cmd.rs index 75768b9..e942025 100644 --- a/src/render/cmd.rs +++ b/src/render/cmd.rs @@ -1,6 +1,6 @@ use super::{MarkdownRender, ReplyEvent}; -use crate::utils::{spaces, split_line_sematic, split_line_tail, AbortSignal}; +use crate::utils::{split_line_sematic, split_line_tail, AbortSignal}; use anyhow::Result; use crossbeam::channel::Receiver; @@ -12,7 +12,7 @@ pub fn cmd_render_stream( abort: &AbortSignal, ) -> Result<()> { let mut buffer = String::new(); - let mut col = 0; + let mut indent = 0; loop { if abort.aborted() { return Ok(()); @@ -24,10 +24,9 @@ pub fn cmd_render_stream( let text = format!("{buffer}{text}"); let (head, tail) = split_line_tail(&text); buffer = tail.to_string(); - let input = format!("{}{head}", spaces(col)); - let output = render.render(&input); - println!("{}", &output[col..]); - col = 0; + let output = render.render_with_indent(head, indent); + println!("{}", output); + indent = 0; } else { buffer = format!("{buffer}{text}"); if !(render.is_code() @@ -38,16 +37,15 @@ pub fn cmd_render_stream( { if let Some((head, remain)) = split_line_sematic(&buffer) { buffer = remain; - let input = format!("{}{head}", spaces(col)); - let output = render.render(&input); - let output = &output[col..]; - let (_, tail) = split_line_tail(output); - if render.wrap_width().is_some() { + let output = render.render_with_indent(&head, indent); + let (_, tail) = split_line_tail(&output); + if let Some(width) = render.wrap_width() { if output.contains('\n') { - col = display_width(tail); + indent = display_width(tail); } else { - col += display_width(output); + indent += display_width(&output); } + indent %= width as usize; } print!("{}", output); } @@ -55,9 +53,7 @@ pub fn cmd_render_stream( } } ReplyEvent::Done => { - let input = format!("{}{buffer}", spaces(col)); - let output = render.render(&input); - let output = &output[col..]; + let output = render.render_with_indent(&buffer, indent); println!("{}", output); break; } |
