#terminal #protocols

surf_n_term

Posix terminal rendering library

115 releases

Uses new Rust 2024

0.18.0 Mar 6, 2025
0.17.4 Oct 26, 2024
0.16.4 Oct 6, 2024
0.15.0 Apr 17, 2024
0.1.3 May 26, 2021

#133 in Command-line interface

Download history 7/week @ 2024-12-03 195/week @ 2024-12-10 3/week @ 2025-02-04 318/week @ 2025-02-11 10/week @ 2025-02-25 150/week @ 2025-03-04 9/week @ 2025-03-11 2/week @ 2025-03-18

171 downloads per month

MIT license

475KB
13K SLoC

Surf-N-Term

Build Status MIT License Crate API Docs

This crate is used to interact with Posix terminal. It can be used to

  • Read events from the terminal
  • Send commands to the terminal
  • Render on a surface which will be reconciled with current content of the terminal
  • Issue direct commends to the terminal
  • Supports kitty/sixel image protocol

Simple example

use surf_n_term::{Terminal, TerminalEvent, Error};

fn main() -> Result<(), Error> {
    let ctrl_c = TerminalEvent::Key("ctrl+c".parse()?);
    let mut term = SystemTerminal::new()?;
    term.run_render(|term, event, mut view| -> Result<_, Error> {
        // This function will be executed on each event from terminal
        // - term  - implements Terminal trait
        // - event - is a TerminalEvent
        // - view  - is a Surface that can be used to render on, see render module for details
        match event {
            Some(event) if &event == &ctrl_c => {
                // exit if 'ctrl+c' is pressed
                Ok(TerminalAction::Quit(()))
            }
            _ => {
                // do some rendering by updating the view
                Ok(TerminalAction::Wait)
            },
        }
    })?;
    Ok(())
}

Full examples can be found in example submodule

$ cargo run --example mandelbrot
$ cargo run --example mouse
$ cargo run --example events

Used by

  • you should checkout my sweep program to interactively filter through list of items

Dependencies

~8–17MB
~248K SLoC