diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/msg.fbs | 12 | ||||
-rw-r--r-- | src/ops.rs | 28 |
2 files changed, 39 insertions, 1 deletions
diff --git a/src/msg.fbs b/src/msg.fbs index 0bbc18b1d..d7e71ab14 100644 --- a/src/msg.fbs +++ b/src/msg.fbs @@ -61,7 +61,9 @@ union Any { RunStatus, RunStatusRes, Now, - NowRes + NowRes, + IsTTY, + IsTTYRes } enum ErrorKind: byte { @@ -483,4 +485,12 @@ table NowRes { time: uint64; } +table IsTTY {} + +table IsTTYRes { + stdin: bool; + stdout: bool; + stderr: bool; +} + root_type Base; diff --git a/src/ops.rs b/src/ops.rs index b17db87b2..b30473eb6 100644 --- a/src/ops.rs +++ b/src/ops.rs @@ -1,4 +1,5 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. + use crate::errors; use crate::errors::{DenoError, DenoResult, ErrorKind}; use crate::fs as deno_fs; @@ -18,6 +19,7 @@ use crate::resources::Resource; use crate::tokio_util; use crate::version; +use atty; use flatbuffers::FlatBufferBuilder; use futures; use futures::Async; @@ -121,6 +123,7 @@ pub fn dispatch( msg::Any::Write => op_write, msg::Any::WriteFile => op_write_file, msg::Any::Now => op_now, + msg::Any::IsTTY => op_is_tty, _ => panic!(format!( "Unhandled message {}", msg::enum_name_any(inner_type) @@ -197,6 +200,31 @@ fn op_now( )) } +fn op_is_tty( + _state: &Arc<IsolateState>, + base: &msg::Base<'_>, + _data: libdeno::deno_buf, +) -> Box<Op> { + let builder = &mut FlatBufferBuilder::new(); + let inner = msg::IsTTYRes::create( + builder, + &msg::IsTTYResArgs { + stdin: atty::is(atty::Stream::Stdin), + stdout: atty::is(atty::Stream::Stdout), + stderr: atty::is(atty::Stream::Stderr), + }, + ); + ok_future(serialize_response( + base.cmd_id(), + builder, + msg::BaseArgs { + inner: Some(inner.as_union_value()), + inner_type: msg::Any::IsTTYRes, + ..Default::default() + }, + )) +} + fn op_exit( _config: &Arc<IsolateState>, base: &msg::Base<'_>, |