blob: 95d342538f14ef0b6c2e78bdc9bba5a2b4966eb1 (
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
|
#compdef -tilde-
# We use all named directories and user names here. If this is too slow
# for you or if there are too many of them, you may want to use
# `compgen -k friends -qS/' or something like that. To get all user names
# if there are no matches in the `friends' array, add
# `(( compstate[nmatches] )) || compgen -nu -qS/'
# below that.
setopt localoptions extendedglob
local d s dirs list lines
if [[ "$SUFFIX" = */* ]]; then
ISUFFIX="/${SUFFIX#*/}$ISUFFIX"
SUFFIX="${SUFFIX%%/*}"
s=(-S '')
else
s=(-qS/)
fi
if [[ -prefix [-+] ]]; then
lines=(${(f)"$(dirs -v)"})
if [[ ( -prefix - && ! -o pushdminus ) ||
( -prefix + && -o pushdminus ) ]]; then
integer tot i
for (( i = 1, tot = $#lines-1; i <= $#lines; i++, tot-- )); do
lines[$i]="$tot -- ${lines[$i]##[0-9]#[ ]#}"
done
else
for (( i = 1, tot = 0; i <= $#lines; i++, tot++ )); do
lines[$i]="$tot -- ${lines[$i]##[0-9]#[ ]#}"
done
fi
list=(${lines%% *})
compset -P '[-+]'
_description d 'directory stack'
compadd "$d[@]" -ld lines -Q - "$list[@]"
else
if (( $# )); then
d=( "$@" )
else
_description d 'user or named directory'
fi
compgen "$d[@]" -nu "$s[@]"
fi
|