]> git.phdru.name Git - dotfiles.git/blob - admin/prog/bash_prompt
bash_prompt: Use the same symbols as `git-prompt.sh`
[dotfiles.git] / admin / prog / bash_prompt
1 cgmem_which_prompt() {
2    local _cgmem_which
3    _cgmem_which="`cgmem_which 2>/dev/null`"
4    if [ -n "$_cgmem_which" ]; then
5       echo "[$_cgmem_which] "
6    fi
7 }
8
9 short_curdir() {
10    if [ "$PWD" = / ]; then
11       echo /
12       return
13    fi
14    if [ "$PWD" = "$HOME" ]; then
15       echo "~"
16       return
17    fi
18    local _short_curdir
19    _short_curdir="${PWD##*/}" # cut all directories, get base name
20    if [ "${#_short_curdir}" -gt 18 ]; then
21       _short_curdir="${_short_curdir::15}..." # cut long string
22    fi
23    echo "${_short_curdir}"
24 }
25
26 # bash_prompt; adapted from
27 # https://github.com/necolas/dotfiles/blob/master/shell/bash_prompt and
28 # https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
29
30 prompt_git() {
31     local s=""
32     local branchName=""
33
34     # check if the current directory is in a git repository
35     if git rev-parse --is-inside-work-tree &>/dev/null; then
36
37         # check if the current directory is in .git before running git checks
38         if [ "$(git rev-parse --is-inside-git-dir 2> /dev/null)" == "false" ]; then
39
40             # ensure index is up to date
41             #git update-index --really-refresh -q &>/dev/null
42
43             # check for uncommitted changes in the index
44             if ! $(git diff --quiet --ignore-submodules --cached); then
45                 s="$s+";
46             fi
47
48             # check for unstaged changes
49             if [ -n "$(git ls-files --modified)" ]; then
50                 s="$s*";
51             fi
52
53             # check for untracked files
54             if [ -n "$(git ls-files --others --exclude-standard)" ]; then
55                 s="$s%";
56             fi
57
58             # check for stashed files
59             if $(git rev-parse --verify refs/stash &>/dev/null); then
60                 s="$s$";
61             fi
62
63         fi
64
65         # get the short symbolic ref
66         # if HEAD isn't a symbolic ref, get the short SHA
67         # otherwise, just give up
68         branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \
69                       git rev-parse --short HEAD 2> /dev/null || \
70                       printf "(unknown)")"
71
72         [ -n "$s" ] && s=" [$s]"
73         printf "%s" "$branchName$s "
74     fi
75 }
76
77 set_prompts() {
78       OPS1=''
79       # display the user, host and current working directory
80       # in the terminal title
81       case "$TERM" in
82          *rxvt*|screen*|*term*|vt100)
83             OPS1+="\[\033]0;${debian_chroot:+($debian_chroot)}\u@\h:\w\007\]"
84             case "$TERM" in
85                screen*)
86                   OPS1+="\[\033k${debian_chroot:+($debian_chroot)}"
87                   OPS1+="\u@\h:\w\033\\\\\]" # Set screen/tmux caption
88                ;;
89             esac
90          ;;
91
92          *)
93             OPS1=""
94          ;;
95       esac
96
97    OPS1+="${debian_chroot:+($debian_chroot)}"
98    OPS1+="\`cgmem_which_prompt\`\u@\${HOSTNAME::5}:\`short_curdir\` "
99    OPS1+="\$(prompt_git)"
100    OPS1+="\\$\$SHLVL "
101    export OPS1
102 }