Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 163 lines (141 sloc) 4.342 kB
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
1 #!/usr/bin/env bash
2
3 #
4 # Source this file in your ~/.bash_profile or interactive startup file.
5 # This is done like so:
6 #
7 # [[ -s "$HOME/.rvm/contrib/ps1_functions" ]] &&
8 # source "$HOME/.rvm/contrib/ps1_functions"
9 #
10 # Then in order to set your prompt you simply do the following for example
11 #
12 # Examples:
13 #
14 # ps1_set --prompt ∫
15 #
16 # or
17 #
18 # ps1_set --prompt ∴
19 #
20 # This will yield a prompt like the following, for example,
21 #
22 # 00:00:50 wayneeseguin@GeniusAir:~/projects/db0/rvm/rvm (git:master:156d0b4) ruby-1.8.7-p334@rvm
23 # ∴
24 #
d703305 @thecatwasnot Adding titlebar back for xterm in contrib/ps1_functions
thecatwasnot authored
25 ps1_titlebar()
26 {
e7d11a8 @wayneeseguin Adjusted ps1_titlebar
wayneeseguin authored
27 case $TERM in
28 (xterm*|rxvt*)
4d59d26 @wayneeseguin Adjusted ps1_titlebar as recommended by @chrislwade.
wayneeseguin authored
29 printf "%s" "\033]0;\\u@\\h: \W\\007"
e7d11a8 @wayneeseguin Adjusted ps1_titlebar
wayneeseguin authored
30 ;;
31 esac
d703305 @thecatwasnot Adding titlebar back for xterm in contrib/ps1_functions
thecatwasnot authored
32 }
e7d11a8 @wayneeseguin Adjusted ps1_titlebar
wayneeseguin authored
33
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
34 ps1_identity()
35 {
1829dd8 @wayneeseguin Some cleanup.
wayneeseguin authored
36 if (( $UID == 0 )) ; then
89e301c @wayneeseguin Bugfix: adjusted printf.
wayneeseguin authored
37 printf "%s" "\[\033[31m\]\\u\[\033[0m\]@\[\033[36m\]\\h\[\033[35m\]:\w\[\033[0m\] "
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
38 else
89e301c @wayneeseguin Bugfix: adjusted printf.
wayneeseguin authored
39 printf "%s" "\[\033[32m\]\\u\[\033[0m\]@\[\033[36m\]\\h\[\033[35m\]:\w\[\033[0m\] "
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
40 fi
41 }
42
43 ps1_git()
44 {
2a8ed61 @wayneeseguin Initialize the variables to make sure they are set.
wayneeseguin authored
45 local branch="" sha1="" line="" attr="" color=0
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
46
47 shopt -s extglob # Important, for our nice matchers :)
48
1829dd8 @wayneeseguin Some cleanup.
wayneeseguin authored
49 command -v git >/dev/null 2>&1 || {
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
50 printf " \033[1;37m\033[41m[git not found]\033[m "
cbd66b8 @wayneeseguin Sanity check for the case we are not in a git branch.
wayneeseguin authored
51 return 0
1829dd8 @wayneeseguin Some cleanup.
wayneeseguin authored
52 }
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
53
dbdefde @wayneeseguin cleanup.
wayneeseguin authored
54 branch=$(git symbolic-ref -q HEAD 2>/dev/null) || return 0 # Not in git repo.
915589b @wayneeseguin Updated ps1_functions based on discussion with @0x44
wayneeseguin authored
55 branch=${branch##refs/heads/}
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
56
57 # Now we display the branch.
6a9a1bb @ConradIrwin Further simplify SHA1 extraction.
ConradIrwin authored
58 sha1=$(git rev-parse --short --quiet HEAD)
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
59
915589b @wayneeseguin Updated ps1_functions based on discussion with @0x44
wayneeseguin authored
60 case "${branch:-"(no branch)"}" in
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
61 production|prod) attr="1;37m\033[" ; color=41 ;; # red
62 master|deploy) color=31 ;; # red
63 stage|staging) color=33 ;; # yellow
b765f44 I blame gitflow for this atrocity
Yonah Wahrhaftig authored
64 dev|develop|development) color=34 ;; # blue
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
65 next) color=36 ;; # gray
66 *)
67 if [[ -n "${branch}" ]] ; then # Feature Branch :)
68 color=32 # green
69 else
70 color=0 # reset
71 fi
72 ;;
73 esac
74
1829dd8 @wayneeseguin Some cleanup.
wayneeseguin authored
75 [[ $color -gt 0 ]] &&
7157657 @wayneeseguin Altered new git status ps1 feature to minimize external calls.
wayneeseguin authored
76 printf "\[\033[${attr}${color}m\](git:${branch}$(ps1_git_status):$sha1)\[\033[0m\] "
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
77 }
78
7157657 @wayneeseguin Altered new git status ps1 feature to minimize external calls.
wayneeseguin authored
79 ps1_git_status()
866f1d6 @carlosgaldino show git status
carlosgaldino authored
80 {
7157657 @wayneeseguin Altered new git status ps1 feature to minimize external calls.
wayneeseguin authored
81 local git_status="$(git status 2>/dev/null)"
866f1d6 @carlosgaldino show git status
carlosgaldino authored
82
1829dd8 @wayneeseguin Some cleanup.
wayneeseguin authored
83 [[ "${git_status}" = *deleted* ]] && printf "%s" "-"
84 [[ "${git_status}" = *Untracked[[:space:]]files:* ]] && printf "%s" "+"
85 [[ "${git_status}" = *modified:* ]] && printf "%s" "*"
866f1d6 @carlosgaldino show git status
carlosgaldino authored
86 }
057cfb1 @ashgti Update the ps1_set to escape all of the coloring
ashgti authored
87
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
88 ps1_rvm()
89 {
1829dd8 @wayneeseguin Some cleanup.
wayneeseguin authored
90 command -v rvm-prompt >/dev/null 2>&1 && printf "%s" " $(rvm-prompt) "
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
91 }
92
057cfb1 @ashgti Update the ps1_set to escape all of the coloring
ashgti authored
93 ps1_update()
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
94 {
1829dd8 @wayneeseguin Some cleanup.
wayneeseguin authored
95 local prompt_char='$' separator="\n" notime=0
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
96
1829dd8 @wayneeseguin Some cleanup.
wayneeseguin authored
97 (( $UID == 0 )) && prompt_char='#'
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
98
99 while [[ $# -gt 0 ]] ; do
057cfb1 @ashgti Update the ps1_set to escape all of the coloring
ashgti authored
100 local token="$1" ; shift
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
101
102 case "$token" in
103 --trace)
01f5e34 @wayneeseguin Modified PS4 again.
wayneeseguin authored
104 export PS4="+ \${BASH_SOURCE##\${rvm_path:-}} : \${FUNCNAME[0]:+\${FUNCNAME[0]}()} \${LINENO} > "
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
105 set -o xtrace
106 ;;
107 --prompt)
108 prompt_char="$1"
109 shift
110 ;;
057cfb1 @ashgti Update the ps1_set to escape all of the coloring
ashgti authored
111 --noseparator)
112 separator=""
113 ;;
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
114 --separator)
115 separator="$1"
116 shift
117 ;;
057cfb1 @ashgti Update the ps1_set to escape all of the coloring
ashgti authored
118 --notime)
119 notime=1
120 ;;
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
121 *)
122 true # Ignore everything else.
123 ;;
124 esac
125 done
126
1829dd8 @wayneeseguin Some cleanup.
wayneeseguin authored
127 if (( notime > 0 )) ; then
d703305 @thecatwasnot Adding titlebar back for xterm in contrib/ps1_functions
thecatwasnot authored
128 PS1="$(ps1_titlebar)$(ps1_identity)$(ps1_git)$(ps1_rvm)${separator}${prompt_char} "
057cfb1 @ashgti Update the ps1_set to escape all of the coloring
ashgti authored
129 else
d703305 @thecatwasnot Adding titlebar back for xterm in contrib/ps1_functions
thecatwasnot authored
130 PS1="$(ps1_titlebar)\D{%H:%M:%S} $(ps1_identity)$(ps1_git)$(ps1_rvm)${separator}${prompt_char} "
057cfb1 @ashgti Update the ps1_set to escape all of the coloring
ashgti authored
131 fi
71249c7 @wayneeseguin Added ps1_functions to contrib/
wayneeseguin authored
132 }
133
134 ps2_set()
135 {
136 PS2=" \[\033[0;40m\]\[\033[0;33m\]> \[\033[1;37m\]\[\033[1m\]"
137 }
138
915589b @wayneeseguin Updated ps1_functions based on discussion with @0x44
wayneeseguin authored
139 ps4_set()
140 {
141 export PS4="+ \${BASH_SOURCE##\${rvm_path:-}} : \${FUNCNAME[0]:+\${FUNCNAME[0]}()} \${LINENO} > "
142 }
057cfb1 @ashgti Update the ps1_set to escape all of the coloring
ashgti authored
143
8c3ff6d @wayneeseguin Updated branching logic thanks to prompting by hiroshi.
wayneeseguin authored
144 # WARNING: This clobbers your PROMPT_COMMAND so if you need to write your own, call
145 # ps1_update within your PROMPT_COMMAND with the same arguments you pass
057cfb1 @ashgti Update the ps1_set to escape all of the coloring
ashgti authored
146 # to ps1_set
147 #
148 # The PROMPT_COMMAND is used to help the prompt work if the separator is not a new line.
149 # In the event that the separtor is not a new line, the prompt line may become distored if
150 # you add or delete a certian number of characters, making the string wider than the
151 # $COLUMNS + len(your_input_line).
152 # This orginally was done with callbacks within the PS1 to add in things like the git
153 # commit, but this results in the PS1 being of an unknown width which results in the prompt
154 # being distored if you add or remove a certain number of characters. To work around this
155 # it now uses the PROMPT_COMMAND callback to re-set the PS1 with a known width of chracters
156 # each time a new command is entered. see PROMPT_COMMAND for more details.
157 #
158 ps1_set()
159 {
8c3ff6d @wayneeseguin Updated branching logic thanks to prompting by hiroshi.
wayneeseguin authored
160 PROMPT_COMMAND="ps1_update $@"
057cfb1 @ashgti Update the ps1_set to escape all of the coloring
ashgti authored
161 }
162
Something went wrong with that request. Please try again.