Crate portable_pty

Source
Expand description

This crate provides a cross platform API for working with the psuedo terminal (pty) interfaces provided by the system. Unlike other crates in this space, this crate provides a set of traits that allow selecting from different implementations at runtime. This crate is part of wezterm.

use portable_pty::{CommandBuilder, PtySize, native_pty_system, PtySystem};
use anyhow::Error;

// Use the native pty implementation for the system
let pty_system = native_pty_system();

// Create a new pty
let mut pair = pty_system.openpty(PtySize {
    rows: 24,
    cols: 80,
    // Not all systems support pixel_width, pixel_height,
    // but it is good practice to set it to something
    // that matches the size of the selected font.  That
    // is more complex than can be shown here in this
    // brief example though!
    pixel_width: 0,
    pixel_height: 0,
})?;

// Spawn a shell into the pty
let cmd = CommandBuilder::new("bash");
let child = pair.slave.spawn_command(cmd)?;

// Read and parse output from the pty with reader
let mut reader = pair.master.try_clone_reader()?;

// Send data to the pty by writing to the master
writeln!(pair.master.take_writer()?, "ls -l\r\n")?;

Re-exports§

pub use cmdbuilder::CommandBuilder;

Modules§

cmdbuilder
serial
This module implements a serial port based tty. This is a bit different from the other implementations in that we cannot explicitly spawn a process into the serial connection, so we can only use a CommandBuilder::new_default_prog with the openpty method. On most (all?) systems, attempting to open multiple instances of the same serial port will fail.
unix
Working with pseudo-terminals

Structs§

ExitStatus
Represents the exit status of a child process.
PtyPair
PtySize
Represents the size of the visible display area in the pty

Traits§

Child
Represents a child process spawned into the pty. This handle can be used to wait for or terminate that child process.
ChildKiller
Represents the ability to signal a Child to terminate
MasterPty
Represents the master/control end of the pty
PtySystem
The PtySystem trait allows an application to work with multiple possible Pty implementations at runtime. This is important on Windows systems which have a variety of implementations.
SlavePty
Represents the slave side of a pty. Can be used to spawn processes into the pty.

Functions§

native_pty_system

Type Aliases§

NativePtySystem