diff options
Diffstat (limited to 'src/tty/mod.rs')
-rw-r--r-- | src/tty/mod.rs | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/tty/mod.rs b/src/tty/mod.rs index cedb010e..ea2dd0c4 100644 --- a/src/tty/mod.rs +++ b/src/tty/mod.rs @@ -40,7 +40,7 @@ pub trait EventedReadWrite { fn register( &mut self, _: &mio::Poll, - _: &mut dyn Iterator<Item = &usize>, + _: &mut dyn Iterator<Item = mio::Token>, _: mio::Ready, _: mio::PollOpt, ) -> io::Result<()>; @@ -53,6 +53,29 @@ pub trait EventedReadWrite { fn write_token(&self) -> mio::Token; } +/// Events concerning TTY child processes +#[derive(PartialEq)] +pub enum ChildEvent { + /// Indicates the child has exited + Exited +} + +/// A pseudoterminal (or PTY) +/// +/// This is a refinement of EventedReadWrite that also provides a channel through which we can be +/// notified if the PTY child process does something we care about (other than writing to the TTY). +/// In particular, this allows for race-free child exit notification on UNIX (cf. `SIGCHLD`). +pub trait EventedPty : EventedReadWrite { + #[cfg(unix)] + fn child_event_token(&self) -> mio::Token; + + /// Tries to retrieve an event + /// + /// Returns `Some(event)` on success, or `None` if there are no events to retrieve. + #[cfg(unix)] + fn next_child_event(&mut self) -> Option<ChildEvent>; +} + // Setup environment variables pub fn setup_env(config: &Config) { // Default to 'alacritty' terminfo if it is available, otherwise |