diff options
author | Kirawi | 2024-02-11 17:38:09 +0000 |
---|---|---|
committer | GitHub | 2024-02-11 17:38:09 +0000 |
commit | 786b5c533e32cfe88dbf8742fdbc18829fb46334 (patch) | |
tree | 3f59fdd093729bf868cd96623867a6392686cd83 | |
parent | 581a1ebf5d327c1128fe6c283578e8f36a4b5fb5 (diff) |
follow neovim's truecolor detection (#9577)
-rw-r--r-- | Cargo.lock | 1 | ||||
-rw-r--r-- | helix-term/Cargo.toml | 1 | ||||
-rw-r--r-- | helix-term/src/lib.rs | 25 |
3 files changed, 21 insertions, 6 deletions
@@ -1387,6 +1387,7 @@ dependencies = [ "signal-hook-tokio", "smallvec", "tempfile", + "termini", "tokio", "tokio-stream", "toml", diff --git a/helix-term/Cargo.toml b/helix-term/Cargo.toml index a0d6754d..f3343b7a 100644 --- a/helix-term/Cargo.toml +++ b/helix-term/Cargo.toml @@ -42,6 +42,7 @@ signal-hook = "0.3" tokio-stream = "0.1" futures-util = { version = "0.3", features = ["std", "async-await"], default-features = false } arc-swap = { version = "1.6.0" } +termini = "1" # Logging fern = "0.6" diff --git a/helix-term/src/lib.rs b/helix-term/src/lib.rs index b1413ed0..cdde86ec 100644 --- a/helix-term/src/lib.rs +++ b/helix-term/src/lib.rs @@ -22,17 +22,30 @@ use url::Url; pub use keymap::macros::*; -#[cfg(not(windows))] -fn true_color() -> bool { - std::env::var("COLORTERM") - .map(|v| matches!(v.as_str(), "truecolor" | "24bit")) - .unwrap_or(false) -} #[cfg(windows)] fn true_color() -> bool { true } +#[cfg(not(windows))] +fn true_color() -> bool { + if matches!( + std::env::var("COLORTERM").map(|v| matches!(v.as_str(), "truecolor" | "24bit")), + Ok(true) + ) { + return true; + } + + match termini::TermInfo::from_env() { + Ok(t) => { + t.extended_cap("RGB").is_some() + || t.extended_cap("Tc").is_some() + || (t.extended_cap("setrgbf").is_some() && t.extended_cap("setrgbb").is_some()) + } + Err(_) => false, + } +} + /// Function used for filtering dir entries in the various file pickers. fn filter_picker_entry(entry: &DirEntry, root: &Path, dedup_symlinks: bool) -> bool { // We always want to ignore the .git directory, otherwise if |