I'd like to disable colors when the output is piped somewhere else than a terminal.
As of Rust 1.70, std::io::IsTerminal is available:
use std::io::IsTerminal;
fn main() {
dbg!(std::io::stdout().is_terminal());
}
Alternatively, crossterm has a is_tty() method, and there's also the is-terminal crate (a maintained fork of atty).
Translated into the POSIX language, your question would be: "is stdout not a TTY", so the answer on *nix can be obtained by !isatty(STDOUT_FILENO). The libc crate can be used to call this from Rust.
On Windows, it's complicated, so you're better off using the atty crate.
[edit] You can use the atty crate on Linux as well, making it a convenient solution for cross-platform programs.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With