summaryrefslogtreecommitdiffstats
path: root/src/utils/mod.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2023-10-30 11:45:07 +0800
committerGitHub <noreply@github.com>2023-10-30 11:45:07 +0800
commitf2c9f00bda1e69306bb2b73843ed7a95cd703bb5 (patch)
tree19d1266a7a532f48e22e878fe8420710be6d9ede /src/utils/mod.rs
parentb3e687943811fd48589d7030122c33c7e9867ec9 (diff)
downloadaichat-f2c9f00bda1e69306bb2b73843ed7a95cd703bb5.tar.gz
fix: detect light theme only by env var (#177)
Diffstat (limited to 'src/utils/mod.rs')
-rw-r--r--src/utils/mod.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/utils/mod.rs b/src/utils/mod.rs
index fa26dcf..699f8a0 100644
--- a/src/utils/mod.rs
+++ b/src/utils/mod.rs
@@ -1,5 +1,3 @@
-#[cfg(not(target_os = "windows"))]
-pub(crate) mod termbg;
mod tiktoken;
use self::tiktoken::cl100k_base;
@@ -45,3 +43,21 @@ pub fn split_text(text: &str) -> Result<Vec<String>, anyhow::Error> {
let data: Result<Vec<String>, _> = tokens.into_iter().map(|v| bpe.decode(&[v])).collect();
data
}
+
+pub fn light_theme_from_colorfgbg(colorfgbg: &str) -> Option<bool> {
+ let parts: Vec<_> = colorfgbg.split(';').collect();
+ let bg = match parts.len() {
+ 2 => &parts[1],
+ 3 => &parts[2],
+ _ => {
+ return None;
+ }
+ };
+ let bg = bg.parse::<u8>().ok()?;
+ let (r, g, b) = ansi_colours::rgb_from_ansi256(bg);
+
+ let v = 0.2126 * r as f32 + 0.7152 * g as f32 + 0.0722 * b as f32;
+
+ let light = v > 128.0;
+ Some(light)
+}