mirror of
https://github.com/nushell/nushell.git
synced 2025-06-30 14:40:06 +02:00
Add is-terminal to determine if stdin/out/err are a terminal (#10970)
# Description I'm not sure if "is-terminal" is the best name for this command as there is also "term size". Uses [`is_terminal()`](https://doc.rust-lang.org/stable/std/io/trait.IsTerminal.html#tymethod.is_terminal) which is cross-platform. Possible alternative names: * `term is-tty --stdout` * `term is-tty stdout` * `term is-terminal stdout` If multiple streams are provided an error is returned. The error span covers all arguments as the incompatible one is not known. This may be new? Fixes #10517 # User-Facing Changes * Add `is-terminal` to check if stdin, stdout, or stderr are a terminal (TTY) # Tests + Formatting The nu tests always redirect stdin, stdout, and stderr so a positive test case is not possible without extra work - 🟢 `toolkit fmt` - 🟢 `toolkit clippy` - 🟢 `toolkit test` - 🟢 `toolkit test stdlib` # After Submitting The new command will be added automatically --------- Co-authored-by: Darren Schroeder <343840+fdncred@users.noreply.github.com>
This commit is contained in:
24
crates/nu-command/tests/commands/terminal.rs
Normal file
24
crates/nu-command/tests/commands/terminal.rs
Normal file
@ -0,0 +1,24 @@
|
||||
use nu_test_support::{nu, pipeline};
|
||||
|
||||
// Inside nu! stdout is piped so it won't be a terminal
|
||||
#[test]
|
||||
fn is_terminal_stdout_piped() {
|
||||
let actual = nu!(pipeline(
|
||||
r#"
|
||||
is-terminal --stdout
|
||||
"#
|
||||
));
|
||||
|
||||
assert_eq!(actual.out, "false");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn is_terminal_two_streams() {
|
||||
let actual = nu!(pipeline(
|
||||
r#"
|
||||
is-terminal --stdin --stderr
|
||||
"#
|
||||
));
|
||||
|
||||
assert!(actual.err.contains("Only one stream may be checked"));
|
||||
}
|
Reference in New Issue
Block a user