diff options
Diffstat (limited to 'vendor/is-terminal/README.md')
-rw-r--r-- | vendor/is-terminal/README.md | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/vendor/is-terminal/README.md b/vendor/is-terminal/README.md new file mode 100644 index 0000000..045ca9e --- /dev/null +++ b/vendor/is-terminal/README.md @@ -0,0 +1,110 @@ +<div align="center"> + <h1><code>is-terminal</code></h1> + + <p> + <strong>Test whether a given stream is a terminal</strong> + </p> + + <p> + <a href="https://github.com/sunfishcode/is-terminal/actions?query=workflow%3ACI"><img src="https://github.com/sunfishcode/is-terminal/workflows/CI/badge.svg" alt="Github Actions CI Status" /></a> + <a href="https://crates.io/crates/is-terminal"><img src="https://img.shields.io/crates/v/is-terminal.svg" alt="crates.io page" /></a> + <a href="https://docs.rs/is-terminal"><img src="https://docs.rs/is-terminal/badge.svg" alt="docs.rs docs" /></a> + </p> +</div> + +As of Rust 1.70, most users should use the [`IsTerminal`] trait in the Rust +standard library instead of this crate. + +<hr> + +is-terminal is a simple utility that answers one question: + +> Is this a terminal? + +A "terminal", also known as a "tty", is an I/O device which may be interactive +and may support color and other special features. This crate doesn't provide +any of those features; it just answers this one question. + +On Unix-family platforms, this is effectively the same as the [`isatty`] +function for testing whether a given stream is a terminal, though it accepts +high-level stream types instead of raw file descriptors. + +On Windows, it uses a variety of techniques to determine whether the given +stream is a terminal. + +This crate is derived from [the atty crate] with [PR \#51] bug fix and +[PR \#54] port to windows-sys applied. The only additional difference is that +the atty crate only accepts stdin, stdout, or stderr, while this crate accepts +any stream. In particular, this crate does not access any stream that is not +passed to it, in accordance with [I/O safety]. + +[PR \#51]: https://github.com/softprops/atty/pull/51 +[PR \#54]: https://github.com/softprops/atty/pull/54 + +## Example + +```rust +use is_terminal::IsTerminal; + +fn main() { + if std::io::stdout().is_terminal() { + println!("Stdout is a terminal"); + } else { + println!("Stdout is not a terminal"); + } +} +``` + +## Testing + +This library is tested on both Unix-family and Windows platforms. + +To test it on a platform manually, use the provided `stdio` example program. +When run normally, it prints this: + +```bash +$ cargo run --example stdio +stdin? true +stdout? true +stderr? true +``` + +To test stdin, pipe some text to the program: + +```bash +$ cat | cargo run --example stdio +stdin? false +stdout? true +stderr? true +``` + +To test stdout, pipe the program to something: + +```bash +$ cargo run --example stdio | cat +stdin? true +stdout? false +stderr? true +``` + +To test stderr, pipe the program to something redirecting stderr: + +```bash +$ cargo run --example stdio 2>&1 | cat +stdin? true +stdout? false +stderr? false +``` + +# Minimum Supported Rust Version (MSRV) + +This crate currently works on the version of [Rust on Debian stable], which is +currently Rust 1.63. This policy may change in the future, in minor version +releases, so users using a fixed version of Rust should pin to a specific +version of this crate. + +[`isatty`]: https://man7.org/linux/man-pages/man3/isatty.3.html +[the atty crate]: https://crates.io/crates/atty +[I/O safety]: https://github.com/rust-lang/rfcs/blob/master/text/3128-io-safety.md +[Rust on Debian stable]: https://packages.debian.org/stable/rust/rustc +[`IsTerminal`]: https://doc.rust-lang.org/stable/std/io/trait.IsTerminal.html |