blob: 948427ac5bd1ae23b7e52cf5cd4ad98251ed64df [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
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
Ryanc7fcf202011-06-08 10:20:04 -100027 elif [[ -n "$(hg root 2> /dev/null)" ]]; then SCM=$HG
John Schulzd5645e72010-11-09 23:21:19 -050028 elif [[ -d .svn ]]; then SCM=$SVN
29 else SCM='NONE'
Robert R Evans1f923a92010-10-03 09:41:36 -070030 fi
Robert R Evansa4d02422010-10-02 15:07:29 -070031}
32
John Schulzd5645e72010-11-09 23:21:19 -050033function scm_char {
34 if [[ -z $SCM ]]; then scm; fi
35 [[ $SCM == $GIT ]] && echo $SCM_GIT_CHAR && return
36 [[ $SCM == $HG ]] && echo $SCM_HG_CHAR && return
37 [[ $SCM == $SVN ]] && echo $SCM_SVN_CHAR && return
38 echo $SCM_NONE_CHAR
Robert R Evans698509a2010-10-09 21:46:28 -070039}
40
John Schulzd5645e72010-11-09 23:21:19 -050041function scm_prompt_info {
42 if [[ -z $SCM ]]; then scm; fi
43 [[ $SCM == $GIT ]] && git_prompt_info && return
44 [[ $SCM == $HG ]] && hg_prompt_info && return
45 [[ $SCM == $SVN ]] && svn_prompt_info && return
46}
Robert R Evans698509a2010-10-09 21:46:28 -070047
John Schulzd5645e72010-11-09 23:21:19 -050048# Stolen from Steve Losh
49# left in for backwards-compatibility
50function prompt_char {
51 char=$(scm_char);
52 echo -e "$char"
53}
54
55function git_prompt_info {
Florian Baumann8c619772010-11-22 11:44:28 +010056 if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
John Schulzd5645e72010-11-09 23:21:19 -050057 state=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
58 else
59 state=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
60 fi
61 prefix=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
62 suffix=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
63 ref=$(git symbolic-ref HEAD 2> /dev/null) || return
64
65 echo -e "$prefix${ref#refs/heads/}$state$suffix"
66}
67
68function svn_prompt_info {
69 if [[ -n $(svn status 2> /dev/null) ]]; then
70 state=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
71 else
72 state=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
73 fi
74 prefix=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
75 suffix=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
76 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
77
78 [[ -z $ref ]] && return
79 echo -e "$prefix$ref$state$suffix"
80}
81
82function rvm_version_prompt {
Robert R Evansb8ce9e62010-10-14 09:10:26 -070083 if which rvm &> /dev/null; then
84 rvm=$(rvm tools identifier) || return
85 echo -e "$RVM_THEME_PROMPT_PREFIX$rvm$RVM_THEME_PROMPT_SUFFIX"
86 fi
Florian Baumann8c619772010-11-22 11:44:28 +010087}