mirror of
https://github.com/gryf/vmstrap.git
synced 2025-12-18 20:10:28 +01:00
Synchronize bash prompt with local one.
This commit is contained in:
226
.bash_prompt
226
.bash_prompt
@@ -36,139 +36,153 @@ LIGHT_GREEN="\[\033[1;32m\]"
|
|||||||
# THRESHOLD is expressed in seconds.
|
# THRESHOLD is expressed in seconds.
|
||||||
THRESHOLD=3
|
THRESHOLD=3
|
||||||
|
|
||||||
GIT_PICT="◆"
|
# various symbols, depending on used font in urxvt
|
||||||
HG_PICT="☿"
|
echo $TERM | grep -qi rxvt
|
||||||
PY_PICT="℗"
|
if [[ $? == 0 ]]; then
|
||||||
JS_PICT="ⓙ"
|
grep -i 'urxvt.font:' ~/.Xdefaults | grep -qi misc-fixed
|
||||||
|
if [[ $? == 0 ]]; then
|
||||||
|
GIT_PICT="◆"
|
||||||
|
HG_PICT="☿"
|
||||||
|
PY_PICT="℗"
|
||||||
|
JS_PICT="ⓙ"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z $GIT_PICT ]]; then
|
||||||
|
GIT_PICT=""
|
||||||
|
HG_PICT=""
|
||||||
|
PY_PICT=""
|
||||||
|
JS_PICT=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Detect whether the current directory is a git repository.
|
# Detect whether the current directory is a git repository.
|
||||||
function is_git_repository {
|
function is_git_repository {
|
||||||
git branch > /dev/null 2>&1
|
git branch > /dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Detect whether the current directory is a Mercurial repository.
|
# Detect whether the current directory is a Mercurial repository.
|
||||||
function is_mercurial_repository {
|
function is_mercurial_repository {
|
||||||
branch=$(hg branch 2>/dev/null)
|
branch=$(hg branch 2>/dev/null)
|
||||||
if [ -n "${branch}" ]; then
|
if [ -n "${branch}" ]; then
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Detect whether the current directory is a Subversion repository.
|
# Detect whether the current directory is a Subversion repository.
|
||||||
function is_subversion_repository {
|
function is_subversion_repository {
|
||||||
test -d .svn
|
test -d .svn
|
||||||
}
|
}
|
||||||
|
|
||||||
# Determine the branch/state information for this git repository.
|
# Determine the branch/state information for this git repository.
|
||||||
function set_git_branch {
|
function set_git_branch {
|
||||||
# Capture the output of the "git status" command.
|
# Capture the output of the "git status" command.
|
||||||
git_status="$(git status 2> /dev/null)"
|
git_status="$(git status 2> /dev/null)"
|
||||||
|
|
||||||
# Set color based on clean/staged/dirty.
|
# Set color based on clean/staged/dirty.
|
||||||
pat="(directory|tree) clean$"
|
if [[ ${git_status} =~ "working tree clean" ]]; then
|
||||||
if [[ ${git_status} =~ $pat ]]; then
|
state="${GREEN}"
|
||||||
state="${GREEN}"
|
elif [[ ${git_status} =~ "Changes to be committed" ]]; then
|
||||||
elif [[ ${git_status} =~ "Changes to be committed" ]]; then
|
state="${YELLOW}"
|
||||||
state="${YELLOW}"
|
|
||||||
else
|
|
||||||
state="${LIGHT_RED}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set arrow icon based on status against remote.
|
|
||||||
remote_pattern="# Your branch is (.*) of"
|
|
||||||
if [[ ${git_status} =~ ${remote_pattern} ]]; then
|
|
||||||
if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
|
|
||||||
remote="↑"
|
|
||||||
else
|
else
|
||||||
remote="↓"
|
state="${LIGHT_RED}"
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
remote=""
|
|
||||||
fi
|
|
||||||
diverge_pattern="# Your branch and (.*) have diverged"
|
|
||||||
if [[ ${git_status} =~ ${diverge_pattern} ]]; then
|
|
||||||
remote="↕"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get the name of the branch.
|
# Set arrow icon based on status against remote.
|
||||||
gitsym=$(git symbolic-ref HEAD 2>/dev/null)
|
remote_pattern="# Your branch is (.*) of"
|
||||||
if [[ $? == 0 ]]; then
|
if [[ ${git_status} =~ ${remote_pattern} ]]; then
|
||||||
branch="${gitsym##refs/heads/}"
|
if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
|
||||||
fi
|
remote="↑"
|
||||||
|
else
|
||||||
|
remote="↓"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
remote=""
|
||||||
|
fi
|
||||||
|
diverge_pattern="# Your branch and (.*) have diverged"
|
||||||
|
if [[ ${git_status} =~ ${diverge_pattern} ]]; then
|
||||||
|
remote="↕"
|
||||||
|
fi
|
||||||
|
|
||||||
# Set the final branch string.
|
# Get the name of the branch.
|
||||||
BRANCH="${state}${GIT_PICT} (${branch})${remote}${COLOR_NONE} "
|
gitsym=$(git symbolic-ref HEAD 2>/dev/null)
|
||||||
|
if [[ $? == 0 ]]; then
|
||||||
|
branch="${gitsym##refs/heads/}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the final branch string.
|
||||||
|
BRANCH="${state}${GIT_PICT} (${branch})${remote}${COLOR_NONE} "
|
||||||
}
|
}
|
||||||
|
|
||||||
# Determine the branch/state information for this Mercurial repository.
|
# Determine the branch/state information for this Mercurial repository.
|
||||||
function set_mercurial_branch {
|
function set_mercurial_branch {
|
||||||
# Get the name of the branch.
|
# Get the name of the branch.
|
||||||
branch=$(hg branch 2>/dev/null)
|
branch=$(hg branch 2>/dev/null)
|
||||||
# Default state
|
# Default state
|
||||||
state="${GREEN}"
|
state="${GREEN}"
|
||||||
|
|
||||||
if [ -n "${branch}" ]; then
|
if [ -n "${branch}" ]; then
|
||||||
branch="(${branch})"
|
branch="(${branch})"
|
||||||
|
|
||||||
# Capture the output of the "hg status" command.
|
# Capture the output of the "hg status" command.
|
||||||
hg_status="$(hg status | wc -l)"
|
hg_status="$(hg status | wc -l)"
|
||||||
|
|
||||||
# Set color based on clean/staged/dirty.
|
# Set color based on clean/staged/dirty.
|
||||||
if [ "${hg_status}" -ne "0" ]; then
|
if [ "${hg_status}" -ne "0" ]; then
|
||||||
state="${RED}"
|
state="${RED}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
# Set the final branch string.
|
# Set the final branch string.
|
||||||
BRANCH="${state}${HG_PICT} ${branch}${COLOR_NONE} "
|
BRANCH="${state}${HG_PICT} ${branch}${COLOR_NONE} "
|
||||||
}
|
}
|
||||||
|
|
||||||
# Determine the branch informatioin for this Subversion repository. No support
|
# Determine the branch informatioin for this Subversion repository. No support
|
||||||
# for svn status, since that needs to hit the remote repository.
|
# for svn status, since that needs to hit the remote repository.
|
||||||
function set_subversion_branch {
|
function set_subversion_branch {
|
||||||
# Capture the output of the "svn info" command
|
# Capture the output of the "svn info" command
|
||||||
svn_info="$(svn info | egrep '^URL: ' 2> /dev/null)"
|
svn_info="$(svn info | egrep '^URL: ' 2> /dev/null)"
|
||||||
|
|
||||||
# Get the name of the branch.
|
# Get the name of the branch.
|
||||||
branch_pattern="^URL: .*/(branches|tags)/([^/]+)"
|
branch_pattern="^URL: .*/(branches|tags)/([^/]+)"
|
||||||
trunk_pattern="^URL: .*/trunk(/.*)?$"
|
trunk_pattern="^URL: .*/trunk(/.*)?$"
|
||||||
if [[ ${svn_info} =~ $branch_pattern ]]; then
|
if [[ ${svn_info} =~ $branch_pattern ]]; then
|
||||||
branch=${BASH_REMATCH[2]}
|
branch=${BASH_REMATCH[2]}
|
||||||
elif [[ ${svn_info} =~ $trunk_pattern ]]; then
|
elif [[ ${svn_info} =~ $trunk_pattern ]]; then
|
||||||
branch='trunk'
|
branch='trunk'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set the final branch string.
|
# Set the final branch string.
|
||||||
BRANCH="(${branch}) "
|
BRANCH="(${branch}) "
|
||||||
}
|
}
|
||||||
|
|
||||||
# Return the prompt symbol to use, colorized based on the return value of the
|
# Return the prompt symbol to use, colorized based on the return value of the
|
||||||
# previous command.
|
# previous command.
|
||||||
function set_prompt_symbol () {
|
function set_prompt_symbol {
|
||||||
if test $1 -eq 0 ; then
|
if test $1 -eq 0 ; then
|
||||||
PROMPT_SYMBOL="${BLUE}\$${COLOR_NONE}"
|
PROMPT_SYMBOL="${BLUE}\$${COLOR_NONE}"
|
||||||
else
|
else
|
||||||
PROMPT_SYMBOL="${LIGHT_RED}\$${COLOR_NONE}"
|
PROMPT_SYMBOL="${LIGHT_RED}\$${COLOR_NONE}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Determine active Python virtualenv details.
|
# Determine active Python virtualenv details.
|
||||||
function set_virtualenv () {
|
function set_virtualenv {
|
||||||
if test -z "$VIRTUAL_ENV" ; then
|
if test -z "$VIRTUAL_ENV" ; then
|
||||||
PYTHON_VIRTUALENV=""
|
PYTHON_VIRTUALENV=""
|
||||||
else
|
else
|
||||||
PYTHON_VIRTUALENV="${LIGHT_GREEN}[${PY_PICT} `basename \"$VIRTUAL_ENV\"`]${COLOR_NONE} "
|
PYTHON_VIRTUALENV="${CYAN}[${PY_PICT} `basename \"$VIRTUAL_ENV\"`]${COLOR_NONE} "
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function set_nodevirtenv () {
|
function set_nodevirtenv {
|
||||||
if test -z "$NODE_VIRTUAL_ENV" ; then
|
if test -z "$NODE_VIRTUAL_ENV" ; then
|
||||||
NODE_VIRTUALENV=""
|
NODE_VIRTUALENV=""
|
||||||
else
|
else
|
||||||
NODE_VIRTUALENV="${PURPLE}[${JS_PICT} `basename \"$NODE_VIRTUAL_ENV\"`]${COLOR_NONE} "
|
NODE_VIRTUALENV="${PURPLE}[${JS_PICT} `basename \"$NODE_VIRTUAL_ENV\"`]${COLOR_NONE} "
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Shamlesely stolen from: https://stackoverflow.com/a/31694983 and improve it
|
# Shamlesely stolen from: https://stackoverflow.com/a/31694983 and improve it
|
||||||
@@ -216,27 +230,27 @@ function timer_stop {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Set the full bash prompt.
|
# Set the full bash prompt.
|
||||||
function set_bash_prompt () {
|
function set_bash_prompt {
|
||||||
# Set the PROMPT_SYMBOL variable. We do this first so we don't lose the
|
# Set the PROMPT_SYMBOL variable. We do this first so we don't lose the
|
||||||
# return value of the last command.
|
# return value of the last command.
|
||||||
set_prompt_symbol $?
|
set_prompt_symbol $?
|
||||||
|
|
||||||
# Set the PYTHON_VIRTUALENV variable.
|
# Set the PYTHON_VIRTUALENV variable.
|
||||||
set_virtualenv
|
set_virtualenv
|
||||||
|
|
||||||
# Set the NODE_PYTHON_VIRTUALENV variable.
|
# Set the NODE_PYTHON_VIRTUALENV variable.
|
||||||
set_nodevirtenv
|
set_nodevirtenv
|
||||||
|
|
||||||
# Set the BRANCH variable.
|
# Set the BRANCH variable.
|
||||||
if is_git_repository ; then
|
if is_git_repository ; then
|
||||||
set_git_branch
|
set_git_branch
|
||||||
elif is_subversion_repository ; then
|
elif is_subversion_repository ; then
|
||||||
set_subversion_branch
|
set_subversion_branch
|
||||||
elif is_mercurial_repository ; then
|
elif is_mercurial_repository ; then
|
||||||
set_mercurial_branch
|
set_mercurial_branch
|
||||||
else
|
else
|
||||||
BRANCH=''
|
BRANCH=''
|
||||||
fi
|
fi
|
||||||
|
|
||||||
timer_stop
|
timer_stop
|
||||||
TIME=""
|
TIME=""
|
||||||
|
|||||||
Reference in New Issue
Block a user