#git-repository #git-branch #prompt #zsh #shell #expansion #remote

bin+lib shibuichi

一个简单的 zsh 提示符预处理程序,用于添加 Git 集成

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 次下载

MIT 许可证

46KB
1K SLoC

Shibuichi

crates.io docs license tests

用 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 保留用于所有其他域
    1. github.com
    2. gitlab.com
    3. bitbucket.org
    4. dev.azure.com
  • p - 如果远程跟踪分支至少领先当前分支 n 个提交则为真。
  • q - 如果远程跟踪分支至少落后当前分支 n 个提交则为真。
  • x - 如果至少有 n 个暂存区则为真。

对于 opqx 的条件扩展进行了扩展,使得如果没有传递数字,可以使用如下形式的条件:%(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

  1. zsh 提示扩展应该处理它能够处理的一切。这不应该重新实现终端颜色、退出代码检查、时间戳等。
  2. 这应该对提示风格无感知。特别是,这不应该对布局偏好或字符选择做出任何选择,而是寻求提供与 zsh 提示扩展相同的一般性。

命名

Shibuichi 是银和铜的合金,因为这受到了 silver 的启发。

依赖关系

~12–22MB
~408K SLoC