#read-line #command-line #io-error #tcalc

tcalc-rustyline

tcalc 的 Rustyline 分支,专门用于 tcalc

3 个稳定版本

使用旧的 Rust 2015

1.0.2 2019 年 7 月 7 日
1.0.1 2017 年 8 月 15 日
1.0.0 2017 年 8 月 8 日

文本处理 中排名 1033

每月下载量 28
tcalc 中使用

MIT 许可证

120KB
3K SLoC

RustyLine

Build Status Build status Clippy Linting Result

Rust 中基于 Antirez' Linenoise 的 Readline 实现

文档(发布版本)

文档(主分支)

支持的平台

  • Linux
  • Windows
    • cmd.exe
    • Powershell

注意:Powershell ISE 不受支持,请查看 问题 #56

构建

此项目使用 Cargo 和 Rust 稳定版

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

crates.io

您可以通过将以下内容添加到您的 Cargo.toml 来在项目中使用此包

[dependencies]
rustyline = "1.0.0"

特性

  • Unicode (UTF-8)(linenoise 仅支持 ASCII)
  • 单词完成(linenoise 仅支持行完成)
  • 文件名完成
  • 历史搜索(《在历史中搜索命令》)
  • 杀环(《删除命令》)
  • 多行模式
  • 单词命令

操作

按键 操作
Ctrl-A, Home 将光标移动到行首
Ctrl-B, Left 将光标向左移动一个字符
Ctrl-C 中断/取消编辑
Ctrl-D, Del (如果行不为空)删除光标下的字符
Ctrl-D (如果行为空)文件结束
Ctrl-E, End 将光标移动到行尾
Ctrl-F, Right 将光标向右移动一个字符
Ctrl-H, BackSpace 删除光标前的字符
Ctrl-I, Tab 下一个完成
Ctrl-J, Ctrl-M, Enter 完成行输入
Ctrl-K 从光标到行尾删除
Ctrl-L 清屏
Ctrl-N, Down 从历史中获取下一个匹配项
Ctrl-P, Up 从历史中获取上一个匹配项
Ctrl-R 反向搜索历史(Ctrl-S 向前,Ctrl-G 取消)
Ctrl-T 交换前一个字符与当前字符
Ctrl-U 从行首到光标删除
Ctrl-V 插入任何特殊字符而不执行其关联的操作
Ctrl-W 删除光标前的单词(使用空白作为单词边界)
Ctrl-Y 从 Yank 缓冲区粘贴(使用 Meta-Y 粘贴下一个 Yank)
Meta- 移动到历史中的第一个条目
Meta-> 移动到历史中的最后一个条目
Meta-B, Alt-Left 将光标移至前一个单词
Meta-C 将当前单词首字母大写
Meta-D 删除一个单词
Meta-F,Alt-右键 将光标移至下一个单词
Meta-L 将下一个单词转换为小写
Meta-T 交换单词顺序
Meta-U 将下一个单词转换为大写
Meta-Y 参见Ctrl-Y
Meta-BackSpace 从当前单词的起始处删除,或者,如果处于两个单词之间,则删除到前一个单词的起始处

待办事项

  • 撤销操作
  • 使用超时读取输入以正确处理单个ESC键
  • 提供一个从C语言可调用的API

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

类似的项目

依赖关系

~2.5MB
~45K SLoC