16 个版本 (4 个重大更改)
0.5.0 | 2024年8月12日 |
---|---|
0.4.4 | 2024年8月9日 |
0.4.3 | 2024年7月22日 |
0.4.2 | 2024年6月29日 |
0.1.2 | 2024年1月6日 |
#97 in 命令行界面
2,048 monthly downloads
在 8 个 crates (5 directly) 中使用
33KB
325 代码行
Ratatui 宏
ratatui-macros
是一个 Rust 包,它提供易于使用的宏,用于简化使用 Ratatui 创建 UI 相关的样板代码。
这是一个实验性的沙盒,让我们探索 Ratatui 正确版本中可能需要的一些宏。
特性
- 基于约束的布局:轻松定义布局约束,例如固定、百分比、最小和最大尺寸以及比率。
- 方向布局:使用简单的宏命令指定水平或垂直布局。
- Span 和 Line 宏:使创建具有样式的 Span 和 Line 更加容易。
入门
要在您的 Rust 项目中使用 ratatui-macros
,请将其添加到您的 Cargo.toml
依赖项中。
cargo add ratatui-macros
然后,在您的 Rust 文件中导入宏
use ratatui_macros::{
constraint,
constraints,
horizontal,
vertical,
span,
line,
};
布局
如果您是 Ratatui 新手,请在继续之前查看 Ratatui 网站上的 布局概念 文章。
使用 constraints!
宏定义布局约束
use ratatui::prelude::*;
use ratatui_macros::constraints;
assert_eq!(
constraints![==50, ==30%, >=3, <=1, ==1/2, *=1],
[
Constraint::Length(50),
Constraint::Percentage(30),
Constraint::Min(3),
Constraint::Max(1),
Constraint::Ratio(1, 2),
Constraint::Fill(1),
]
)
use ratatui::prelude::*;
use ratatui_macros::constraints;
assert_eq!(
constraints![==1/4; 4],
[
Constraint::Ratio(1, 4),
Constraint::Ratio(1, 4),
Constraint::Ratio(1, 4),
Constraint::Ratio(1, 4),
]
)
使用 constraint!
宏定义单个约束
use ratatui::prelude::*;
use ratatui_macros::constraint;
assert_eq!(
constraint!(==50),
Constraint::Length(50),
)
使用 vertical!
和 horizontal!
宏创建垂直和水平布局
use ratatui::prelude::*;
use ratatui_macros::{vertical, horizontal};
let area = Rect { x: 0, y: 0, width: 10, height: 10 };
let [main, bottom] = vertical![==100%, >=3].areas(area);
assert_eq!(bottom.y, 7);
assert_eq!(bottom.height, 3);
let [left, main, right] = horizontal![>=3, ==100%, >=3].areas(area);
assert_eq!(left.width, 3);
assert_eq!(right.width, 3);
Spans
span!
宏创建原始和带有样式的 Span
。它们都接受一个格式字符串和参数。 span!
接受的第一个参数可以是任何可以转换为 Style
的值,后跟一个分号,然后是格式字符串和参数。
use ratatui::prelude::*;
use ratatui_macros::span;
let name = "world!";
let raw_greeting = span!("hello {name}");
let styled_greeting = span!(Style::new().green(); "hello {name}");
let styled_greeting = span!(Color::Green; "hello {name}");
let styled_greeting = span!(Modifier::BOLD; "hello {name}");
Line
line!
宏创建一个包含一系列 Span 的 Line
。它与 vec!
宏类似。
use ratatui::prelude::*;
use ratatui_macros::line;
let name = "world!";
let line = line!["hello", format!("{name}")];
let line = line!["bye"; 2];
Text
text!
宏创建一个包含一系列 Line 的 Text
。它与 vec!
宏类似。
use ratatui::prelude::*;
use ratatui_macros::{span, line, text};
let name = "world!";
let text = text!["hello", format!("{name}")];
let text = text!["bye"; 2];
甚至可以在 text!
宏中使用 span!
和 line!
use ratatui::prelude::*;
use ratatui_macros::{span, line, text};
let name = "Bye!!!";
let text = text![line!["hello", "world".bold()], span!(Modifier::BOLD; "{name}")];
行
row!
宏创建一个包含一系列 Cell
的 Row
。它与 vec!
宏类似。一个 Row
代表表格单行中的 Cell
序列。
use ratatui::prelude::*;
use ratatui_macros::row;
let rows = [
row!["hello", "world"],
row!["goodbye", "world"],
];
甚至可以在 row!
宏中使用 span!
、line!
和 text!
use ratatui::prelude::*;
use ratatui_macros::{span, line, text, row};
let name = "Bye!!!";
let text = row![text![line!["hello", "world".bold()]], span!(Modifier::BOLD; "{name}")];
贡献
欢迎向 ratatui-macros
贡献!无论是提交错误报告、功能请求还是拉取请求,所有形式的贡献都受到重视和感激。
依赖
~7–17MB
~225K SLoC