11 个稳定版本
3.0.0 | 2024年2月2日 |
---|---|
2.5.2 | 2023年12月9日 |
2.5.0 | 2023年10月8日 |
#529 在 文本处理
每月 78 次下载
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