3 unstable releases

0.2.0 Apr 13, 2021
0.1.1 Apr 8, 2021
0.1.0 Apr 8, 2021

#253 in Text editors

MIT license

41KB
1K SLoC

Mini-Me

An embeddable, customizable, inline text-editor based on crossterm.

      ╭─── Input Prompt
    1 │ hello there
    2 │ this is a simple prompt
    3 │ thats multiline and decent enough
    4_
      ╰─── Lines: 4     Chars: 70    Ln: 3, Col: 0

Features

  • Simple, intuitive, and embeddable.
  • Customize header, footer, and or margin gutters.
    • Preset styles are unstable.
  • Range selection.
  • (Unstable) Clipboard support.

Binary Installation

minime can be used as a CLI. The best way to install it is using:

cargo install --features=bin --path .

The binary can be used by invoking minime -h.

Default Controls

  • Arrow keys work as expected.
  • Home, end, delete, Tab and backtab mirrors VSCode behavior.
  • Shift-arrow keys create a selection range.
  • Esc or Enter on the last empty line to close and submit the prompt.
  • Control-X/C/V clipboard support is unstable.

Usage

Basic Setup

This is the most basic setup available.

use minime::{editor::keybindings::NormalKeybinding, editor::Editor, Result};

fn main() -> Result<()> {
    println!("Write something cool!");

    let term = Editor::default();

    dbg!(term.read(NormalKeybinding))?;
    Ok(())
}

Advanced

You can lock stdout() or stderr() to get better performance. You can also customize several settings in the renderer.

use minime::{
    editor::{keybindings::NormalKeybinding, Editor},
    renderer::{
        full::CrosstermRenderer,
        styles::classic::{ClassicFooter, ClassicGutter, ClassicHeader},
    },
    Result,
};

fn main() -> Result<()> {
    // Redirect our output to stdout (default).
    let stdout = std::io::stdout();
    let mut lock = stdout.lock();

    let renderer = CrosstermRenderer::render_to(&mut lock)
        .max_height(Some(10))
        .margin(ClassicGutter)
        .header(ClassicHeader(
            "Enter on the last line or Esc to submit your input!",
        ))
        .footer(ClassicFooter);

    // Print out some prompt using styling options.
    let term = Editor::with_renderer(renderer);
    dbg!(term.read(NormalKeybinding)?);
    Ok(())
}

Dependencies

~2.4–4.5MB
~84K SLoC