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 命令行界面

Download history 16/week @ 2024-05-03 425/week @ 2024-05-10 144/week @ 2024-05-17 39/week @ 2024-05-24 85/week @ 2024-05-31 26/week @ 2024-06-07 36/week @ 2024-06-14 218/week @ 2024-06-21 329/week @ 2024-06-28 330/week @ 2024-07-05 514/week @ 2024-07-12 791/week @ 2024-07-19 304/week @ 2024-07-26 456/week @ 2024-08-02 752/week @ 2024-08-09 288/week @ 2024-08-16

2,048 monthly downloads
8 个 crates (5 directly) 中使用

MIT 许可证

33KB
325 代码行

Ratatui 宏

Crates.io badge License badge Docs.rs badge CI Badge Crate Downloads badge

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! 宏创建一个包含一系列 CellRow。它与 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