diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2020-09-10 13:34:46 +0200 |
---|---|---|
committer | Daniel Mueller <deso@posteo.net> | 2020-09-12 14:12:04 -0700 |
commit | 33918c32b8de4250c450f8d0b007019913c440a1 (patch) | |
tree | 2fb69aaa8456066de582c300de6f240c085a5ee5 /src | |
parent | ca737e96c7688cc214e9cb514b18861b4671651c (diff) | |
download | nitrocli-33918c32b8de4250c450f8d0b007019913c440a1.tar.gz nitrocli-33918c32b8de4250c450f8d0b007019913c440a1.tar.bz2 |
Add is_tty field to Context
This patch adds the is_tty field to the Context struct that indicates
whether stdout is a TTY. This allows us to use TTY features like moving
the cursor in our output.
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 13 | ||||
-rw-r--r-- | src/tests/mod.rs | 1 |
2 files changed, 12 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs index baad15c..1a2a3d3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -98,6 +98,8 @@ pub struct Context<'io> { pub stdout: &'io mut dyn io::Write, /// The `Write` object used as standard error throughout the program. pub stderr: &'io mut dyn io::Write, + /// Whether `stdout` is a TTY. + pub is_tty: bool, /// The admin PIN, if provided through an environment variable. pub admin_pin: Option<ffi::OsString>, /// The user PIN, if provided through an environment variable. @@ -118,7 +120,12 @@ pub struct Context<'io> { } impl<'io> Context<'io> { - fn from_env<O, E>(stdout: &'io mut O, stderr: &'io mut E, config: config::Config) -> Context<'io> + fn from_env<O, E>( + stdout: &'io mut O, + stderr: &'io mut E, + is_tty: bool, + config: config::Config, + ) -> Context<'io> where O: io::Write, E: io::Write, @@ -126,6 +133,7 @@ impl<'io> Context<'io> { Context { stdout, stderr, + is_tty, admin_pin: env::var_os(NITROCLI_ADMIN_PIN), user_pin: env::var_os(NITROCLI_USER_PIN), new_admin_pin: env::var_os(NITROCLI_NEW_ADMIN_PIN), @@ -154,8 +162,9 @@ fn main() { let rc = match config::Config::load() { Ok(config) => { + let is_tty = termion::is_tty(&stdout); let args = env::args().collect::<Vec<_>>(); - let ctx = &mut Context::from_env(&mut stdout, &mut stderr, config); + let ctx = &mut Context::from_env(&mut stdout, &mut stderr, is_tty, config); run(ctx, args) } diff --git a/src/tests/mod.rs b/src/tests/mod.rs index e0a5b9a..1871f3c 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -99,6 +99,7 @@ impl Nitrocli { let ctx = &mut crate::Context { stdout: &mut stdout, stderr: &mut stderr, + is_tty: false, admin_pin: self.admin_pin.clone(), user_pin: self.user_pin.clone(), new_admin_pin: self.new_admin_pin.clone(), |