blob: 56629b9d6cb311d6e25c5633284ed0011c316a13 [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
23function scm {
24 if [[ -d .git ]]; then SCM=$GIT
25 elif [[ -d .hg ]]; then SCM=$HG
26 elif [[ -d .svn ]]; then SCM=$SVN
27 else SCM='NONE'
Robert R Evans1f923a92010-10-03 09:41:36 -070028 fi
Robert R Evansa4d02422010-10-02 15:07:29 -070029}
30
John Schulzd5645e72010-11-09 23:21:19 -050031function scm_char {
32 if [[ -z $SCM ]]; then scm; fi
33 [[ $SCM == $GIT ]] && echo $SCM_GIT_CHAR && return
34 [[ $SCM == $HG ]] && echo $SCM_HG_CHAR && return
35 [[ $SCM == $SVN ]] && echo $SCM_SVN_CHAR && return
36 echo $SCM_NONE_CHAR
Robert R Evans698509a2010-10-09 21:46:28 -070037}
38
John Schulzd5645e72010-11-09 23:21:19 -050039function scm_prompt_info {
40 if [[ -z $SCM ]]; then scm; fi
41 [[ $SCM == $GIT ]] && git_prompt_info && return
42 [[ $SCM == $HG ]] && hg_prompt_info && return
43 [[ $SCM == $SVN ]] && svn_prompt_info && return
44}
Robert R Evans698509a2010-10-09 21:46:28 -070045
John Schulzd5645e72010-11-09 23:21:19 -050046# Stolen from Steve Losh
47# left in for backwards-compatibility
48function prompt_char {
49 char=$(scm_char);
50 echo -e "$char"
51}
52
53function git_prompt_info {
Florian Baumann8c619772010-11-22 11:44:28 +010054 if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
John Schulzd5645e72010-11-09 23:21:19 -050055 state=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
56 else
57 state=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
58 fi
59 prefix=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
60 suffix=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
61 ref=$(git symbolic-ref HEAD 2> /dev/null) || return
62
63 echo -e "$prefix${ref#refs/heads/}$state$suffix"
64}
65
66function svn_prompt_info {
67 if [[ -n $(svn status 2> /dev/null) ]]; then
68 state=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
69 else
70 state=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
71 fi
72 prefix=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
73 suffix=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
74 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
75
76 [[ -z $ref ]] && return
77 echo -e "$prefix$ref$state$suffix"
78}
79
80function rvm_version_prompt {
Robert R Evansb8ce9e62010-10-14 09:10:26 -070081 if which rvm &> /dev/null; then
82 rvm=$(rvm tools identifier) || return
83 echo -e "$RVM_THEME_PROMPT_PREFIX$rvm$RVM_THEME_PROMPT_SUFFIX"
84 fi
Florian Baumann8c619772010-11-22 11:44:28 +010085}