"env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"multimap 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
"term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
"toml 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-segmentation 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
pub fn print_diff<F>(diff: Vec<Mismatch>, get_section_title: F)
where F: Fn(u32) -> String
{
- if let Some(t) = term::stdout() {
- print_diff_fancy(diff, get_section_title, t);
- } else {
- print_diff_basic(diff, get_section_title);
+ match term::stdout() {
+ Some(_) if isatty() => print_diff_fancy(diff, get_section_title, term::stdout().unwrap()),
+ _ => print_diff_basic(diff, get_section_title),
+ }
+
+ // isatty shamelessly adapted from cargo.
+ #[cfg(unix)]
+ fn isatty() -> bool {
+ extern crate libc;
+
+ unsafe { libc::isatty(libc::STDOUT_FILENO) != 0 }
+ }
+ #[cfg(windows)]
+ fn isatty() -> bool {
+ extern crate kernel32;
+ extern crate winapi;
+
+ unsafe {
+ let handle = kernel32::GetStdHandle(winapi::winbase::STD_OUTPUT_HANDLE);
+ let mut out = 0;
+ kernel32::GetConsoleMode(handle, &mut out) != 0
+ }
}
}