#crossterm #platform #text-based #terminal #ui #dreg

dreg-crossterm

Crossterm platform for Dreg

3 releases

0.2.2 Oct 18, 2024
0.2.1 Oct 17, 2024
0.2.0 Oct 14, 2024

#6 in #text-based

Download history 414/week @ 2024-10-14 24/week @ 2024-10-21

438 downloads per month
Used in dreg

MIT license

86KB
1.5K SLoC

Table of Contents


Crate Badge Docs Badge License Badge

Dreg

A simple text-based user interface library that will run on just about anything.

Examples

Terminal

use dreg::prelude::*;

fn main() -> Result<()> {
    let program = MyProgram {
        should_quit: false,
    };
    let platform = CrosstermPlatform::new()?;

    run_program(program, platform)?;

    Ok(())
}

struct MyProgram {
    should_quit: bool,
}

impl Program for MyProgram {
    fn update(&mut self, frame: Frame) {
        // When the user pressed `q`, the program safely exits.
        if frame.context.keys_down().contains(&Scancode::Q) {
            self.should_quit = true;
            return; // No need to render anything past this point.
        }
        frame.buffer.set_string(
            1, // Column index.
            1, // Row index.
            format!("KEYS DOWN: {:?}", frame.context.keys_down()),
            Style::new(), // No styling.
        );
    }

    fn should_exit(&self) -> bool {
        self.should_quit
    }
}

Overview

Design Philosophy

The design of Dreg has been radical simplicity from the very start.

Features

  • Runs on anything[^1].

Limitations

  • No support for variable width fonts; even on platforms that do support them.

Acknowledgments

  • ratatui & tui-rs, for the original inspiration for the project.

License

MIT

[^1]: It's not gonna run on your toaster, but it might run on your smart fridge.


lib.rs:

Crossterm Platform

Dependencies

~4–13MB
~163K SLoC