#terminal-graphics #user-interface #terminal

interm

InTerm is a library for creating interactive terminal applications

2 releases

0.1.1 Oct 4, 2023
0.1.0 Oct 4, 2023

#1253 in Development tools

MIT license

22KB
180 lines

InTerm: Interactive Terminal Library for Rust

MIT licensed crates.io Documentation

InTerm is a Rust library designed to facilitate the creation of interactive terminal applications. It provides a simple and flexible way to create and manage interactive elements within the terminal, allowing for interactive and dynamic user interfaces.


⚠️ Disclaimer: This project is still very much a work in progress, and contributions from the community are highly encouraged and appreciated! If you're interested in contributing, please read our contribution guidelines :)


Table of Contents

Features

  • Block Structure: Represents a block of interactive elements or indexed lines in the terminal, consisting of a vector of InteractiveElement instances.
  • InteractiveLine: Represents a line that can be updated in the terminal. It is used within the Block structure to manage individual lines.
  • Cursor Management: Provides functions to control the cursor position and visibility within the terminal.
  • Line Clearing: Allows for clearing a specific line or all interactive element lines in the terminal.

Usage

To use InTerm in your Rust project, follow these steps:

  1. Add the interm dependency to your Cargo.toml:

    [dependencies]
    interm = "0.1.0"
    
  2. Import the necessary modules into your Rust code:

    use interm::{Block, interactive::Line as InteractiveLine};
    
  3. Create a Block and interact with interactive elements:

    let mut elements: Vec<InteractiveLine> = Vec::with_capacity(10);
    for idx in 0..10 {
        elements.push(InteractiveLine::new(format!("Download {}", idx).as_str()));
    }
    
    let block = Block::new(elements).unwrap();
    
    // Update an element
    let elem = &block.interactive_lines[0];
    block.update_element(elem, "Download 0: Complete", true).unwrap();
    
    // Go to an element
    block.goto_idx(0).unwrap();
    
    // Clear a line
    block.clear_line().unwrap();
    
    // Clear all lines
    block.clear_lines().unwrap();
    

Examples

Check the examples directory for more usage examples.

Example

Contributing

We welcome contributions from the community! If you find a bug or have an idea for an improvement, please read the contribution guidelines and open an issue or create a pull request.

License

This project is licensed under the MIT License.

Dependencies

~2.5–9MB
~68K SLoC