* update colors * replaced the needs_push call with arrows indicating whether a pull or push is needed (Thanks, pure) * clean up file and add comments * update README with thorough description of prompt * add section on ~/.zshrc to the README
71 lines
1.9 KiB
Bash
71 lines
1.9 KiB
Bash
# heavily inspired by the wonderful pure theme
|
||
# https://github.com/sindresorhus/pure
|
||
|
||
# needed to get things like current git branch
|
||
autoload -Uz vcs_info
|
||
zstyle ':vcs_info:*' enable git # You can add hg too if needed: `git hg`
|
||
zstyle ':vcs_info:git*' use-simple true
|
||
zstyle ':vcs_info:git*' max-exports 2
|
||
zstyle ':vcs_info:git*' formats ' %b' 'x%R'
|
||
zstyle ':vcs_info:git*' actionformats ' %b|%a' 'x%R'
|
||
|
||
autoload colors && colors
|
||
|
||
git_dirty() {
|
||
# check if we're in a git repo
|
||
command git rev-parse --is-inside-work-tree &>/dev/null || return
|
||
|
||
# check if it's dirty
|
||
command git diff --quiet --ignore-submodules HEAD &>/dev/null;
|
||
if [[ $? -eq 1 ]]; then
|
||
echo "%F{red}✗%f"
|
||
else
|
||
echo "%F{green}✔%f"
|
||
fi
|
||
}
|
||
|
||
# get the status of the current branch and it's remote
|
||
# If there are changes upstream, display a ⇣
|
||
# If there are changes that have been committed but not yet pushed, display a ⇡
|
||
git_arrows() {
|
||
# do nothing if there is no upstream configured
|
||
command git rev-parse --abbrev-ref @'{u}' &>/dev/null || return
|
||
|
||
local arrows=""
|
||
local status
|
||
arrow_status="$(command git rev-list --left-right --count HEAD...@'{u}' 2>/dev/null)"
|
||
|
||
# do nothing if the command failed
|
||
(( !$? )) || return
|
||
|
||
# split on tabs
|
||
arrow_status=(${(ps:\t:)arrow_status})
|
||
local left=${arrow_status[1]} right=${arrow_status[2]}
|
||
|
||
(( ${right:-0} > 0 )) && arrows+="%F{011}⇣%f"
|
||
(( ${left:-0} > 0 )) && arrows+="%F{012}⇡%f"
|
||
|
||
echo $arrows
|
||
}
|
||
|
||
|
||
# indicate a job (for example, vim) has been backgrounded
|
||
# If there is a job in the background, display a ✱
|
||
suspended_jobs() {
|
||
local sj
|
||
sj=$(jobs 2>/dev/null | tail -n 1)
|
||
if [[ $sj == "" ]]; then
|
||
echo ""
|
||
else
|
||
echo "%{$FG[208]%}✱%f"
|
||
fi
|
||
}
|
||
|
||
precmd() {
|
||
vcs_info
|
||
print -P '\n%F{205}%~'
|
||
}
|
||
|
||
export PROMPT='%(?.%F{205}.%F{red})❯%f '
|
||
export RPROMPT='`git_dirty`%F{241}$vcs_info_msg_0_%f `git_arrows``suspended_jobs`'
|