#grid #printing #terminal-text #characters #rectangular #row #screen

screen_printer

一个用于在终端显示文本矩形块的 crate

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 文本处理

Download history 329/week @ 2024-03-10 16/week @ 2024-03-17 7/week @ 2024-03-31

85 每月下载量

MIT 许可证

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