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