4 个版本
0.31.32 | 2024 年 8 月 15 日 |
---|---|
0.31.31 | 2024 年 8 月 15 日 |
0.31.3 | 2024 年 8 月 15 日 |
0.1.0 | 2024 年 8 月 11 日 |
#244 in 命令行界面
273 每月下载量
20KB
300 行
ragout - 终端原始模式输入处理器
ragout 是一个库 crate,在终端原始模式下提供 shell 功能。
特性
- 输入移动
- 移动到输入行的开始/结束
- 移动到下一个/上一个项目(基本上是一个单词)
- 输入删除
- 删除整个输入行
- 删除光标左右的所有输入
- 历史记录
- 在用户提交时(按回车键)将输入保存到输入历史记录中
- 使用上下键导航保存的历史记录条目
- 退出 程序使用 CTRL-C(使用 std::process::exit())
示例
基本用法
$ cargo run --example basic
use ragout::{init, run};
fn main() {
// enter raw mode and initialize necessary variables
// the string literal argument will be the value of the prompt
let (mut sol, mut i, mut h, mut ui) = init("some prompt 🐱 ", true);
'main: loop {
let input = run(&mut i, &mut h, &mut sol, &mut ui);
if !input.is_empty() {
// do some stuff with the user input
}
}
}
使用宏
$ cargo run --example macro --no-default-features --features custom_events
use ragout::ragout_custom_events;
ragout_custom_events! {
KeyCode::F(5), 0x0, TestF(u8),
|| {
let date = std::process::Command::new("date")
.output()
.unwrap()
.stdout.into_iter()
.map(|u| u as char)
.collect::<String>()
.replacen("\"", "", 2);
self.overwrite_prompt(date
.trim_end_matches('\n'));
self.write_prompt(sol);
// TODO: sol.write input, should be called from inside input.write_prompt() right before
// sol.flush() at the end
};
KeyCode::Esc, 0x0, TestPrintScreen,
|| {
// requires that the grim cli tool (or something similar, replace as needed) is installed
let cmd = std::process::Command::new("grim").arg("target/screenshot.png").output().unwrap();
let inst = std::time::Instant::now();
let temp = self.prompt.drain(..).collect::<String>();
self.overwrite_prompt("saved screenshot to target/screenshot.png> ");
self.write_prompt(sol);
let notify = std::thread::spawn(move || loop {
if inst.elapsed() > std::time::Duration::from_secs(3) {
break true;
}
});
let notify = notify.join().unwrap();
if notify {
self.overwrite_prompt(&temp);
self.write_prompt(sol);
}
};
}
fn main() {
let (mut sol, mut i, mut h, mut ui) = init("some prompt 🐭 ", true);
'main: loop {
let input = run(&mut i, &mut h, &mut sol, &mut ui);
if !input.is_empty() {
// do some stuff with the user input
}
}
}
许可证
在 MIT 许可证 下许可。
版本管理
遵循 SemVer 规范。在版本达到 1.0.0 之前,仓库将遵循以下规则进行版本管理 x.y.z
- x 是常量 0。
- 除了少数例外,增加 y 的更改伴随着里程碑的创建,即新里程碑的第一个 pr 增加了 y。
- 其他所有内容都增加 z。连续的小更改可能被合并为单个 z 的增加。
- 上述三个规则不一定总是受到尊重。
警告:此 crate 仍然是不稳定的,如果有什么问题,或者您想要一个功能,请随时打开一个问题。
依赖关系
~2–11MB
~127K SLoC