1 个不稳定版本

0.1.0 2024年7月12日

#2810命令行工具

Download history 82/week @ 2024-07-07 25/week @ 2024-07-14 12/week @ 2024-07-28

119 每月下载量
用于 2 crates

GPL-3.0-or-later

2MB
41K SLoC

Yash-prompt

yash-prompt crate 实现了 yash 的命令提示符。

yash-prompt at crates.io yash-prompt at docs.rs Build status

许可协议

本库以 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