Whetuu: 一个用 Zig 编写的零配置跨 Shell 提示符
Whetuu: 一个用 Zig 编写的零配置跨 Shell 提示符
Whetuu 是一个用 Zig 编写的零配置跨 Shell 提示符,旨在实现高性能和最小化设置。它提供一个动态提示符,用于跟踪 Git 状态、工具链版本和命令执行时间,同时集成了由上箭头触发的目录感知历史记录选择器。
高性能提示符渲染
Whetuu 在标准环境下大约渲染需要 2 毫秒,确保 shell 保持响应。为了达到此速度,每个读取磁盘的模块通过 std.Io 并发运行,这意味着总渲染时间受最慢的单个探测限制,而不是所有探测时间的总和。
性能基准测试在第 13 代 i9-13900H (ReleaseFast) 上显示:
- 无仓库,无工具链: 2.3 ms
- Zig 仓库 (35 文件): 3.0 ms
- 单一仓库 (8,259 文件): 20.2 ms
为了防止慢速仓库导致 shell 挂起,Whetuu 实施了严格的超时。Git 子进程被限制在 250 毫秒,工具链探测被限制在 200 毫秒。如果进程超过这些限制,Whetuu 只会简单地从提示符中删除对应的段落。
集成的目录感知历史记录选择器
Whetuu 用交互式选择器替换了标准的上箭头历史记录行为。此选择器默认作用于当前目录,仅在未找到目录特定命令时才回退到全局历史记录。
历史记录选择器的主要特点包括:
- 干净历史记录: 仅记录干净退出的命令,防止输入错误使列表杂乱。
- 隐私: 以空格开头的命令永不会被记录。
- 语法高亮: 命令根据终端主题进行高亮显示,长命令会在中间被截断,以保留唯一的前缀和后缀。
- 导航: 用户可以通过输入(不区分大小写)进行过滤,使用
Ctrl+G在目录历史记录和全局历史记录之间切换,并使用Tab编辑所选项,然后用Enter运行。
动态提示符模块
提示符仅在与当前上下文相关时显示段落:
- 用户/主机: 在 SSH 中或以 root 身份时以粗体绿色显示;root 访问将以粗体红色突出显示作为警告。
- 目录: 显示当前目录,将
$HOME折叠为~,固定路径并尽可能容纳更多的尾部目录。 - Git 分支: 以品红色显示分支名称或
(detached)。 - Git 状态: 以黄色指示正在进行的操作,如变基、合并或拣选提取。这直接从
.git读取,不产生子进程。 - Git 状态: 将冲突、暂存、已暂存、修改、未跟踪以及领先/落后状态分组到单个括号组中。
- 语言检测: 显示 39 种不同语言和工具的徽标和版本,通过项目清单、源文件扩展名或基础设施标记进行检测。
- 语言品牌: 提示符字符(一个星号)采用检测到的语言的品牌颜色。
- 命令持续时间: 如果前一条命令运行时间达到两秒或更长,则会出现计时器符号和经过的时间。
安全和数据隐私
Whetuu 采用“没有任何数据离开您的机器”理念设计。它不包含任何网络套接字、HTTP 客户端、遥测或更新检查。
数据管理遵循以下原则:
- 存储: Whetuu 仅写入两个文件:历史记录存储(模式 600)和位于
~/.cache/whetuu/versions的工具链版本缓存。两者均遵循 XDG 基础目录规范。 - Shell 集成: 安装程序将两行追加到活动 shell (
$SHELL) 的配置中,除此之外不做其他更改。 - 输入安全: 分支名称或目录中的控制字节将被转换为
?,以防止终端转义序列攻击。 - 执行: Whetuu 以固定参数的子进程形式运行
git和工具链探测,确保用户输入永不会被解释为命令。
安装和要求
Whetuu 需要 Nerd Font 来渲染用于 Git 分支、语言徽标和提示符字符的字形。如果没有 Nerd Font,这些元素将显示为空白方框。
安装通过单个命令完成:
curl --proto '=https' --tlsv1.2 -fsSL https://yamafaktory.github.io/whetuu/install.sh | sh
偏好手动配置的用户可以使用 WHETUU_NO_MODIFY=1 运行安装程序,以打印所需的配置行,而不是修改点文件。
社区反馈
尽管因其性能和历史记录选择器而受到赞誉,但一些用户对工具的观点性和其安装方法表示了担忧:
"我不希望我的提示符也处理 shell 历史记录……请停止在我的 $HOME 中创建目录。"
其他用户质疑将脚本直接管道到 shell 的安装方法,这是安全社区中常见的争议点:
"请停止将脚本管道到 bash 或 sh。强制人们使用编辑器,阅读安装脚本,并告诉他们如何运行它。"
关于词源,一位用户指出,该名称源自毛利语,其中 "wh" 发音为 "f" 音(FEH-too),而 "ū" 上的长音符号表示长元音。