# command prompt _load group prompt _load node prompt export PS2="$(pcolor lblue)> $(pcolor)" export PS3="$(color lblue)#? $(color)" __make_prompt() { local PS1UH PS1D PS1R PS1F PS1P PS1BO PS1BC PS1VE user host _hostname rc=$? s _hostname=$(hostname) # username + nodename [[ $(id -nu) == "alex" || $(id -u) -eq 0 ]] || user="\u" [[ "${_hostname}" == "laptop" ]] || host="@${_hostname}" [[ -z "$user" && -z "$host" ]] || host="${host} " PS1UH="$(pcolor lcyan)${user}${host}$(pcolor)" # working directory PS1D="$(pcolor lpurple)$(pwd -P)$(pcolor)" # return code if [[ $rc -eq 0 ]]; then PS1R="$(pcolor lgreen)0$(pcolor)" else PS1R="$(pcolor red)${rc}$(pcolor)" fi # environment flags [[ -n "${TMUX}" || -n "${SCREEN}" ]] && PS1F="${PS1F}$(pcolor lcyan)s$(pcolor)" # python virtual env [[ -n "${VIRTUAL_ENV}" ]] && PS1VE="$(pcolor lred)<${VIRTUAL_ENV#${WORKON_HOME}/}>$(pcolor) " # prompt character if [[ $(id -u) -eq 0 ]]; then PS1P="$(pcolor lred)\\\$ $(pcolor)" else PS1P="$(pcolor lblue)\\\$ $(pcolor)" fi # open/closing brackets PS1BO="$(pcolor lgray)[$(pcolor)" PS1BC="$(pcolor lgray)]$(pcolor)" if [[ -d ".svn" ]] ; then local r= if hash svnversion >/dev/null 2>&1 ; then r=$(svnversion 2>/dev/null ) else r=$(svn info | sed -n -e '/^Revision: \([0-9]*\).*$/s//\1/p' ) fi s="$(pcolor yellow)r$r$(pcolor red)$(svn status | grep -q -v '^?' && echo -n "*" )" else local d=$(git rev-parse --git-dir 2>/dev/null ) b= r= a= if [[ -n "${d}" && "${d}" != "." && "${PWD}" == "${PWD##$d}" && ! -f "${d}/../.promptignore" ]] ; then if [[ -d "${d}/../.dotest" ]] ; then if [[ -f "${d}/../.dotest/rebase" ]] ; then r="rebase" elif [[ -f "${d}/../.dotest/applying" ]] ; then r="am" else r="???" fi b=$(git symbolic-ref HEAD 2>/dev/null ) elif [[ -f "${d}/.dotest-merge/interactive" ]] ; then r="rebase-i" b=$(<${d}/.dotest-merge/head-name) elif [[ -d "${d}/../.dotest-merge" ]] ; then r="rebase-m" b=$(<${d}/.dotest-merge/head-name) elif [[ -f "${d}/MERGE_HEAD" ]] ; then r="merge" b=$(git symbolic-ref HEAD 2>/dev/null ) elif [[ -f "${d}/BISECT_LOG" ]] ; then r="bisect" b=$(git symbolic-ref HEAD 2>/dev/null )"???" else r="" b=$(git symbolic-ref HEAD 2>/dev/null ) fi if git status | grep -q '^# Changes not staged for commit:' ; then a="${a}*" else if git status | grep -q '^# Changed but not updated:' ; then a="${a}*" fi fi if git status | grep -q '^# Changes to be committed:' ; then a="${a}+" fi if git status | grep -q '^# Untracked files:' ; then a="${a}?" fi b=${b#refs/heads/} b=${b// } [[ -n "${r}${b}${a}" ]] && s="${PS1BO}$(pcolor lgreen)${r:+${r}:}$(pcolor yellow)${b}$(pcolor red)${a}$(pcolor)${PS1BC}" fi fi if [[ -n "${s}" ]]; then s="${s} " fi export PS1="${PS1VE}${PS1UH}${PS1D} ${PS1BO}${PS1R}${PS1F}${PS1BC} ${s}${PS1P}" if [[ -n "${TMUX}" || -n "${TMUX}" ]]; then echo -ne "\ek$(id -un)@${_hostname%%\.*}\e\\" fi if [[ "${TERM#rxvt}" != "${TERM}" || "${TERM#xterm}" != "${TERM}" ]]; then echo -ne "\e]0;$(id -un)@${_hostname%%\.*}\e\\" fi } export PROMPT_COMMAND="__make_prompt"