fix: do not color health summary when stdout is piped (#2836)

* fix: do not color health summary when stdout is piped

* fix: use crossterm instead of is-terminal
This commit is contained in:
lazytanuki 2022-06-20 17:07:32 +02:00 committed by GitHub
parent e2878a6e21
commit 55f4f69515
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,7 @@
use crossterm::style::{Color, Print, Stylize};
use crossterm::{
style::{Color, Print, Stylize},
tty::IsTty,
};
use helix_core::config::{default_syntax_loader, user_syntax_loader};
use helix_loader::grammar::load_runtime_file;
use std::io::Write;
@ -106,17 +109,19 @@ pub fn languages_all() -> std::io::Result<()> {
let terminal_cols = crossterm::terminal::size().map(|(c, _)| c).unwrap_or(80);
let column_width = terminal_cols as usize / headings.len();
let is_terminal = std::io::stdout().is_tty();
let column = |item: &str, color: Color| {
let data = format!(
let mut data = format!(
"{:width$}",
item.get(..column_width - 2)
.map(|s| format!("{}", s))
.unwrap_or_else(|| item.to_string()),
width = column_width,
)
.stylize()
.with(color);
);
if is_terminal {
data = data.stylize().with(color).to_string();
}
// We can't directly use println!() because of
// https://github.com/crossterm-rs/crossterm/issues/589