1 个不稳定版本
0.1.0 | 2024年7月12日 |
---|
#2810 在 命令行工具
119 每月下载量
用于 2 crates
2MB
41K SLoC
Yash-prompt
yash-prompt
crate 实现了 yash 的命令提示符。
许可协议
本库以 GPLv3 许可证发布。
lib.rs
:
此库提供了显示命令提示符的功能。
概述
yash-prompt
crate 为 yash
shell 提供命令提示符支持。它包括扩展提示字符串并交互式显示的功能。
Prompter
是一个装饰器结构体,它包装了内部输入源并在读取用户输入之前显示命令提示符。它可以用于创建交互式 shell 提示符。提示符内部使用以下函数来扩展提示字符串
fetch_posix
: 从 POSIX 定义的提示字符串中获取变量的值。expand_posix
: 以 POSIX 兼容的方式扩展提示字符串。expand_ex
: 使用 yash 特定的扩展来扩展提示字符串。(此函数尚未实现。)
示例
使用提示符构建输入源并从用户读取输入
use std::cell::RefCell;
use std::num::NonZeroU64;
use std::ops::ControlFlow::Continue;
use yash_env::Env;
use yash_env::input::FdReader;
use yash_env::io::Fd;
use yash_env::semantics::ExitStatus;
use yash_prompt::Prompter;
use yash_semantics::read_eval_loop;
use yash_syntax::parser::lex::Lexer;
use yash_syntax::source::Source;
let mut env = Env::new_virtual();
let reader = FdReader::new(Fd::STDIN, env.system.clone());
let mut ref_env = RefCell::new(&mut env);
let input = Box::new(Prompter::new(reader, &ref_env));
let mut lexer = Lexer::new(input, NonZeroU64::MIN, Source::Stdin.into());
let result = read_eval_loop(&ref_env, &mut lexer).await;
drop(lexer);
assert_eq!(result, Continue(()));
assert_eq!(env.exit_status, ExitStatus::SUCCESS);
依赖关系
~8–18MB
~252K SLoC