mi6_cli/display/
terminal.rs1use std::io::{IsTerminal, stdout};
4use std::process::Command;
5
6pub const DEFAULT_TERMINAL_WIDTH: usize = 120;
8
9pub fn get_terminal_width() -> usize {
11 Command::new("stty")
12 .args(["size"])
13 .stdin(std::process::Stdio::inherit())
14 .output()
15 .ok()
16 .and_then(|output| {
17 let stdout = String::from_utf8_lossy(&output.stdout);
18 stdout.split_whitespace().nth(1)?.parse().ok()
20 })
21 .unwrap_or(DEFAULT_TERMINAL_WIDTH)
22}
23
24pub fn use_colors() -> bool {
32 stdout().is_terminal() && std::env::var_os("NO_COLOR").is_none()
33}
34
35pub fn use_colors_stderr() -> bool {
41 std::io::stderr().is_terminal() && std::env::var_os("NO_COLOR").is_none()
42}
43
44#[cfg(test)]
45mod tests {
46 use super::*;
47
48 #[test]
49 fn test_get_terminal_width_returns_positive() {
50 let width = get_terminal_width();
51 assert!(width > 0);
52 }
53}