New prompt functions and variables
* `(git|svn|hg)_promp_vars` only assign values to the variables but do not `echo` * `(git|svn|hg)_promp_info` still `echo`s, but now calls `*_prompt_info` first * Introduce `SCM_CHANGE` to store the changeset id * Introduce `SCM_BRANCH` to store the branch namepull/81/merge^2
parent
323ce20a2d
commit
b2b629eb1f
|
|
@ -6,15 +6,16 @@ SCM_THEME_PROMPT_CLEAN=' ✓'
|
||||||
SCM_THEME_PROMPT_PREFIX=' |'
|
SCM_THEME_PROMPT_PREFIX=' |'
|
||||||
SCM_THEME_PROMPT_SUFFIX='|'
|
SCM_THEME_PROMPT_SUFFIX='|'
|
||||||
|
|
||||||
GIT='git'
|
SCM_GIT='git'
|
||||||
SCM_GIT_CHAR='±'
|
SCM_GIT_CHAR='±'
|
||||||
|
|
||||||
HG='hg'
|
SCM_HG='hg'
|
||||||
SCM_HG_CHAR='☿'
|
SCM_HG_CHAR='☿'
|
||||||
|
|
||||||
SVN='svn'
|
SCM_SVN='svn'
|
||||||
SCM_SVN_CHAR='⑆'
|
SCM_SVN_CHAR='⑆'
|
||||||
|
|
||||||
|
SCM_NONE='NONE'
|
||||||
SCM_NONE_CHAR='○'
|
SCM_NONE_CHAR='○'
|
||||||
|
|
||||||
RVM_THEME_PROMPT_PREFIX=' |'
|
RVM_THEME_PROMPT_PREFIX=' |'
|
||||||
|
|
@ -24,76 +25,85 @@ VIRTUALENV_THEME_PROMPT_PREFIX=' |'
|
||||||
VIRTUALENV_THEME_PROMPT_SUFFIX='|'
|
VIRTUALENV_THEME_PROMPT_SUFFIX='|'
|
||||||
|
|
||||||
function scm {
|
function scm {
|
||||||
if [[ -d .git ]]; then SCM=$GIT
|
if [[ -d .git ]]; then SCM=$SCM_GIT
|
||||||
elif [[ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]]; then SCM=$GIT
|
elif [[ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]]; then SCM=$SCM_GIT
|
||||||
elif [[ -d .hg ]]; then SCM=$HG
|
elif [[ -d .hg ]]; then SCM=$SCM_HG
|
||||||
elif [[ -n "$(hg root 2> /dev/null)" ]]; then SCM=$HG
|
elif [[ -n "$(hg root 2> /dev/null)" ]]; then SCM=$SCM_HG
|
||||||
elif [[ -d .svn ]]; then SCM=$SVN
|
elif [[ -d .svn ]]; then SCM=$SCM_SVN
|
||||||
else SCM='NONE'
|
else SCM=$SCM_NONE
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function scm_char {
|
function scm_prompt_char {
|
||||||
if [[ -z $SCM ]]; then scm; fi
|
if [[ -z $SCM ]]; then scm; fi
|
||||||
[[ $SCM == $GIT ]] && echo $SCM_GIT_CHAR && return
|
if [[ $SCM == $SCM_GIT ]]; then SCM_CHAR=$SCM_GIT_CHAR
|
||||||
[[ $SCM == $HG ]] && echo $SCM_HG_CHAR && return
|
elif [[ $SCM == $SCM_HG ]]; then SCM_CHAR=$SCM_HG_CHAR
|
||||||
[[ $SCM == $SVN ]] && echo $SCM_SVN_CHAR && return
|
elif [[ $SCM == $SCM_SVN ]]; then SCM_CHAR=$SCM_SVN_CHAR
|
||||||
echo $SCM_NONE_CHAR
|
else SCM_CHAR=$SCM_NONE_CHAR
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function scm_prompt_vars {
|
||||||
|
scm
|
||||||
|
scm_prompt_char
|
||||||
|
SCM_DIRTY=0
|
||||||
|
SCM_STATE=''
|
||||||
|
[[ $SCM == $SCM_GIT ]] && git_prompt_vars && return
|
||||||
|
[[ $SCM == $SCM_HG ]] && hg_prompt_vars && return
|
||||||
|
[[ $SCM == $SCM_SVN ]] && svn_prompt_vars && return
|
||||||
}
|
}
|
||||||
|
|
||||||
function scm_prompt_info {
|
function scm_prompt_info {
|
||||||
if [[ -z $SCM ]]; then scm; fi
|
scm
|
||||||
[[ $SCM == $GIT ]] && git_prompt_info && return
|
scm_prompt_char
|
||||||
[[ $SCM == $HG ]] && hg_prompt_info && return
|
SCM_DIRTY=0
|
||||||
[[ $SCM == $SVN ]] && svn_prompt_info && return
|
SCM_STATE=''
|
||||||
|
[[ $SCM == $SCM_GIT ]] && git_prompt_info && return
|
||||||
|
[[ $SCM == $SCM_HG ]] && hg_prompt_info && return
|
||||||
|
[[ $SCM == $SCM_SVN ]] && svn_prompt_info && return
|
||||||
}
|
}
|
||||||
|
|
||||||
# Stolen from Steve Losh
|
function git_prompt_vars {
|
||||||
# left in for backwards-compatibility
|
|
||||||
function prompt_char {
|
|
||||||
char=$(scm_char);
|
|
||||||
echo -e "$char"
|
|
||||||
}
|
|
||||||
|
|
||||||
function git_prompt_info {
|
|
||||||
if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
|
if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
|
||||||
state=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
SCM_DIRTY=1
|
||||||
|
SCM_STATE=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
||||||
else
|
else
|
||||||
state=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
SCM_DIRTY=0
|
||||||
|
SCM_STATE=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
||||||
fi
|
fi
|
||||||
prefix=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
SCM_PREFIX=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||||||
suffix=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
SCM_SUFFIX=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||||||
ref=$(git symbolic-ref HEAD 2> /dev/null) || return
|
local ref=$(git symbolic-ref HEAD 2> /dev/null)
|
||||||
|
SCM_BRANCH=${ref#refs/heads/}
|
||||||
echo -e "$prefix${ref#refs/heads/}$state$suffix"
|
SCM_CHANGE=$(git rev-parse HEAD 2>/dev/null)
|
||||||
}
|
}
|
||||||
|
|
||||||
function svn_prompt_info {
|
function svn_prompt_vars {
|
||||||
if [[ -n $(svn status 2> /dev/null) ]]; then
|
if [[ -n $(svn status 2> /dev/null) ]]; then
|
||||||
state=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
SCM_DIRTY=1
|
||||||
|
SCM_STATE=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
||||||
else
|
else
|
||||||
state=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
SCM_DIRTY=0
|
||||||
|
SCM_STATE=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
||||||
fi
|
fi
|
||||||
prefix=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
SCM_PREFIX=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||||||
suffix=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
SCM_SUFFIX=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||||||
ref=$(svn info 2> /dev/null | awk -F/ '/^URL:/ { for (i=0; i<=NF; i++) { if ($i == "branches" || $i == "tags" ) { print $(i+1); break }; if ($i == "trunk") { print $i; break } } }') || return
|
SCM_BRANCH=$(svn info 2> /dev/null | awk -F/ '/^URL:/ { for (i=0; i<=NF; i++) { if ($i == "branches" || $i == "tags" ) { print $(i+1); break }; if ($i == "trunk") { print $i; break } } }') || return
|
||||||
|
SCM_CHANGE=$(svn info 2> /dev/null | sed -ne 's#^Revision: ##p' )
|
||||||
[[ -z $ref ]] && return
|
|
||||||
echo -e "$prefix$ref$state$suffix"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function hg_prompt_info() {
|
function hg_prompt_vars {
|
||||||
if [[ -n $(hg status 2> /dev/null) ]]; then
|
if [[ -n $(hg status 2> /dev/null) ]]; then
|
||||||
state=${HG_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
SCM_DIRTY=1
|
||||||
|
SCM_STATE=${HG_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
||||||
else
|
else
|
||||||
state=${HG_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
SCM_DIRTY=0
|
||||||
|
SCM_STATE=${HG_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
||||||
fi
|
fi
|
||||||
prefix=${HG_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
SCM_PREFIX=${HG_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||||||
suffix=${HG_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
SCM_SUFFIX=${HG_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||||||
branch=$(hg summary 2> /dev/null | grep branch | awk '{print $2}')
|
SCM_BRANCH=$(hg summary 2> /dev/null | grep branch | awk '{print $2}')
|
||||||
changeset=$(hg summary 2> /dev/null | grep parent | awk '{print $2}')
|
SCM_CHANGE=$(hg summary 2> /dev/null | grep parent | awk '{print $2}')
|
||||||
|
|
||||||
echo -e "$prefix$branch:${changeset#*:}$state$suffix"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function rvm_version_prompt {
|
function rvm_version_prompt {
|
||||||
|
|
@ -109,3 +119,28 @@ function virtualenv_prompt {
|
||||||
echo -e "$VIRTUALENV_THEME_PROMPT_PREFIX$virtualenv$VIRTUALENV_THEME_PROMPT_SUFFIX"
|
echo -e "$VIRTUALENV_THEME_PROMPT_PREFIX$virtualenv$VIRTUALENV_THEME_PROMPT_SUFFIX"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# backwards-compatibility
|
||||||
|
function git_prompt_info {
|
||||||
|
git_prompt_vars
|
||||||
|
echo -e "$SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_SUFFIX"
|
||||||
|
}
|
||||||
|
|
||||||
|
function svn_prompt_info {
|
||||||
|
svn_prompt_vars
|
||||||
|
echo -e "$SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_SUFFIX"
|
||||||
|
}
|
||||||
|
|
||||||
|
function hg_prompt_info() {
|
||||||
|
hg_prompt_vars
|
||||||
|
echo -e "$SCM_PREFIX$SCM_BRANCH:${SCM_CHANGE#*:}$SCM_STATE$SCM_SUFFIX"
|
||||||
|
}
|
||||||
|
|
||||||
|
function scm_char {
|
||||||
|
scm_prompt_char
|
||||||
|
echo -e "$SCM_CHAR"
|
||||||
|
}
|
||||||
|
|
||||||
|
function prompt_char {
|
||||||
|
scm_char
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue