Skip to content

Test whether a given stream is a terminal, using rustix

License

MIT, Unknown licenses found

Licenses found

MIT
LICENSE-MIT
Unknown
LICENSE-MIT-atty
Notifications You must be signed in to change notification settings

sunfishcode/rustix-is-terminal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rustix-is-terminal

Test whether a given stream is a terminal, using rustix

Github Actions CI Status crates.io page docs.rs docs

As of Rust 1.70, most users should use the IsTerminal trait in the Rust standard library instead of this crate.

This crate is similar to the is-terminal crate, but uses rustix instead of libc in its implementation. This allows it to support no_std on unix-family platforms.


rustix-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.

Example

use rustix_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:

$ cargo run --example stdio
stdin? true
stdout? true
stderr? true

To test stdin, pipe some text to the program:

$ cat | cargo run --example stdio
stdin? false
stdout? true
stderr? true

To test stdout, pipe the program to something:

$ cargo run --example stdio | cat
stdin? true
stdout? false
stderr? true

To test stderr, pipe the program to something redirecting stderr:

$ 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.

About

Test whether a given stream is a terminal, using rustix

Resources

License

MIT, Unknown licenses found

Licenses found

MIT
LICENSE-MIT
Unknown
LICENSE-MIT-atty

Stars

Watchers

Forks

Packages

No packages published

Languages