An embeddable, customizable, inline text-editor based oncrossterm
.
╭───InputPrompt1 │ hello there2 │ this is a simple prompt3 │ thats multiline and decent enough4 ┃ _ ╰───Lines:4Chars:70Ln:3,Col:0
- Simple, intuitive, and embeddable.
- Customize header, footer, and or margin gutters.
- Preset styles are unstable.
- Range selection.
- Toggle-able fullscreen mode.
- (Unstable) Clipboard support.
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 invokingminime -h
.
- Arrow keys work as expected.
- Home, end, delete, Tab and backtab mirrors VSCode behavior.
- F12 to enter full screen mode.
- Shift-arrow keys create a selection range.
Esc
orEnter
on the last empty line to close and submit the prompt.- Control-X/C/V clipboard support is unstable.
This is the most basic setup available.
use minime::{editor::keybindings::NormalKeybinding, editor::Editor,Result};fnmain() ->Result<()>{println!("Write something cool!");// Build the prompt.letmut term =Editor::default(); term.read(NormalKeybinding,DefaultRenderer::default())?;dbg!(term.contents());Ok(())}
You can lockstdout()
orstderr()
to get better performance. You can alsocustomize several settings in the renderer.
use minime::{ editor::{keybindings::NormalKeybinding,Editor}, renderer::{ full::CrosstermRenderer, styles::classic::{ClassicFooter,ClassicGutter,ClassicHeader},},Result,};fnmain() ->Result<()>{// Redirect our output to stdout (default).let stdout = std::io::stdout();letmut lock = stdout.lock();let renderer =CrosstermRenderer::render_to(&mut lock).max_height(Some(10)).margin(ClassicGutter).header(ClassicHeader{message:"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);let result = term.read(NormalKeybinding)?;dbg!(result);Ok(())}