summaryrefslogtreecommitdiffstats
path: root/bashrc
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-02-17 15:20:55 -0600
committerJesse Luehrs <doy@tozt.net>2012-02-17 17:29:55 -0600
commit5aca244430309339943d4bd53936aa18e31493e7 (patch)
tree254c22ad580672ad86e7e7e801905b72b933d123 /bashrc
parentff7ccd5e5f05a666e6fd7c424db76d1765fe3270 (diff)
downloadconf-5aca244430309339943d4bd53936aa18e31493e7.tar.gz
conf-5aca244430309339943d4bd53936aa18e31493e7.zip
rewrite my bash prompt in perl
Diffstat (limited to 'bashrc')
-rw-r--r--bashrc130
1 files changed, 1 insertions, 129 deletions
diff --git a/bashrc b/bashrc
index f7726e1..b11e20d 100644
--- a/bashrc
+++ b/bashrc
@@ -205,135 +205,7 @@ else
export PROMPT_COMMAND="${PROMPT_COMMAND};history -a"
fi
# prompt {{{
-function _set_error {
- __error=$(printf %03d $?)
- if [[ "x${__error//0/}" != "x" ]]; then
- __error_color=$HIRED
- else
- __error_color=$NORM
- fi
-}
-function _set_vcs {
- local vcs
- local vcs_dirty
- local vcs_branch
- local vcs_dir
- local vcs_state
- local vcs_local_commits
- __vcs=''
- function _find_upwards {
- local pwd
- pwd=$(pwd)
- while [[ -n "$pwd" ]]; do
- if [[ -d "$pwd/$1" ]]; then
- return 0
- fi
- pwd=${pwd%/*}
- done
- return 1
- }
- function _find_svn {
- [[ -d '.svn' ]] || return 1
- vcs='svn'
- }
- function _find_darcs {
- if _find_upwards '_darcs'; then
- vcs='darcs'
- return 0
- fi
- return 1
- }
- function _find_git {
- if _find_upwards '.git'; then
- vcs='git'
- return 0
- fi
- return 1
- }
-
- _find_svn || _find_darcs || _find_git
-
- case "$vcs" in
- svn)
- vcs_dirty=$([[ -n "$(svn status | grep -v '^?')" ]]; echo $?)
- if [[ "$vcs_dirty" -eq 0 ]]; then
- vcs_dirty='*'
- else
- vcs_dirty=''
- fi
- vcs_branch=
- ;;
- darcs)
- vcs_dirty=$(darcs whatsnew > /dev/null 2>&1; echo $?)
- if [[ "$vcs_dirty" -eq 0 ]]; then
- vcs_dirty='*'
- else
- vcs_dirty=''
- fi
- vcs_branch=
- ;;
- git)
- local git_dir
- local git_base
- git_dir=$(git rev-parse --git-dir)
- vcs_branch=$(git symbolic-ref -q HEAD 2>/dev/null)
- vcs_dirty=''
- if git diff --no-ext-diff --ignore-submodules --quiet --exit-code; then
- :
- else
- vcs_dirty="${vcs_dirty}*"
- fi
- if git diff-index --cached --quiet --ignore-submodules HEAD; then
- :
- else
- vcs_dirty="${vcs_dirty}+"
- fi
- if [[ -z "${vcs_branch}" ]]; then
- vcs_branch=$(git rev-parse --short HEAD)
- else
- vcs_branch=${vcs_branch#refs/heads/}
- if git show-ref -q --verify "refs/remotes/origin/$vcs_branch"; then
- git_base=$(git merge-base HEAD origin/$vcs_branch)
- if [[ "${git_base}" == "$(git rev-parse HEAD)" ]]; then
- vcs_local_commits="-$(git rev-list HEAD..origin/$vcs_branch | wc -l)"
- elif [[ "${git_base}" == "$(git rev-parse origin/$vcs_branch)" ]]; then
- vcs_local_commits="+$(git rev-list origin/${vcs_branch}..HEAD | wc -l)"
- else
- vcs_local_commits="+$(git rev-list ${git_base}..HEAD | wc -l)-$(git rev-list ${git_base}..origin/$vcs_branch | wc -l)"
- fi
- fi
- fi
- if [[ -e "${git_dir}/MERGE_HEAD" ]]; then
- vcs_state='merge'
- fi
- if [[ -d "${git_dir}/rebase-apply" || -d "${git_dir}/rebase-merge" ]]; then
- vcs_state='rebase'
- fi
- if [[ -e "${git_dir}/BISECT_START" ]]; then
- vcs_state='bisect'
- fi
- if [[ "x$vcs_branch" == "xmaster" ]]; then
- vcs_branch=''
- fi
- ;;
- *) return 0 ;;
- esac
- if [[ -n "$vcs_branch" ]]; then
- vcs_branch=":$vcs_branch"
- fi
- if [[ -n "$vcs_state" ]]; then
- vcs_state="(${vcs_state:0:1})"
- fi
- if [[ "$vcs_local_commits" == "-0" ]]; then
- vcs_local_commits=''
- fi
- if [[ -n "$vcs_local_commits" ]]; then
- vcs_local_commits=":$vcs_local_commits"
- fi
- __vcs="(${vcs:0:1}${vcs_dirty}${vcs_branch}${vcs_local_commits}${vcs_state})"
-}
-export PROMPT_COMMAND="_set_error;_set_vcs;$PROMPT_COMMAND"
-export PS1="\[\$__error_color\]\$__error \[${HIYELLOW}\][\t] \[${HIGREEN}\]\u@\h \[${HIBLUE}\]\W\[${CYAN}\]\$__vcs \[${HIBLUE}\]\\$\[${NORM}\] "
+export PROMPT_COMMAND="__err=\$?;$PROMPT_COMMAND;PS1=\"\$(fancy-prompt "\$__err")\""
# }}}
# set the correct perl {{{
if type -a perlbrew > /dev/null 2>&1; then