diff options
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/cmd.rs | 8 | ||||
| -rw-r--r-- | src/render/markdown.rs | 11 | ||||
| -rw-r--r-- | src/render/mod.rs | 5 | ||||
| -rw-r--r-- | src/render/repl.rs | 11 |
4 files changed, 25 insertions, 10 deletions
diff --git a/src/render/cmd.rs b/src/render/cmd.rs index 2a25768..62a0a34 100644 --- a/src/render/cmd.rs +++ b/src/render/cmd.rs @@ -6,9 +6,13 @@ use crate::repl::{ReplyStreamEvent, SharedAbortSignal}; use anyhow::Result; use crossbeam::channel::Receiver; -pub fn cmd_render_stream(rx: Receiver<ReplyStreamEvent>, abort: SharedAbortSignal) -> Result<()> { +pub fn cmd_render_stream( + rx: Receiver<ReplyStreamEvent>, + light_theme: bool, + abort: SharedAbortSignal, +) -> Result<()> { let mut buffer = String::new(); - let mut markdown_render = MarkdownRender::new(); + let mut markdown_render = MarkdownRender::new(light_theme); loop { if abort.aborted() { return Ok(()); diff --git a/src/render/markdown.rs b/src/render/markdown.rs index affaf21..5bdca9d 100644 --- a/src/render/markdown.rs +++ b/src/render/markdown.rs @@ -7,6 +7,7 @@ use syntect::{easy::HighlightLines, parsing::SyntaxReference}; /// Monokai Extended const MD_THEME: &[u8] = include_bytes!("../../assets/monokai-extended.theme.bin"); +const MD_THEME_LIGHT: &[u8] = include_bytes!("../../assets/monokai-extended-light.theme.bin"); /// Comes from https://github.com/sharkdp/bat/raw/5e77ca37e89c873e4490b42ff556370dc5c6ba4f/assets/syntaxes.bin const SYNTAXES: &[u8] = include_bytes!("../../assets/syntaxes.bin"); @@ -29,10 +30,14 @@ pub struct MarkdownRender { } impl MarkdownRender { - pub fn new() -> Self { + pub fn new(light_theme: bool) -> Self { let syntax_set: SyntaxSet = bincode::deserialize_from(SYNTAXES).expect("invalid syntaxes binary"); - let md_theme: Theme = bincode::deserialize_from(MD_THEME).expect("invalid md_theme binary"); + let md_theme: Theme = if light_theme { + bincode::deserialize_from(MD_THEME_LIGHT).expect("invalid theme binary") + } else { + bincode::deserialize_from(MD_THEME).expect("invalid theme binary") + }; let code_color = get_code_color(&md_theme); let md_syntax = syntax_set.find_syntax_by_extension("md").unwrap().clone(); let line_type = LineType::Normal; @@ -223,7 +228,7 @@ mod tests { #[test] fn test_render() { - let render = MarkdownRender::new(); + let render = MarkdownRender::new(true); assert!(render.find_syntax("csharp").is_some()); } } diff --git a/src/render/mod.rs b/src/render/mod.rs index 4d5c6d3..d200087 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -19,6 +19,7 @@ pub fn render_stream( input: &str, client: &ChatGptClient, highlight: bool, + light_theme: bool, repl: bool, abort: SharedAbortSignal, wg: WaitGroup, @@ -28,9 +29,9 @@ pub fn render_stream( let abort_clone = abort.clone(); spawn(move || { let err = if repl { - repl_render_stream(rx, abort) + repl_render_stream(rx, light_theme, abort) } else { - cmd_render_stream(rx, abort) + cmd_render_stream(rx, light_theme, abort) }; if let Err(err) = err { let err = format!("{err:?}"); diff --git a/src/render/repl.rs b/src/render/repl.rs index d7ccbc1..04dee73 100644 --- a/src/render/repl.rs +++ b/src/render/repl.rs @@ -16,11 +16,15 @@ use std::{ }; use unicode_width::UnicodeWidthStr; -pub fn repl_render_stream(rx: Receiver<ReplyStreamEvent>, abort: SharedAbortSignal) -> Result<()> { +pub fn repl_render_stream( + rx: Receiver<ReplyStreamEvent>, + light_theme: bool, + abort: SharedAbortSignal, +) -> Result<()> { enable_raw_mode()?; let mut stdout = io::stdout(); - let ret = repl_render_stream_inner(rx, abort, &mut stdout); + let ret = repl_render_stream_inner(rx, light_theme, abort, &mut stdout); disable_raw_mode()?; @@ -29,13 +33,14 @@ pub fn repl_render_stream(rx: Receiver<ReplyStreamEvent>, abort: SharedAbortSign fn repl_render_stream_inner( rx: Receiver<ReplyStreamEvent>, + light_theme: bool, abort: SharedAbortSignal, writer: &mut Stdout, ) -> Result<()> { let mut last_tick = Instant::now(); let tick_rate = Duration::from_millis(100); let mut buffer = String::new(); - let mut markdown_render = MarkdownRender::new(); + let mut markdown_render = MarkdownRender::new(light_theme); let terminal_columns = terminal::size()?.0; loop { if abort.aborted() { |
