add minimal prompt

This commit is contained in:
Matt Hamilton 2015-12-18 10:51:58 -05:00
parent 9c9d1ac779
commit 5cf08f503f
2 changed files with 104 additions and 0 deletions

View File

@ -0,0 +1 @@
../themes/minimal.zsh-theme

View File

@ -0,0 +1,103 @@
#
# Minimal theme
# https://github.com/S1cK94/minimal
#
autoload -U colors && colors
setopt prompt_subst
PROMPT_CHAR=""
ON_COLOR="%{$fg[green]%}"
OFF_COLOR="%{$reset_color%}"
ERR_COLOR="%{$fg[red]%}"
function prompt_user() {
echo "%(!.$ON_COLOR.$OFF_COLOR)$PROMPT_CHAR%{$reset_color%}"
}
function prompt_jobs() {
echo "%(1j.$ON_COLOR.$OFF_COLOR)$PROMPT_CHAR%{$reset_color%}"
}
function prompt_status() {
echo "%(0?.$ON_COLOR.$ERR_COLOR)$PROMPT_CHAR%{$reset_color%}"
}
function -prompt_ellipse(){
local string=$1
local sep="$rsc..$path_color"
if [[ $MINIMAL_SHORTEN == true ]] && [[ ${#string} -gt 10 ]]; then
echo "${string:0:4}$sep${string: -4}"
else
echo $string
fi
}
function prompt_path() {
local path_color="%{%}%}"
local rsc="%{$reset_color%}"
local sep="$rsc/$path_color"
echo "$path_color$(print -P %2~ | sed s_/_${sep}_g)$rsc"
}
function git_branch_name() {
local branch_name="$(git rev-parse --abbrev-ref HEAD 2> /dev/null)"
[[ -n $branch_name ]] && echo "$branch_name"
}
function git_repo_status(){
local rs="$(git status --porcelain -b)"
if $(echo "$rs" | grep -v '^##' &> /dev/null); then # is dirty
echo "%{$fg[red]%}"
elif $(echo "$rs" | grep '^## .*diverged' &> /dev/null); then # has diverged
echo "%{$fg[red]%}"
elif $(echo "$rs" | grep '^## .*behind' &> /dev/null); then # is behind
echo "%{%}%}"
elif $(echo "$rs" | grep '^## .*ahead' &> /dev/null); then # is ahead
echo "%{$reset_color%}"
else # is clean
echo "%{$fg[green]%}"
fi
}
function prompt_git() {
local bname=$(git_branch_name)
if [[ -n $bname ]]; then
local infos="$(git_repo_status)$bname%{$reset_color%}"
echo " $infos"
fi
}
function prompt_vimode(){
local ret=""
case $KEYMAP in
main|viins)
ret+="$ON_COLOR"
;;
vicmd)
ret+="$OFF_COLOR"
;;
esac
ret+="$PROMPT_CHAR%{$reset_color%}"
echo "$ret"
}
function zle-line-init zle-line-finish zle-keymap-select {
zle reset-prompt
zle -R
}
zle -N zle-line-init
zle -N zle-keymap-select
zle -N zle-line-finish
PROMPT='$(prompt_user)$(prompt_jobs)$(prompt_vimode)$(prompt_status) '
RPROMPT='$(prompt_path)$(prompt_git)'