diff options
Diffstat (limited to 'vendor/supports-unicode/src/lib.rs')
-rw-r--r-- | vendor/supports-unicode/src/lib.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/vendor/supports-unicode/src/lib.rs b/vendor/supports-unicode/src/lib.rs new file mode 100644 index 0000000..b47b39b --- /dev/null +++ b/vendor/supports-unicode/src/lib.rs @@ -0,0 +1,42 @@ +#![doc = include_str!("../README.md")] + +/// possible stream sources +#[derive(Clone, Copy, Debug)] +pub enum Stream { + Stdout, + Stderr, +} + +fn is_a_tty(stream: Stream) -> bool { + use is_terminal::*; + match stream { + Stream::Stdout => std::io::stdout().is_terminal(), + Stream::Stderr => std::io::stderr().is_terminal(), + } +} + +pub fn on(stream: Stream) -> bool { + if !is_a_tty(stream) { + // If we're just piping out, it's fine to spit out unicode! :) + true + } else if std::env::consts::OS == "windows" { + // Just a handful of things! + std::env::var("CI").is_ok() + || std::env::var("WT_SESSION").is_ok() // Windows Terminal + || std::env::var("ConEmuTask") == Ok("{cmd:Cmder}".into()) // ConEmu and cmder + || std::env::var("TERM_PROGRAM") == Ok("vscode".into()) + || std::env::var("TERM") == Ok("xterm-256color".into()) + || std::env::var("TERM") == Ok("alacritty".into()) + } else if std::env::var("TERM") == Ok("linux".into()) { + // Linux kernel console. Maybe redundant with the below?... + false + } else { + // From https://github.com/iarna/has-unicode/blob/master/index.js + let ctype = std::env::var("LC_ALL") + .or_else(|_| std::env::var("LC_CTYPE")) + .or_else(|_| std::env::var("LANG")) + .unwrap_or_else(|_| "".into()) + .to_uppercase(); + ctype.ends_with("UTF8") || ctype.ends_with("UTF-8") + } +} |