#content #table #text-based #ui #anything #dreg

dreg-core

Core functionality for Dreg

3 releases

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

#11 in #text-based

Download history 363/week @ 2024-10-12 83/week @ 2024-10-19 4/week @ 2024-10-26

450 downloads per month
Used in 2 crates

MIT license

66KB
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:

Dreg Core Functionality

Dependencies

~2.5MB
~36K SLoC