summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/render')
-rw-r--r--src/render/cmd.rs8
-rw-r--r--src/render/markdown.rs11
-rw-r--r--src/render/mod.rs5
-rw-r--r--src/render/repl.rs11
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() {