19 releases (11 stable)
1.2.1 | Aug 1, 2024 |
---|---|
1.1.1 | Apr 1, 2024 |
1.1.0 | Mar 2, 2024 |
1.0.7 | Jul 31, 2023 |
0.3.2 | Jun 8, 2022 |
#214 in Command-line interface
2,628 downloads per month
Used in 6 crates
52KB
940 lines
reedline-repl-rs
Library to help you create a fancy REPL for your application based on nushell's reedline.
Features:
- Popular clap crate Command used as configuration interface
- Also supports clap-derive based configuration with feature flag, see derive examples
- General editing functionality, that should feel familiar coming from other shells (e.g. bash, fish, zsh).
- Interactive tab-completion with graphical selection menu
- Fish-style history autosuggestion hints
- History with interactive search options (optionally persists to file, can support multiple sessions accessing the same file)
- Configurable keybindings (default emacs-style bindings).
- Configurable prompt with hooks to update after commands run
- Command Syntax highlighting
- Feature-flag for async support
- Feature-flag
shlex
for optional POSIX compliant line splitting - Tip: Search history with
CTRL+R
, clear input withCTRL+C
, exit repl withCTRL+D
Basic example code:
//! Minimal example
use reedline_repl_rs::clap::{Arg, ArgMatches, Command};
use reedline_repl_rs::{Repl, Result};
/// Write "Hello" with given name
fn hello<T>(args: ArgMatches, _context: &mut T) -> Result<Option<String>> {
Ok(Some(format!(
"Hello, {}",
args.get_one::<String>("who").unwrap()
)))
}
fn main() -> Result<()> {
let mut repl = Repl::new(())
.with_name("MyApp")
.with_version("v0.1.0")
.with_description("My very cool app")
.with_banner("Welcome to MyApp")
.with_command(
Command::new("hello")
.arg(Arg::new("who").required(true))
.about("Greetings!"),
hello,
);
repl.run()
}
Running the example above:
Welcome to MyApp
MyApp〉help
MyApp v0.1.0: My very cool app
COMMANDS:
hello Greetings!
help Print this message or the help of the given subcommand(s)
MyApp〉help hello
hello
Greetings!
USAGE:
hello <who>
ARGS:
<who>
OPTIONS:
-h, --help Print help information
MyApp〉hello Friend
Hello, Friend
MyApp〉
Testing
cargo test --features async
Will run the doc tests (compiling the examples). Notice, the examples/async.rs
requires the async
feature.
Thanks
Forked from repl-rs by Jacklund, changed to use reedline which is an advanced readline clone and the base of nushell.
Dependencies
~10–20MB
~298K SLoC