# ============ 优雅 PS1 提示符 v4 胶囊块 (开始) ============
__ps1_git() {
command -v git >/dev/null 2>&1 || return
git rev-parse --is-inside-work-tree >/dev/null 2>&1 || return
local branch dirty untracked status
branch=$(git symbolic-ref --short HEAD 2>/dev/null) || branch=$(git describe --tags --exact-match 2>/dev/null) || return
status=$(git status --porcelain 2>/dev/null)
if [ -n "$status" ]; then
echo "$status" | grep -q '^.[MADRC]' && dirty="✚"
echo "$status" | grep -q '^??' && untracked="?"
fi
printf '%s%s%s' "$branch" "${dirty:+ $dirty}" "${untracked:+ $untracked}"
}
__ps1_path() {
local p="${PWD/#$HOME/\~}"
local IFS='/' parts=($p) n=${#parts[@]} out
if [ "$n" -gt 3 ]; then
out="…/${parts[$((n-2))]}/${parts[$((n-1))]}"
else
out="$p"
fi
printf '%s' "$out"
}
__build_ps1() {
__ps1_ret=$?
local git_info path_info
git_info=$(__ps1_git)
path_info=$(__ps1_path)
local RST='\[\033[0m\]'
local C_USER='\[\033[46;30m\]'
local C_PATH='\[\033[44;97m\]'
local C_GIT='\[\033[45;97m\]'
local C_TIME='\[\033[100;97m\]'
local C_ERR='\[\033[41;97m\]'
local C_ARROW='\[\033[32m\]'
PS1="\n ${C_USER} \u@\h ${RST}"
PS1+="${C_PATH} ${path_info} ${RST}"
if [ -n "$git_info" ]; then
PS1+="${C_GIT} ${git_info} ${RST}"
fi
PS1+=" ${C_TIME} \t ${RST}"
if [ "${__ps1_ret:-0}" -ne 0 ]; then
PS1+=" ${C_ERR} ✘ ${__ps1_ret} ${RST}"
fi
PS1+="\n${C_ARROW}▶${RST} "
}
PROMPT_COMMAND='__build_ps1'
# ============ 优雅 PS1 提示符 v4 胶囊块 (结束) ============
上一篇
没有了
下一篇
没有了
评论交流