blob: d6be1544d7d6b2fd26a5f833f834ddcc9951a3f8 [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 Schulzd5645e72010-11-09 23:21:19 -05009GIT='git'
10SCM_GIT_CHAR='±'
11
12HG='hg'
13SCM_HG_CHAR='☿'
14
15SVN='svn'
16SCM_SVN_CHAR='⑆'
17
18SCM_NONE_CHAR='○'
19
20RVM_THEME_PROMPT_PREFIX=' |'
21RVM_THEME_PROMPT_SUFFIX='|'
22
Ryan0713fdc2011-06-08 11:32:50 -100023VIRTUALENV_THEME_PROMPT_PREFIX=' |'
24VIRTUALENV_THEME_PROMPT_SUFFIX='|'
25
John Schulzd5645e72010-11-09 23:21:19 -050026function scm {
27 if [[ -d .git ]]; then SCM=$GIT
Jeff Kolesky6dd943a2011-03-05 18:08:03 -050028 elif [[ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]]; then SCM=$GIT
John Schulzd5645e72010-11-09 23:21:19 -050029 elif [[ -d .hg ]]; then SCM=$HG
Ryanc7fcf202011-06-08 10:20:04 -100030 elif [[ -n "$(hg root 2> /dev/null)" ]]; then SCM=$HG
John Schulzd5645e72010-11-09 23:21:19 -050031 elif [[ -d .svn ]]; then SCM=$SVN
32 else SCM='NONE'
Robert R Evans1f923a92010-10-03 09:41:36 -070033 fi
Robert R Evansa4d02422010-10-02 15:07:29 -070034}
35
John Schulzd5645e72010-11-09 23:21:19 -050036function scm_char {
37 if [[ -z $SCM ]]; then scm; fi
38 [[ $SCM == $GIT ]] && echo $SCM_GIT_CHAR && return
39 [[ $SCM == $HG ]] && echo $SCM_HG_CHAR && return
40 [[ $SCM == $SVN ]] && echo $SCM_SVN_CHAR && return
41 echo $SCM_NONE_CHAR
Robert R Evans698509a2010-10-09 21:46:28 -070042}
43
John Schulzd5645e72010-11-09 23:21:19 -050044function scm_prompt_info {
45 if [[ -z $SCM ]]; then scm; fi
46 [[ $SCM == $GIT ]] && git_prompt_info && return
47 [[ $SCM == $HG ]] && hg_prompt_info && return
48 [[ $SCM == $SVN ]] && svn_prompt_info && return
49}
Robert R Evans698509a2010-10-09 21:46:28 -070050
John Schulzd5645e72010-11-09 23:21:19 -050051# Stolen from Steve Losh
52# left in for backwards-compatibility
53function prompt_char {
54 char=$(scm_char);
55 echo -e "$char"
56}
57
58function git_prompt_info {
Florian Baumann8c619772010-11-22 11:44:28 +010059 if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
John Schulzd5645e72010-11-09 23:21:19 -050060 state=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
61 else
62 state=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
63 fi
64 prefix=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
65 suffix=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
66 ref=$(git symbolic-ref HEAD 2> /dev/null) || return
67
68 echo -e "$prefix${ref#refs/heads/}$state$suffix"
69}
70
71function svn_prompt_info {
72 if [[ -n $(svn status 2> /dev/null) ]]; then
73 state=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
74 else
75 state=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
76 fi
77 prefix=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
78 suffix=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
79 ref=$(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
80
81 [[ -z $ref ]] && return
82 echo -e "$prefix$ref$state$suffix"
83}
84
85function rvm_version_prompt {
Robert R Evansb8ce9e62010-10-14 09:10:26 -070086 if which rvm &> /dev/null; then
87 rvm=$(rvm tools identifier) || return
88 echo -e "$RVM_THEME_PROMPT_PREFIX$rvm$RVM_THEME_PROMPT_SUFFIX"
89 fi
Florian Baumann8c619772010-11-22 11:44:28 +010090}
Ryan0713fdc2011-06-08 11:32:50 -100091
92function virtualenv_prompt {
93 if which virtualenv &> /dev/null; then
94 virtualenv=$([ ! -z "$VIRTUAL_ENV" ] && echo "`basename $VIRTUAL_ENV`") || return
95 echo -e "$VIRTUALENV_THEME_PROMPT_PREFIX$virtualenv$VIRTUALENV_THEME_PROMPT_SUFFIX"
96 fi
97}