tapr/
safe_terminal_size.rs

1pub use terminal_size::{Height, Width};
2
3#[cfg(windows)]
4pub fn safe_terminal_size() -> Option<(Width, Height)> {
5    use std::os::windows::io::RawHandle;
6    use winapi::um::processenv::GetStdHandle;
7    use winapi::um::winbase::{STD_ERROR_HANDLE, STD_OUTPUT_HANDLE};
8
9    let stdout = unsafe { GetStdHandle(STD_OUTPUT_HANDLE) } as RawHandle;
10    if let Some(wh) = terminal_size::terminal_size_using_handle(stdout) {
11        Some(wh)
12    } else {
13        let stderr = unsafe { GetStdHandle(STD_ERROR_HANDLE) } as RawHandle;
14        terminal_size::terminal_size_using_handle(stderr)
15    }
16}
17
18#[cfg(not(windows))]
19pub fn safe_terminal_size() -> Option<(Width, Height)> {
20    if let Some(wh) = terminal_size::terminal_size_using_fd(libc::STDOUT_FILENO) {
21        Some(wh)
22    } else {
23        terminal_size::terminal_size_using_fd(libc::STDERR_FILENO)
24    }
25}