30 releases

0.5.0 Oct 25, 2024
0.4.0 Aug 12, 2024
0.3.19 Jul 25, 2024
0.3.8 Mar 12, 2024
0.2.3 Jul 25, 2023

#300 in Command-line interface

Download history 69/week @ 2024-08-21 126/week @ 2024-08-28 116/week @ 2024-09-04 218/week @ 2024-09-11 171/week @ 2024-09-18 197/week @ 2024-09-25 210/week @ 2024-10-02 205/week @ 2024-10-09 369/week @ 2024-10-16 563/week @ 2024-10-23 182/week @ 2024-10-30 171/week @ 2024-11-06 235/week @ 2024-11-13 126/week @ 2024-11-20 267/week @ 2024-11-27 342/week @ 2024-12-04

1,001 downloads per month
Used in 3 crates

MIT/Apache

37KB
774 lines

logo

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

Copyright (c) Josh McKinney

This project is licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

See CONTRIBUTING.md.

Dependencies

~9–19MB
~270K SLoC