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.com
gitlab.com
bitbucket.org
dev.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