aboutsummaryrefslogtreecommitdiff
path: root/src/tty/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tty/mod.rs')
-rw-r--r--src/tty/mod.rs25
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