diff --git a/crates/typst-cli/src/args.rs b/crates/typst-cli/src/args.rs index ec5e8ed11..c14f0277f 100644 --- a/crates/typst-cli/src/args.rs +++ b/crates/typst-cli/src/args.rs @@ -2,7 +2,7 @@ use std::fmt::{self, Display, Formatter}; use std::path::PathBuf; use clap::builder::ValueParser; -use clap::{ArgAction, Args, Parser, Subcommand, ValueEnum}; +use clap::{ArgAction, Args, ColorChoice, Parser, Subcommand, ValueEnum}; use semver::Version; /// The character typically used to separate path components @@ -17,6 +17,18 @@ pub struct CliArguments { #[command(subcommand)] pub command: Command, + /// Set when to use color. + /// auto = use color if a capable terminal is detected + #[clap( + long, + value_name = "WHEN", + require_equals = true, + num_args = 0..=1, + default_value = "auto", + default_missing_value = "always", + )] + pub color: ColorChoice, + /// Path to a custom CA certificate to use when making network requests. #[clap(long = "cert", env = "TYPST_CERT")] pub cert: Option, diff --git a/crates/typst-cli/src/main.rs b/crates/typst-cli/src/main.rs index 15a758af8..8917adc3d 100644 --- a/crates/typst-cli/src/main.rs +++ b/crates/typst-cli/src/main.rs @@ -68,10 +68,16 @@ fn print_error(msg: &str) -> io::Result<()> { /// Get stderr with color support if desirable. fn color_stream() -> termcolor::StandardStream { - termcolor::StandardStream::stderr(if std::io::stderr().is_terminal() { - ColorChoice::Auto - } else { - ColorChoice::Never + termcolor::StandardStream::stderr(match ARGS.color { + clap::ColorChoice::Auto => { + if std::io::stderr().is_terminal() { + ColorChoice::Auto + } else { + ColorChoice::Never + } + } + clap::ColorChoice::Always => ColorChoice::Always, + clap::ColorChoice::Never => ColorChoice::Never, }) }