dot rc

Sign in or create your account | Project List | Help

dot rc Git Source Tree

Root/rc/bash_prompt

Source at commit b9861e0f76d6be15da1e8ac114c545c20c389d7b created 2 years 3 days ago.
By Luciano Rocha, OS X fixes
1# vim:filetype=sh
2# .bashrc for fancy prompt
3
4# max length of cwd
5_wdlen=36
6
7## colors
8_RESET=`echo -ne '\033[0m'`
9_RED=`echo -ne '\033[0;31m'`
10_GREEN=`echo -ne '\033[0;32m'`
11_YELLOW=`echo -ne '\033[0;33m'`
12_BLUE=`echo -ne '\033[0;34m'`
13_MAGENTA=`echo -ne '\033[0;35m'`
14_CYAN=`echo -ne '\033[0;36m'`
15_GRAY=`echo -ne '\033[0;37m'`
16
17## username and hostname colors depend on their values
18_HCDEF="$_BLUE"
19
20host2color()
21{
22    local colors sum
23    colors=("$_RESET" "$_BLUE" "$_MAGENTA" "$_CYAN")
24    sum=$(echo -n "$HOSTNAME" | sum)
25    sum="${sum:0:1}"
26    _HCDEF=${colors[sum % ${#colors[*]}]}
27}
28
29host2color
30unset host2color
31
32## user
33if [ $UID -eq 0 ]; then
34    _c_u="$_RED"
35else
36    _c_u="$_GREEN"
37fi
38
39## optimize access to load
40if [ -r /proc/loadavg ]; then
41    _get_loadavg() {
42        _loadavg=$(< /proc/loadavg)
43        _loadavg="${_loadavg%%[, ]*}"
44    }
45else
46    _get_loadavg_fresh=0
47    _get_loadavg() {
48        if [ $_get_loadavg_fresh -lt $SECONDS ]; then
49            _loadavg=$(trap "" SIGTSTP; uptime)
50            _loadavg="${_loadavg##*: }"
51            _loadavg="${_loadavg%%[, ]*}"
52            _get_loadavg_fresh=$((SECONDS+5))
53            _get_loadavg_save=$_loadavg
54        else
55            _loadavg=$_get_loadavg_save
56        fi
57    }
58fi
59
60## prompt (xterm/screen/... title and PS1)
61_prompt() {
62    ## must store $? first, it will get changed
63    local _r=$? _wdlb _wdla _jobs_ids
64
65    ## success/failure
66    if [ $_r -eq 0 ]; then
67        _c_p="$_GREEN"
68    elif [ $_r -eq 127 ]; then
69        _c_p="$_BLUE"
70    else
71        _c_p="$_RED"
72    fi
73
74    ## misc info
75    _jobs_ids=( $(jobs -p) )
76    _jobs=${#_jobs_ids[*]}
77    _get_loadavg
78
79    ## pwd
80    _wd="${PWD/#$HOME/~}"
81    if [ "${#_wd}" -gt $_wdlen ]; then
82        _wdp="${_wd%/*/*}"
83        _wd="${_wd/#$_wdp\/}"
84        _wdm=" .. "
85
86        let _wdlb=_wdlen/3 _wdla=_wdlen-_wdlb
87        if [ "${#_wd}" -gt $_wdla ]; then
88            _wd="${_wd:${#_wd}-_wdla}"
89        else
90            let _wdlb+="_wdla-${#_wd}"
91        fi
92
93        if [ "${#_wdp}" -gt $_wdlb ]; then
94            _wdp="${_wdp:0:_wdlb}"
95        fi
96    else
97        _wdp=""
98        _wdm=""
99    fi
100
101    ## title string
102    _promptstr="$_loadavg/$_jobs/${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"
103
104    ## add window information from screen
105    if [ -n "$WINDOW" ]; then
106        _promptstr="$WINDOW $_promptstr"
107    fi
108
109    ## hostname color from loadavg
110    let _loadavg="10#${_loadavg//.}"
111    if [ $_loadavg -ge 150 ]; then
112        _c_h="$_RED"
113    elif [ $_loadavg -gt 75 ]; then
114        _c_h="$_YELLOW"
115    else
116        _c_h="$_HCDEF"
117    fi
118
119    ## jobs (empty if no job)
120    if [ $_jobs -gt 0 ]; then
121        _c_j="$_RED"
122        _jobs="$_jobs "
123    else
124        _c_j="$_RESET"
125        _jobs=""
126    fi
127    return $_r
128}
129
130_prompt_xterm-color() {
131    echo -ne "\033]0;$_promptstr\007"
132}
133
134_prompt_xterm() {
135    echo -ne "\033]0;$_promptstr\007"
136}
137
138_prompt_screen() {
139    echo -ne "\033_$_promptstr\033\\"
140}
141
142PROMPT_COMMAND="_prompt"
143if type -t _prompt_$TERM > /dev/null; then
144    PROMPT_COMMAND="$PROMPT_COMMAND; _prompt_$TERM"
145fi
146
147if type -t _prompt_$SCREENTERM > /dev/null; then
148    PROMPT_COMMAND="$PROMPT_COMMAND; _prompt_$SCREENTERM"
149fi
150
151PS1='\[$_c_u\]\u\[$_RESET\] \[$_c_h\]\h\[$_RESET\] \[$_RESET\]$_wdp\[$_GRAY\]$_wdm\[$_RESET\]$_wd\[$_RESET\] \[$_c_j\]$_jobs\[$_c_p\]\$\[$_RESET\] '
152

Archive Download this file

Branches:
master