IsTerminal in std::io - Rust (original) (raw)

Trait IsTerminal

1.70.0 · Source

pub trait IsTerminal: Sealed {
    // Required method
    fn is_terminal(&self) -> bool;
}

Expand description

Trait to determine if a descriptor/handle refers to a terminal/tty.

1.70.0 · Source

Returns true if the descriptor/handle refers to a terminal/tty.

On platforms where Rust does not know how to detect a terminal yet, this will returnfalse. This will also return false if an unexpected error occurred, such as from passing an invalid file descriptor.

§Platform-specific behavior

On Windows, in addition to detecting consoles, this currently uses some heuristics to detect older msys/cygwin/mingw pseudo-terminals based on device name: devices with names starting with msys- or cygwin- and ending in -pty will be considered terminals. Note that this may change in the future.

§Examples

An example of a type for which IsTerminal is implemented is Stdin:

use std::io::{self, IsTerminal, Write};

fn main() -> io::Result<()> {
    let stdin = io::stdin();

    // Indicate that the user is prompted for input, if this is a terminal.
    if stdin.is_terminal() {
        print!("> ");
        io::stdout().flush()?;
    }

    let mut name = String::new();
    let _ = stdin.read_line(&mut name)?;

    println!("Hello {}", name.trim_end());

    Ok(())
}

The example can be run in two ways: