commit | f536c969e73bb121a3968b71342db5dba4e885fa | [log] [tgz] |
---|---|---|
author | Robert Gardner <bob.hn.gardner@gmail.com> | Tue Jan 17 21:21:40 2017 -0800 |
committer | Robert Gardner <bob.hn.gardner@gmail.com> | Wed Jan 18 21:32:49 2017 -0800 |
tree | 29a31ddeb37d59c629ea2976e4b005a7a355a9dc | |
parent | ec773db5224e8296bb116709a29f0cb83c1f053f [diff] |
Add get_history_const() function This returns an immutable reference to the history object. Callers may need only read access to the history, for example when getting an entry by index. While callers could use get_history(), which returns a mutable reference, this causes all callers to get a mutable reference to Editor, which they may or may not have.
Readline implementation in Rust that is based on Antirez' Linenoise
Supported Platforms
Note: Powershell ISE is not supported, check issue #56
This project uses Cargo and Rust stable
cargo build --release
extern crate rustyline; use rustyline::error::ReadlineError; use rustyline::Editor; fn main() { // `()` can be used when no completer is required let mut rl = Editor::<()>::new(); if let Err(_) = rl.load_history("history.txt") { println!("No previous history."); } loop { let readline = rl.readline(">> "); match readline { Ok(line) => { rl.add_history_entry(&line); println!("Line: {}", line); }, Err(ReadlineError::Interrupted) => { println!("CTRL-C"); break }, Err(ReadlineError::Eof) => { println!("CTRL-D"); break }, Err(err) => { println!("Error: {:?}", err); break } } } rl.save_history("history.txt").unwrap(); }
You can use this package in your project by adding the following to your Cargo.toml
:
[dependencies] rustyline = "1.0.0"
Keystroke | Action |
---|---|
Ctrl-A, Home | Move cursor to the beginning of line |
Ctrl-B, Left | Move cursor one character left |
Ctrl-C | Interrupt/Cancel edition |
Ctrl-D, Del | (if line is not empty) Delete character under cursor |
Ctrl-D | (if line is empty) End of File |
Ctrl-E, End | Move cursor to end of line |
Ctrl-F, Right | Move cursor one character right |
Ctrl-H, BackSpace | Delete character before cursor |
Ctrl-I, Tab | Next completion |
Ctrl-J, Ctrl-M, Enter | Finish the line entry |
Ctrl-K | Delete from cursor to end of line |
Ctrl-L | Clear screen |
Ctrl-N, Down | Next match from history |
Ctrl-P, Up | Previous match from history |
Ctrl-R | Reverse Search history (Ctrl-S forward, Ctrl-G cancel) |
Ctrl-T | Transpose previous character with current character |
Ctrl-U | Delete from start of line to cursor |
Ctrl-V | Insert any special character without perfoming its associated action |
Ctrl-W | Delete word leading up to cursor (using white space as a word boundary) |
Ctrl-Y | Paste from Yank buffer (Meta-Y to paste next yank instead) |
Meta-< | Move to first entry in history |
Meta-> | Move to last entry in history |
Meta-B, Alt-Left | Move cursor to previous word |
Meta-C | Capitalize the current word |
Meta-D | Delete forwards one word |
Meta-F, Alt-Right | Move cursor to next word |
Meta-L | Lower-case the next word |
Meta-T | Transpose words |
Meta-U | Upper-case the next word |
Meta-Y | See Ctrl-Y |
Meta-BackSpace | Kill from the start of the current word, or, if between words, to the start of the previous word |
$ cargo run --example example --target 'x86_64-pc-windows-gnu' ... Error: Io(Error { repr: Os { code: 6, message: "Invalid handle." } }) $ wineconsole --backend=curses target/x86_64-pc-windows-gnu/debug/examples/example.exe ...