blob: 5081ec0ed150af7ccfe4b82e10c65cb14a45e762 (
plain) (
blame)
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
106
107
108
109
110
111
112
113
114
115
116
117
|
# Frontend to controlling prompt
prompt() {
# If no arguments, print the prompt strings as they are
if ! (($#)) ; then
declare -p PS1 PS2 PS3 PS4
return
fi
# What's done next depends on the first argument to the function
case $1 in
# Turn complex, colored PS1 and debugging PS4 prompts on
on)
# Declare the PROMPT_RETURN variable
PROMPT_RETURN=0
# Set up prompt, including optional PROMPT_PREFIX and PROMPT_SUFFIX
# variables
PS1='[\u@\h:\w]'
PS1=$PS1'$(prompt job)'
PS1=$PS1'$(prompt ret)'
PS1='${PROMPT_PREFIX}'$PS1
PS1=$PS1'${PROMPT_SUFFIX}'
PS1=$PS1'\$'
# Count available colors
local -i colors
colors=$( {
tput Co || tput colors
} 2>/dev/null )
# Prepare reset code
local reset
reset=$( {
tput me || tput sgr0
} 2>/dev/null )
# Decide prompt color formatting based on color availability
local format
case $colors in
# Check if we have non-bold bright green available
256)
format=$( {
: "${PROMPT_COLOR:=10}"
tput AF "$PROMPT_COLOR" ||
tput setaf "$PROMPT_COLOR" ||
tput AF "$PROMPT_COLOR" 0 0 ||
tput setaf "$PROMPT_COLOR" 0 0
} 2>/dev/null )
;;
# If we have only eight colors, use bold green
8)
format=$( {
: "${PROMPT_COLOR:=2}"
tput AF "$PROMPT_COLOR" ||
tput setaf "$PROMPT_COLOR"
tput md || tput bold
} 2>/dev/null )
;;
# For all other terminals, we assume non-color (!), and we just
# use bold
*)
format=$( {
tput md || tput bold
} 2>/dev/null )
;;
esac
# String it all together
PS1='\['"$format"'\]'"$PS1"'\['"$reset"'\] '
PS2='> '
PS3='? '
PS4='+<$?> $LINENO:'
;;
# Revert to simple inexpensive prompts
off)
unset -v PROMPT_RETURN
PS1='\$ '
PS2='> '
PS3='? '
PS4='+ '
;;
# Show return status of previous command in angle brackets, if not zero
ret)
if ((PROMPT_RETURN > 0)) ; then
printf '<%u>' "$PROMPT_RETURN"
fi
;;
# Show the count of background jobs in curly brackets, if not zero
job)
local -i jobc
while read ; do
((jobc++))
done < <(jobs -p)
if ((jobc > 0)) ; then
printf '{%u}' "$jobc"
fi
;;
# Print error
*)
printf '%s: Unknown command %s\n' "$FUNCNAME" "$1" >&2
return 2
;;
esac
}
# Start with full-fledged prompt
prompt on
|