summaryrefslogtreecommitdiffstats
path: root/Completion/Base/_tilde
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-11-12 15:28:24 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-11-12 15:28:24 +0000
commite6282df1155e8d9b08b2e518a452c1997973f1ce (patch)
treeb0c8ed7e8512cc4397ae7df6d138ea66147565b3 /Completion/Base/_tilde
parentzsh-workers/8617 (diff)
downloadzsh-e6282df1155e8d9b08b2e518a452c1997973f1ce.tar
zsh-e6282df1155e8d9b08b2e518a452c1997973f1ce.tar.gz
zsh-e6282df1155e8d9b08b2e518a452c1997973f1ce.tar.bz2
zsh-e6282df1155e8d9b08b2e518a452c1997973f1ce.tar.lz
zsh-e6282df1155e8d9b08b2e518a452c1997973f1ce.tar.xz
zsh-e6282df1155e8d9b08b2e518a452c1997973f1ce.tar.zst
zsh-e6282df1155e8d9b08b2e518a452c1997973f1ce.zip
manual/8630
Diffstat (limited to 'Completion/Base/_tilde')
-rw-r--r--Completion/Base/_tilde69
1 files changed, 41 insertions, 28 deletions
diff --git a/Completion/Base/_tilde b/Completion/Base/_tilde
index 0b81f75a1..afdca1222 100644
--- a/Completion/Base/_tilde
+++ b/Completion/Base/_tilde
@@ -4,40 +4,53 @@
# for you or if there are too many of them, you may want to use
# `compadd -qS/ - "$friends[@]"' or something like that.
-local d s dirs list lines revlines i
+local expl suf dirs list lines revlines i ret disp
if [[ "$SUFFIX" = */* ]]; then
ISUFFIX="/${SUFFIX#*/}$ISUFFIX"
SUFFIX="${SUFFIX%%/*}"
- s=(-S '')
+ suf=(-S '')
else
- s=(-qS/)
+ suf=(-qS/)
fi
-if [[ -prefix [-+] ]]; then
- lines=("$PWD" "$dirstack[@]")
- integer i
- if [[ ( -prefix - && ! -o pushdminus ) ||
- ( -prefix + && -o pushdminus ) ]]; then
- revlines=( $lines )
- for (( i = 1; i <= $#lines; i++ )); do
- lines[$i]="$((i-1)) -- ${revlines[-$i]}"
- done
- else
- for (( i = 1; i <= $#lines; i++ )); do
- lines[$i]="$((i-1)) -- ${lines[$i]}"
- done
+_tags any users named-directoriess directory-stack
+
+while _tags; do
+ _requested users && _users "$suf[@]" "$@" && ret=0
+ if _requested named-directories; then
+ _description expl 'named directory'
+ compadd "$suf[@]" "$expl[@]" "$@" - "${(@k)nameddirs}"
fi
- list=(${lines%% *})
- compset -P '[-+]'
- _description d 'directory stack'
- compadd "$d[@]" -V dirs -S/ -ld lines -Q - "$list[@]"
-else
- _users "$@"
- if (( $# )); then
- d=( "$@" )
- else
- _description d 'named directory'
+
+ if _requested directory-stack &&
+ { ! _style directory-stack prefix-needed yes ||
+ [[ "$PREFIX" = [-+]* ]] }; then
+ if _style directory-stack description yes; then
+ integer i
+
+ lines=("${PWD}" "${dirstack[@]}")
+
+ if [[ ( -prefix - && ! -o pushdminus ) ||
+ ( -prefix + && -o pushdminus ) ]]; then
+ revlines=( $lines )
+ for (( i = 1; i <= $#lines; i++ )); do
+ lines[$i]="$((i-1)) -- ${revlines[-$i]}"
+ done
+ else
+ for (( i = 1; i <= $#lines; i++ )); do
+ lines[$i]="$((i-1)) -- ${lines[$i]}"
+ done
+ fi
+ list=( ${PREFIX[1]}${^lines%% *} )
+ disp=( -ld lines )
+ else
+ list=( ${PREFIX[1]}{0..${#dirstack}} )
+ disp=()
+ fi
+
+ _description -V expl 'directory stack'
+ compadd "$expl[@]" "$suf[@]" "$disp[@]" -Q - "$list[@]" && ret=0
fi
- compadd "$d[@]" "$s[@]" - "${(@k)nameddirs}"
-fi
+ (( ret )) || return 0
+done