Use new version of rustyline.

This commit is contained in:
Stephen Chung 2022-02-08 22:16:12 +08:00
parent 8cf6f424a5
commit 5e7db6e105
3 changed files with 13 additions and 19 deletions

View File

@ -55,15 +55,16 @@ The REPL bin tool, `rhai-rpl`, has been enhanced.
### Line editor ### Line editor
* `rhai-repl` now uses [`rustyline`](https://crates.io/crates/rustyline) as a line editor with history. * `rhai-repl` now uses a modified version of [`rustyline`](https://crates.io/crates/rustyline) as a line editor with history.
* Shift-Enter can now be used to enter multiple lines without having to attach the `\` continuation character the end of each line. * Ctrl-Enter can now be used to enter multiple lines without having to attach the `\` continuation character the end of each line.
* Bracketed paste is supported, even on Windows (version 10 or above), so pasting code directly into `rhai-repl` is made much more convenient.
### New commands ### New commands
* `strict` to turn on/off _Strict Variables Mode_. * `strict` to turn on/off _Strict Variables Mode_.
* `optimize` to turn on/off script optimization. * `optimize` to turn on/off script optimization.
* `history` to print lines history. * `history` to print lines history.
* `!!`, `!`_num_ and `!`_text_ to recall a history line. * `!!`, `!`_num_, `!`_text_ and `!?`_text_ to recall a history line.
* `keys` to print all key bindings. * `keys` to print all key bindings.

View File

@ -29,7 +29,9 @@ serde = { version = "1.0", default-features = false, features = ["derive", "allo
serde_json = { version = "1.0", default-features = false, features = ["alloc"], optional = true } serde_json = { version = "1.0", default-features = false, features = ["alloc"], optional = true }
unicode-xid = { version = "0.2", default-features = false, optional = true } unicode-xid = { version = "0.2", default-features = false, optional = true }
rust_decimal = { version = "1.16", default-features = false, features = ["maths"], optional = true } rust_decimal = { version = "1.16", default-features = false, features = ["maths"], optional = true }
rustyline = { version = "9", optional = true } # notice that a custom modified version of `rustyline` is used which supports bracketed paste on Windows
# this can be moved to the official version when bracketed paste is added
rustyline = { version = "9", optional = true, git = "https://github.com/schungx/rustyline", branch = "bracketed_paste" }
[dev-dependencies] [dev-dependencies]
serde_bytes = "0.11" serde_bytes = "0.11"

View File

@ -62,8 +62,8 @@ fn print_help() {
println!("ast => print the last AST (optimized)"); println!("ast => print the last AST (optimized)");
println!("astu => print the last raw, un-optimized AST"); println!("astu => print the last raw, un-optimized AST");
println!(); println!();
println!("press Shift-Enter to continue to the next line,"); println!("press Ctrl-Enter or end a line with `\\`");
println!(r"or end a line with '\' (e.g. when pasting code)."); println!("to continue to the next line.");
println!(); println!();
} }
@ -204,6 +204,7 @@ fn load_script_files(engine: &mut Engine) {
// Setup the Rustyline editor. // Setup the Rustyline editor.
fn setup_editor() -> Editor<()> { fn setup_editor() -> Editor<()> {
//env_logger::init();
let config = Builder::new() let config = Builder::new()
.tab_stop(4) .tab_stop(4)
.indent_size(4) .indent_size(4)
@ -225,23 +226,13 @@ fn setup_editor() -> Editor<()> {
Event::KeySeq(smallvec![KeyEvent::ctrl('z')]), Event::KeySeq(smallvec![KeyEvent::ctrl('z')]),
EventHandler::Simple(Cmd::Undo(1)), EventHandler::Simple(Cmd::Undo(1)),
); );
// Map Shift-Return to insert a new line - bypass need for `\` continuation // Map Ctrl-Enter to insert a new line - bypass need for `\` continuation
rl.bind_sequence( rl.bind_sequence(
Event::KeySeq(smallvec![KeyEvent( Event::KeySeq(smallvec![KeyEvent(KeyCode::Char('J'), Modifiers::CTRL)]),
KeyCode::Char('m'),
Modifiers::CTRL_SHIFT
)]),
EventHandler::Simple(Cmd::Newline), EventHandler::Simple(Cmd::Newline),
); );
rl.bind_sequence( rl.bind_sequence(
Event::KeySeq(smallvec![KeyEvent( Event::KeySeq(smallvec![KeyEvent(KeyCode::Enter, Modifiers::CTRL)]),
KeyCode::Char('j'),
Modifiers::CTRL_SHIFT
)]),
EventHandler::Simple(Cmd::Newline),
);
rl.bind_sequence(
Event::KeySeq(smallvec![KeyEvent(KeyCode::Enter, Modifiers::SHIFT)]),
EventHandler::Simple(Cmd::Newline), EventHandler::Simple(Cmd::Newline),
); );
// Map Ctrl-Home and Ctrl-End for beginning/end of input // Map Ctrl-Home and Ctrl-End for beginning/end of input