#shell-prompt #prompt #shell #zsh

bin+lib eliprompt

优雅且信息丰富的shell提示符

4个版本 (破坏性更新)

0.4.0 2024年1月22日
0.3.0 2022年9月20日
0.2.0 2020年11月12日
0.1.0 2020年9月7日

#10#shell-prompt

MIT 许可证

63KB
1.5K SLoC

概述

CLI生成shell提示符。

字体

默认提示符配置使用来自Nerd Fonts的符号,并期望安装其中之一。

Shell支持

仅支持zsh。如果需要支持其他shell,请提交一个issue。

安装

cargo install eliprompt

确保eliprompt在你的PATH中,并将以下内容添加到.zshrc

eval "$(eliprompt install --shell zsh)"

配置

提示符由块组成。每个块包含要显示的文本以及样式(前景色和背景色)。

配置存储在~/.config/eliprompt/config.json中。它由一个类型为Config的JSON对象组成。Config和其他涉及的JSON类型在下面详细说明。

BlockProducer 类型

具有单个字段的JSON对象,字段名称与其类型相同,包括以下类型:

Color 类型

带有CSS颜色名称的字符串(例如 "red")或CSS sRGB颜色(例如 "#ff1000")。

Config 类型

根配置对象。具有以下字段的JSON对象

  • prompt [可选]
  • alternative_prompt [可选]
    • 类型: BlockProducernull
    • $TERMlinux或环境变量ELIPROMPT_ALTERNATIVE_PROMPT被定义时,使用此替代提示定义。
  • timeout [可选]
    • 类型: Duration
    • 构建提示符分配的最大时间。如果用时更长,将显示默认提示符。

Duration 类型

包含单位的时间字符串,例如 "3s" 表示 3 秒。

Elapsed 类型

显示上一个命令的持续时间。JSON对象包含以下字段

  • style [可选]
  • prefix [可选]
    • 类型: String
    • 显示持续时间之前的文本。
  • threshold [可选]
    • 类型: Duration
    • 只有当命令的持续时间超过阈值时,才会显示持续时间。

ExitCode 类型

如果上一个命令的退出码不是零,则显示退出码。JSON对象包含以下字段

  • style [可选]
  • prefix [可选]
    • 类型: String
    • 显示退出码之前的文本。

ExitStatusSymbol 类型

  • style [可选]
    • 类型: Style
    • 当退出状态为零时使用的样式。
  • error_style [可选]
    • 类型: Style
    • 当退出状态不为零时使用的样式。
  • 内容:
    • 类型: String

GitHead 类型

显示当前 git 分支。JSON对象包含以下字段

  • style [可选]
  • prefix [可选]
    • 类型: String
    • 显示 git 分支之前的文本。

GitPath 类型

如果当前工作目录位于 git 仓库中,则相对于仓库根目录显示。JSON对象包含以下字段

  • style [可选]
  • prefix [可选]
    • 类型: String
    • 显示路径之前的文本。

Hostname 类型

  • style [可选]
  • prefix [可选]
    • 类型: String
    • 显示主机名之前的文本。

Newline 类型

添加换行符。

Or 类型

包含 BlockProducer 项的列表。从第一个至少产生一个块的生成器返回块。

Separated 类型

  • separator_style [可选]
    • 类型: Style
    • 用于分隔符的样式。
  • separator [可选]
    • 类型: String
    • 在生成器产生的块组之间插入的分隔符。
  • 生成器:

Sequence 类型

包含 BlockProducer 项的列表。从所有生成器返回块。

Space 类型

添加空格字符。

Style 类型

包含以下字段的 JSON 对象

  • foreground [可选]
    • 类型: Colornull
  • background [可选]
    • 类型: Colornull

Styled 类型

  • style [可选]
    • 类型: Style
    • 未指定前景或背景颜色的项的默认样式。
  • 生成器:
    • 类型: BlockProducer
    • 应用于默认样式的块的生成器。

Text 类型

  • style [可选]
  • 内容:
    • 类型: String

Username 类型

  • style [可选]
  • prefix [可选]
    • 类型: String
    • 显示用户名之前的文本。

WorkingDirectory 类型

显示当前工作目录。JSON对象包含以下字段

  • style [可选]
  • home_as_tilde [可选]
    • 类型: bool
    • 指示是否将主目录显示为波浪线。
  • prefix [可选]
    • 类型: String
    • 显示工作目录之前的文本。

示例

{
  "prompt": {
    "Styled": {
      "style": {
        "foreground": "teal",
        "background": "black"
      },
      "producer": {
        "Sequence": [
          {
            "Separated": {
              "separator_style": {},
              "separator": " | ",
              "producers": [
                {
                  "Separated": {
                    "separator_style": {},
                    "separator": "@",
                    "producers": [
                      {
                        "Username": {
                          "style": {},
                          "prefix": ""
                        }
                      },
                      {
                        "Hostname": {
                          "style": {},
                          "prefix": ""
                        }
                      }
                    ]
                  }
                },
                {
                  "Or": [
                    {
                      "GitPath": {
                        "style": {},
                        "prefix": ""
                      }
                    },
                    {
                      "WorkingDirectory": {
                        "style": {},
                        "home_as_tilde": true,
                        "prefix": ""
                      }
                    }
                  ]
                },
                {
                  "GitHead": {
                    "style": {},
                    "prefix": ""
                  }
                },
                {
                  "Elapsed": {
                    "style": {},
                    "prefix": "",
                    "threshold": "2s"
                  }
                },
                {
                  "ExitCode": {
                    "style": {
                      "foreground": "crimson"
                    },
                    "prefix": ""
                  }
                }
              ]
            }
          },
          {
            "Newline": null
          },
          {
            "ExitStatusSymbol": {
              "style": {
                "foreground": "dodgerblue"
              },
              "error_style": {
                "foreground": "crimson"
              },
              "contents": ""
            }
          },
          {
            "Space": null
          }
        ]
      }
    }
  },
  "alternative_prompt": {
    "Styled": {
      "style": {
        "foreground": "teal"
      },
      "producer": {
        "Sequence": [
          {
            "Separated": {
              "separator_style": {},
              "separator": " | ",
              "producers": [
                {
                  "Separated": {
                    "separator_style": {},
                    "separator": "@",
                    "producers": [
                      {
                        "Username": {
                          "style": {},
                          "prefix": ""
                        }
                      },
                      {
                        "Hostname": {
                          "style": {},
                          "prefix": ""
                        }
                      }
                    ]
                  }
                },
                {
                  "WorkingDirectory": {
                    "style": {},
                    "home_as_tilde": true,
                    "prefix": ""
                  }
                },
                {
                  "Elapsed": {
                    "style": {},
                    "prefix": "",
                    "threshold": "2s"
                  }
                },
                {
                  "ExitCode": {
                    "style": {
                      "foreground": "crimson"
                    },
                    "prefix": ""
                  }
                }
              ]
            }
          },
          {
            "Newline": null
          },
          {
            "ExitStatusSymbol": {
              "style": {
                "foreground": "dodgerblue"
              },
              "error_style": {
                "foreground": "crimson"
              },
              "contents": ""
            }
          },
          {
            "Space": null
          }
        ]
      }
    }
  },
  "timeout": "1s"
}

贡献

所有贡献都必须在 MIT 许可证 下许可。

相关项目

starship 提供更多块并支持更多 shell。

依赖项

~12–24MB
~383K SLoC