11 个稳定版本

3.0.0 2024年2月2日
2.5.2 2023年12月9日
2.5.0 2023年10月8日

#529文本处理

Download history 67/week @ 2024-03-31

每月 78 次下载

MIT 许可证

34KB
683

亚麻地板

亚麻地板是一个专为在 gosh shell 中使用而设计的平滑行编辑器。它在开发人员和用户方面都易于使用。

它支持 Ctrl-C/-D/-Left/-Right/-Backspace,所有这些功能都是开箱即用的。后三个用于界定单词的字符是完全可配置的。

支持历史记录。在删除 History 之前,请确保运行 Editor::save_history

还支持与提示符类似界面的自动完成;请参阅 Editor::completion。请注意,自动完成仅尊重空格,而不是常规的单词分隔;这是因为在某些(例如文件)自动完成中可能需要更多的许可。

示例

use linoleum::{Editor, EditResult};

fn main() {
    let mut editor = Editor::new(" > ");
    match editor.read().expect("Failed to read line") {
        EditResult::Ok(s) => println!("You entered: '{s}'"),
        EditResult::Cancel => println!("You canceled!"),
        EditResult::Quit => std::process::exit(1),
    }
}
use std::fmt;
use linoleum::{Editor, EditResult};

struct Prompt {
    template: String,
}

impl fmt::Display for Prompt {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
        write!(f, "{}", self.template.replace("{greet}", "hello"))
    }
}

fn main() {
    let prompt = Prompt { template: " {greet}> ".to_string() };
    let mut editor = Editor::new(prompt)
        .highlight(
            |data| data.replace("foo", "bar")
        );

    loop {
        match editor.read() {
            Err(e) => {
                eprintln!("failed to read line: {e}");
                break;
            }

            Ok(EditResult::Ok(s)) => {
                if s == "exit" {
                    break;
                } else if s == "clear" {
                    print!("{}[2J{0}[0;0H", 27 as char);
                } else {
                    eprintln!("huh?");
                }
            }

            Ok(EditResult::Cancel) => continue,
            Ok(EditResult::Quit) => break,
        }
    }
}

依赖项

~0.8–6MB
~20K SLoC