blob: c80290dc2f5ddebed12ece4eb4d6acc46c685de3 [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
David DeSandro3dc46202011-06-17 10:24:04 -040018SCM_NONE_CHAR='·'
John Schulzd5645e72010-11-09 23:21:19 -050019
20RVM_THEME_PROMPT_PREFIX=' |'
21RVM_THEME_PROMPT_SUFFIX='|'
22
23function scm {
24 if [[ -d .git ]]; then SCM=$GIT
Jeff Kolesky6dd943a2011-03-05 18:08:03 -050025 elif [[ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]]; then SCM=$GIT
John Schulzd5645e72010-11-09 23:21:19 -050026 elif [[ -d .hg ]]; then SCM=$HG
27 elif [[ -d .svn ]]; then SCM=$SVN
28 else SCM='NONE'
Robert R Evans1f923a92010-10-03 09:41:36 -070029 fi
Robert R Evansa4d02422010-10-02 15:07:29 -070030}
31
John Schulzd5645e72010-11-09 23:21:19 -050032function scm_char {
33 if [[ -z $SCM ]]; then scm; fi
34 [[ $SCM == $GIT ]] && echo $SCM_GIT_CHAR && return
35 [[ $SCM == $HG ]] && echo $SCM_HG_CHAR && return
36 [[ $SCM == $SVN ]] && echo $SCM_SVN_CHAR && return
37 echo $SCM_NONE_CHAR
Robert R Evans698509a2010-10-09 21:46:28 -070038}
39
John Schulzd5645e72010-11-09 23:21:19 -050040function scm_prompt_info {
41 if [[ -z $SCM ]]; then scm; fi
42 [[ $SCM == $GIT ]] && git_prompt_info && return
43 [[ $SCM == $HG ]] && hg_prompt_info && return
44 [[ $SCM == $SVN ]] && svn_prompt_info && return
45}
Robert R Evans698509a2010-10-09 21:46:28 -070046
John Schulzd5645e72010-11-09 23:21:19 -050047# Stolen from Steve Losh
48# left in for backwards-compatibility
49function prompt_char {
50 char=$(scm_char);
51 echo -e "$char"
52}
53
54function git_prompt_info {
Florian Baumann8c619772010-11-22 11:44:28 +010055 if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
John Schulzd5645e72010-11-09 23:21:19 -050056 state=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
57 else
58 state=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
59 fi
60 prefix=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
61 suffix=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
62 ref=$(git symbolic-ref HEAD 2> /dev/null) || return
63
64 echo -e "$prefix${ref#refs/heads/}$state$suffix"
65}
66
67function svn_prompt_info {
68 if [[ -n $(svn status 2> /dev/null) ]]; then
69 state=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
70 else
71 state=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
72 fi
73 prefix=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
74 suffix=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
75 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
76
77 [[ -z $ref ]] && return
78 echo -e "$prefix$ref$state$suffix"
79}
80
81function rvm_version_prompt {
Robert R Evansb8ce9e62010-10-14 09:10:26 -070082 if which rvm &> /dev/null; then
83 rvm=$(rvm tools identifier) || return
84 echo -e "$RVM_THEME_PROMPT_PREFIX$rvm$RVM_THEME_PROMPT_SUFFIX"
85 fi
Florian Baumann8c619772010-11-22 11:44:28 +010086}