Project Icon

trueline

增强型Bash提示符,支持真彩色和丰富图标

Trueline是一款快速可扩展的Bash命令提示符,支持真彩色(24-bit)和多种图标。基于Pureline的设计,提供了RGB颜色代码和简化的配置功能,还可以显示当前vi模式。简单定制可实现多种颜色、段落和符号配置,并且易于扩展新段落。适用于支持Powerline图标的字体,如Nerd Fonts,轻松配置和使用。

Trueline: 具有真彩色支持的 Bash Powerline 风格提示符

Trueline 是一个快速且可扩展的 Powerline 风格 bash 提示符,支持真彩色(24位)和精美字形。

其纯 Bash 代码实现和整体功能模仿了优秀的 Pureline 命令提示符。然而 Trueline 还增加了使用 RGB 颜色代码的能力,扩展了提示符分段中的图标/字形使用(灵感来自 Powerlevel9k),简化了配置,并且除其他功能外,还显示当前输入模式(在 vi 模式下)。

主图

安装

下载此仓库中的 trueline.sh 脚本,并在 .bashrc 文件中源引用它:

$> git clone https://github.com/petobens/trueline ~/trueline
$> echo 'source ~/trueline/trueline.sh' >> ~/.bashrc

或者

$> wget https://raw.githubusercontent.com/petobens/trueline/master/trueline.sh -P ~/
$> echo 'source ~/trueline.sh' >> ~/.bashrc

如果你使用支持"Powerline"字形的字体,比如包含在出色的 Nerd Fonts 项目中的字体,那么提示符应该能正确渲染,无需进一步配置(只要你喜欢上图所示的默认设置)。

自定义

自定义和扩展提示符很容易,有几个可用的分段选项。

所有设置都放在 .bashrc 中,必须在实际源引用 trueline.sh 文件之前定义(否则将使用默认设置)。为了说明这是如何工作的,让我们从一个简单的配置示例开始:

declare -A TRUELINE_COLORS=(
    [light_blue]='75;161;207'
    [grey]='99;99;100'
    [pink]='199;88;157'
)

declare -a TRUELINE_SEGMENTS=(
    'working_dir,light_blue,black,normal'
    'git,grey,black,normal'
    'time,white,black,normal'
    'newline,pink,black,bold'
)

declare -A TRUELINE_SYMBOLS=(
    [git_modified]='*'
    [git_github]=''
    [segment_separator]=''
    [working_dir_folder]='...'
    [working_dir_separator]='/'
    [working_dir_home]='~'
    [newline]='❯'
    [clock]='🕒'
)

TRUELINE_GIT_SHOW_STATUS_NUMBERS=false
TRUELINE_GIT_MODIFIED_COLOR='grey'
TRUELINE_WORKING_DIR_SPACE_BETWEEN_PATH_SEPARATOR=false

_trueline_time_segment() {
    local prompt_time="${TRUELINE_SYMBOLS[clock]} \t"
    if [[ -n "$prompt_time" ]]; then
        local fg_color="$1"
        local bg_color="$2"
        local font_style="$3"
        local segment="$(_trueline_separator)"
        segment+="$(_trueline_content "$fg_color" "$bg_color" "$font_style" " $prompt_time ")"
        PS1+="$segment"
        _trueline_record_colors "$fg_color" "$bg_color" "$font_style"
    fi
}

source ~/trueline/trueline.sh

这会生成以下提示符(基本上复制了极简 ZSH Pure 提示符):

pure_image

你可以在上面的配置中看到,基本上有 5 个不同/相关的设置:颜色、分段、符号、选项和扩展。让我们逐一分解这些设置。

颜色

颜色通过名为 TRUELINE_COLORS 的关联数组定义。该数组的键是颜色名称,值是 RGB 颜色代码:

declare -A TRUELINE_COLORS=(
    [color_name]='red;green;blue'
)

默认颜色大致基于 Atom 的 One Dark 主题,由以下定义:

declare -A TRUELINE_COLORS=(
    [black]='36;39;46'
    [cursor_grey]='40;44;52'
    [green]='152;195;121'
    [grey]='171;178;191'
    [light_blue]='97;175;239'
    [mono]='130;137;151'
    [orange]='209;154;102'
    [purple]='198;120;221'
    [red]='224;108;117'
    [special_grey]='59;64;72'
    [white]='208;208;208'
)

在源引用 Trueline 脚本之前在 bashrc 文件中定义的任何 TRUELINE_COLORS 数组实际上会更新上述默认数组(在覆盖现有键和添加不存在的键的意义上)。这基本上意味着始终可以使用默认颜色,只有在真正需要新的额外颜色时才需要定义数组。

注意: 你可以定义任何你想要的颜色名称,除了 default_bg,它被 Trueline 用来获取默认终端背景颜色。

分段

提示符分段在名为 TRUELINE_SEGMENTS 的有序数组中定义,其结构如下:

declare -a TRUELINE_SEGMENTS=(
    'segment_name,segment_fg_color,segment_bg_color,font_style'
)

其中分段前景和背景颜色名称是 TRUELINE_COLORS 数组的键,字体样式可以是 bolddimitalicnormalunderlined。数组中元素的顺序定义了每个分段在提示符中渲染的顺序。

Trueline 提供以下分段(状态表示它们是否默认启用/渲染):

