From 5061d2288c7ab8373700253ad56127fb8b0b5f73 Mon Sep 17 00:00:00 2001 From: Stefan Holderbach Date: Sun, 16 Oct 2022 23:41:57 +0200 Subject: [PATCH] Fix completion example in README/lib.rs (#497) Adapted from examples added in #493 --- README.md | 20 +++++++++++++++++--- examples/completions.rs | 2 +- src/lib.rs | 20 +++++++++++++++++--- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a74cf02..8afdf34 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ Reedline::create().with_highlighter(Box::new(ExampleHighlighter::new(commands))) ```rust // Create a reedline object with tab completions support -use reedline::{ColumnarMenu, DefaultCompleter, Reedline, ReedlineMenu}; +use reedline::{default_emacs_keybindings, ColumnarMenu, DefaultCompleter, Emacs, KeyCode, KeyModifiers, Reedline, ReedlineEvent, ReedlineMenu}; let commands = vec![ "test".into(), @@ -131,9 +131,23 @@ let commands = vec![ let completer = Box::new(DefaultCompleter::new_with_wordlen(commands.clone(), 2)); // Use the interactive menu to select options from the completer let completion_menu = Box::new(ColumnarMenu::default().with_name("completion_menu")); +// Set up the required keybindings +let mut keybindings = default_emacs_keybindings(); +keybindings.add_binding( + KeyModifiers::NONE, + KeyCode::Tab, + ReedlineEvent::UntilFound(vec![ + ReedlineEvent::Menu("completion_menu".to_string()), + ReedlineEvent::MenuNext, + ]), +); -let mut line_editor = -Reedline::create().with_completer(completer).with_menu(ReedlineMenu::EngineCompleter(completion_menu)); +let edit_mode = Box::new(Emacs::new(keybindings)); + +let mut line_editor = Reedline::create() + .with_completer(completer) + .with_menu(ReedlineMenu::EngineCompleter(completion_menu)) + .with_edit_mode(edit_mode); ``` ### Integrate with `Hinter` for fish-style history autosuggestions diff --git a/examples/completions.rs b/examples/completions.rs index a7b37d9..a702c3d 100644 --- a/examples/completions.rs +++ b/examples/completions.rs @@ -27,7 +27,7 @@ fn main() -> io::Result<()> { "hello world reedline".into(), "this is the reedline crate".into(), ]; - let completer = Box::new(DefaultCompleter::new_with_wordlen(commands.clone(), 2)); + let completer = Box::new(DefaultCompleter::new_with_wordlen(commands, 2)); // Use the interactive menu to select options from the completer let completion_menu = Box::new(ColumnarMenu::default().with_name("completion_menu")); diff --git a/src/lib.rs b/src/lib.rs index a60488b..004fb35 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -96,7 +96,7 @@ //! ```rust //! // Create a reedline object with tab completions support //! -//! use reedline::{ColumnarMenu, DefaultCompleter, Reedline, ReedlineMenu}; +//! use reedline::{default_emacs_keybindings, ColumnarMenu, DefaultCompleter, Emacs, KeyCode, KeyModifiers, Reedline, ReedlineEvent, ReedlineMenu}; //! //! let commands = vec![ //! "test".into(), @@ -107,9 +107,23 @@ //! let completer = Box::new(DefaultCompleter::new_with_wordlen(commands.clone(), 2)); //! // Use the interactive menu to select options from the completer //! let completion_menu = Box::new(ColumnarMenu::default().with_name("completion_menu")); +//! // Set up the required keybindings +//! let mut keybindings = default_emacs_keybindings(); +//! keybindings.add_binding( +//! KeyModifiers::NONE, +//! KeyCode::Tab, +//! ReedlineEvent::UntilFound(vec![ +//! ReedlineEvent::Menu("completion_menu".to_string()), +//! ReedlineEvent::MenuNext, +//! ]), +//! ); //! -//! let mut line_editor = -//! Reedline::create().with_completer(completer).with_menu(ReedlineMenu::EngineCompleter(completion_menu)); +//! let edit_mode = Box::new(Emacs::new(keybindings)); +//! +//! let mut line_editor = Reedline::create() +//! .with_completer(completer) +//! .with_menu(ReedlineMenu::EngineCompleter(completion_menu)) +//! .with_edit_mode(edit_mode); //! ``` //! //! ## Integrate with [`Hinter`] for fish-style history autosuggestions