forked from extern/nushell
Use is-terminal
crate for now (#9670)
# Description Until we bump our minimal Rust version to `1.70.0` we can't use `std::io::IsTerminal`. The crate `is-terminal` (depending on `rustix` or `windows-sys`) can provide the same. Get's rid of the dependency on the outdated `atty` crate. We already transitively depend on it (e.g. through `miette`) As soon as we reach the new Rust version we can supersede this with @nibon7's #9550 Co-authored-by: nibon7 <nibon7@163.com>
This commit is contained in:
parent
026335fff0
commit
39b43d1e4b
46
Cargo.lock
generated
46
Cargo.lock
generated
@ -278,17 +278,6 @@ dependencies = [
|
|||||||
"critical-section",
|
"critical-section",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "atty"
|
|
||||||
version = "0.2.14"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
|
||||||
dependencies = [
|
|
||||||
"hermit-abi 0.1.19",
|
|
||||||
"libc",
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
@ -670,17 +659,6 @@ dependencies = [
|
|||||||
"encoding_rs",
|
"encoding_rs",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "colored"
|
|
||||||
version = "2.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6"
|
|
||||||
dependencies = [
|
|
||||||
"is-terminal",
|
|
||||||
"lazy_static",
|
|
||||||
"windows-sys 0.48.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "comfy-table"
|
name = "comfy-table"
|
||||||
version = "6.2.0"
|
version = "6.2.0"
|
||||||
@ -1649,15 +1627,6 @@ version = "0.4.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hermit-abi"
|
|
||||||
version = "0.1.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
@ -1880,7 +1849,7 @@ version = "1.0.11"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
|
checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hermit-abi 0.3.2",
|
"hermit-abi",
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
@ -1910,7 +1879,7 @@ version = "0.4.8"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "24fddda5af7e54bf7da53067d6e802dbcc381d0a8eef629df528e3ebf68755cb"
|
checksum = "24fddda5af7e54bf7da53067d6e802dbcc381d0a8eef629df528e3ebf68755cb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hermit-abi 0.3.2",
|
"hermit-abi",
|
||||||
"rustix 0.38.3",
|
"rustix 0.38.3",
|
||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
@ -2425,7 +2394,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "09c762b6267c4593555bb38f1df19e9318985bc4de60b5e8462890856a9a5b4c"
|
checksum = "09c762b6267c4593555bb38f1df19e9318985bc4de60b5e8462890856a9a5b4c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assert-json-diff",
|
"assert-json-diff",
|
||||||
"colored",
|
|
||||||
"futures",
|
"futures",
|
||||||
"hyper",
|
"hyper",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
@ -2572,10 +2540,10 @@ name = "nu"
|
|||||||
version = "0.82.1"
|
version = "0.82.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
"atty",
|
|
||||||
"criterion",
|
"criterion",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
"ctrlc",
|
"ctrlc",
|
||||||
|
"is-terminal",
|
||||||
"log",
|
"log",
|
||||||
"miette",
|
"miette",
|
||||||
"mimalloc",
|
"mimalloc",
|
||||||
@ -2637,11 +2605,11 @@ dependencies = [
|
|||||||
name = "nu-cli"
|
name = "nu-cli"
|
||||||
version = "0.82.1"
|
version = "0.82.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"atty",
|
|
||||||
"chrono",
|
"chrono",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
"fancy-regex",
|
"fancy-regex",
|
||||||
"fuzzy-matcher",
|
"fuzzy-matcher",
|
||||||
|
"is-terminal",
|
||||||
"is_executable",
|
"is_executable",
|
||||||
"log",
|
"log",
|
||||||
"miette",
|
"miette",
|
||||||
@ -2749,7 +2717,6 @@ version = "0.82.1"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"Inflector",
|
"Inflector",
|
||||||
"alphanumeric-sort",
|
"alphanumeric-sort",
|
||||||
"atty",
|
|
||||||
"base64",
|
"base64",
|
||||||
"bracoxide",
|
"bracoxide",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
@ -2773,6 +2740,7 @@ dependencies = [
|
|||||||
"indexmap 2.0.0",
|
"indexmap 2.0.0",
|
||||||
"indicatif",
|
"indicatif",
|
||||||
"is-root",
|
"is-root",
|
||||||
|
"is-terminal",
|
||||||
"itertools",
|
"itertools",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
@ -2973,8 +2941,8 @@ dependencies = [
|
|||||||
name = "nu-system"
|
name = "nu-system"
|
||||||
version = "0.82.1"
|
version = "0.82.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"atty",
|
|
||||||
"chrono",
|
"chrono",
|
||||||
|
"is-terminal",
|
||||||
"libc",
|
"libc",
|
||||||
"libproc",
|
"libproc",
|
||||||
"log",
|
"log",
|
||||||
@ -3233,7 +3201,7 @@ version = "1.16.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
|
checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hermit-abi 0.3.2",
|
"hermit-abi",
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ nix = { version = "0.26", default-features = false, features = [
|
|||||||
"fs",
|
"fs",
|
||||||
"term",
|
"term",
|
||||||
] }
|
] }
|
||||||
atty = "0.2"
|
is-terminal = "0.4.8"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
nu-test-support = { path = "./crates/nu-test-support", version = "0.82.1" }
|
nu-test-support = { path = "./crates/nu-test-support", version = "0.82.1" }
|
||||||
|
@ -27,12 +27,12 @@ nu-color-config = { path = "../nu-color-config", version = "0.82.1" }
|
|||||||
nu-ansi-term = "0.47.0"
|
nu-ansi-term = "0.47.0"
|
||||||
reedline = { version = "0.21.0", features = ["bashisms", "sqlite"]}
|
reedline = { version = "0.21.0", features = ["bashisms", "sqlite"]}
|
||||||
|
|
||||||
atty = "0.2"
|
|
||||||
chrono = { default-features = false, features = ["std"], version = "0.4" }
|
chrono = { default-features = false, features = ["std"], version = "0.4" }
|
||||||
crossterm = "0.26"
|
crossterm = "0.26"
|
||||||
fancy-regex = "0.11"
|
fancy-regex = "0.11"
|
||||||
fuzzy-matcher = "0.3"
|
fuzzy-matcher = "0.3"
|
||||||
is_executable = "1.0"
|
is_executable = "1.0"
|
||||||
|
is-terminal = "0.4.8"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
miette = { version = "5.9", features = ["fancy-no-backtrace"] }
|
miette = { version = "5.9", features = ["fancy-no-backtrace"] }
|
||||||
once_cell = "1.18"
|
once_cell = "1.18"
|
||||||
|
@ -6,6 +6,7 @@ use crate::{
|
|||||||
NuHighlighter, NuValidator, NushellPrompt,
|
NuHighlighter, NuValidator, NushellPrompt,
|
||||||
};
|
};
|
||||||
use crossterm::cursor::SetCursorStyle;
|
use crossterm::cursor::SetCursorStyle;
|
||||||
|
use is_terminal::IsTerminal;
|
||||||
use log::{trace, warn};
|
use log::{trace, warn};
|
||||||
use miette::{ErrReport, IntoDiagnostic, Result};
|
use miette::{ErrReport, IntoDiagnostic, Result};
|
||||||
use nu_cmd_base::util::get_guaranteed_cwd;
|
use nu_cmd_base::util::get_guaranteed_cwd;
|
||||||
@ -56,7 +57,7 @@ pub fn evaluate_repl(
|
|||||||
|
|
||||||
// Guard against invocation without a connected terminal.
|
// Guard against invocation without a connected terminal.
|
||||||
// reedline / crossterm event polling will fail without a connected tty
|
// reedline / crossterm event polling will fail without a connected tty
|
||||||
if !atty::is(atty::Stream::Stdin) {
|
if !std::io::stdin().is_terminal() {
|
||||||
return Err(std::io::Error::new(
|
return Err(std::io::Error::new(
|
||||||
std::io::ErrorKind::NotFound,
|
std::io::ErrorKind::NotFound,
|
||||||
"Nushell launched as a REPL, but STDIN is not a TTY; either launch in a valid terminal or provide arguments to invoke a script!",
|
"Nushell launched as a REPL, but STDIN is not a TTY; either launch in a valid terminal or provide arguments to invoke a script!",
|
||||||
|
@ -30,7 +30,6 @@ nu-utils = { path = "../nu-utils", version = "0.82.1" }
|
|||||||
|
|
||||||
Inflector = "0.11"
|
Inflector = "0.11"
|
||||||
alphanumeric-sort = "1.5"
|
alphanumeric-sort = "1.5"
|
||||||
atty = "0.2"
|
|
||||||
base64 = "0.21"
|
base64 = "0.21"
|
||||||
byteorder = "1.4"
|
byteorder = "1.4"
|
||||||
bytesize = "1.2"
|
bytesize = "1.2"
|
||||||
@ -52,6 +51,7 @@ htmlescape = "0.3"
|
|||||||
indexmap = "2.0"
|
indexmap = "2.0"
|
||||||
indicatif = "0.17"
|
indicatif = "0.17"
|
||||||
is-root = "0.1"
|
is-root = "0.1"
|
||||||
|
is-terminal = "0.4.8"
|
||||||
itertools = "0.10"
|
itertools = "0.10"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
lscolors = { version = "0.14", default-features = false, features = ["nu-ansi-term"] }
|
lscolors = { version = "0.14", default-features = false, features = ["nu-ansi-term"] }
|
||||||
@ -124,7 +124,7 @@ nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.82.1" }
|
|||||||
nu-test-support = { path = "../nu-test-support", version = "0.82.1" }
|
nu-test-support = { path = "../nu-test-support", version = "0.82.1" }
|
||||||
|
|
||||||
dirs-next = "2.0"
|
dirs-next = "2.0"
|
||||||
mockito = "1.1"
|
mockito = { version = "1.1", default-features = false }
|
||||||
quickcheck = "1.0"
|
quickcheck = "1.0"
|
||||||
quickcheck_macros = "1.0"
|
quickcheck_macros = "1.0"
|
||||||
rstest = { version = "0.17", default-features = false }
|
rstest = { version = "0.17", default-features = false }
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use is_terminal::IsTerminal;
|
||||||
use lscolors::{LsColors, Style};
|
use lscolors::{LsColors, Style};
|
||||||
use nu_color_config::color_from_hex;
|
use nu_color_config::color_from_hex;
|
||||||
use nu_color_config::{StyleComputer, TextStyle};
|
use nu_color_config::{StyleComputer, TextStyle};
|
||||||
@ -848,8 +849,8 @@ enum TableView {
|
|||||||
|
|
||||||
#[allow(clippy::manual_filter)]
|
#[allow(clippy::manual_filter)]
|
||||||
fn maybe_strip_color(output: String, config: &Config) -> String {
|
fn maybe_strip_color(output: String, config: &Config) -> String {
|
||||||
// the atty is for when people do ls from vim, there should be no coloring there
|
// the terminal is for when people do ls from vim, there should be no coloring there
|
||||||
if !config.use_ansi_coloring || !atty::is(atty::Stream::Stdout) {
|
if !config.use_ansi_coloring || !std::io::stdout().is_terminal() {
|
||||||
// Draw the table without ansi colors
|
// Draw the table without ansi colors
|
||||||
nu_utils::strip_ansi_string_likely(output)
|
nu_utils::strip_ansi_string_likely(output)
|
||||||
} else {
|
} else {
|
||||||
|
@ -17,8 +17,8 @@ libc = "0.2"
|
|||||||
log = "0.4"
|
log = "0.4"
|
||||||
|
|
||||||
[target.'cfg(target_family = "unix")'.dependencies]
|
[target.'cfg(target_family = "unix")'.dependencies]
|
||||||
atty = "0.2"
|
|
||||||
nix = { version = "0.26", default-features = false, features = ["fs", "term", "process", "signal"]}
|
nix = { version = "0.26", default-features = false, features = ["fs", "term", "process", "signal"]}
|
||||||
|
is-terminal = "0.4.8"
|
||||||
|
|
||||||
[target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies]
|
[target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies]
|
||||||
procfs = "0.15"
|
procfs = "0.15"
|
||||||
|
@ -82,6 +82,7 @@ impl Drop for ForegroundChild {
|
|||||||
// Note: we exclude macos because the techniques below seem to have issues in macos 13 currently.
|
// Note: we exclude macos because the techniques below seem to have issues in macos 13 currently.
|
||||||
#[cfg(all(target_family = "unix", not(target_os = "macos")))]
|
#[cfg(all(target_family = "unix", not(target_os = "macos")))]
|
||||||
mod fg_process_setup {
|
mod fg_process_setup {
|
||||||
|
use is_terminal::IsTerminal;
|
||||||
use nix::{
|
use nix::{
|
||||||
sys::signal,
|
sys::signal,
|
||||||
unistd::{self, Pid},
|
unistd::{self, Pid},
|
||||||
@ -138,7 +139,7 @@ mod fg_process_setup {
|
|||||||
|
|
||||||
pub(super) fn set_foreground(process: &std::process::Child, existing_pgrp: u32) {
|
pub(super) fn set_foreground(process: &std::process::Child, existing_pgrp: u32) {
|
||||||
// called from the parent shell process - do the stdin tty check here
|
// called from the parent shell process - do the stdin tty check here
|
||||||
if atty::is(atty::Stream::Stdin) {
|
if std::io::stdin().is_terminal() {
|
||||||
set_foreground_pid(
|
set_foreground_pid(
|
||||||
Pid::from_raw(process.id() as i32),
|
Pid::from_raw(process.id() as i32),
|
||||||
existing_pgrp,
|
existing_pgrp,
|
||||||
@ -163,7 +164,7 @@ mod fg_process_setup {
|
|||||||
|
|
||||||
/// Reset the foreground process group to the shell
|
/// Reset the foreground process group to the shell
|
||||||
pub(super) fn reset_foreground_id() {
|
pub(super) fn reset_foreground_id() {
|
||||||
if atty::is(atty::Stream::Stdin) {
|
if std::io::stdin().is_terminal() {
|
||||||
if let Err(e) = nix::unistd::tcsetpgrp(nix::libc::STDIN_FILENO, unistd::getpgrp()) {
|
if let Err(e) = nix::unistd::tcsetpgrp(nix::libc::STDIN_FILENO, unistd::getpgrp()) {
|
||||||
println!("ERROR: reset foreground id failed, tcsetpgrp result: {e:?}");
|
println!("ERROR: reset foreground id failed, tcsetpgrp result: {e:?}");
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
pub(crate) fn acquire_terminal(interactive: bool) {
|
pub(crate) fn acquire_terminal(interactive: bool) {
|
||||||
|
use is_terminal::IsTerminal;
|
||||||
use nix::sys::signal::{signal, SigHandler, Signal};
|
use nix::sys::signal::{signal, SigHandler, Signal};
|
||||||
|
|
||||||
if !atty::is(atty::Stream::Stdin) {
|
if !std::io::stdin().is_terminal() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user