From e3144d0ae6b96f5a8a211fe1649a9d4560842598 Mon Sep 17 00:00:00 2001 From: gryf Date: Wed, 18 Nov 2020 14:17:37 +0100 Subject: [PATCH] Synchronize bash prompt with local one. --- .bash_prompt | 226 +++++++++++++++++++++++++++------------------------ 1 file changed, 120 insertions(+), 106 deletions(-) diff --git a/.bash_prompt b/.bash_prompt index 0946349..e007e0c 100644 --- a/.bash_prompt +++ b/.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=""