-
Notifications
You must be signed in to change notification settings - Fork 2
/
.bash_login.prompt
96 lines (86 loc) · 2.36 KB
/
.bash_login.prompt
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
RED="\[\e[0;31m\]"
GREEN="\[\e[0;32m\]"
YELLOW="\[\e[0;33m\]"
PURPLE="\[\e[0;35m\]"
LIGHT_BLUE="\[\e[1;34m\]"
COLOR_NONE="\[\e[0m\]"
LIGHT_GRAY="\[\e[0;37m\]"
# $1 = git status --short --branch 2>&1
function parse_git_deleted {
[[ $(echo "$1" | grep "^.D") != "" ]] && echo "-"
}
# $1 = git status --short --branch 2>&1
function parse_git_added {
[[ $(echo "$1" | grep "^??") != "" ]] && echo '+'
}
# $1 = git status --short --branch 2>&1
function parse_git_modified {
[[ $(echo "$1" | grep "^.M") != "" ]] && echo "*"
}
# $1 = git status --short --branch 2>&1
function parse_git_staged {
[[ $(echo "$1" | grep '^[MARCD]') != "" ]] && echo "~"
}
# $1 = git status --short --branch 2>&1
function parse_git_push_pull_status {
if [[ $(echo "$1" | grep "^## .*\[ahead.*behind") != "" ]]
then
echo "↕"
elif [[ $(echo "$1" | grep "^## .*\[ahead") != "" ]]
then
echo "↑"
elif [[ $(echo "$1" | grep "^## .*\[behind") != "" ]]
then
echo "↓"
fi
}
# $1 = git status --short --branch 2>&1
function parse_git_dirty {
echo "$(parse_git_staged "$1")$(parse_git_added "$1")$(parse_git_modified "$1")$(parse_git_deleted "$1")$(parse_git_push_pull_status "$1")"
}
# $1 = git status --short --branch 2>&1
function parse_git_branch {
branch=$(git branch --no-color 2> /dev/null | sed -n '/^\*/p' | sed -e "s/^\* \(.*\)/\1/")
if [[ $branch != "" ]]
then
# 原 approximately means "original", hence master
echo "($(echo $branch | sed -e "s/^master$/原/")$(parse_git_dirty "$1"))"
fi
}
# $1 = git status 2>&1
function prompt_dir {
if [[ $(echo "$1" | grep 'Not a git repository') != "" ]]
then
echo "${PURPLE}\w${COLOR_NONE}"
else
local my_pwd=`pwd`
echo ${LIGHT_BLUE}${my_pwd#$(dirname $(git rev-parse --show-toplevel))/}${COLOR_NONE}
fi
}
function show_dirs_stack {
n_dirs=$(dirs -p | wc -l | awk '{print $1}')
if [[ $n_dirs == "1" ]]
then
true
elif [[ $n_dirs == "2" ]]
then
echo "="
elif [[ $n_dirs == "3" ]]
then
echo "☰"
else
echo "䷀"
fi
}
function prompt_func {
previous_return_value=$?
git_status=$(git status --short --branch 2>&1)
prompt="${LIGHT_GRAY}$(show_dirs_stack) $(prompt_dir "$git_status")${YELLOW}$(parse_git_branch "$git_status")${COLOR_NONE} "
if test $previous_return_value -eq 0
then
PS1="${GREEN}\h${prompt}"
else
PS1="${RED}\h${prompt}"
fi
}
PROMPT_COMMAND=prompt_func