blob: 58efe11d745cf03a1dd243d3dc4499c33843b45c [file] [log] [blame]
Robert R Evansa4d02422010-10-02 15:07:29 -07001#!/bin/bash
2
Travis Swicegood0c2f3092011-02-28 13:46:22 -06003THEME_PROMPT_HOST='\H'
John Schulzd5645e72010-11-09 23:21:19 -05004SCM_THEME_PROMPT_DIRTY=' ✗'
5SCM_THEME_PROMPT_CLEAN=' ✓'
6SCM_THEME_PROMPT_PREFIX=' |'
7SCM_THEME_PROMPT_SUFFIX='|'
Robert R Evansa4d02422010-10-02 15:07:29 -07008
John Schulzb2b629e2011-10-09 14:24:10 -04009SCM_GIT='git'
John Schulzd5645e72010-11-09 23:21:19 -050010SCM_GIT_CHAR='±'
11
John Schulzb2b629e2011-10-09 14:24:10 -040012SCM_HG='hg'
John Schulzd5645e72010-11-09 23:21:19 -050013SCM_HG_CHAR='☿'
14
John Schulzb2b629e2011-10-09 14:24:10 -040015SCM_SVN='svn'
John Schulzd5645e72010-11-09 23:21:19 -050016SCM_SVN_CHAR='⑆'
17
John Schulzb2b629e2011-10-09 14:24:10 -040018SCM_NONE='NONE'
JFSIIIccab4852011-06-18 11:55:22 -040019SCM_NONE_CHAR='○'
John Schulzd5645e72010-11-09 23:21:19 -050020
21RVM_THEME_PROMPT_PREFIX=' |'
22RVM_THEME_PROMPT_SUFFIX='|'
23
Ryan0713fdc2011-06-08 11:32:50 -100024VIRTUALENV_THEME_PROMPT_PREFIX=' |'
25VIRTUALENV_THEME_PROMPT_SUFFIX='|'
26
Victor Castell76fcb582011-11-05 13:08:34 +010027RBENV_THEME_PROMPT_PREFIX=' |'
28RBENV_THEME_PROMPT_SUFFIX='|'
29
John Schulzd5645e72010-11-09 23:21:19 -050030function scm {
John Schulzb2b629e2011-10-09 14:24:10 -040031 if [[ -d .git ]]; then SCM=$SCM_GIT
32 elif [[ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]]; then SCM=$SCM_GIT
33 elif [[ -d .hg ]]; then SCM=$SCM_HG
34 elif [[ -n "$(hg root 2> /dev/null)" ]]; then SCM=$SCM_HG
35 elif [[ -d .svn ]]; then SCM=$SCM_SVN
36 else SCM=$SCM_NONE
Robert R Evans1f923a92010-10-03 09:41:36 -070037 fi
Robert R Evansa4d02422010-10-02 15:07:29 -070038}
39
John Schulzb2b629e2011-10-09 14:24:10 -040040function scm_prompt_char {
John Schulzd5645e72010-11-09 23:21:19 -050041 if [[ -z $SCM ]]; then scm; fi
John Schulzb2b629e2011-10-09 14:24:10 -040042 if [[ $SCM == $SCM_GIT ]]; then SCM_CHAR=$SCM_GIT_CHAR
43 elif [[ $SCM == $SCM_HG ]]; then SCM_CHAR=$SCM_HG_CHAR
44 elif [[ $SCM == $SCM_SVN ]]; then SCM_CHAR=$SCM_SVN_CHAR
45 else SCM_CHAR=$SCM_NONE_CHAR
46 fi
47}
48
49function scm_prompt_vars {
50 scm
51 scm_prompt_char
52 SCM_DIRTY=0
53 SCM_STATE=''
54 [[ $SCM == $SCM_GIT ]] && git_prompt_vars && return
55 [[ $SCM == $SCM_HG ]] && hg_prompt_vars && return
56 [[ $SCM == $SCM_SVN ]] && svn_prompt_vars && return
Robert R Evans698509a2010-10-09 21:46:28 -070057}
58
John Schulzd5645e72010-11-09 23:21:19 -050059function scm_prompt_info {
John Schulzb2b629e2011-10-09 14:24:10 -040060 scm
61 scm_prompt_char
62 SCM_DIRTY=0
63 SCM_STATE=''
64 [[ $SCM == $SCM_GIT ]] && git_prompt_info && return
65 [[ $SCM == $SCM_HG ]] && hg_prompt_info && return
66 [[ $SCM == $SCM_SVN ]] && svn_prompt_info && return
John Schulzd5645e72010-11-09 23:21:19 -050067}
Robert R Evans698509a2010-10-09 21:46:28 -070068
John Schulzb2b629e2011-10-09 14:24:10 -040069function git_prompt_vars {
Florian Baumann8c619772010-11-22 11:44:28 +010070 if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
John Schulzb2b629e2011-10-09 14:24:10 -040071 SCM_DIRTY=1
72 SCM_STATE=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
John Schulzd5645e72010-11-09 23:21:19 -050073 else
John Schulzb2b629e2011-10-09 14:24:10 -040074 SCM_DIRTY=0
75 SCM_STATE=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
John Schulzd5645e72010-11-09 23:21:19 -050076 fi
John Schulzb2b629e2011-10-09 14:24:10 -040077 SCM_PREFIX=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
78 SCM_SUFFIX=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
79 local ref=$(git symbolic-ref HEAD 2> /dev/null)
80 SCM_BRANCH=${ref#refs/heads/}
81 SCM_CHANGE=$(git rev-parse HEAD 2>/dev/null)
John Schulzd5645e72010-11-09 23:21:19 -050082}
83
John Schulzb2b629e2011-10-09 14:24:10 -040084function svn_prompt_vars {
John Schulzd5645e72010-11-09 23:21:19 -050085 if [[ -n $(svn status 2> /dev/null) ]]; then
John Schulzb2b629e2011-10-09 14:24:10 -040086 SCM_DIRTY=1
87 SCM_STATE=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
John Schulzd5645e72010-11-09 23:21:19 -050088 else
John Schulzb2b629e2011-10-09 14:24:10 -040089 SCM_DIRTY=0
90 SCM_STATE=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
John Schulzd5645e72010-11-09 23:21:19 -050091 fi
John Schulzb2b629e2011-10-09 14:24:10 -040092 SCM_PREFIX=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
93 SCM_SUFFIX=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
94 SCM_BRANCH=$(svn info 2> /dev/null | awk -F/ '/^URL:/ { for (i=0; i<=NF; i++) { if ($i == "branches" || $i == "tags" ) { print $(i+1); break }; if ($i == "trunk") { print $i; break } } }') || return
95 SCM_CHANGE=$(svn info 2> /dev/null | sed -ne 's#^Revision: ##p' )
John Schulzd5645e72010-11-09 23:21:19 -050096}
97
John Schulzb2b629e2011-10-09 14:24:10 -040098function hg_prompt_vars {
Daniel Leavittbb990312011-06-17 14:38:49 -070099 if [[ -n $(hg status 2> /dev/null) ]]; then
John Schulzb2b629e2011-10-09 14:24:10 -0400100 SCM_DIRTY=1
101 SCM_STATE=${HG_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
Daniel Leavittbb990312011-06-17 14:38:49 -0700102 else
John Schulzb2b629e2011-10-09 14:24:10 -0400103 SCM_DIRTY=0
104 SCM_STATE=${HG_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
Daniel Leavittbb990312011-06-17 14:38:49 -0700105 fi
John Schulzb2b629e2011-10-09 14:24:10 -0400106 SCM_PREFIX=${HG_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
107 SCM_SUFFIX=${HG_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
108 SCM_BRANCH=$(hg summary 2> /dev/null | grep branch | awk '{print $2}')
109 SCM_CHANGE=$(hg summary 2> /dev/null | grep parent | awk '{print $2}')
Daniel Leavittbb990312011-06-17 14:38:49 -0700110}
111
John Schulzd5645e72010-11-09 23:21:19 -0500112function rvm_version_prompt {
Robert R Evansb8ce9e62010-10-14 09:10:26 -0700113 if which rvm &> /dev/null; then
114 rvm=$(rvm tools identifier) || return
115 echo -e "$RVM_THEME_PROMPT_PREFIX$rvm$RVM_THEME_PROMPT_SUFFIX"
116 fi
Florian Baumann8c619772010-11-22 11:44:28 +0100117}
Ryan0713fdc2011-06-08 11:32:50 -1000118
Victor Castell76fcb582011-11-05 13:08:34 +0100119function rbenv_version_prompt {
120 if which rbenv &> /dev/null; then
121 rbenv=$(rbenv global) || return
122 echo -e "$RBENV_THEME_PROMPT_PREFIX$rbenv$RBENV_THEME_PROMPT_SUFFIX"
123 fi
124}
125
Ryan0713fdc2011-06-08 11:32:50 -1000126function virtualenv_prompt {
127 if which virtualenv &> /dev/null; then
128 virtualenv=$([ ! -z "$VIRTUAL_ENV" ] && echo "`basename $VIRTUAL_ENV`") || return
129 echo -e "$VIRTUALENV_THEME_PROMPT_PREFIX$virtualenv$VIRTUALENV_THEME_PROMPT_SUFFIX"
130 fi
131}
John Schulzb2b629e2011-10-09 14:24:10 -0400132
133# backwards-compatibility
134function git_prompt_info {
135 git_prompt_vars
136 echo -e "$SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_SUFFIX"
137}
138
139function svn_prompt_info {
140 svn_prompt_vars
141 echo -e "$SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_SUFFIX"
142}
143
144function hg_prompt_info() {
145 hg_prompt_vars
146 echo -e "$SCM_PREFIX$SCM_BRANCH:${SCM_CHANGE#*:}$SCM_STATE$SCM_SUFFIX"
147}
148
149function scm_char {
150 scm_prompt_char
151 echo -e "$SCM_CHAR"
152}
153
154function prompt_char {
155 scm_char
156}