diff --git a/src/encode/writer/console.rs b/src/encode/writer/console.rs index 6209fb97..9a1ba7d2 100644 --- a/src/encode/writer/console.rs +++ b/src/encode/writer/console.rs @@ -4,6 +4,8 @@ use std::{fmt, io}; +use once_cell::sync::Lazy; + use crate::encode::{self, Style}; use once_cell::sync::Lazy; @@ -42,6 +44,43 @@ pub enum ColorMode { Never, } +#[cfg(not(windows))] +static COLOR_MODE: Lazy = Lazy::new(|| { + let no_color = std::env::var("NO_COLOR") + .map(|var| var != "0") + .unwrap_or(false); + let clicolor_force = std::env::var("CLICOLOR_FORCE") + .map(|var| var != "0") + .unwrap_or(false); + if no_color { + ColorMode::Never + } + else if clicolor_force { + ColorMode::Always + } else { + let clicolor = std::env::var("CLICOLOR") + .map(|var| var != "0") + .unwrap_or(true); + if clicolor { + ColorMode::Auto + } else { + ColorMode::Never + } + } +}); + +/// The color output mode for a `ConsoleAppender` +#[derive(Clone, Copy, Default)] +pub enum ColorMode { + /// Print color only if the output is recognized as a console + #[default] + Auto, + /// Force color output + Always, + /// Never print color + Never, +} + /// An `encode::Write`r that outputs to a console. pub struct ConsoleWriter(imp::Writer);