8 个不稳定版本 (3 个破坏性更新)
0.4.0 | 2024 年 7 月 27 日 |
---|---|
0.3.0 | 2024 年 7 月 16 日 |
0.2.1 | 2024 年 7 月 1 日 |
0.1.3 | 2024 年 6 月 29 日 |
#42 在 图形 API
每月 265 次下载
75KB
1.5K SLoC
Termsnap 将终端输出转换为矢量图形。它使用内存中的 Alacritty 实例以兼容许多终端控制序列。
用法
请参阅 $ termsnap --help
以获取 CLI 用法文档。例如,要运行 ls
命令并将输出存储在 SVG 文件中,请运行
$ termsnap -- ls -l > ./out.svg
示例
这些示例由 ./scripts/examples.sh 生成。注意,其中一些示例会向交互式 bash 会话发送自动输入。
Cowsay
$ termsnap --lines 9 --columns 28 -- cowsay Hello, world
Neovim
# On exit, for some terminals, Neovim clears the terminal screen by swapping
# back to the main terminal screen buffer. The `--render-before-clear` argument
# renders the terminal screen as it was just prior to that swap occurring.
$ termsnap --lines 12 --columns 60 --term xterm-256color --render-before-clear -- nvim --clean ./scripts/example.py <<EOF
:set number
:syntax enable
:q
EOF
ANSI 颜色
$ (
# `sleep` gives bash time to be ready for the command, if this is omitted
# the appearance of prompts can get messed up.
sleep 0.05
echo -ne "for x in {16..231}; do printf \"\\\e[48;5;\${x}m%03d\\\e[0m \" \$x; done\r"
sleep 0.05
) | termsnap --lines 16 --columns 72 -- bash --noprofile --rcfile "$PWD/scripts/inputrc"
TTY 信息
$ (
sleep 0.05
printf "echo \$-\r"
sleep 0.05
printf "tty\r"
sleep 0.05
) | termsnap --lines 12 --columns 60 -- bash --noprofile --rcfile "$PWD/scripts/inputrc"
Tokei
$ termsnap --lines 22 --columns 80 -- tokei
安装
使用 Cargo 安装
$ cargo install termsnap
# Run ls
$ termsnap --columns 80 --lines 36 -- ls --color=always -l
# Run an interactive bash session
$ termsnap --interactive --out ./interactive-bash.svg -- bash
使用 Nix flakes 运行
# Run ls
$ nix run nixpkgs#termsnap -- --columns 80 --lines 36 -- ls --color=always -l
# Run an interactive bash session
$ nix run nixpkgs#termsnap -- --interactive --out ./interactive-bash.svg -- bash
上面的操作是从 nixpkgs 仓库获取 Termsnap。要使用此存储库主分支上的最新版本,请将 nixpkgs#termsnap
替换为 github:tomcur/termsnap
。
关于字体的说明
Termsnap 生成的 SVG 对用于文本渲染的字体度量做出了假设。具体来说,使用字体的字符进位、行高和下降度量来确定如何在生成的 SVG 中布局终端的单元格。可以通过传递 --font-{advance,line-height,descent}
参数来覆盖默认度量。您可以使用 CLI 程序 font-info 确定您要使用的字体的度量。或者,您可以使用字体编辑器 Fontforge。
字体未嵌入,文本未转换为路径。如果客户端渲染SVG时找不到指定的字体,SVG可能渲染不正确,特别是如果用于渲染的字体度量与生成SVG时使用的度量有显著差异时。您可以使用例如Inkscape将文本转换为路径——缺点是在低分辨率渲染时文本可能会失去清晰度。您还可以将SVG转换为位图。
# Text to path
$ inkscape --export-text-to-path --export-plain-svg --export-filename=./out.svg ./in.svg
# Render to raster image
$ inkscape --export-width=800 --export-filename=./out.png ./in.svg
依赖项
约6-19MB
约208K SLoC