15 个版本
0.2.7 | 2023 年 10 月 16 日 |
---|---|
0.2.6 | 2023 年 8 月 11 日 |
0.1.6 | 2023 年 7 月 11 日 |
0.1.5 | 2023 年 2 月 26 日 |
0.1.3 | 2022 年 12 月 13 日 |
#454 in 文本处理
85 每月下载量
55KB
947 行
Screen Printer
Screen Printer 是一个 Rust crate,允许您以网格格式构建和打印数据数组。
此 crate 的目的是使将文本矩形块打印到终端变得更加容易。包括如下特性:
DynamicPrint
,它只打印任何从之前打印的网格中更改的字符。PrintingPosition
,允许您将字符串打印到终端的不同位置,例如居中。
如果网格的大小或位置发生变化,则整个网格将被重新打印。
示例
使用动态打印方法打印网格
此 crate 的核心是 dynamic_print
方法,该方法针对 Printer
。这将接受一个字符矩形网格并只打印自上次打印以来已更改的网格部分。
use screen_printer::printer::*;
const WIDTH: usize = 3;
const HEIGHT: usize = 3;
fn main() {
print!("\u{1b}[2J"); // Clear all text on the terminal
// The default printing position is the bottom left of the terminal
let mut printer = Printer::new_with_printing_position(PrintingPosition::default());
// Create the first grid to be printed.
let grid_1 = "abc\n123\nxyz".to_string();
// print the first grid.
printer.dynamic_print(grid_1).unwrap();
// Wait before printing the second grid.
std::thread::sleep(std::time::Duration::from_millis(500));
// Create the second grid to be printed.
let grid_2 = "abc\n789\nxyz".to_string();
// Print the second grid.
// This will only end up printing the difference between the two grids/
printer.dynamic_print(grid_2).unwrap();
}
这将产生以下结果
abc
123
xyz
进入
abc
789 < only line that was actually printed
xyz
打印位置
上述示例中显示的另一个功能,即 PrintingPosition
。
这将根据终端上定义的 9 个位置之一打印网格。这些位置由 X 和 Y 轴分割
- 左/上,
- 中间,以及
- 右/下。
“矩形网格”是什么意思?
网格是指字符“网格”,即具有行和列的字符串。每个“网格”的行将是字符集,由换行符分隔。每一列将是行之间的单个字符。
一个 3x2 的“网格”可能看起来像这样: "xxx\nxxx"
x
在 \n
的两侧就像一个列,而 \n
分隔每一行。
如果网格“不是矩形”意味着行与其他行具有不同数量的字符,如下所示: "xx\nxxx"
依赖项
~0.4–1MB
~23K SLoC