pub struct SpawnHandles {
pub pty: PtyHandle,
pub snapshot: Arc<ArcSwap<TerminalSnapshot>>,
pub term: SharedTerm,
pub child_killer: Box<dyn ChildKiller + Send + Sync>,
pub child_pid: Option<u32>,
}Expand description
Successful spawn handles.
Fields§
§pty: PtyHandle§snapshot: Arc<ArcSwap<TerminalSnapshot>>§term: SharedTermT3 (2026-05-25): shared handle to the alacritty Term
the reader task drives. Dispatch-side actions (scroll,
resize) lock the inner Mutex; the reader holds an Arc to
the same Term. Cheap to clone.
child_killer: Box<dyn ChildKiller + Send + Sync>2026-05-25: handle to the spawned child the
TerminalBuffer::Drop uses to force the shell to exit
on buffer teardown. Without this, the master-side
reader fd (cloned via try_clone_reader) keeps the
PTY open even after PtyHandle drops — the child
never sees SIGHUP, the reader’s blocking read()
never returns, and the editor freezes on :q. Calling
killer.kill() sends SIGKILL to the child; once it
exits, the reader’s read() returns 0 (EOF), the
spawn_blocking task exits cleanly.
child_pid: Option<u32>2026-05-25: child PID captured at spawn so Drop can
follow the portable_pty SIGHUP with a SIGKILL fallback
(libc::kill(pid, SIGKILL) on Unix). Some shells /
environments don’t exit on SIGHUP reliably; SIGKILL is
the guaranteed wake for the reader’s blocking read().
None when the platform doesn’t expose the PID (Windows
ConPTY).
Auto Trait Implementations§
impl !RefUnwindSafe for SpawnHandles
impl !UnwindSafe for SpawnHandles
impl Freeze for SpawnHandles
impl Send for SpawnHandles
impl Sync for SpawnHandles
impl Unpin for SpawnHandles
impl UnsafeUnpin for SpawnHandles
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.