9 个版本
| 0.1.7 | 2024 年 2 月 14 日 |
|---|---|
| 0.1.6 | 2023 年 11 月 20 日 |
| 0.1.5 | 2023 年 9 月 4 日 |
| 0.1.4 | 2023 年 2 月 15 日 |
| 0.1.1 | 2022 年 10 月 16 日 |
#3 在 #expansion
每月 47 次下载
46KB
1K SLoC
Shibuichi
用 rust 编写的自定义 zsh 提示符扩展器。
Shibuichi 处理了 zsh 提示符扩展的子集 zsh prompt expansions。标准 zsh 提示符扩展保持不变,这个程序只是在运行时添加了几个其他扩展。
%r- 当前 git 分支的简称。如果不处于 git 仓库中,则此值将为空。%p- 当前分支领先于其远程跟踪分支的提交数。如果没有远程跟踪分支,此值将显示为 0。%q- 当前分支落后于其远程跟踪分支的提交数。如果没有远程跟踪分支,此值将显示为 0。%x- 当前暂存区数。
此外,它还为条件子串扩展 %(x.true-text.false-text) 添加了几个代码。这些代码是
G- 如果处于 git 仓库中则为真。y- 如果 git 仓库被修改则为真。m- 如果 git 仓库有已修改的文件则为真。s- 如果 git 仓库有已暂存的文件则为真。o- 如果远程跟踪源域与n匹配则为真,其中 0 保留用于所有其他域github.comgitlab.combitbucket.orgdev.azure.com
p- 如果远程跟踪分支至少领先当前分支n个提交则为真。q- 如果远程跟踪分支至少落后当前分支n个提交则为真。x- 如果至少有n个暂存区则为真。
对于 o、p、q 和 x 的条件扩展进行了扩展,使得如果没有传递数字,可以使用如下形式的条件:%(x.0-text.1-text.2-text...) 来为每个可能的值创建一个分支。如果整数大于条件数量,将使用最后的文本。
最后,目录命令在略微破坏性的更改中进行了扩展,其中
%d{:替换:前缀:...}%/{:replacement:prefix:...}- 应用多个前缀-替换对到路径。可以指定任何分隔符字符,并且会尊重转义字符,但不会进行其他扩展。%~和%/{:~:$HOME}应该大致等价。注意,这首先尝试PWD变量,如果它不存在,则使用规范的工作目录,这可能不同于%/输出的目录。
安装
cargo install shibuichi
用法
使用 shibuichi 的最简单方法是将其通过你的 precmd 函数传递,然后使用你的扩展调整命令。例如
precmd() {
PROMPT="$(shibuichi ' %r %# ')"
}
创建了一个简单的提示,显示你的 git 分支。
或者,你可以传递几个 "提示" 并将它们存储在 psvar 中,以便在主提示中使用。
PROMPT=' %1v %2v %# '
precmd() {
local IFS=$'\0'
psvar=($(shibuichi -0 '%r' '%p'))
}
但是请注意,zsh 不会进一步扩展任何引用的变量,所以你应该只包括自定义扩展,而不是内置的扩展。
这两种版本都使得能够对 shibuishi 的存在具有容错性,要么在失败时回退到默认提示,要么为 psvar 的元素的存在添加分支。后者可能有点复杂,因为从 psvar 中取出的字符串之后不会进行任何扩展,所以任何扩展都必须在形式为 %x(V...) 的条件之后进行。
详细示例
我的当前提示,受银色启发:
%F{white}%K{black}%(?.%1(j. .). %1(j..) ) %n@%m %F{black}%K{blue}%F{black} %/{::$HOME} %F{blue}%(G.%(y.%K{yellow}.%K{green})%F{black} %(o.....ﴃ.)%1(p. .%1(q. .%1(x. .)))%(p....%p)%(q....%q)%(x....%x) %r%(m. .%(s. .))%(m..)%(s..) %(y.%F{yellow}.%F{green}).)%k%f
设计
有两个主要的设计决策影响了 shibuichi
zsh提示扩展应该处理它能够处理的一切。这不应该重新实现终端颜色、退出代码检查、时间戳等。- 这应该对提示风格无感知。特别是,这不应该对布局偏好或字符选择做出任何选择,而是寻求提供与
zsh提示扩展相同的一般性。
命名
Shibuichi 是银和铜的合金,因为这受到了 silver 的启发。
依赖关系
~12–22MB
~408K SLoC