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
|
#compdef -value-,PROMPT,-default- -value-,PROMPT2,-default- -value-,PROMPT3,-default- -value-,PROMPT4,-default- -value-,RPROMPT,-default- -value-,RPROMPT2,-default- -value-,PS1,-default- -value-,PS2,-default- -value-,PS3,-default- -value-,PS4,-default- -value-,RPS1,-default- -value-,RPS2,-default- -value-,SPROMPT,-default-
local -a specs
local expl paren
if [[ -n $compstate[quote] ]]; then
paren='('
else
paren='\('
fi
if [[ $PREFIX == *%(-|)<-># ]]; then
specs=(
'm:hostname up to first .'
'_:status of parser'
'd:current working directory'
'/:current working directory'
'~:current working directory, with ~ replacement'
'N:name of current script or shell function'
'x:name of file containing code being executed'
'c:deprecated'
'.:deprecated'
'C:deprecated'
'F:start using fg color'
'K:start using bg color'
'G:counts as extra character inside %{...%}'
)
if [[ $PREFIX == *% ]]; then
if [[ $service == -value-,SPROMPT,* ]]; then
specs+=(
'r:suggested correction'
'R:corrected string'
)
fi
specs+=(
'%:A %'
'):A )'
'l:current line (tty) with /dev/tty stripped'
'M:full hostname'
'n:username'
'y:current line (tty)'
'#:a # when root, % otherwise'
'?:return status of last command'
'h:current history event number'
'!:current history event number'
'i:current line number'
'I:current source line number'
'j:number of jobs'
'L:$SHLVL'
'D:date in yy-mm-dd format'
'T:current time of day, 24-hour format'
't:current time of day, 12-hour am/pm format'
'@:current time of day, 12-hour am/pm format'
'*:current time of day, 24-hour format with seconds'
'w:the date in day-dd format'
'W:the date in mm/dd/yy format'
'D{}:format string like strftime'
'B:start bold'
'b:stop bold'
'E:clear to end of line'
'U:start underline'
'u:stop underline'
'S:start standout'
's:stop standout'
'f:reset fg color'
'k:reset bg color'
'{:start literal escape sequence'
'}:stop literal escape sequence'
'v:value from $psvar array'
'(:ternary expression %(x.true-string.false-string)'
'<<:truncation from left %len<string<'
'>>:truncation from right %len>string>'
'[]:truncation from who knows where'
)
fi
compset -P "*"
_describe -t prompt-format-specifier 'prompt format specifier' specs -S ''
_message -e prompt-format-specifier number
elif [[ $PREFIX == *%$paren(-|)<-># ]]; then
specs=(
'!:running with privileges'
'#:effective uid'
'?:exit status'
'_:at least n shell constructs started'
'C:at least n path elements'
'/:at least n path elements'
'.:at least n path elements'
'c:at least n path elements'
'~:at least n path elements'
'D:month'
'd:day of month'
'g:effective gid'
'j:number of jobs'
'L:SHLVL'
'l:number of characters already printed'
'S:SECONDS parameter at least n'
'T:current hour'
't:current minute'
'v:psvar has at least n elements'
'V:element n of psvar is set and non-empty'
'w:day of week (Sunday = 0)'
)
compset -P "*"
_describe -t ternary-prompt-expression 'ternary prompt format test character' specs -S ''
_message -e ternary-prompt-expression number
else
_describe -t prompt-format-specifier 'prompt format specifier' '(%)' -S ''
_default "$@"
fi
|