Fix word editing
1 file changed
tree: ebf7d48c7a07eb7635ee35946486d5c0c9f75e49
  1. examples/
  2. src/
  3. .gitignore
  4. .travis.yml
  5. appveyor.yml
  6. Cargo.toml
  7. deploy-docs.sh
  8. LICENSE
  9. README.md
  10. rustfmt.toml
README.md

RustyLine

Build Status Build Status

Readline implementation in Rust that is based on Antirez' Linenoise

Documentation (Releases)

Documentation (Master)

Supported Platforms

  • Unix
  • Windows
    • cmd.exe
    • Powershell

Note: Powershell ISE is not supported, check issue #56

Build

This project uses Cargo and Rust nightly

cargo build --release

Example

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();
}

crates.io

You can use this package in your project by adding the following to your Cargo.toml:

[dependencies]
rustyline = "1.0.0"

Features

Actions

KeystrokeAction
Ctrl-A, HomeMove cursor to the beginning of line
Ctrl-B, LeftMove cursor one character left
Ctrl-CInterrupt/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, EndMove cursor to end of line
Ctrl-F, RightMove cursor one character right
Ctrl-H, BackSpaceDelete character before cursor
Ctrl-I, TabNext completion
Ctrl-J, Ctrl-M, EnterFinish the line entry
Ctrl-KDelete from cursor to end of line
Ctrl-LClear screen
Ctrl-N, DownNext match from history
Ctrl-P, UpPrevious match from history
Ctrl-RReverse Search history (Ctrl-S forward, Ctrl-G cancel)
Ctrl-TTranspose previous character with current character
Ctrl-UDelete from start of line to cursor
Ctrl-VInsert any special character without perfoming its associated action
Ctrl-WDelete word leading up to cursor (using white space as a word boundary)
Ctrl-YPaste 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-LeftMove cursor to previous word
Meta-CCapitalize the current word
Meta-DDelete forwards one word
Meta-F, Alt-RightMove cursor to next word
Meta-LLower-case the next word
Meta-TTranspose words
Meta-UUpper-case the next word
Meta-YSee Ctrl-Y
Meta-BackSpaceKill from the start of the current word, or, if between words, to the start of the previous word

Readline Emacs Editing Mode Cheat Sheet

Readline VI Editing Mode Cheat Sheet

Terminal codes (ANSI/VT100)

ToDo

  • Undos
  • expose an API callable from C

Wine

$ 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
...

Terminal checks

$ # current settings of all terminal attributes:
$ stty -a
$ # key bindings:
$ bind -p

Similar projects