Blue/grey/white themed prompt with git status Currently it shows the following git info - current branch - staged file indicator - modified file indicator - untracked file indicator - ahead/behind status on remote repos if any - number of items in the stash It's a 2 line prompt VCS info is based on https://github.com/whiteinge/dotfiles/blob/master/.zsh_shouse_prompt I used the peepcode prompt as a starting point. Not sure much of it is left.pull/374/head
parent
b531191e2c
commit
7386cdfea3
@ -0,0 +1,134 @@
|
|||||||
|
# Coolblue prompt
|
||||||
|
# https://github.com/skarfacegc
|
||||||
|
#
|
||||||
|
# This likely degrades poorly on a non 256 color terminal
|
||||||
|
#
|
||||||
|
# The VCS bits are lifted from
|
||||||
|
# https://github.com/whiteinge/dotfiles/blob/master/.zsh_shouse_prompt
|
||||||
|
#
|
||||||
|
# Modified version of peepcode original authors
|
||||||
|
# Geoffrey Grosenbach <boss@topfunky.com>
|
||||||
|
# Sorin Ionescu <sorin.ionescu@gmail.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
function prompt_coolblue_precmd {
|
||||||
|
vcs_info
|
||||||
|
}
|
||||||
|
|
||||||
|
function prompt_coolblue_setup {
|
||||||
|
setopt LOCAL_OPTIONS
|
||||||
|
unsetopt XTRACE KSH_ARRAYS
|
||||||
|
prompt_opts=(cr percent subst)
|
||||||
|
|
||||||
|
# Load required functions.
|
||||||
|
autoload -Uz add-zsh-hook
|
||||||
|
autoload -Uz vcs_info
|
||||||
|
|
||||||
|
# Add hook for calling vcs_info before each command.
|
||||||
|
add-zsh-hook precmd prompt_coolblue_precmd
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set vcs_info options
|
||||||
|
zstyle ':vcs_info:*' enable git
|
||||||
|
zstyle ':vcs_info:*' get-revision true
|
||||||
|
zstyle ':vcs_info:*' check-for-changes true
|
||||||
|
|
||||||
|
zstyle ':vcs_info:*' formats "%b%c%u%m" # hash changes branch misc
|
||||||
|
zstyle ':vcs_info:*' actionformats "%F{196}(%a)%f %b%c%u%m"
|
||||||
|
zstyle ':vcs_info:*' branchformat "%b" # only show branch
|
||||||
|
|
||||||
|
zstyle ':vcs_info:*' stagedstr "%F{106}⦿%f"
|
||||||
|
zstyle ':vcs_info:*' unstagedstr "%F{124}●%f"
|
||||||
|
|
||||||
|
zstyle ':vcs_info:git*+set-message:*' hooks git-st git-stash git-untracked
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
local uname="%(!.%F{red}[root %m]%f.[%n %m])"
|
||||||
|
local dir="%5d"
|
||||||
|
|
||||||
|
|
||||||
|
# Define prompts.
|
||||||
|
PS1="
|
||||||
|
%B$uname%b "'${vcs_info_msg_0_}'" $dir
|
||||||
|
%F{033}>>%f%F{074}>>%f%F{123}>%f%F{015}%B>%b%f "
|
||||||
|
RPROMPT=
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Show remote ref name and number of commits ahead-of or behind
|
||||||
|
function +vi-git-st() {
|
||||||
|
local ahead behind remote
|
||||||
|
local -a gitstatus
|
||||||
|
|
||||||
|
# Are we on a remote-tracking branch?
|
||||||
|
remote=${$(git rev-parse --verify ${hook_com[branch]}@{upstream} \
|
||||||
|
--symbolic-full-name --abbrev-ref 2>/dev/null)}
|
||||||
|
|
||||||
|
if [[ -n ${remote} ]] ; then
|
||||||
|
ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
|
||||||
|
(( $ahead )) && gitstatus+=( "%F{106}∆${ahead//[[:space:]]/}%f" )
|
||||||
|
|
||||||
|
behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l)
|
||||||
|
(( $behind )) && gitstatus+=( "%F{124}∇${behind//[[:space:]]/}%f" )
|
||||||
|
|
||||||
|
user_data[gitstatus]=${gitstatus}
|
||||||
|
hook_com[branch]="%F{242}${hook_com[branch]}%f${(j::)gitstatus}"
|
||||||
|
else
|
||||||
|
hook_com[branch]="%F{242}${hook_com[branch]}%f"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show the above/behind upstream counts more tersely for the compact display
|
||||||
|
function +vi-git-st-compact() {
|
||||||
|
[[ -n ${user_data[gitstatus]} ]] \
|
||||||
|
&& hook_com[misc]="@{u}${(j:/:)user_data[gitstatus]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show count of stashed changes
|
||||||
|
function +vi-git-stash() {
|
||||||
|
local -a stashes
|
||||||
|
|
||||||
|
if [[ -s ${hook_com[base]}/.git/refs/stash ]] ; then
|
||||||
|
stashes=$(git stash list 2>/dev/null | wc -l)
|
||||||
|
hook_com[misc]+=" %F{242}(${stashes//[[:space:]]/} stashed)%f"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Indicate if there are any untracked files present
|
||||||
|
function +vi-git-untracked() {
|
||||||
|
local untracked
|
||||||
|
|
||||||
|
#check if there's at least 1 untracked file
|
||||||
|
untracked=${$(git ls-files --exclude-standard --others | head -n 1)}
|
||||||
|
|
||||||
|
if [[ -n ${untracked} ]] ; then
|
||||||
|
hook_com[unstaged]="${hook_com[unstaged]}%F{143}?%f"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function prompt_coolblue_help {
|
||||||
|
cat <<EOH
|
||||||
|
EOH
|
||||||
|
}
|
||||||
|
|
||||||
|
function prompt_coolblue_preview {
|
||||||
|
local +h PROMPT='%# '
|
||||||
|
local +h RPROMPT=''
|
||||||
|
local +h SPROMPT=''
|
||||||
|
|
||||||
|
prompt_preview_theme 'coolblue'
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_coolblue_setup "$@"
|
||||||
|
|
Loading…
Reference in new issue