blob: 1ec822c4d46061332c07c0a8dbcc52390ad23fb0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
__set-title ()
{
local title
local path=$(git root 2> /dev/null)
if [ ${path} ]
then
title=$(basename ${path})
else
title="${USER}:${PWD/~/\~}"
fi
echo -ne "\033]2;${title}\007"
}
__start-nonprinting ()
{
if [ ${BUILDING_PS1} ]
then
echo -en '\['
fi
}
__end-nonprinting ()
{
if [ ${BUILDING_PS1} ]
then
echo -en '\]'
fi
}
__fontify ()
{
local -A codes
codes[red]='31'
codes[green]='32'
codes[blue]='34'
codes[white]='37'
codes[bold]='1'
codes[dim]='2'
codes[clear]='0'
local text=$1
shift
# We need to add \[ \] around CSI sequences so that Bash can tell which
# characters are non-printing.
output=$(__start-nonprinting)
output+='\033['
local attributes=($@)
for ((i=0; i<$#; i++))
do
a=${attributes[${i}]}
output+=${codes[${a}]}
if ((i<$#-1))
then
output+=';'
else
output+='m'
fi
done
output+=$(__end-nonprinting)
output+="${text}"
output+=$(__start-nonprinting)
output+='\033[0m'
output+=$(__end-nonprinting)
echo -en "${output}"
}
__set-prompt ()
{
BUILDING_PS1=t
local last_status=$1
PS1=''
if [ ${last_status} -ne 0 ]
then
PS1+=$(__fontify "${last_status} " bold red)
fi
PS1+=$(__fontify '\u' green)
PS1+=$(__fontify : bold white)
PS1+=$(__fontify '\w' bold blue)
PS1+=$(__fontify "$(__git_ps1 '(%s)')" red)
PS1+=$(__fontify '\$' bold white)
PS1+=' '
BUILDING_PS1=
}
__draw-rule ()
{
rule=''
for ((i=0; i<COLUMNS; i++))
do
rule+=—
done
__fontify ${rule} dim
}
__refresh-terminal ()
{
local last_status=$?
__set-title
__set-prompt ${last_status}
__draw-rule
}
. /usr/lib/git-core/git-sh-prompt
GIT_PS1_SHOWDIRTYSTATE=t
GIT_PS1_SHOWUPSTREAM=auto
export PROMPT_COMMAND=__refresh-terminal
|