Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: completion-in-vared
- X-seq: zsh-workers 11048
- From: Sven Wischnowsky <wischnow@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: PATCH: completion-in-vared
- Date: Tue, 2 May 2000 10:17:10 +0200 (MET DST)
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
This moves the code that makes completion inside vared with no
$compcontext set behave like completing parameter values from _first
to _complete, as discussed lately.
Then there are some small cleanups/optimisations for _path_files. No
C-support for it yet, though.
Bye
Sven
Index: Completion/Base/_first
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Base/_first,v
retrieving revision 1.2
diff -u -r1.2 _first
--- Completion/Base/_first 2000/04/11 07:57:56 1.2
+++ Completion/Base/_first 2000/05/02 08:15:16
@@ -6,29 +6,6 @@
# This just gives some examples of things you might want to do here.
#
#
-# If you use the vared builtin and want completion in there to act the
-# way completion on the right hand side of assignments is done, add
-# (or un-comment) this code:
-#
-# if [[ -n $compstate[vared] ]]; then
-# if [[ $compstate[vared] = *\[* ]]; then
-# # vared on an array-element
-# compstate[parameter]=${compstate[vared]%%\[*}
-# compstate[context]=value
-# else
-# # vared on a parameter, let's see if it is an array
-# compstate[parameter]=$compstate[vared]
-# if [[ ${(tP)compstate[vared]} = *(array|assoc)* ]]; then
-# compstate[context]=array_value
-# else
-# compstate[context]=value
-# fi
-# fi
-# return
-# fi
-#
-#
-#
# Other things you can do here is to complete different things if the
# word on the line matches a certain pattern. This example allows
# completion of words from the history by adding two commas at the end
Index: Completion/Core/_complete
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Core/_complete,v
retrieving revision 1.2
diff -u -r1.2 _complete
--- Completion/Core/_complete 2000/04/01 20:43:43 1.2
+++ Completion/Core/_complete 2000/05/02 08:15:16
@@ -33,6 +33,24 @@
fi
fi
+# If we are inside `vared' and we don't have a $compcontext, we treat
+# this like a parameter assignment. Which it is.
+
+if [[ -n $compstate[vared] ]]; then
+ if [[ $compstate[vared] = *\[* ]]; then
+ # vared on an array-element
+ compstate[parameter]=${compstate[vared]%%\[*}
+ compstate[context]=value
+ else
+ # vared on a parameter, let's see if it is an array
+ compstate[parameter]=$compstate[vared]
+ if [[ ${(tP)compstate[vared]} = *(array|assoc)* ]]; then
+ compstate[context]=array_value
+ else
+ compstate[context]=value
+ fi
+ fi
+fi
# For arguments and command names we use the `_normal' function.
Index: Completion/Core/_path_files
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Core/_path_files,v
retrieving revision 1.10
diff -u -r1.10 _path_files
--- Completion/Core/_path_files 2000/04/26 06:12:25 1.10
+++ Completion/Core/_path_files 2000/05/02 08:15:17
@@ -5,8 +5,8 @@
local linepath realpath donepath prepath testpath exppath skips skipped
local tmp1 tmp2 tmp3 tmp4 i orig eorig pre suf tpre tsuf opre osuf cpre
-local pats haspats=no ignore pfxsfx rem remt sopt gopt opt
-local nm=$compstate[nmatches] menu matcher mopts atmp sort match
+local pats haspats ignore pfxsfx remt sopt gopt opt sdirs ignpar
+local nm=$compstate[nmatches] menu matcher mopts sort match
typeset -U prepaths exppaths
@@ -111,7 +111,7 @@
[[ "$tmp1" = *rev* ]] && sort[1]=O
if [[ "$sort" = on ]]; then
- sort=''
+ sort=
else
mopts=( "${(@)mopts/#-J/-V}" )
@@ -139,6 +139,11 @@
skips='((.|..)/)##'
fi
+zstyle -s ":completion:${curcontext}:paths" special-dirs sdirs &&
+ [[ "$sdirs" = (yes|true|on|1) ]] && sdirs=yes
+
+zstyle -s ":completion:${curcontext}:files" ignore-parents ignpar
+
# We get the prefix and the suffix from the line and save the whole
# original string. Then we see if we will do menucompletion.
@@ -202,7 +207,7 @@
[[ "$realpath" = "$linepath" ]] && return 1
pre="${pre#*/}"
orig="${orig#*/}"
- donepath=''
+ donepath=
prepaths=( '' )
elif [[ "$pre" = *\$*/* ]]; then
@@ -218,14 +223,14 @@
pre="${pre#${linepath}}"
i="${#linepath//[^\\/]}"
orig="${orig[1,(in:i:)/][1,-2]}"
- donepath=''
+ donepath=
prepaths=( '' )
else
# If the string does not start with a `~' we don't remove a prefix from the
# string.
- linepath=''
- realpath=''
+ linepath=
+ realpath=
if [[ "$pre[1]" = / ]]; then
# If it is a absolute path name, we remove the first slash and put it in
@@ -241,7 +246,7 @@
# `./' or `../' in which case we don't use the paths from `-W'.
[[ "$pre" = (.|..)/* ]] && prepaths=( '' )
- donepath=''
+ donepath=
fi
fi
@@ -271,7 +276,7 @@
if [[ "$tpre" = */* ]]; then
PREFIX="${tpre%%/*}"
- SUFFIX=""
+ SUFFIX=
else
PREFIX="${tpre}"
SUFFIX="${tsuf%%/*}"
@@ -286,11 +291,10 @@
else
tmp1=( ${^tmp1}${skipped}*(-/) )
fi
- if [[ -o globdots || "$PREFIX" = .* ]] &&
- zstyle -s ":completion:${curcontext}:paths" special-dirs atmp; then
- if [[ "$atmp" = (yes|true|1|on) ]]; then
+ if [[ -n "$sdirs" && ( -o globdots || "$PREFIX" = .* ) ]]; then
+ if [[ "$sdirs" = yes ]]; then
tmp1=( "$tmp1[@]" . .. )
- elif [[ "$atmp" = .. ]]; then
+ elif [[ "$sdirs" = .. ]]; then
tmp1=( "$tmp1[@]" .. )
fi
fi
@@ -300,12 +304,12 @@
else
tmp1=( ${^tmp1}${skipped}${^~pats} )
fi
- if [[ ( "$sopt" = *[/f]* || "$pats" = *\([^[:blank:]]#/[^[:blank:]]#\)* ) &&
- ( -o globdots || "$PREFIX" = .* ) ]] &&
- zstyle -s ":completion:${curcontext}:paths" special-dirs atmp; then
- if [[ "$atmp" = (yes|true|1|on) ]]; then
+ if [[ -n "$sdirs" &&
+ ( "$sopt" = *[/f]* || "$pats" = *\([^[:blank:]]#/[^[:blank:]]#\)* ) &&
+ ( -o globdots || "$PREFIX" = .* ) ]]; then
+ if [[ "$sdirs" = yes ]]; then
tmp1=( "$tmp1[@]" . .. )
- elif [[ "$atmp" = .. ]]; then
+ elif [[ "$sdirs" = .. ]]; then
tmp1=( "$tmp1[@]" .. )
fi
fi
@@ -368,8 +372,7 @@
###
### tmp1=( "$tmp2[@]" )
### break
- elif [[ "$haspats" = no && -z "$tpre$tsuf" &&
- "$pre" = */ && -z "$suf" ]]; then
+ elif [[ -n "$haspats" && -z "$tpre$tsuf$suf" && "$pre" = */ ]]; then
PREFIX="${opre}"
SUFFIX="${osuf}"
compadd -nQS '' - "$linepath$donepath$orig"
@@ -378,11 +381,11 @@
continue 2
fi
- if [[ -z "$_comp_no_ignore" && "$tpre$tsuf" != */* && $#tmp1 -ne 0 ]] &&
- zstyle -s ":completion:${curcontext}:files" ignore-parents rem &&
- [[ ( "$rem" != *dir* || "$pats" = '*(-/)' ) &&
- ( "$rem" != *..* || "$tmp1" = *../* ) ]]; then
- if [[ "$rem" = *parent* ]]; then
+ if [[ -n "$ignpar" && -z "$_comp_no_ignore" &&
+ "$tpre$tsuf" != */* && $#tmp1 -ne 0 &&
+ ( "$ignpar" != *dir* || "$pats" = '*(-/)' ) &&
+ ( "$ignpar" != *..* || "$tmp1" = *../* ) ]]; then
+ if [[ "$ignpar" = *parent* ]]; then
for i in ${(M)^tmp1:#*/*}(-/); do
remt="${${i#$prepath$realpath$donepath}%/*}"
while [[ "$remt" = */* &&
@@ -393,7 +396,7 @@
_comp_ignore=( "$_comp_ignore[@]" "${(q)i}" )
done
fi
- if [[ "$rem" = *pwd* ]]; then
+ if [[ "$ignpar" = *pwd* ]]; then
for i in ${^tmp1}(-/); do
[[ "$i" -ef "$PWD" ]] && _comp_ignore=( "$_comp_ignore[@]" "${(q)i}" )
done
@@ -407,7 +410,7 @@
tpre="${tpre#*/}"
elif [[ "$tsuf" = */* ]]; then
tpre="${tsuf#*/}"
- tsuf=""
+ tsuf=
else
break
fi
@@ -475,7 +478,7 @@
if [[ -n $menu || -z "$compstate[insert]" ]] ||
! zstyle -t ":completion:${curcontext}:paths" expand suffix; then
(( tmp4 )) && zstyle -t ":completion:${curcontext}:paths" ambiguous &&
- compstate[to_end]=''
+ compstate[to_end]=
if [[ "$tmp3" = */* ]]; then
compadd -Qf "$mopts[@]" -p "$linepath$tmp2" -s "/${tmp3#*/}" \
-W "$prepath$realpath$testpath" \
@@ -489,11 +492,11 @@
fi
else
if [[ "$tmp3" = */* ]]; then
- atmp=( -Qf "$mopts[@]" -p "$linepath$tmp2"
+ tmp3=( -Qf "$mopts[@]" -p "$linepath$tmp2"
-W "$prepath$realpath$testpath"
"$pfxsfx[@]" -M "r:|/=* r:|=*" )
for i in "$tmp1[@]"; do
- compadd "$atmp[@]" -s "/${i#*/}" - "${i%%/*}"
+ compadd "$tmp3[@]" -s "/${i#*/}" - "${i%%/*}"
done
else
compadd -Qf "$mopts[@]" -p "$linepath$tmp2" \
@@ -510,7 +513,7 @@
# strings collected after the loop.
if [[ "$tmp3" != */* ]]; then
- tmp4=""
+ tmp4=
break
fi
@@ -528,17 +531,17 @@
elif [[ "$tsuf" = */* ]]; then
cpre="${cpre}${tpre}/"
tpre="${tsuf#*/}"
- tsuf=""
+ tsuf=
else
- tpre=""
- tsuf=""
+ tpre=
+ tsuf=
fi
done
if [[ -z "$tmp4" ]]; then
if [[ "$osuf" = */* ]]; then
PREFIX="${opre}${osuf}"
- SUFFIX=""
+ SUFFIX=
else
PREFIX="${opre}"
SUFFIX="${osuf}"
--
Sven Wischnowsky wischnow@xxxxxxxxxxxxxxxxxxxxxxx
Messages sorted by:
Reverse Date,
Date,
Thread,
Author