#terminal #applications #interactive #interactivity

spinner

为您的终端应用程序添加更多交互性的简单库

6 个版本 (破坏性)

使用旧的 Rust 2015

0.5.0 2019年11月4日
0.4.0 2016年1月11日
0.3.0 2016年1月11日
0.2.1 2016年1月11日
0.1.0 2016年1月10日

#187 in #interactive

Download history 200/week @ 2023-11-19 153/week @ 2023-11-26 115/week @ 2023-12-03 163/week @ 2023-12-10 201/week @ 2023-12-17 153/week @ 2023-12-24 86/week @ 2023-12-31 198/week @ 2024-01-07 186/week @ 2024-01-14 142/week @ 2024-01-21 121/week @ 2024-01-28 146/week @ 2024-02-04 192/week @ 2024-02-11 261/week @ 2024-02-18 241/week @ 2024-02-25 224/week @ 2024-03-03

950 每月下载量
用于 18 个crate(直接使用 3 个)

LGPL-3.0

21KB
338

Spinner,一个创建交互式终端应用程序的简单库

文档

要使用Spinner,只需将其添加到您的 Cargo.toml

[dependencies.spinner]
version = "0.3"

使用方法

Spinner有两个部分:一个是旋转器本身,另一个是构建菜单的简单接口。

旋转器

要使用旋转器,只需创建一个使用SpinnerBuilder即可

use spinner::SpinnerBuilder;
let sp = SpinnerBuilder::new("Long Running operation, please wait...".into()).start();

将通知用户您的应用程序目前正在执行后台处理。 sp 是一个 SpinnerHandle,您可以通过它通知用户您已经完成了多少过程,或者也许是在过程中传递的消息。

use spinner::SpinnerBuilder;
let sp = SpinnerBuilder::new("Long Running operation, please wait...".into()).start();
sp.message("Updating...".into());
sp.update(format!("Finished {} out of {}.", i, max));

自定义

旋转器可以通过三种方式自定义:

  • step 持续时间,即消息的“刷新”周期。
  • format,如何打印给定的字符串,由于限制,这是通过闭包完成的,但它还允许比仅格式化字符串更多的特殊格式化。
  • 旋转器本身,即每次步骤更改的字符列表。

菜单

菜单是请求用户信息的简单、类型检查的方式。

一个简单的菜单可能看起来像这样

use spinner::menu::*;
let m = Menu::new(vec![
    MenuOption("First Name".into(), MenuType::Text, MenuOptional::Optional, None),
    MenuOption("Last Name".into(), MenuType::Text, MenuOptional::Required, None),
    MenuOption("Age".into(), MenuType::Integer, MenuOptional::Optional, Some(MenuValue::Integer(1))),
    MenuOption("How much Ketchup?".into(), MenuType::Float, MenuOptional::Optional, None),
]);

let results = m.display();

在结果中,将是一个 MenuValue 数组,然后可以通过 get_{string,int,float} 来检索,在错误类型上调用这些将 panic!。因此,请务必从正确的菜单问题中取出正确的值。所以小心。

菜单选项

MenuOption 是一种新型。它由一个字符串组成,该字符串将构成向用户展示的问题。然后是一个 MenuType,告诉检查器期望什么输入。如果您需要其他内容,请使用 MenuType::Text 并使用它。您还必须说明该输入是否为可选的。(true=可选,false=非可选)。最后,一个 Option<MenuValue>,允许您放入 None(表示无默认值)或 Some<MenuValue>(如果用户未输入任何内容,将使用此值)。

依赖项

~245–720KB
~11K SLoC