From f49b7a70be9c4d4cf128234364426f4eb36d4164 Mon Sep 17 00:00:00 2001 From: masterzu Date: Thu, 23 Feb 2017 10:37:55 +0100 Subject: [PATCH] bash: add .bash_prompt --- .bash_prompt | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 .bash_prompt diff --git a/.bash_prompt b/.bash_prompt new file mode 100644 index 0000000..1a8c064 --- /dev/null +++ b/.bash_prompt @@ -0,0 +1,114 @@ +#!/bin/bash + +######################################################################## +# Matthew's Git Bash Prompt +# + +# python virtualenv +######################################################################## + 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\]" +LIGHT_YELLOW="\[\033[1;33m\]" + WHITE="\[\033[1;37m\]" + LIGHT_GRAY="\[\033[0;37m\]" + COLOR_NONE="\[\e[0m\]" + +function _my_parse_git_branch { + git rev-parse --git-dir &> /dev/null + local git_status="$(LANG=C git status 2> /dev/null)" + local branch_pattern="^On branch ([^${IFS}]*)" + local remote_pattern="Your branch is (.*) '" + local diverge_pattern="Your branch and (.*) have diverged" + local state="" + local remote="" + local branch="" + + [[ ${git_status} =~ "Not a git repository" ]] && return + + if [[ ! ${git_status} =~ "working directory clean" ]]; then + 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 of" ]]; then + remote="${YELLOW}↑" + else + remote="${YELLOW}↓" + fi + fi + if [[ ${git_status} =~ ${diverge_pattern} ]]; then + remote="${YELLOW}↕" + fi + if [[ ${git_status} =~ ${branch_pattern} ]]; then + branch=${BASH_REMATCH[1]} + #branch=$(__git_ps1) + echo "${BLUE}[${GREEN}(${branch})${remote}${state}${BLUE}]${COLOR_NONE}" + fi + # echo "DEBUG[branch:$branch|remote:$remote|state:$state]" +} + +function prompt_func() { + previous_return_value=$?; + + ## BASH : enable shared history + ## DONT DO THAT : DANGEROUS + #history -a; history -c; history -r + + # the prompt craft + local prompt='' + + #The lowercase w is the full current working directory + # prompt="${TITLEBAR}${BLUE}[${RED}\w${GREEN}$(_my_parse_git_branch)${BLUE}]${COLOR_NONE}" + + # [user$host] + prompt="${prompt}${COLOR_NONE}[${YELLOW}\u${COLOR_NONE}@${WHITE}\h${COLOR_NONE}]" + + # python virtualenv + test -n "$VIRTUAL_ENV" && prompt="${prompt} (env:${BLUE}$(basename $VIRTUAL_ENV)${COLOR_NONE})" + + # git status + test -n "$(_my_parse_git_branch)" && prompt="${prompt}[git:${GREEN}$(_my_parse_git_branch)${COLOR_NONE}]" + + # add -- \w (git branch) if new minute or cd + # [[ "x$previous_path" != "x$(pwd)" ]] || [[ "$previous_minute" != "$(date +%M)" ]] && prompt="$prompt $(_my_parse_git_branch) -- $(date +%a\ %d\ %B)" + + # date + # prompt="$prompt -- $(date +%a\ %d\ %B)" + + # hour + prompt="$prompt ${LIGHT_YELLOW}$(date +%R)${COLOR_NONE}" + # add, at least the time + # prompt="${prompt} $(date +%X)" + + # PWD + prompt="${prompt} \w" + + # if test $previous_return_value -eq 0 + # then + # PS1="${prompt} ${GREEN}\$${COLOR_NONE} " + # else + # PS1="${prompt} ${RED}(err=${previous_return_value}) \$${COLOR_NONE} " + # fi + + # test right align FIXME + # PS1=$(printf "%${COLUMNS}s \r%s" "${prompt}" "${GREEN}\$${COLOR_NONE} ") + + # red/green if exit 1/0 + if test $previous_return_value -eq 0 + then + PS1="${prompt} ${GREEN}\$${COLOR_NONE} " + else + PS1="${prompt} ${RED}(err=${previous_return_value}) \$${COLOR_NONE} " + fi + + previous_minute="$(date +%M)" + previous_path=$(pwd) + + # set xterm -like title + echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007" +} + +PROMPT_COMMAND=prompt_func