summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2001-04-02 11:20:31 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2001-04-02 11:20:31 +0000
commit0542703216eacbd0caff5517c4510e8069be88c4 (patch)
treea65a260b3565da9cbf68da2a69ed0c398fba2fa9
parent7f37493ac37902ad0c1d1aa49c16f73bce451157 (diff)
downloadzsh-0542703216eacbd0caff5517c4510e8069be88c4.tar.gz
zsh-0542703216eacbd0caff5517c4510e8069be88c4.zip
moved from Completion/Builtins/_popd
-rw-r--r--Completion/Zsh/Type/_directory_stack51
1 files changed, 51 insertions, 0 deletions
diff --git a/Completion/Zsh/Type/_directory_stack b/Completion/Zsh/Type/_directory_stack
new file mode 100644
index 000000000..f79aa947f
--- /dev/null
+++ b/Completion/Zsh/Type/_directory_stack
@@ -0,0 +1,51 @@
+#compdef popd
+
+# This just completes the numbers after +, showing the full directory list
+# with numbers. For - we do the same thing, but reverse the numbering (other
+# way round if pushdminus is set). Note that this function is also called
+# from _cd for cd and pushd.
+
+setopt localoptions nonomatch
+
+local expl list lines revlines disp suf
+
+if [[ "$SUFFIX" = */* ]]; then
+ ISUFFIX="/${SUFFIX#*/}$ISUFFIX"
+ SUFFIX="${SUFFIX%%/*}"
+ suf=(-S '')
+else
+ suf=(-qS/)
+fi
+
+### we decided against this, for now...
+#! zstyle -T ":completion:${curcontext}:directory-stack" prefix-needed ||
+
+[[ $PREFIX = [-+]* ]] || return 1
+
+if zstyle -T ":completion:${curcontext}:directory-stack" verbose; then
+ # get the list of directories with their canonical number
+ # and turn the lines into an array, removing the current directory
+ lines=("${dirstack[@]}")
+
+ if [[ ( $PREFIX[1] = - && ! -o pushdminus ) ||
+ ( $PREFIX[1] = + && -o pushdminus ) ]]; then
+ integer i
+ revlines=( $lines )
+ for (( i = 1; i <= $#lines; i++ )); do
+ lines[$i]="$((i-1)) -- ${revlines[-$i]##[0-9]#[ ]#}"
+ done
+ else
+ for (( i = 1; i <= $#lines; i++ )); do
+ lines[$i]="$i -- ${lines[$i]##[0-9]#[ ]#}"
+ done
+ fi
+ # get the array of numbers only
+ list=( ${PREFIX[1]}${^lines%% *} )
+ disp=( -ld lines )
+else
+ list=( ${PREFIX[1]}{0..${#dirstack}} )
+ disp=()
+fi
+
+_wanted -V directory-stack expl 'directory stack' \
+ compadd "$@" "$suf[@]" "$disp[@]" -Q -a list