Skip to content

Instantly share code, notes, and snippets.

@ondras
Forked from bradsokol/bash_prompt.sh
Last active May 14, 2021 15:30
Show Gist options
  • Select an option

  • Save ondras/6bbd4da7c94924e44bfd to your computer and use it in GitHub Desktop.

Select an option

Save ondras/6bbd4da7c94924e44bfd to your computer and use it in GitHub Desktop.

Revisions

  1. ondras revised this gist Sep 8, 2015. No changes.
  2. ondras revised this gist Sep 8, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -16,7 +16,7 @@
    #
    # https://gist.github.com/2959821
    # https://gist.github.com/31967
    # https://gist.github.com/2394150
    # https://gist.github.com/2394150

    # The various escape codes that we can use to color our prompt.
    RED="\[\033[0;31m\]"
  3. ondras revised this gist Sep 8, 2015. 1 changed file with 3 additions and 7 deletions.
    10 changes: 3 additions & 7 deletions bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -14,13 +14,9 @@
    #
    # LINEAGE:
    #
    # Based on work by woods
    #
    # https://gist.github.com/31967
    #
    # and jcook793
    #
    # https://gist.github.com/2394150
    # https://gist.github.com/2959821
    # https://gist.github.com/31967
    # https://gist.github.com/2394150

    # The various escape codes that we can use to color our prompt.
    RED="\[\033[0;31m\]"
  4. ondras revised this gist Sep 8, 2015. 1 changed file with 17 additions and 50 deletions.
    67 changes: 17 additions & 50 deletions bash_prompt.sh
    100644 → 100755
    Original file line number Diff line number Diff line change
    @@ -3,11 +3,8 @@
    # DESCRIPTION:
    #
    # Set the bash prompt according to:
    # * the active virtualenv
    # * the branch/status of the current Git, Mercurial or Subversion repository
    # * the branch/status of the current Git or Mercurial repository
    # * the return value of the previous command
    # * the fact you just came from Windows and are used to having newlines in
    # your prompts.
    #
    # USAGE:
    #
    @@ -51,11 +48,6 @@ function is_mercurial_repository {
    fi
    }

    # Detect whether the current directory is a Subversion repository.
    function is_subversion_repository {
    test -d .svn
    }

    # Determine the branch/state information for this git repository.
    function set_git_branch {
    # Capture the output of the "git status" command.
    @@ -71,7 +63,7 @@ function set_git_branch {
    fi

    # Set arrow icon based on status against remote.
    remote_pattern="# Your branch is (.*) of"
    remote_pattern="Your branch is (.*) of"
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
    remote=""
    @@ -81,19 +73,21 @@ function set_git_branch {
    else
    remote=""
    fi
    diverge_pattern="# Your branch and (.*) have diverged"
    diverge_pattern="Your branch and (.*) have diverged"
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    fi

    # Get the name of the branch.
    branch_pattern="^# On branch ([^${IFS}]*)"
    branch_pattern="^(#\s+)?On branch ([^${IFS}]*)"
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    branch=${BASH_REMATCH[2]}
    else
    branch="?"
    fi

    # Set the final branch string.
    BRANCH="${state}(${branch})${remote}${COLOR_NONE} "
    BRANCH="${state}(git:${branch})${remote}${COLOR_NONE} "
    }

    # Determine the branch/state information for this Mercurial repository.
    @@ -104,38 +98,24 @@ function set_mercurial_branch {
    state="${GREEN}"

    if [ -n "${branch}" ]; then
    branch=" (${branch})"

    # 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}"
    fi
    else
    branch="?"
    fi

    # Set the final branch string.
    BRANCH="${state}${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)"

    # 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'
    bookmarks=$(hg summary | grep "^bookmarks" | sed -e "s/^bookmarks: //" -e "s/ /,/")
    if [ -n "${bookmarks}" ]; then
    bookmarks="/${bookmarks}"
    fi

    # Set the final branch string.
    BRANCH="(${branch}) "
    BRANCH="${state}(hg:${branch}$bookmarks)${COLOR_NONE} "
    }

    # Return the prompt symbol to use, colorized based on the return value of the
    @@ -148,38 +128,25 @@ function set_prompt_symbol () {
    fi
    }

    # Determine active Python virtualenv details.
    function set_virtualenv () {
    if test -z "$VIRTUAL_ENV" ; then
    PYTHON_VIRTUALENV=""
    else
    PYTHON_VIRTUALENV="${BLUE}[`basename \"$VIRTUAL_ENV\"`]${COLOR_NONE} "
    fi
    }

    # 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 $?

    # Set the PYTHON_VIRTUALENV variable.
    set_virtualenv

    # 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

    echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"

    # Set the bash prompt variable.
    PS1="${GREEN}\u@\h ${PYTHON_VIRTUALENV}${GREEN}${YELLOW}\w${COLOR_NONE} ${BRANCH}
    ${PROMPT_SYMBOL} "
    PS1="${GREEN}\u@\h ${GREEN}${YELLOW}\w${COLOR_NONE} ${BRANCH}${PROMPT_SYMBOL} "
    }

    # Tell bash to execute this function just before displaying its prompt.
  5. @bradsokol bradsokol revised this gist Nov 20, 2014. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -178,8 +178,7 @@ function set_bash_prompt () {
    fi

    # Set the bash prompt variable.
    PS1="
    ${PYTHON_VIRTUALENV}${GREEN}${YELLOW}\w${COLOR_NONE} ${BRANCH}
    PS1="${GREEN}\u@\h ${PYTHON_VIRTUALENV}${GREEN}${YELLOW}\w${COLOR_NONE} ${BRANCH}
    ${PROMPT_SYMBOL} "
    }

  6. @bradsokol bradsokol revised this gist Jun 20, 2012. 1 changed file with 69 additions and 4 deletions.
    73 changes: 69 additions & 4 deletions bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -4,7 +4,7 @@
    #
    # Set the bash prompt according to:
    # * the active virtualenv
    # * the branch/status of the current git repository
    # * the branch/status of the current Git, Mercurial or Subversion repository
    # * the return value of the previous command
    # * the fact you just came from Windows and are used to having newlines in
    # your prompts.
    @@ -17,9 +17,13 @@
    #
    # LINEAGE:
    #
    # Based on work by woods
    # Based on work by woods
    #
    # https://gist.github.com/31967
    # https://gist.github.com/31967
    #
    # and jcook793
    #
    # https://gist.github.com/2394150

    # The various escape codes that we can use to color our prompt.
    RED="\[\033[0;31m\]"
    @@ -37,6 +41,21 @@ function is_git_repository {
    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
    }

    # Detect whether the current directory is a Subversion repository.
    function is_subversion_repository {
    test -d .svn
    }

    # Determine the branch/state information for this git repository.
    function set_git_branch {
    # Capture the output of the "git status" command.
    @@ -77,6 +96,48 @@ function set_git_branch {
    BRANCH="${state}(${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}"

    if [ -n "${branch}" ]; then
    branch=" (${branch})"

    # 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}"
    fi
    fi

    # Set the final branch string.
    BRANCH="${state}${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)"

    # 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}) "
    }

    # Return the prompt symbol to use, colorized based on the return value of the
    # previous command.
    function set_prompt_symbol () {
    @@ -108,13 +169,17 @@ function set_bash_prompt () {
    # 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 bash prompt variable.
    PS1="
    ${PYTHON_VIRTUALENV}${GREEN}\u@\h ${YELLOW}\w${COLOR_NONE} ${BRANCH}
    ${PYTHON_VIRTUALENV}${GREEN}${YELLOW}\w${COLOR_NONE} ${BRANCH}
    ${PROMPT_SYMBOL} "
    }

  7. @insin insin revised this gist Dec 3, 2011. 1 changed file with 6 additions and 6 deletions.
    12 changes: 6 additions & 6 deletions bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -23,9 +23,9 @@

    # The various escape codes that we can use to color our prompt.
    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    YELLOW="\[\033[1;33m\]"
    GREEN="\[\033[0;32m\]"
    BLUE="\[\033[0;34m\]"
    BLUE="\[\033[1;34m\]"
    LIGHT_RED="\[\033[1;31m\]"
    LIGHT_GREEN="\[\033[1;32m\]"
    WHITE="\[\033[1;37m\]"
    @@ -48,7 +48,7 @@ function set_git_branch {
    elif [[ ${git_status} =~ "Changes to be committed" ]]; then
    state="${YELLOW}"
    else
    state="${RED}"
    state="${LIGHT_RED}"
    fi

    # Set arrow icon based on status against remote.
    @@ -83,7 +83,7 @@ function set_prompt_symbol () {
    if test $1 -eq 0 ; then
    PROMPT_SYMBOL="\$"
    else
    PROMPT_SYMBOL="${RED}\$${COLOR_NONE}"
    PROMPT_SYMBOL="${LIGHT_RED}\$${COLOR_NONE}"
    fi
    }

    @@ -92,7 +92,7 @@ function set_virtualenv () {
    if test -z "$VIRTUAL_ENV" ; then
    PYTHON_VIRTUALENV=""
    else
    PYTHON_VIRTUALENV="${GREEN}(`basename \"$VIRTUAL_ENV\"`)${COLOR_NONE} "
    PYTHON_VIRTUALENV="${BLUE}[`basename \"$VIRTUAL_ENV\"`]${COLOR_NONE} "
    fi
    }

    @@ -114,7 +114,7 @@ function set_bash_prompt () {

    # Set the bash prompt variable.
    PS1="
    ${PYTHON_VIRTUALENV}\u@\h \w ${BRANCH}
    ${PYTHON_VIRTUALENV}${GREEN}\u@\h ${YELLOW}\w${COLOR_NONE} ${BRANCH}
    ${PROMPT_SYMBOL} "
    }

  8. @insin insin revised this gist Dec 3, 2011. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -12,7 +12,7 @@
    # USAGE:
    #
    # 1. Save this file as ~/.bash_prompt
    # 2. Add the following line to the end of your ~/.profile or ~/.bash_profile:
    # 2. Add the following line to the end of your ~/.bashrc or ~/.bash_profile:
    # . ~/.bash_prompt
    #
    # LINEAGE:
  9. @insin insin renamed this gist Dec 3, 2011. 1 changed file with 29 additions and 43 deletions.
    72 changes: 29 additions & 43 deletions git_svn_bash_prompt.sh → bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -3,25 +3,23 @@
    # DESCRIPTION:
    #
    # Set the bash prompt according to:
    # * the active virtualenv
    # * the branch/status of the current git repository
    # * the branch of the current subversion repository
    # * the return value of the previous command
    #
    # * the fact you just came from Windows and are used to having newlines in
    # your prompts.
    #
    # USAGE:
    #
    # 1. Save this file as ~/.git_svn_bash_prompt
    # 1. Save this file as ~/.bash_prompt
    # 2. Add the following line to the end of your ~/.profile or ~/.bash_profile:
    # . ~/.git_svn_bash_prompt
    # . ~/.bash_prompt
    #
    # AUTHOR:
    #
    # Scott Woods <[email protected]>
    # West Arete Computing
    # LINEAGE:
    #
    # Based on work by halbtuerke and lakiolen.
    # Based on work by woods
    #
    # http://gist.github.com/31967

    # https://gist.github.com/31967

    # The various escape codes that we can use to color our prompt.
    RED="\[\033[0;31m\]"
    @@ -39,11 +37,6 @@ function is_git_repository {
    git branch > /dev/null 2>&1
    }

    # Detect whether the current directory is a subversion repository.
    function is_svn_repository {
    test -d .svn
    }

    # Determine the branch/state information for this git repository.
    function set_git_branch {
    # Capture the output of the "git status" command.
    @@ -57,7 +50,7 @@ function set_git_branch {
    else
    state="${RED}"
    fi

    # Set arrow icon based on status against remote.
    remote_pattern="# Your branch is (.*) of"
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    @@ -73,9 +66,9 @@ function set_git_branch {
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    fi

    # Get the name of the branch.
    branch_pattern="^# On branch ([^${IFS}]*)"
    branch_pattern="^# On branch ([^${IFS}]*)"
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    fi
    @@ -84,25 +77,6 @@ function set_git_branch {
    BRANCH="${state}(${branch})${remote}${COLOR_NONE} "
    }

    # Determine the branch information for this subversion repository. No support
    # for svn status, since that needs to hit the remote repository.
    function set_svn_branch {
    # Capture the output of the "git status" 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

    # 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 () {
    @@ -113,23 +87,35 @@ function set_prompt_symbol () {
    fi
    }

    # Determine active Python virtualenv details.
    function set_virtualenv () {
    if test -z "$VIRTUAL_ENV" ; then
    PYTHON_VIRTUALENV=""
    else
    PYTHON_VIRTUALENV="${GREEN}(`basename \"$VIRTUAL_ENV\"`)${COLOR_NONE} "
    fi
    }

    # Set the full 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.
    set_prompt_symbol $?

    # Set the PYTHON_VIRTUALENV variable.
    set_virtualenv

    # Set the BRANCH variable.
    if is_git_repository ; then
    set_git_branch
    elif is_svn_repository ; then
    set_svn_branch
    else
    BRANCH=''
    fi

    # Set the bash prompt variable.
    PS1="\u@\h \w ${BRANCH}${PROMPT_SYMBOL} "
    PS1="
    ${PYTHON_VIRTUALENV}\u@\h \w ${BRANCH}
    ${PROMPT_SYMBOL} "
    }

    # Tell bash to execute this function just before displaying its prompt.
  10. @woods woods revised this gist Mar 5, 2010. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -66,6 +66,8 @@ function set_git_branch {
    else
    remote=""
    fi
    else
    remote=""
    fi
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
  11. @woods woods revised this gist Aug 15, 2009. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -82,7 +82,8 @@ function set_git_branch {
    BRANCH="${state}(${branch})${remote}${COLOR_NONE} "
    }

    # Determine the branch information for this subversion repository.
    # Determine the branch information for this subversion repository. No support
    # for svn status, since that needs to hit the remote repository.
    function set_svn_branch {
    # Capture the output of the "git status" command.
    svn_info="$(svn info | egrep '^URL: ' 2> /dev/null)"
  12. @woods woods revised this gist Aug 15, 2009. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -18,6 +18,8 @@
    # Scott Woods <[email protected]>
    # West Arete Computing
    #
    # Based on work by halbtuerke and lakiolen.
    #
    # http://gist.github.com/31967


  13. @woods woods revised this gist Aug 15, 2009. 1 changed file with 18 additions and 7 deletions.
    25 changes: 18 additions & 7 deletions git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -1,14 +1,25 @@
    #!/bin/bash
    #
    # Set our bash prompt according to:
    # * the branch/status of the current git repository
    # * the branch of the current subversion repository
    # * the return value of the previous command
    # DESCRIPTION:
    #
    # Set the bash prompt according to:
    # * the branch/status of the current git repository
    # * the branch of the current subversion repository
    # * the return value of the previous command
    #
    # http://gist.github.com/31967
    # USAGE:
    #
    # 1. Save this file as ~/.git_svn_bash_prompt
    # 2. Add the following line to the end of your ~/.profile or ~/.bash_profile:
    # . ~/.git_svn_bash_prompt
    #
    # Scott Woods <[email protected]>
    # West Arete Computing
    # AUTHOR:
    #
    # Scott Woods <[email protected]>
    # West Arete Computing
    #
    # http://gist.github.com/31967


    # The various escape codes that we can use to color our prompt.
    RED="\[\033[0;31m\]"
  14. @woods woods revised this gist Aug 15, 2009. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -5,7 +5,7 @@
    # * the branch of the current subversion repository
    # * the return value of the previous command
    #
    # Originally based on http://gist.github.com/31934
    # http://gist.github.com/31967
    #
    # Scott Woods <[email protected]>
    # West Arete Computing
  15. @woods woods revised this gist Aug 15, 2009. 1 changed file with 24 additions and 17 deletions.
    41 changes: 24 additions & 17 deletions git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -32,7 +32,7 @@ function is_svn_repository {
    }

    # Determine the branch/state information for this git repository.
    function parse_git_branch {
    function set_git_branch {
    # Capture the output of the "git status" command.
    git_status="$(git status 2> /dev/null)"

    @@ -65,12 +65,12 @@ function parse_git_branch {
    branch=${BASH_REMATCH[1]}
    fi

    # Return the prompt.
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    # Set the final branch string.
    BRANCH="${state}(${branch})${remote}${COLOR_NONE} "
    }

    # Determine the branch information for this subversion repository.
    function parse_svn_branch {
    function set_svn_branch {
    # Capture the output of the "git status" command.
    svn_info="$(svn info | egrep '^URL: ' 2> /dev/null)"

    @@ -83,31 +83,38 @@ function parse_svn_branch {
    branch='trunk'
    fi

    # Return the prompt.
    echo "(${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 prompt_symbol () {
    function set_prompt_symbol () {
    if test $1 -eq 0 ; then
    echo "\$"
    PROMPT_SYMBOL="\$"
    else
    echo "${RED}\$${COLOR_NONE}"
    PROMPT_SYMBOL="${RED}\$${COLOR_NONE}"
    fi
    }

    # Set the full prompt.
    function prompt_func () {
    last_return_value=$?
    # 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 $?

    # Set the BRANCH variable.
    if is_git_repository ; then
    branch="$(parse_git_branch)"
    set_git_branch
    elif is_svn_repository ; then
    branch="$(parse_svn_branch)"
    set_svn_branch
    else
    branch=''
    BRANCH=''
    fi
    PS1="\u@\h \w $branch$(prompt_symbol $last_return_value) "

    # Set the bash prompt variable.
    PS1="\u@\h \w ${BRANCH}${PROMPT_SYMBOL} "
    }

    PROMPT_COMMAND=prompt_func
    # Tell bash to execute this function just before displaying its prompt.
    PROMPT_COMMAND=set_bash_prompt
  16. @woods woods revised this gist Aug 15, 2009. 1 changed file with 112 additions and 76 deletions.
    188 changes: 112 additions & 76 deletions git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -1,77 +1,113 @@
    #!/bin/bash
    #
    # Set our bash prompt according to the branch/status of the current git
    # repository.
    #
    # Forked from http://gist.github.com/31934

    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    GREEN="\[\033[0;32m\]"
    BLUE="\[\033[0;34m\]"
    LIGHT_RED="\[\033[1;31m\]"
    LIGHT_GREEN="\[\033[1;32m\]"
    WHITE="\[\033[1;37m\]"
    LIGHT_GRAY="\[\033[0;37m\]"
    COLOR_NONE="\[\e[0m\]"

    function is_git_repository {
    git branch > /dev/null 2>&1
    }

    function parse_git_branch {
    # Only display git info if we're inside a git repository.
    is_git_repository || return 1

    # Capture the output of the "git status" command.
    git_status="$(git status 2> /dev/null)"

    # Set color based on clean/staged/dirty.
    if [[ ${git_status} =~ "working directory clean" ]]; then
    state="${GREEN}"
    elif [[ ${git_status} =~ "Changes to be committed" ]]; then
    state="${YELLOW}"
    else
    state="${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
    remote=""
    fi
    fi
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    fi

    # Get the name of the branch.
    branch_pattern="^# On branch ([^${IFS}]*)"
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    fi

    # Display the prompt.
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    }

    function prompt_symbol () {
    # Set color of dollar prompt based on return value of previous command.
    if test $1 -eq 0
    then
    echo "\$"
    else
    echo "${RED}\$${COLOR_NONE}"
    fi
    }

    function prompt_func () {
    last_return_value=$?
    PS1="\u@\h \w $(parse_git_branch)$(prompt_symbol $last_return_value) "
    }

    #!/bin/bash
    #
    # Set our bash prompt according to:
    # * the branch/status of the current git repository
    # * the branch of the current subversion repository
    # * the return value of the previous command
    #
    # Originally based on http://gist.github.com/31934
    #
    # Scott Woods <[email protected]>
    # West Arete Computing

    # The various escape codes that we can use to color our prompt.
    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    GREEN="\[\033[0;32m\]"
    BLUE="\[\033[0;34m\]"
    LIGHT_RED="\[\033[1;31m\]"
    LIGHT_GREEN="\[\033[1;32m\]"
    WHITE="\[\033[1;37m\]"
    LIGHT_GRAY="\[\033[0;37m\]"
    COLOR_NONE="\[\e[0m\]"

    # Detect whether the current directory is a git repository.
    function is_git_repository {
    git branch > /dev/null 2>&1
    }

    # Detect whether the current directory is a subversion repository.
    function is_svn_repository {
    test -d .svn
    }

    # Determine the branch/state information for this git repository.
    function parse_git_branch {
    # Capture the output of the "git status" command.
    git_status="$(git status 2> /dev/null)"

    # Set color based on clean/staged/dirty.
    if [[ ${git_status} =~ "working directory clean" ]]; then
    state="${GREEN}"
    elif [[ ${git_status} =~ "Changes to be committed" ]]; then
    state="${YELLOW}"
    else
    state="${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
    remote=""
    fi
    fi
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    fi

    # Get the name of the branch.
    branch_pattern="^# On branch ([^${IFS}]*)"
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    fi

    # Return the prompt.
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    }

    # Determine the branch information for this subversion repository.
    function parse_svn_branch {
    # Capture the output of the "git status" 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

    # Return the prompt.
    echo "(${branch}) "
    }

    # Return the prompt symbol to use, colorized based on the return value of the
    # previous command.
    function prompt_symbol () {
    if test $1 -eq 0 ; then
    echo "\$"
    else
    echo "${RED}\$${COLOR_NONE}"
    fi
    }

    # Set the full prompt.
    function prompt_func () {
    last_return_value=$?
    if is_git_repository ; then
    branch="$(parse_git_branch)"
    elif is_svn_repository ; then
    branch="$(parse_svn_branch)"
    else
    branch=''
    fi
    PS1="\u@\h \w $branch$(prompt_symbol $last_return_value) "
    }

    PROMPT_COMMAND=prompt_func
  17. @woods woods renamed this gist Aug 15, 2009. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  18. @woods woods revised this gist Dec 26, 2008. 1 changed file with 19 additions and 9 deletions.
    28 changes: 19 additions & 9 deletions gistfile1.sh
    Original file line number Diff line number Diff line change
    @@ -3,7 +3,7 @@
    # Set our bash prompt according to the branch/status of the current git
    # repository.
    #
    # Taken from http://gist.github.com/31934
    # Forked from http://gist.github.com/31934

    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    @@ -20,33 +20,43 @@ function is_git_repository {
    }

    function parse_git_branch {
    # Only display git info if we're inside a git repository.
    is_git_repository || return 1

    # Capture the output of the "git status" command.
    git_status="$(git status 2> /dev/null)"
    branch_pattern="^# On branch ([^${IFS}]*)"
    remote_pattern="# Your branch is (.*) of"
    diverge_pattern="# Your branch and (.*) have diverged"

    # Set color based on clean/staged/dirty.
    if [[ ${git_status} =~ "working directory clean" ]]; then
    state="${GREEN}"
    elif [[ ${git_status} =~ "Untracked files" ]]; then
    state="${RED}"
    else
    elif [[ ${git_status} =~ "Changes to be committed" ]]; then
    state="${YELLOW}"
    else
    state="${RED}"
    fi
    # add an else if or two here if you want to get more specific

    # 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
    fi
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    fi

    # Get the name of the branch.
    branch_pattern="^# On branch ([^${IFS}]*)"
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    fi

    # Display the prompt.
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    }

    function prompt_symbol () {
  19. @woods woods revised this gist Dec 5, 2008. 1 changed file with 36 additions and 19 deletions.
    55 changes: 36 additions & 19 deletions gistfile1.sh
    Original file line number Diff line number Diff line change
    @@ -1,50 +1,67 @@
    #!/bin/bash
    #
    # Set our bash prompt according to the branch/status of the current git
    # repository.
    #
    # Taken from http://gist.github.com/31934

    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    GREEN="\[\033[0;32m\]"
    GREEN="\[\033[0;32m\]"
    BLUE="\[\033[0;34m\]"
    LIGHT_RED="\[\033[1;31m\]"
    LIGHT_GREEN="\[\033[1;32m\]"
    WHITE="\[\033[1;37m\]"
    LIGHT_GRAY="\[\033[0;37m\]"
    COLOR_NONE="\[\e[0m\]"

    function parse_git_branch {
    function is_git_repository {
    git branch > /dev/null 2>&1
    }

    [ -d .git ] || return 1
    function parse_git_branch {
    is_git_repository || return 1
    git_status="$(git status 2> /dev/null)"
    branch_pattern="^# On branch ([^${IFS}]*)"
    remote_pattern="# Your branch is (.*) of"
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ! ${git_status}} =~ "working directory clean" ]]; then
    state="${RED}"
    if [[ ${git_status} =~ "working directory clean" ]]; then
    state="${GREEN}"
    elif [[ ${git_status} =~ "Untracked files" ]]; then
    state="${RED}"
    else
    state="${YELLOW}"
    fi
    # add an else if or two here if you want to get more specific
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
    remote="${YELLOW}"
    remote=""
    else
    remote="${YELLOW}"
    remote=""
    fi
    fi
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote="${YELLOW}"
    remote=""
    fi
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    echo " (${branch})${remote}${state}"
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    fi
    }

    function prompt_func() {
    previous_return_value=$?;
    # prompt="${TITLEBAR}$BLUE[$RED\w$GREEN$(__git_ps1)$YELLOW$(git_dirty_flag)$BLUE]$COLOR_NONE "
    prompt="${TITLEBAR}${BLUE}[${RED}\w${GREEN}$(parse_git_branch)${BLUE}]${COLOR_NONE} "
    if test $previous_return_value -eq 0
    then
    PS1="${prompt}"
    else
    PS1="${prompt}${RED}${COLOR_NONE} "
    fi
    function prompt_symbol () {
    # Set color of dollar prompt based on return value of previous command.
    if test $1 -eq 0
    then
    echo "\$"
    else
    echo "${RED}\$${COLOR_NONE}"
    fi
    }

    function prompt_func () {
    last_return_value=$?
    PS1="\u@\h \w $(parse_git_branch)$(prompt_symbol $last_return_value) "
    }

    PROMPT_COMMAND=prompt_func
  20. @halbtuerke halbtuerke revised this gist Dec 4, 2008. 1 changed file with 31 additions and 6 deletions.
    37 changes: 31 additions & 6 deletions gistfile1.sh
    Original file line number Diff line number Diff line change
    @@ -1,25 +1,50 @@
    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    GREEN="\[\033[0;32m\]"
    BLUE="\[\033[0;34m\]"
    LIGHT_RED="\[\033[1;31m\]"
    LIGHT_GREEN="\[\033[1;32m\]"
    WHITE="\[\033[1;37m\]"
    LIGHT_GRAY="\[\033[0;37m\]"
    COLOR_NONE="\[\e[0m\]"

    function parse_git_branch {

    [ -d .git ] || return 1
    git_status="$(git status 2> /dev/null)"
    branch_pattern="^# On branch ([^${IFS}]*)"
    remote_pattern="# Your branch is (.*) of"
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ! ${git_status}} =~ "working directory clean" ]]; then
    state="*"
    state="${RED}"
    fi
    # add an else if or two here if you want to get more specific
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
    remote=""
    remote="${YELLOW}"
    else
    remote=""
    remote="${YELLOW}"
    fi
    fi
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    remote="${YELLOW}"
    fi
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    echo " <${branch}${state}${remote}>"
    echo " (${branch})${remote}${state}"
    fi
    }
    }

    function prompt_func() {
    previous_return_value=$?;
    # prompt="${TITLEBAR}$BLUE[$RED\w$GREEN$(__git_ps1)$YELLOW$(git_dirty_flag)$BLUE]$COLOR_NONE "
    prompt="${TITLEBAR}${BLUE}[${RED}\w${GREEN}$(parse_git_branch)${BLUE}]${COLOR_NONE} "
    if test $previous_return_value -eq 0
    then
    PS1="${prompt}"
    else
    PS1="${prompt}${RED}${COLOR_NONE} "
    fi
    }

    PROMPT_COMMAND=prompt_func
  21. lakiolen revised this gist Dec 4, 2008. 1 changed file with 17 additions and 5 deletions.
    22 changes: 17 additions & 5 deletions gistfile1.sh
    Original file line number Diff line number Diff line change
    @@ -1,13 +1,25 @@
    function parse_git_branch {
    [ -d .git ] || return 1
    git_status="$(git status 2> /dev/null)"
    pattern="^# On branch ([^${IFS}]*)"
    branch_pattern="^# On branch ([^${IFS}]*)"
    remote_pattern="# Your branch is (.*) of"
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ! ${git_status}} =~ "working directory clean" ]]; then
    state="*"
    fi
    # add an else if or two here if you want to get more specific

    if [[ ${git_status} =~ ${pattern} ]]; then
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
    remote=""
    else
    remote=""
    fi
    fi
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    fi
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    echo "[${branch}${state}]"
    echo " <${branch}${state}${remote}>"
    fi
    }
    }
  22. @invalid-email-address Anonymous renamed this gist Dec 3, 2008. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  23. @invalid-email-address Anonymous created this gist Dec 3, 2008.
    13 changes: 13 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,13 @@
    function parse_git_branch {
    git_status="$(git status 2> /dev/null)"
    pattern="^# On branch ([^${IFS}]*)"
    if [[ ! ${git_status}} =~ "working directory clean" ]]; then
    state="*"
    fi
    # add an else if or two here if you want to get more specific

    if [[ ${git_status} =~ ${pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    echo "[${branch}${state}]"
    fi
    }