-
Notifications
You must be signed in to change notification settings - Fork 1
/
.ps1
96 lines (72 loc) · 1.56 KB
/
.ps1
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
# Git-aware command prompt
PROMPT_COMMAND=prompter
if [ "$color_prompt" = yes ]; then
CLR_AT='\001\033[0;37m\002'
CLR_WORKDIR='\001\033[1;34m\002'
CLR_SEP='\001\033[1;34m\002'
CLR_GITREPO='\001\033[1;32m\002'
CLR_GITBRANCH='\001\033[0;33m\002'
CLR_GITDIR='\001\033[0;37m\002'
CLR_NULL='\001\033[00m\002'
else
CLR_AT=''
CLR_WORKDIR=''
CLR_SEP=''
CLR_GITREPO=''
CLR_GITBRANCH=''
CLR_NULL=''
fi
RV=
function prompter
{
git_line
local git_line="$RV"
export PS1="${git_line}\u${CLR_AT}@${CLR_NULL}\h${CLR_AT}:${CLR_NULL}${CLR_WORKDIR}\W${CLR_NULL}${CLR_AT}\$${CLR_NULL} "
}
function in_git_dir
{
git branch >/dev/null 2>&1
}
function git_branch
{
RV=
in_git_dir || return
branch=$(git describe --exact-match --tags $(git log -n1 --pretty='%h') 2>&1)
if [ $? -eq 0 ]; then
branch="tag:$branch"
else
branch=$(git branch | grep --color=none '^*' | cut -c3-)
fi
RV="$branch"
}
function git_repo
{
RV=
in_git_dir || return
RV=$(git config --get remote.origin.url | sed -r "s,.*/(.*).git,\1,")
}
function git_dir
{
RV=
ret=$(git rev-parse --show-toplevel 2>/dev/null)
if [ $? -eq 0 ]; then
base1="${ret##*/}"
dir1="${ret%/*}"
RV="${dir1##*/}/$base1"
fi
}
function git_line
{
RV=
in_git_dir || return
git_dir
gitdir=
if [ -n "$RV" ]; then
gitdir="${CLR_GITDIR}($RV)${CLR_NULL}"
fi
git_repo
repo="${CLR_GITREPO}${RV}${CLR_NULL}${gitdir}"
git_branch
branch="${CLR_GITBRANCH}${RV}${CLR_NULL}"
RV="${CLR_SEP}[${CLR_NULL}${repo}${CLR_SEP}:${CLR_NULL}${branch}${CLR_SEP}]${CLR_NULL} "
}