Trait creusot_contracts::std::io::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.
Required Methods§
1.70.0 · sourcefn is_terminal(&self) -> bool
fn is_terminal(&self) -> bool
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 return
false
. 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:
- If you run this example by piping some text to it, e.g.
echo "foo" | path/to/executable
it will print:Hello foo
. - If you instead run the example interactively by running
path/to/executable
directly, it will prompt for input.