-
Notifications
You must be signed in to change notification settings - Fork 0
/
cool_prompt
105 lines (92 loc) · 3.45 KB
/
cool_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
97
98
99
100
101
102
103
104
105
#showing git branches in bash prompt
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
##################################################
# Fancy PWD display function
##################################################
# The home directory (HOME) is replaced with a ~
# The last pwdmaxlen characters of the PWD are displayed
# Leading partial directory names are striped off
# /home/me/stuff -> ~/stuff if USER=me
# /usr/share/big_dir_name -> ../share/big_dir_name if pwdmaxlen=20
##################################################
bash_prompt_command() {
local LAST_CMD_EXIT=$? # this must be the first line in the function
local NONE='\[\033[0m\]' # unsets color to term's fg color
# regular colors
local K='\[\033[0;30m\]' # black
local R='\[\033[0;31m\]' # red
local G='\[\033[0;32m\]' # green
local Y='\[\033[0;33m\]' # yellow
local B='\[\033[0;34m\]' # blue
local M='\[\033[0;35m\]' # magenta
local C='\[\033[0;36m\]' # cyan
local W='\[\033[0;37m\]' # white
# empahsized (bolded) colors
local EMK='\[\033[1;30m\]'
local EMR='\[\033[1;31m\]'
local EMG='\[\033[1;32m\]'
local EMY='\[\033[1;33m\]'
local EMB='\[\033[1;34m\]'
local EMM='\[\033[1;35m\]'
local EMC='\[\033[1;36m\]'
local EMW='\[\033[1;37m\]'
# background colors
local BGK='\[\033[40m\]'
local BGR='\[\033[41m\]'
local BGG='\[\033[42m\]'
local BGY='\[\033[43m\]'
local BGB='\[\033[44m\]'
local BGM='\[\033[45m\]'
local BGC='\[\033[46m\]'
local BGW='\[\033[47m\]'
local UC=$C # user's color
[ $UID -eq "0" ] && UC=$R # root's color
# How many characters of the $PWD should be kept
local pwdmaxlen=25
# Indicate that there has been dir truncation
local trunc_symbol=".."
local dir=${PWD##*/}
pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
NEW_PWD=${PWD/#$HOME/~}
local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
if [ ${pwdoffset} -gt "0" ]
then
NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
fi
if [ $LAST_CMD_EXIT == 0 ]; then
STATUS_COLOR="${G}✓${NONE}";
STATUS="✓";
else
STATUS_COLOR="${R}✕${NONE}";
STATUS="✕";
fi;
# Change the window title of X terminals
case ${TERM} in
xterm*|rxvt|Eterm|aterm|rxvt-unicode)
echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"
#export PS1='\[\033[01;36m\]\u@\h \[\033[01;34m\]\w \$ \[\033[00m\]'
;;
screen)
echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"
#export PS1='\[\033[01;34m\]\u@\h \[\033[01;36m\]\w \$ \[\033[00m\]'
;;
esac
if [ $PROMPT_TYPE == 'xterm' ]; then
PS1="${STATUS_COLOR} ${EMK}[${M}\${NEW_PWD}${EMK} ${EMK}node $(node -v)]${UC}\\$ ${NONE}\[\033]0;\u@\h \w\007\]${EMB}\$(parse_git_branch)"
elif [ $PROMPT_TYPE == 'console' ]; then
PS1="${STATUS_COLOR} ${EMK}[${M}\${NEW_PWD}${EMK} ${EMK}node $(node -v)]${UC} ${EMB}\$(parse_git_branch) ${W}$ ${NONE}"
else
PS1="${STATUS} [\u@\h \${NEW_PWD}] \$(parse_git_branch)\\$"
fi
# without colors: PS1="${STATUS} [\u@\h \${NEW_PWD}]\\$ "
# extra backslash in front of \$ to make bash colorize the prompt
history -a
}
PROMPT_TYPE=plain
if [ "$PS1" ]; then
PROMPT_TYPE=console
PROMPT_COMMAND=bash_prompt_command
fi