Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: new _popd
- X-seq: zsh-workers 8361
- From: Oliver Kiddle <opk@xxxxxxxxxxxxx>
- To: Zsh workers <zsh-workers@xxxxxxxxxxxxxx>
- Subject: PATCH: new _popd
- Date: Thu, 21 Oct 1999 15:52:14 +0100
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
The patch below adds completion for popd. The appropriate completion
was actually a chunk from _cd exactly so what I did was to chop it out
of _cd and call _popd from _cd.
The other result of this patch is that cd completion now works properly
with directories that have names starting with + or -.
--- Completion/Builtins/_cd.bak Thu Oct 21 14:32:59 1999
+++ Completion/Builtins/_cd Thu Oct 21 14:57:41 1999
@@ -25,41 +25,7 @@
rep=(${${rep#${PWD%%$words[2]*}}%${PWD#*$words[2]}})
_description expl replacement
(( ! $#rep )) || compadd "$expl[@]" $rep
-elif [[ $PREFIX = [-+]* ]]; then
- # pushd: just complete the numbers, but show the full directory list with
- # numbers.
- # For - we do the same thing, but reverse the numbering (other
- # way round if pushdminus is set).
- # The test is for pu* because I have an alias pu since I'm too
- # lazy to type pushd.
- IPREFIX=$PREFIX[1]
- PREFIX=$PREFIX[2,-1]
- local list lines revlines ret=1 i
-
- # get the list of directories with their canonical number
- # and turn the lines into an array, removing the current directory
- lines=( ${${(f)"$(dirs -v)"}##0*} )
- if [[ ( $IPREFIX = - && ! -o pushdminus ) ||
- ( $IPREFIX = + && -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=(${lines%% *})
- _description expl 'directory stack index'
- compadd "$expl[@]" -ld lines -V dirs -Q - "$list[@]" && ret=0
- [[ -z $compstate[list] ]] && compstate[list]=list && ret=0
- [[ -n $compstate[insert] ]] && compstate[insert]=menu && ret=0
-
- return ret
-elif [[ $PREFIX != (\~|/|./|../)* && $#cdpath -ne 0 ]]; then
+elif _popd || [[ $PREFIX != (\~|/|./|../)* && $#cdpath -ne 0 ]]; then
local tdir tdir2
# With cdablevars, we can convert foo/bar/... to ~foo/bar/... if
# there is no directory foo. In that case we could also complete
--- /dev/null Thu Oct 21 09:57:28 1999
+++ Completion/Builtins/_popd Thu Oct 21 14:48:07 1999
@@ -0,0 +1,40 @@
+#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.
+
+emulate -L zsh
+setopt extendedglob nonomatch
+
+[[ $PREFIX = [-+]* ]] || return 1
+
+local expl list lines revlines ret=1 i
+
+IPREFIX=$PREFIX[1]
+PREFIX=$PREFIX[2,-1]
+
+# get the list of directories with their canonical number
+# and turn the lines into an array, removing the current directory
+lines=( ${${(f)"$(dirs -v)"}##0*} )
+if [[ ( $IPREFIX = - && ! -o pushdminus ) ||
+ ( $IPREFIX = + && -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=(${lines%% *})
+_description expl 'directory stack index'
+compadd "$expl[@]" -ld lines -V dirs -Q - "$list[@]" && ret=0
+[[ -z $compstate[list] ]] && compstate[list]=list && ret=0
+[[ -n $compstate[insert] ]] && compstate[insert]=menu && ret=0
+
+return ret
Messages sorted by:
Reverse Date,
Date,
Thread,
Author