Skip to content
This repository has been archived by the owner on Jul 24, 2024. It is now read-only.

joshka/tui-prompts

Repository files navigation

Important

This repo has been consolidated into https://github.com/tui-widgets. All future work will happen there. The crate will remain available as tui-big-text, but this repo is now archived.

tui-prompts

Crates.io License Docs.rs Dependency Status Codecov Discord

tui-prompts is a Rust crate that provides prompt widgets for the Ratatui crate. It allows for easy creation of interactive command-line interfaces with various types of prompts. Inspired by https://www.npmjs.com/package/prompts and various other prompt libraries.

Examples

Text Prompt

Code
struct App<'a> {
    username_state: TextState<'a>,
    password_state: TextState<'a>,
    invisible_state: TextState<'a>,
}

impl<'a> App<'a> {
    fn draw_ui<B: Backend>(&mut self, frame: &mut Frame<B>) {
        let (username_area, password_area, invisible_area) = split_layout(frame.size())

        TextPrompt::from("Username")
            .draw(frame, username_area, &mut self.username_state);

        TextPrompt::from("Password")
            .with_render_style(TextRenderStyle::Password)
            .draw(frame, password_area, &mut self.password_state);

        TextPrompt::from("Invisible")
            .with_render_style(TextRenderStyle::Invisible)
            .draw(frame, invisible_area, &mut self.invisible_state);
    }
}

Text Prompt

See the text example for more details.

Soft Wrapping

Text is automatically character wrapped to fit in the render area.

Multi-line

See the multi line example for more details.

Features

  • Text prompt
  • Password prompt
  • Invisible prompt
  • Readline / emacs style Key Bindings
  • Crossterm backend
  • Soft wrapping single lines
  • Multi-line input
  • Scrolling
  • More prompt types:
    • Number
    • Confirm
    • List
    • Toggle
    • Select
    • Multi-select
    • Autocomplete
    • Autocomplete multi-select
    • Date
  • Bracketed paste
  • Validation
  • Default initial value
  • Custom style
  • Themes
  • Custom formatting
  • Backend agnostic keyboard event handling (Termion and Termwiz)
  • Customizable key bindings
  • Handle more advanced multi-key bindings e.g. ^[b and ^[f for start / end of line
  • Prompt chaining

Installation

cargo add ratatui tui-prompts crossterm

Or add the following to your Cargo.toml file:

Key Bindings

Key Action
Home, Ctrl+A Move cursor to beginning of line
End, Ctrl+E Move cursor to end of line
Left, Ctrl+B Move cursor one character left
Right, Ctrl+F Move cursor one character right
Backspace (Delete on Mac), Ctrl+H Delete character before cursor
Delete (Fn+Delete on Mac), Ctrl+D Delete character at cursor
Ctrl+K Delete all characters from the cursor to the end of line
Ctrl+U Delete the entire line
Enter Complete the prompt
Escape, Ctrl+C Abort the prompt

License

Dual-licensed under Apache 2.0 or MIT.