blob: 9ae5d0e8c6307885a56148bf37d366aee0daa22f [file] [log] [blame]
Robert R Evansa4d02422010-10-02 15:07:29 -07001#!/bin/bash
2
John Schulzd5645e72010-11-09 23:21:19 -05003SCM_THEME_PROMPT_DIRTY=' ✗'
4SCM_THEME_PROMPT_CLEAN=' ✓'
5SCM_THEME_PROMPT_PREFIX=' |'
6SCM_THEME_PROMPT_SUFFIX='|'
Robert R Evansa4d02422010-10-02 15:07:29 -07007
John Schulzd5645e72010-11-09 23:21:19 -05008GIT='git'
9SCM_GIT_CHAR='±'
10
11HG='hg'
12SCM_HG_CHAR='☿'
13
14SVN='svn'
15SCM_SVN_CHAR='⑆'
16
17SCM_NONE_CHAR='○'
18
19RVM_THEME_PROMPT_PREFIX=' |'
20RVM_THEME_PROMPT_SUFFIX='|'
21
22function scm {
23 if [[ -d .git ]]; then SCM=$GIT
24 elif [[ -d .hg ]]; then SCM=$HG
25 elif [[ -d .svn ]]; then SCM=$SVN
26 else SCM='NONE'
Robert R Evans1f923a92010-10-03 09:41:36 -070027 fi
Robert R Evansa4d02422010-10-02 15:07:29 -070028}
29
John Schulzd5645e72010-11-09 23:21:19 -050030function scm_char {
31 if [[ -z $SCM ]]; then scm; fi
32 [[ $SCM == $GIT ]] && echo $SCM_GIT_CHAR && return
33 [[ $SCM == $HG ]] && echo $SCM_HG_CHAR && return
34 [[ $SCM == $SVN ]] && echo $SCM_SVN_CHAR && return
35 echo $SCM_NONE_CHAR
Robert R Evans698509a2010-10-09 21:46:28 -070036}
37
John Schulzd5645e72010-11-09 23:21:19 -050038function scm_prompt_info {
39 if [[ -z $SCM ]]; then scm; fi
40 [[ $SCM == $GIT ]] && git_prompt_info && return
41 [[ $SCM == $HG ]] && hg_prompt_info && return
42 [[ $SCM == $SVN ]] && svn_prompt_info && return
43}
Robert R Evans698509a2010-10-09 21:46:28 -070044
John Schulzd5645e72010-11-09 23:21:19 -050045# Stolen from Steve Losh
46# left in for backwards-compatibility
47function prompt_char {
48 char=$(scm_char);
49 echo -e "$char"
50}
51
52function git_prompt_info {
53 if [[ -n $(git status -s 2> /dev/null) ]]; then
54 state=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
55 else
56 state=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
57 fi
58 prefix=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
59 suffix=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
60 ref=$(git symbolic-ref HEAD 2> /dev/null) || return
61
62 echo -e "$prefix${ref#refs/heads/}$state$suffix"
63}
64
65function svn_prompt_info {
66 if [[ -n $(svn status 2> /dev/null) ]]; then
67 state=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
68 else
69 state=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
70 fi
71 prefix=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
72 suffix=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
73 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
74
75 [[ -z $ref ]] && return
76 echo -e "$prefix$ref$state$suffix"
77}
78
79function rvm_version_prompt {
Robert R Evansb8ce9e62010-10-14 09:10:26 -070080 if which rvm &> /dev/null; then
81 rvm=$(rvm tools identifier) || return
82 echo -e "$RVM_THEME_PROMPT_PREFIX$rvm$RVM_THEME_PROMPT_SUFFIX"
83 fi
Robert R Evansa4d02422010-10-02 15:07:29 -070084}