blob: 28a7c9fddc32aa8371933414d34f5ca46e6e4e44 (
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
printf '%s\n' PS1="$PS1" PS2="$PS2" PS3="$PS3" PS4="$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
typeset -i colors
colors=$( {
tput Co || tput colors
} 2>/dev/null )
# Prepare reset code
typeset reset
reset=$( {
tput me || tput sgr0
} 2>/dev/null )
# Decide prompt color formatting based on color availability
typeset 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)
typeset -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
|