mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01:00
18512: fix 18508 properly this time.
This commit is contained in:
parent
9d071829ec
commit
78b02d9c03
7 changed files with 34 additions and 12 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2003-05-08 Peter Stephenson <pws@csr.com>
|
||||
|
||||
* 18512: README, Completion/Unix/Command/_cvs,
|
||||
Completion/Unix/Command/_perforce, Completion/Unix/Command/_rsync,
|
||||
Completion/Unix/Type/_path_files, Doc/Zsh/expn.yo: 18508 wasn't
|
||||
enough; the \\/ hack was documented and in use in the completion
|
||||
system. Change the documentation, mention the inconsistency in
|
||||
README and alter the completion system to hide the `/' a parameter
|
||||
so that it doesn't care.
|
||||
|
||||
2003-05-07 Oliver Kiddle <opk@zsh.org>
|
||||
|
||||
* users/6083: Completion/Unix/Command/_rlogin,
|
||||
|
|
|
@ -611,7 +611,7 @@ _cvs_loadstat () {
|
|||
|
||||
(( $+functions[_cvs_root] )) ||
|
||||
_cvs_root () {
|
||||
local cvspassfile id
|
||||
local cvspassfile id slash
|
||||
|
||||
typeset -gU _cvs_roots
|
||||
|
||||
|
@ -622,7 +622,8 @@ _cvs_root () {
|
|||
id="$(LC_ALL=C ls -l "$cvspassfile")"
|
||||
fi
|
||||
if [[ "$id" != "$_cvs_pass_id" ]]; then
|
||||
_cvs_roots=($_cvs_roots ${${${${(f)"$(<$cvspassfile)"}#/1 }%% *}/:2401\\//:/})
|
||||
slash=/
|
||||
_cvs_roots=($_cvs_roots ${${${${(f)"$(<$cvspassfile)"}#/1 }%% *}/:2401${slash}/:/})
|
||||
_cvs_pass_id="$id"
|
||||
fi
|
||||
fi
|
||||
|
@ -918,13 +919,13 @@ _cvs_existing_entries () {
|
|||
(( $+functions[_cvs_modified_entries] )) ||
|
||||
_cvs_modified_entries () {
|
||||
if _cvs_loadstat; then
|
||||
local expl match linedir realdir pat
|
||||
local expl match linedir realdir pat slash=/
|
||||
match=()
|
||||
: ${PREFIX:#(#b)(*/)(*)}
|
||||
linedir="$match[1]"
|
||||
realdir=${(e)~linedir}
|
||||
[[ -f "$realdir"CVS/Entries ]] &&
|
||||
[[ -n ${pat::="${(@j:|:)${(@)${(@)${(@)${(@)${(@)${(@M)${(@f)"$(<"$realdir"CVS/Entries)"}:#/*}#/}/\\/[^\\/]#\\///}%/[^/]#/[^/]#}:#${(j:|:)~${${${${(f)"$(LC_ALL=C builtin stat -gn +mtime -F '%a %b %e %T %Y' ${realdir}*(D) 2>/dev/null)"}##*/}/ //}//(#m)[][*?()<|^~#\\]/\\$MATCH}}}%%/*}//(#m)[][*?()<|^~#\\]/\\$MATCH}"} ]] &&
|
||||
[[ -n ${pat::="${(@j:|:)${(@)${(@)${(@)${(@)${(@)${(@M)${(@f)"$(<"$realdir"CVS/Entries)"}:#/*}#/}/${slash}[^${slash}]#${slash}//}%/[^/]#/[^/]#}:#${(j:|:)~${${${${(f)"$(LC_ALL=C builtin stat -gn +mtime -F '%a %b %e %T %Y' ${realdir}*(D) 2>/dev/null)"}##*/}/ //}//(#m)[][*?()<|^~#\\]/\\$MATCH}}}%%/*}//(#m)[][*?()<|^~#\\]/\\$MATCH}"} ]] &&
|
||||
_wanted files expl 'modified file' _path_files -g "$pat"
|
||||
else
|
||||
_cvs_existing_entries
|
||||
|
|
|
@ -906,7 +906,7 @@ _perforce_jobviews() {
|
|||
# by various logical operators. The `=' could be a comparison,
|
||||
# but we don't currently bother with that here; it's a bit cumbersome
|
||||
# to complete.
|
||||
local line type oldifs=$IFS IFS= key value
|
||||
local line type oldifs=$IFS IFS= key value slash=/
|
||||
local match mbegin mend
|
||||
# This is simply to split out two space-delimited words a backreferences.
|
||||
local m2words
|
||||
|
@ -962,7 +962,7 @@ _perforce_jobviews() {
|
|||
|
||||
for key in ${(k)p4fields}; do
|
||||
if [[ -n ${p4values[$key]} ]]; then
|
||||
valuespec+=("${key}:${p4fields[$key]}:(${p4values[$key]//\\// })")
|
||||
valuespec+=("${key}:${p4fields[$key]}:(${p4values[$key]//$slash/ })")
|
||||
elif [[ $key = job ]]; then
|
||||
# Nothing special for jobs; add our own completion.
|
||||
valuespec+=("${key}:Perforce job:_perforce_jobs")
|
||||
|
|
|
@ -31,13 +31,14 @@ elif [[ -prefix 1 *:: ]]; then
|
|||
_describe "remote modules" remmodules -S/
|
||||
|
||||
elif [[ -prefix 1 *: ]]; then
|
||||
local remfiles remdispf remdispd
|
||||
local remfiles remdispf remdispd slash
|
||||
|
||||
compset -P 1 '*:'
|
||||
|
||||
if zstyle -T ":completion:${curcontext}:" remote-access; then
|
||||
slash=/
|
||||
remfiles=(${(f)"$(ssh -a -x ${words[CURRENT]%:*} ls -d1F ${${${words[CURRENT
|
||||
]#*:}:h}/\\/(#e)/}/\* 2>/dev/null)"})
|
||||
]#*:}:h}/${slash}(#e)/}/\* 2>/dev/null)"})
|
||||
|
||||
remdispf=(${remfiles:#*/})
|
||||
remdispd=(${(M)remfiles:#*/})
|
||||
|
@ -46,7 +47,7 @@ elif [[ -prefix 1 *: ]]; then
|
|||
compadd -d remdispf ${${remfiles:#*/}/[*=@|](#e)/}
|
||||
|
||||
_wanted files expl 'remote files and directories' \
|
||||
compadd -S/ -d remdispd ${${(M)remfiles:#*/}/\\/(#e)/}
|
||||
compadd -S/ -d remdispd ${${(M)remfiles:#*/}/${slash}(#e)/}
|
||||
else
|
||||
_message -e remote-files 'remote files'
|
||||
fi
|
||||
|
|
|
@ -208,7 +208,8 @@ if [[ "$pre" = [^][*?#^\|\<\>\\]#(\`[^\`]#\`|\$)*/* && "$compstate[quote]" != \'
|
|||
eval 'realpath=${(e)~linepath}' 2>/dev/null
|
||||
[[ -z "$realpath" || "$realpath" = "$linepath" ]] && return 1
|
||||
pre="${pre#${linepath}}"
|
||||
i="${#linepath//[^\\/]}"
|
||||
i='[^/]'
|
||||
i="${#linepath//$i}"
|
||||
orig="${orig[1,(in:i:)/][1,-2]}"
|
||||
donepath=
|
||||
prepaths=( '' )
|
||||
|
|
|
@ -510,8 +510,8 @@ The var(pattern) may begin with a `tt(#)', in which case the
|
|||
var(pattern) must match at the start of the string, or `tt(%)', in
|
||||
which case it must match at the end of the string. The var(repl) may
|
||||
be an empty string, in which case the final `tt(/)' may also be omitted.
|
||||
To quote the final `tt(/)' in other cases it should be preceded by two
|
||||
backslashes (i.e., a quoted backslash); this is not necessary if the
|
||||
To quote the final `tt(/)' in other cases it should be preceded by a
|
||||
single backslash; this is not necessary if the
|
||||
`tt(/)' occurs inside a substituted parameter. Note also that the `tt(#)'
|
||||
and `tt(%)' are not active if they occur inside a substituted parameter,
|
||||
even at the start.
|
||||
|
|
9
README
9
README
|
@ -39,6 +39,15 @@ The `=prog' facility for expanding command paths (provided the EQUALS
|
|||
option is enabled, as it is by default) no longer expands aliases. It was
|
||||
felt this feature was underused and confusing.
|
||||
|
||||
In 4.0, a literal `/' was quoted in the `src' text of a substitution of the
|
||||
form `${foo/src/rep}' or ${foo//src/rep} with two backslashes. This was
|
||||
documented, but inconsistent with normal quoting conventions and poorly
|
||||
implemented. The `/' now requires only one backslash to quote it whether
|
||||
or not the expression occurs in double quotes. For example:
|
||||
% foo=word/bird
|
||||
% print ${foo/\//-} "${foo/\//+}"
|
||||
word-bird word+bird
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
|
|
Loading…
Reference in a new issue