段名称状态描述
aws_profile已启用当前AWS配置文件
bg_jobs已启用后台作业数量
cmd_duration已禁用上一条命令执行时间
conda_env已启用当前Anaconda环境
exit_status已启用上一条命令的返回码
git已启用git分支/远程仓库和仓库状态
newline已禁用将提示符段分割成多行
read_only已启用只读目录指示器
user已启用用户名和主机名(根据ssh状态显示)
venv已启用Python虚拟环境
working_dir已启用当前工作目录
distro_icon已禁用当前Linux发行版图标

但可以轻松添加更多段(参见扩展)。

要启用换行段,可以使用以下配置:

declare -a TRUELINE_SEGMENTS=(
    'working_dir,mono,cursor_grey,normal'
    'git,grey,special_grey,normal'
    'newline,black,orange,bold'
)

效果如下: newline_image

符号

符号(即图标/字形)通过名为TRUELINE_SYMBOLS的关联数组定义,其中每个条目的键是(预定义的)段符号名称,值是实际的符号/图标:

declare -A TRUELINE_SYMBOLS=(
    [segment_symbol_name]='|' # 实际符号
)

下表显示了当前预定义的符号名称及其默认值(即实际字形或相应的nerd-font unicode代码):

符号名称字形符号名称字形
aws_profileU+f52cnewline_rootU+f52c
bg_jobsU+f085ps2...
distro_iconU+ebc6read_onlyU+f023
exit_statusU+ea87segment_separatorU+e0b0
git_aheadU+f55csshU+f817
git_behindU+f544timerU+fa1e
git_bitbucketU+f171venv (和conda)U+e73c
git_branchU+e0a0vimode_cmdN
git_githubU+f408vimode_insI
git_gitlabU+f296working_dir_folderU+e5fe
git_modifiedU+f44dworking_dir_homeU+f015
newlineU+f155working_dir_separatorU+e0b1

TRUELINE_COLORS一样,在加载Trueline脚本之前在bashrc文件中定义的任何TRUELINE_SYMBOLS数组实际上会使用上面显示的默认符号更新数组(因此只有在覆盖某些图标或添加新图标时才需要定义此类数组)。

选项

大多数Trueline设置都通过上述3个结构控制。但是Trueline还定义了一系列控制一些额外选项的变量。特别是我们可以区分段内和外部选项。这些选项及其默认值定义如下:

段内

以下段有自己的(子)设置:

  • git:
    • TRUELINE_GIT_SHOW_STATUS_NUMBERS=true: 布尔变量,决定是否在相应的修改/落后状态符号旁显示实际修改的文件数和落后/领先的提交数。
    • TRUELINE_GIT_MODIFIED_COLOR='red': 修改文件的符号和数量的前景色。
    • TRUELINE_GIT_BEHIND_AHEAD_COLOR='purple': 落后/领先提交的符号和数量的前景色。
  • user:
    • TRUELINE_USER_ROOT_COLORS=('black' 'red'): root用户的前景色和背景色。
    • TRUELINE_USER_SHOW_IP_SSH=false: 布尔变量,决定是否在ssh连接中显示IP地址或主机名。
    • TRUELINE_USER_ALWAYS_SHOW_HOSTNAME=false: 布尔变量,决定是否始终显示IP地址或主机名(不仅在ssh连接中)。
    • TRUELINE_USER_SHORTEN_HOSTNAME=false: 布尔变量,决定是显示完整主机名(host.domain.com)还是缩短的主机名(host)。
  • working_dir:
    • TRUELINE_WORKING_DIR_SPACE_BETWEEN_PATH_SEPARATOR=true: 布尔变量,决定是否在路径分隔符前后添加空格。
    • TRUELINE_WORKING_DIR_ABBREVIATE_PARENT_DIRS=false: 布尔变量,设置为true时显示完整工作目录(而不是截断它)。每个父目录缩短为TRUELINE_WORKING_DIR_ABBREVIATE_PARENT_DIRS_LENGTH
    • TRUELINE_WORKING_DIR_ABBREVIATE_PARENT_DIRS_LENGTH=1: 启用TRUELINE_WORKING_DIR_ABBREVIATE_PARENT_DIRS时每个父目录的长度。

外部

  • TRUELINE_SHOW_VIMODE=false: 布尔变量,决定是否显示当前vi模式(如果设置为true且vi模式尚未启用,则Trueline将启用它;否则必须在.bashrc中通过set -o vi单独启用vi模式)。设置为true时,会首先显示一个新段(即在TRUELINE_SEGMENTS中定义的任何其他段之前),其外观可以通过以下变量控制:
    • TRUELINE_VIMODE_INS_COLORS_STYLE=('black' 'light_blue' 'bold'): 插入模式段的前景/背景颜色和字体样式。
    • TRUELINE_VIMODE_CMD_COLORS_STYLE=('black' 'green' 'bold'): 命令模式段的前景/背景颜色和字体样式。
    • TRUELINE_VIMODE_INS_CURSOR='vert': 插入模式光标形状(可能的值为vertblockunder)。
    • TRUELINE_VIMODE_CMD_CURSOR='block': 命令模式光标形状(可能的值为vertblockunder)。

扩展

通过遵循此模板,可以轻松将新段添加到提示符中:

_trueline_new_segment_name_segment() {
    local some_content=$(...)
    if [[ -n "$some_content" ]]; then
        local fg_color="$1"
        local bg_color="$2"
        local font_style="$3"
        local segment="$(_trueline_separator)"
        segment+="$(_trueline_content "$fg_color" "$bg_color" "$font_style" " $some_content ")"
        PS1+="$segment"
        _trueline_record_colors "$fg_color" "$bg_color" "$font_style"
    fi
}

然后只需在TRUELINE_SEGMENTS数组中包含new_segment_name

欢迎提交包含新段的PR!

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号