1
0
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:
2020-11-18 14:17:37 +01:00
parent de5c677da5
commit e3144d0ae6

View File

@@ -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=""