Serie
在你的终端中展示丰富的 git 提交图,如魔法般神奇 📚
(此演示展示的是 Ratatui 仓库!)
关于
Serie(发音为 /zéːriə/
)是一个 TUI 应用程序,它使用终端模拟器的图像显示协议来渲染类似 git log --graph --all
的提交图。
为什么?
虽然一些用户更喜欢通过命令行使用 Git,但他们经常依赖 GUI 或功能丰富的 TUI 来查看提交日志。其他人可能觉得 git log --graph
就足够了。
就我个人而言,我发现 git log --graph
的输出很难阅读,即使使用了额外的选项。仅仅为了查看日志而学习复杂的工具似乎很麻烦。
目标
- 在终端中提供丰富的
git log --graph
体验。 - 提供以提交图为中心的 Git 仓库浏览方式。
非目标
- 实现一个全功能的 Git 客户端。
- 创建一个复杂 UI 的 TUI 应用程序。
要求
- Git
- 支持的终端模拟器
- 详情请参阅兼容性。
安装
Cargo
$ cargo install --locked serie
Arch Linux
$ pacman -S serie
Homebrew (macOS)
$ brew install lusingander/tap/serie
下载二进制文件
你可以从 releases 下载预编译的二进制文件。
从源码构建
如果你想检查最新的开发版本,可以从源码构建:
$ git clone https://github.com/lusingander/serie.git
$ cd serie
$ cargo build --release
$ ./target/release/serie
[!注意] 除非是发布版本,否则运行速度会非常慢。
使用方法
基本用法
在你的 git 仓库所在目录运行 serie
。
$ cd <你的 git 仓库>
$ serie
选项
Serie - 在你的终端中展示丰富的 git 提交图,如魔法般神奇 📚
用法: serie [选项]
选项:
-p, --protocol <类型> 用于渲染图形的图像协议 [默认: auto] [可选值: auto, iterm, kitty]
-o, --order <类型> 提交排序算法 [默认: chrono] [可选值: chrono, topo]
--no-cache 不使用图形图像缓存
-h, --help 打印帮助信息
-V, --version 打印版本信息
-p, --protocol <类型>
用于渲染提交图图像的协议类型。
默认情况下,auto
将猜测当前终端最佳支持的协议。
Kitty 终端通过环境变量被检测为 kitty
,其他所有终端都假定支持 iterm
。
详情请参阅兼容性。
-o, --order <类型>
--order chrono
将尽可能按提交日期对提交进行排序。
--order topo
将尽可能连续排列同一分支上的提交。
--no-cache
生成的图形图像会被保存在 $XDG_CACHE_HOME/serie
并重复使用。
如果未设置 $XDG_CACHE_HOME
,将使用 ~/.cache/
。
如果指定了 --no-cache
,将不会使用或保存这个缓存图像。
快捷键
你可以通过按 ?
键查看快捷键。
默认快捷键可以被覆盖。请参考 default-keybind.toml 并将其添加到 config.toml。
所有默认快捷键列表
通用
按键 | 描述 | 对应的快捷键 |
---|---|---|
Ctrl-c q | 退出应用 | force_quit quit |
? | 打开帮助 | help_toggle |
提交列表
按键 | 描述 | 对应的快捷键 |
---|---|---|
Down/Up j/k | 向下/向上移动 | navigate_down navigate_up |
g/G | 跳到顶部/底部 | go_to_top go_to_bottom |
Ctrl-f/b | 向下/向上滚动一页 | page_down page_up |
Ctrl-d/u | 向下/向上滚动半页 | half_page_down half_page_up |
H/M/L | 选择屏幕顶部/中间/底部 | select_top select_middle select_bottom |
Enter | 显示提交详情 应用搜索(如果正在搜索) | confirm |
Tab | 打开引用列表 | ref_list_toggle |
/ | 开始搜索 | search |
Esc | 取消搜索 | cancel |
n/N | 跳到下一个/上一个搜索匹配项 | go_to_next go_to_previous |
c/C | 复制提交短/完整哈希值 | short_copy full_copy |
提交详情
按键 | 描述 | 对应的快捷键 |
---|---|---|
Esc Backspace | 关闭提交详情 | close cancel |
Down/Up j/k | 向下/向上滚动 | navigate_down navigate_up |
c/C | 复制提交短/完整哈希值 | short_copy full_copy |
引用列表
键 | 描述 | 对应的按键绑定 |
---|---|---|
Esc Backspace Tab | 关闭引用列表 | close cancel ref_list_toggle |
Down/Up j/k | 上下移动 | navigate_down navigate_up |
g/G | 移至顶部/底部 | go_to_top go_to_bottom |
Right/Left l/h | 展开/折叠节点 | navigate_right navigate_left |
c | 复制引用名称 | short_copy |
帮助
键 | 描述 | 对应的按键绑定 |
---|---|---|
Esc Backspace ? | 关闭帮助 | close cancel help_toggle |
Down/Up j/k | 上下滚动 | navigate_down navigate_up |
配置
如果 $XDG_CONFIG_HOME/serie/config.toml
存在,将会被读取并使用。
如果 $XDG_CONFIG_HOME
未设置,将使用 ~/.config/
代替。
如果配置文件不存在,所有项目将使用默认值。 如果配置文件存在但某些项目未设置,这些未设置的项目将使用默认值。
配置文件格式
此示例中设置的值为默认值。
[ui.list]
# 提交列表中主题的最小宽度。
# 类型:u16
subject_min_width = 20
# 提交列表中作者日期的日期格式。
# 格式必须按 strftime 格式指定。
# https://docs.rs/chrono/latest/chrono/format/strftime/index.html
# 类型:string
date_format = "%Y-%m-%d"
# 提交列表中作者日期的宽度。
# 类型:u16
date_width = 10
# 是否在提交列表中以本地时区显示作者日期。
# 类型:boolean
date_local = true
# 提交列表中作者名称的宽度。
# 类型:u16
name_width = 20
[ui.detail]
# 提交详情中作者/提交者日期的日期格式。
# 格式必须按 strftime 格式指定。
# https://docs.rs/chrono/latest/chrono/format/strftime/index.html
# 类型:string
date_format = "%Y-%m-%d %H:%M:%S %z"
# 是否在提交列表中以本地时区显示作者/提交者日期。
# 类型:boolean
date_local = true
[keybind]
# 具体配置示例请参见 ./assets/default-keybind.toml。
# ...
兼容性
支持的终端
支持以下图像协议:
以下列出了已确认每种协议可在哪些终端上正常工作。
Inline Images Protocol
终端模拟器 | 支持 | 备注 |
---|---|---|
iTerm2 | ○ | 但比其他终端慢 |
WezTerm | ○ | |
VSCode 集成终端 | ○ | 需要启用 terminal.integrated.enableImages 设置 |
Hyper | △ | >=v4.0.0,尚未正式发布 |
Tabby | △ | 图形背景不透明 |
Terminal graphics protocol
终端模拟器 | 支持 | 备注 |
---|---|---|
kitty | ○ |
报告兼容性
请在 Discussions 分享您使用其他终端模拟器的体验。
贡献
要开始贡献,请查看 CONTRIBUTING.md。
不遵循这些指南的贡献可能不会被接受。
截图
这些示例使用了以下仓库:
许可证
MIT