12 个版本
使用旧的 Rust 2015
0.2.9 | 2024 年 8 月 10 日 |
---|---|
0.2.8 | 2024 年 8 月 8 日 |
0.2.7 | 2023 年 3 月 3 日 |
0.2.5 | 2022 年 10 月 31 日 |
0.1.1 | 2022 年 7 月 31 日 |
#145 在 命令行工具
每月 332 次下载
65KB
1K SLoC
Ascii Tree
使用 ASCII 字符绘制树结构的命令行工具。
用法
从 crates.io 安装 https://crates.io/crates/astree
cargo install astree
查看帮助信息
$ astree -h
A command line tool for drawing tree structures with ascii characters
Usage: astree <COMMAND>
Commands:
vertical Print the tree virtually. Use 'v' for shorthand
horizontal Print the tree horizontally. Use 'h' for shorthand
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help information (use `--help` for more detail)
-V, --version Print version information
例如,我们可以这样使用它
astree horizontal -i "$(cat << 'EOF'
# Root
## Child 1
### Grandchild 1
### Grandchild 2
EOF
)"
这里,每个额外的 #
表示一个嵌套的子项。
输出
Root
└─ Child 1
├─ Grandchild 1
└─ Grandchild 2
从文件输入
或者,我们还可以保存 markdown 文件,例如 tree.md
。
# Root
## Child 1
### Grandchild 1
### Grandchild 2
然后调用命令如下
astree horizontal -i tree.md
输出
Root
└─ Child 1
├─ Grandchild 1
└─ Grandchild 2
水平树
水平树绘制示例
$ astree horizontal -i examples/with_grandchildren_0.md
Root
├─ Child 1
│ ├─ Grandchild 1.1
│ └─ Grandchild 1.2
├─ Child 2
│ └─ Child 2.1
└─ Child 3
具有多个根节点的树绘制示例
$ astree horizontal -i examples/multi_tree.md
.
├─ Root 1
│ ├─ Child 1.1
│ │ ├─ Grandchild 1.1.1
│ │ └─ Grandchild 1.1.2
│ └─ Child 1.2
└─ Root 2
└─ Child 2.1
垂直树
垂直树绘制示例
astree vertical --input examples/with_grandchildren_1.md
┌──────┐
│ Root │
└──┬───┘
┌────┴────┐
│ Child 1 │
└────┬────┘
┌────────┴────────┐
┌──────┴───────┐ ┌──────┴───────┐
│ Grandchild 1 │ │ Grandchild 2 │
└──────────────┘ └──────────────┘
具有多个根节点的森林绘制示例
$ astree vertical -i examples/multi_tree.md
┌────────┐
│ Root 1 │
└───┬────┘
┌──────────────┴──────────────┐
┌─────┴─────┐ ┌─────┴─────┐
│ Child 1.1 │ │ Child 1.2 │
└─────┬─────┘ └───────────┘
┌──────────┴──────────┐
┌────────┴─────────┐ ┌────────┴─────────┐
│ Grandchild 1.1.1 │ │ Grandchild 1.1.2 │
└──────────────────┘ └──────────────────┘
┌────────┐
│ Root 2 │
└───┬────┘
┌─────┴─────┐
│ Child 2.1 │
└───────────┘
垂直树样式
使用粗线
astree vertical --input examples/with_grandchildren_1.md --style thick
┏━━━━━━┓
┃ Root ┃
┗━━┳━━━┛
┏━━━━┻━━━━┓
┃ Child 1 ┃
┗━━━━┳━━━━┛
┏━━━━━━━━┻━━━━━━━━┓
┏━━━━━━┻━━━━━━━┓ ┏━━━━━━┻━━━━━━━┓
┃ Grandchild 1 ┃ ┃ Grandchild 2 ┃
┗━━━━━━━━━━━━━━┛ ┗━━━━━━━━━━━━━━┛
使用双线
astree vertical --input examples/with_grandchildren_1.md --style double
╔══════╗
║ Root ║
╚══╦═══╝
╔════╩════╗
║ Child 1 ║
╚════╦════╝
╔════════╩════════╗
╔══════╩═══════╗ ╔══════╩═══════╗
║ Grandchild 1 ║ ║ Grandchild 2 ║
╚══════════════╝ ╚══════════════╝
使用胸部样式
astree vertical --input examples/with_grandchildren_2.md --style chest
╔━━━━━━╗
┃ Root ┃
╚━━┳━━━╝
╔━━━━━━━━━━━┻━━━━━━━━━━━╗
╔━━━┻━━━╗ ╔━━━┻━━━╗
┃ Left ┃ ┃ Right ┃
┃ Child ┃ ┃ Child ┃
╚━━━┳━━━╝ ╚━━━┳━━━╝
╔━━━━━━━┻━━━━━━━╗ ╔━━━━━┻━━━━━━╗
╔━━━━━┻━━━━━━╗ ╔━━━━━┻━━━━━━╗ ┃ Right ┃
┃ Grandchild ┃ ┃ Grandchild ┃ ┃ Grandchild ┃
┃ (1) ┃ ┃ (2) ┃ ╚━━━━━━━━━━━━╝
╚━━━━━━━━━━━━╝ ╚━━━━━━━━━━━━╝
使用气球样式
astree vertical --input examples/with_children_2.md --style balloon2
╭───────────╮
│ Root Node │
╰─────¤─────╯
╭────┴─────╮
╭───¤───╮ ╭───¤───╮
│ Child │ │ Child │
│ (1) │ │ (2) │
╰───────╯ ╰───────╯
垂直树最大标签宽度
使用 --width <WIDTH>
指定标签的最大宽度。例如
astree vertical --input examples/with_long_label.md --width 10
┌──────────┐
│ A Simple │
│ Root │
└────┬─────┘
┌─────┴──────┐
┌───┴────┐ ┌────┴────┐
│ A long │ │ Another │
│ child │ │ long │
└────────┘ │ child │
└─────────┘
垂直树水平间距
默认情况下,框之间有 2 个空格的间隔。这可以通过 --spacing <SPACING>
设置。
astree vertical --input examples/with_many_children.md --width 10 --spacing 0
┌──────────┐
│ A Simple │
│ Root │
└────┬─────┘
┌──────────┬────┴─────┬──────────┐
┌───┴────┐┌────┴────┐┌────┴────┐┌────┴─────┐
│ A long ││ Another ││ A third ││ One more │
│ child ││ long ││ child ││ child │
└────────┘│ child │└─────────┘└──────────┘
└─────────┘
astree vertical --input examples/with_many_children.md --width 10 --spacing 10
┌──────────┐
│ A Simple │
│ Root │
└────┬─────┘
┌─────────┴──────────┐
┌───┴────┐ ┌────┴────┐
│ A long │ │ Another │
│ child │ │ long │
└────────┘ │ child │
└─────────┘
垂直树多行
Markdown 文件中的标题行定义树结构。标题下的任何内容都将自动作为同一结构级别的单独行包含。
astree vertical --input examples/with_content.md
┌──────┐
│ Root │
└──┬───┘
┌───────┴────────┐
┌─────┴──────┐ ┌──────┴──────┐
│ Left Child │ │ Right Child │
│ Quota: 100 │ │ Quota: 200 │
└────────────┘ └─────────────┘
开发
参见 development.md。
依赖项
~2–2.6MB
~50K SLoC