[−][src]Crate rucline
Rucline, the Rust CLI Line reader, or simply "recline", is a cross-platform, UTF-8 compatible
line reader that provides hooks for autocompletion and tab suggestion. It supports advanced
editing actions
and hooks for customizing the line reader behavior of the line reader making
it more flexible than simply reading from stdin
.
Basic usage:
use rucline::completion; use rucline::Prompt; if let Ok(Some(string)) = Prompt::from("What's you favorite website? ") // Add some tab completions (Optional) .suggester(&completion::Basic::new(&[ "https://www.rust-lang.org/", "https://docs.rs/", "https://crates.io/", ])) //Block until value is ready .read_line() { println!("'{}' seems to be your favorite website", string); }
Actions
Rucline's behavior can be customized and composed with use of actions
.
There is a built-in set of default actions
that will be executed upon user interaction.
These are meant to feel natural when coming from the default terminal, while also adding further
functionality and editing commands. For example, a few of the built-ins:
Tab
: cycle through completionsShift
+Tab
: cycle through completions in reverseCTRL
+W
: delete the current workCTRL
+J
: delete the beginning of the wordCTRL
+K
: delete the end of the wordCTRL
+U
: delete the lineCTRL
+H
: delete the beggining of the lineCTRL
+L
: delete the end of the line
See
Action
for the full default behavior specification
The default behavior can be customized by overriding user events
with actions
. Which
in turn can be serialized, stored, and loaded at run-time.
Overriding key bindings
use rucline::{completion, Prompt}; use rucline::actions::{Action, Event, KeyBindings, Range}; use crossterm::event::KeyCode; let mut bindings = KeyBindings::new(); // Accept the full suggestions if `right` is pressed bindings.insert(Event::from(KeyCode::Right), Action::Complete(Range::Line)); if let Ok(Some(string)) = Prompt::from("What's you favorite website? ") // Add some likely values as completions .completer(&completion::Basic::new(&[ "https://www.rust-lang.org/", "https://docs.rs/", "https://crates.io/", ])) // Set the new key bindings as an override .overrider(&bindings) //Block until value is ready .read_line() { println!("'{}' seems to be your favorite website", string); }
Re-exports
pub use context::Context; |
pub use prompt::Prompt; |
pub use crossterm; |
Modules
actions | Provides mappings and actions to change the behavior of |
completion | Provides completion methods for |
context | Provides a |
prompt | Provides a prompt for user input that can be customized with |
Enums
ErrorKind | Wrapper for all errors that can occur in |