* Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
@ 1999-08-02 9:47 Sven Wischnowsky
0 siblings, 0 replies; 9+ messages in thread
From: Sven Wischnowsky @ 1999-08-02 9:47 UTC (permalink / raw)
To: zsh-workers
Bart Schaefer wrote:
> There's still a bug, which may be a more general completion problem: If the
> initial prefix of the completion contains a metacharacter (such as '#') that
> is inserted quoted, the completer thereafter does not match. E.g.
>
> zsh% cvs add <C-d>
> F#bar F#baz
> zsh% cvs add <TAB>
> zsh% cvs add F\#<TAB>
> (BEEP)
> zsh% cvs add F\#<C-d>
> (BEEP)
> zsh% cvs add F\#<C-b><DEL><C-e>
> zsh% cvs add F#<C-d>
> F#bar F#baz
> zsh% cvs add F#<TAB>
> zsh% cvs add F\#
Indeed. Due to the changed quoting rules in the completion code, we
should do the quoting of ppre and psuf in addmatches() earlier and
avoid quoting lpre/lsuf a second time altogether.
Bye
Sven
diff -u os/Zle/zle_tricky.c Src/Zle/zle_tricky.c
--- os/Zle/zle_tricky.c Mon Aug 2 11:44:54 1999
+++ Src/Zle/zle_tricky.c Mon Aug 2 11:42:26 1999
@@ -3726,7 +3726,7 @@
addmatches(Cadata dat, char **argv)
{
char *s, *ms, *lipre = NULL, *lisuf = NULL, *lpre = NULL, *lsuf = NULL;
- char **aign = NULL, **dparr = NULL, oaq = autoq;
+ char **aign = NULL, **dparr = NULL, oaq = autoq, *oppre = dat->ppre;
char *oqp = qipre, *oqs = qisuf, qc;
int lpl, lsl, pl, sl, bpl, bsl, llpl = 0, llsl = 0, nm = mnum;
int oisalt = 0, isalt, isexact, doadd, ois = instring, oib = inbackt;
@@ -3847,12 +3847,21 @@
else if (lisuf)
dat->isuf = lisuf;
if (dat->ppre) {
- dat->ppre = dupstring(dat->ppre);
+ if (!(dat->aflags & CAF_QUOTE)) {
+ dat->ppre = quotename(dat->ppre, NULL);
+ if ((dat->flags & CMF_FILE) &&
+ dat->ppre[0] == '\\' && dat->ppre[1] == '~')
+ chuck(dat->ppre);
+ } else
+ dat->ppre = dupstring(dat->ppre);
lpl = strlen(dat->ppre);
} else
lpl = 0;
if (dat->psuf) {
- dat->psuf = dupstring(dat->psuf);
+ if (!(dat->aflags & CAF_QUOTE))
+ dat->psuf = quotename(dat->psuf, NULL);
+ else
+ dat->psuf = dupstring(dat->psuf);
lsl = strlen(dat->psuf);
} else
lsl = 0;
@@ -3877,7 +3886,7 @@
dat->pre = dupstring(dat->pre);
if (dat->suf)
dat->suf = dupstring(dat->suf);
- if (!dat->prpre && (dat->prpre = dat->ppre)) {
+ if (!dat->prpre && (dat->prpre = oppre)) {
singsub(&(dat->prpre));
untokenize(dat->prpre);
} else
@@ -3901,22 +3910,6 @@
dat->rems = NULL;
} else if (dat->rems)
dat->rems = dupstring(dat->rems);
-
- /* Probably quote the prefix and suffix for testing. */
- if (!(dat->aflags & CAF_QUOTE)) {
- if (!cp && (dat->aflags & CAF_MATCH)) {
- lpre = quotename(lpre, NULL);
- lsuf = quotename(lsuf, NULL);
- }
- if (dat->ppre) {
- dat->ppre = quotename(dat->ppre, NULL);
- if ((dat->flags & CMF_FILE) &&
- dat->ppre[0] == '\\' && dat->ppre[1] == '~')
- chuck(dat->ppre);
- }
- if (dat->psuf)
- dat->psuf = quotename(dat->psuf, NULL);
- }
}
/* Walk through the matches given. */
for (; (s = *argv); argv++) {
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
1999-07-27 14:11 ` Tanaka Akira
@ 1999-07-28 16:05 ` Tanaka Akira
0 siblings, 0 replies; 9+ messages in thread
From: Tanaka Akira @ 1999-07-28 16:05 UTC (permalink / raw)
To: zsh-workers
In article <rsqwvvmdvxe.fsf@crane.jaist.ac.jp>,
Tanaka Akira <akr@jaist.ac.jp> writes:
> I found a problem of return status of _cvstargets, etc.
Hm. When entries has just one elements, the argument such as
'(_cvs)' is supplied to compgen -g and it is treated as glob
qualifiers. The completer should not use parenthesises in this case.
This patch also tries to complete arguments for some options.
--- Completion/User/_cvs Wed Jul 28 14:37:08 1999
+++ Completion/User/_cvs Wed Jul 28 14:45:23 1999
@@ -35,16 +35,17 @@
_cvstargets
;;
annotate|ann) # "+lr:D:fR"
- _complete_opts l '' r: '' D: '' f '' R '' || _cvstargets
+ _complete_opts l '' r: "$complete_r" D: "$complete_D" f '' R '' ||
+ _cvstargets
;;
checkout|co|get) # "+ANnk:d:flRpQqcsr:D:j:P"
- _complete_opts A '' N '' n '' k: "$complete_k" d: '' f '' l '' R ''\
- p '' Q '' q '' c '' s '' r: "$complete_r" D: "$complete_D" j: '' \
- P '' ||
+ _complete_opts A '' N '' n '' k: "$complete_k" d: '_files -/' f '' \
+ l '' R '' p '' Q '' q '' c '' s '' r: "$complete_r" D: "$complete_D" \
+ j: "$complete_r" P '' ||
_cvsrepositories
;;
commit|ci|com) # "+nlRm:fF:r:"
- _complete_opts n '' l '' R '' m: "$complete_m" f '' F: '' \
+ _complete_opts n '' l '' R '' m: "$complete_m" f '' F: _files \
r: "$complete_r" ||
_cvstargets_modified
;;
@@ -56,15 +57,15 @@
_cvstargets_modified || _cvstargets
;;
edit) # "+lRa:"
- _complete_opts l '' R '' a: '' || _cvstargets
+ _complete_opts l '' R '' a: 'compadd edit unedit commit all none' ||
+ _cvstargets
;;
editors) # "+lR"
_complete_opts l '' R '' || _cvstargets
;;
- export|exp|ex) # "+ANnk:d:flRpQqcsr:D:j:P"
- _complete_opts A '' N '' n '' k: "$complete_k" d: '' f '' l '' R '' \
- p '' Q '' q '' c '' s '' r: "$complete_r" D: "$complete_D" j: '' \
- P '' ||
+ export|exp|ex) # "+Nnk:d:flRQqr:D:"
+ _complete_opts N '' n '' k: "$complete_k" d: '_files -/' f '' l '' \
+ R '' Q '' q '' r: "$complete_r" D: "$complete_D" ||
_cvsrepositories
;;
history|hi|his) # "+Tacelow?D:b:f:m:n:p:r:t:u:x:X:z:"
@@ -74,7 +75,7 @@
_cvstargets
;;
import|im|imp) # "+Qqdb:m:I:k:W:"
- _complete_opts Q '' q '' d '' b: '' m: "$complete_m" I: '' \
+ _complete_opts Q '' q '' d '' b: '' m: "$complete_m" I: _files \
k: "$complete_k" W: '' ||
case $[CURRENT-com] in
1) _cvsrepositories;;
@@ -113,8 +114,8 @@
;;
update|up|upd) # "+ApPflRQqduk:r:D:j:I:W:"
_complete_opts A '' p '' P '' f '' l '' R '' Q '' q '' d '' u '' \
- k: "$complete_k" r: "$complete_r" D: "$complete_D" j: '' I: '' \
- W: '' ||
+ k: "$complete_k" r: "$complete_r" D: "$complete_D" j: "$complete_r" \
+ I: '' W: '' ||
_cvstargets
;;
watch)
@@ -126,7 +127,9 @@
_complete_opts l '' R '' || _cvstargets
;;
add|remove) # "+lRa:"
- _complete_opts l '' R '' a: '' || _cvstargets
+ _complete_opts l '' R '' \
+ a: 'compadd edit unedit commit all none' || \
+ _cvstargets
;;
esac
fi
@@ -247,11 +250,11 @@
_cvsdirs () {
if [[ -d ${pref}CVS ]]; then
_cvsdirentries
- if (( $#entries )); then
- compgen "$@" -g '('${(j:|:)entries:q}')'
- else
- false
- fi
+ case $#entries in
+ 0) false;;
+ 1) compgen "$@" -g "${entries:q}";;
+ *) compgen "$@" -g '('${(j:|:)entries:q}')';;
+ esac
else
_files
fi
@@ -262,11 +265,11 @@
_cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsentries
- if (( $#entries )); then
- compgen -g '('${(j:|:)entries:q}')'
- else
- false
- fi
+ case $#entries in
+ 0) false;;
+ 1) compgen -g "${entries:q}";;
+ *) compgen -g '('${(j:|:)entries:q}')';;
+ esac
else
_files
fi
@@ -277,11 +280,11 @@
_cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsentries_modified
- if (( $#entries )); then
- compgen -g '('${(j:|:)entries:q}')'
- else
- false
- fi
+ case $#entries in
+ 0) false;;
+ 1) compgen -g "${entries:q}";;
+ *) compgen -g '('${(j:|:)entries:q}')';;
+ esac
else
_files
fi
--
Tanaka Akira
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
1999-07-27 13:58 ` Tanaka Akira
@ 1999-07-27 14:11 ` Tanaka Akira
1999-07-28 16:05 ` Tanaka Akira
0 siblings, 1 reply; 9+ messages in thread
From: Tanaka Akira @ 1999-07-27 14:11 UTC (permalink / raw)
To: zsh-workers
In article <rsqzp0idwjv.fsf@crane.jaist.ac.jp>,
Tanaka Akira <akr@jaist.ac.jp> writes:
> My latest version of _cvs is follows:
I found a problem of return status of _cvstargets, etc.
Index: Completion/User/_cvs
===================================================================
RCS file: /projects/zsh/zsh/Completion/User/_cvs,v
retrieving revision 1.1.1.1.2.7
diff -u -F^( -r1.1.1.1.2.7 _cvs
--- _cvs 1999/07/27 11:48:15 1.1.1.1.2.7
+++ _cvs 1999/07/27 14:10:03
@@ -249,6 +249,8 @@
_cvsdirentries
if (( $#entries )); then
compgen "$@" -g '('${(j:|:)entries:q}')'
+ else
+ false
fi
else
_files
@@ -262,6 +264,8 @@
_cvsentries
if (( $#entries )); then
compgen -g '('${(j:|:)entries:q}')'
+ else
+ false
fi
else
_files
@@ -275,6 +279,8 @@
_cvsentries_modified
if (( $#entries )); then
compgen -g '('${(j:|:)entries:q}')'
+ else
+ false
fi
else
_files
--
Tanaka Akira
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
1999-07-27 13:49 ` Bart Schaefer
@ 1999-07-27 13:58 ` Tanaka Akira
1999-07-27 14:11 ` Tanaka Akira
0 siblings, 1 reply; 9+ messages in thread
From: Tanaka Akira @ 1999-07-27 13:58 UTC (permalink / raw)
To: zsh-workers
In article <990727134938.ZM26449@candle.brasslantern.com>,
"Bart Schaefer" <schaefer@candle.brasslantern.com> writes:
> Neither 7292 nor 7293 applied cleanly to the _cvs file from 7290. I don't
> have time this morning to attempt to figure it out.
Sorry, It's mistake.
My latest version of _cvs is follows:
------------------------------------------------------------
#compdef cvs
_cvs () {
setopt localoptions extendedglob
typeset -A commands
commands=(add "ad new" admin "adm rcs" annotate ann
checkout "co get" commit "ci com" diff "di dif"
edit "" editors "" export "exp ex"
history "hi his" import "im imp" init ""
log "lo rlog" login "logon lgn" logout ""
rdiff patch release "re rel" remove "rm delete"
status "st stat" rtag "rt rfreeze" tag "ta freeze"
unedit "" update "up upd" watch ""
watchers "")
local com="${words[(i)(${(j:|:)${(kv)=commands}})]}"
local showlist='compstate[list]=list; compstate[force_list]=yes'
local showhint="$showlist ; compstate[insert]=''"
local complete_D="compadd today yesterday week\\ ago month\\ ago"
local complete_k="compadd kv kvl k o b v"
local complete_r="_cvsrevisions"
local complete_m="compadd -UX 'Enter log message' -n ''; $showhint"
if (( com < CURRENT )); then
case "$words[$com]" in
add|ad|new) # "+k:m:"
_complete_opts k: "$complete_k" m: "$complete_m" || _cvsaddp
;;
admin|adm|rcs) # "+ib::c:a:A:e:l::u::LUn:N:m:o:s:t::IqxV:k:"
_complete_opts i '' b:: '' c: '' a: '' A: '' e: '' l:: '' u:: '' L '' \
U '' n: '' N: '' m: "$complete_m" o: '' s: '' t:: '' I '' q '' x '' \
V: '' k: "$complete_k" ||
_cvstargets
;;
annotate|ann) # "+lr:D:fR"
_complete_opts l '' r: '' D: '' f '' R '' || _cvstargets
;;
checkout|co|get) # "+ANnk:d:flRpQqcsr:D:j:P"
_complete_opts A '' N '' n '' k: "$complete_k" d: '' f '' l '' R ''\
p '' Q '' q '' c '' s '' r: "$complete_r" D: "$complete_D" j: '' \
P '' ||
_cvsrepositories
;;
commit|ci|com) # "+nlRm:fF:r:"
_complete_opts n '' l '' R '' m: "$complete_m" f '' F: '' \
r: "$complete_r" ||
_cvstargets_modified
;;
diff|di|dif) # "+abcdefhilnpstuw0123456789BHNRC:D:F:I:L:U:V:W:k:r:"
_complete_opts a '' b '' c '' d '' e '' f '' h '' i '' l '' n '' p '' \
s '' t '' u '' w '' 0 '' 1 '' 2 '' 3 '' 4 '' 5 '' 6 '' 7 '' 8 '' \
9 '' B '' H '' N '' R '' C: '' D: "$complete_D" F: '' I: '' L: '' \
U: '' V: '' W: '' k: "$complete_k" r: "$complete_r" ||
_cvstargets_modified || _cvstargets
;;
edit) # "+lRa:"
_complete_opts l '' R '' a: '' || _cvstargets
;;
editors) # "+lR"
_complete_opts l '' R '' || _cvstargets
;;
export|exp|ex) # "+ANnk:d:flRpQqcsr:D:j:P"
_complete_opts A '' N '' n '' k: "$complete_k" d: '' f '' l '' R '' \
p '' Q '' q '' c '' s '' r: "$complete_r" D: "$complete_D" j: '' \
P '' ||
_cvsrepositories
;;
history|hi|his) # "+Tacelow?D:b:f:m:n:p:r:t:u:x:X:z:"
_complete_opts T '' a '' c '' e '' l '' o '' w '' \? '' \
D: "$complete_D" b: '' f: '' m: "$complete_m" n: '' p: '' r: '' \
t: '' u: '' x: '' X: '' z: '' ||
_cvstargets
;;
import|im|imp) # "+Qqdb:m:I:k:W:"
_complete_opts Q '' q '' d '' b: '' m: "$complete_m" I: '' \
k: "$complete_k" W: '' ||
case $[CURRENT-com] in
1) _cvsrepositories;;
2) compadd -UX "Enter vendor tag name" -n '' && eval "$showhint";;
3) compadd -UX "Enter release tag name" -n '' && eval "$showhint";;
*) compadd -UX "No futher arguments used" -n '' && eval "$showhint";;
esac
;;
init)
break
;;
login|logon|lgn|logout)
_complete_opts || _files
;;
rdiff|patch|pa) # "+V:k:cuftsQqlRD:r:"
_complete_opts V: '' k: "$complete_k" c '' u '' f '' t '' s '' Q '' \
q '' l '' R '' D: "$complete_D" r: "$complete_r" ||
_cvstargets
;;
release|re|rel) # "+Qdq"
_complete_opts Q '' d '' q '' || _files -/
;;
remove|rm|delete) # "+flR"
_complete_opts f '' l '' R '' || _cvsremovep
;;
status|st|stat) # "+vlR"
_complete_opts v '' l '' R '' || _cvstargets
;;
tag|ta|freeze) # "+FQqlRcdr:D:bf"
_complete_opts F '' Q '' q '' l '' R '' c '' d '' r: "$complete_r" \
D: "$complete_D" b '' f '' ||
_cvstargets
;;
unedit) # "+lR"
_complete_opts l '' R '' || _cvstargets
;;
update|up|upd) # "+ApPflRQqduk:r:D:j:I:W:"
_complete_opts A '' p '' P '' f '' l '' R '' Q '' q '' d '' u '' \
k: "$complete_k" r: "$complete_r" D: "$complete_D" j: '' I: '' \
W: '' ||
_cvstargets
;;
watch)
if (( CURRENT == com + 1 )); then
compadd on off add remove
else
case "$words[com+1]" in
on|off) # "+lR"
_complete_opts l '' R '' || _cvstargets
;;
add|remove) # "+lRa:"
_complete_opts l '' R '' a: '' || _cvstargets
;;
esac
fi
;;
watchers) # "+lR"
_complete_opts l '' R '' || _cvstargets
;;
*) _files;;
esac
return
fi
case ${+cvs_roots} in
0)
cvs_roots=()
if [[ -f ~/.cvspass ]]; then
cvs_roots=(
$(cut -d ' ' -f 1 ~/.cvspass)
)
fi
;;
esac
_complete_opts \
H '' Q '' q '' r '' w '' l '' n '' t '' v '' f '' a '' \
b: "compadd /usr/local/bin" \
T: "compadd $TMPPREFIX:h $TMPDIR /tmp" \
e: "compadd vi" \
d: "compadd $cvs_roots || _files -/" \
z: "compadd 9'" \
s: "_cvs_user_variable" \
||
compadd ${(k)commands} ||
compadd ${(kv)=commands}
}
_cvsrevisions () {
compadd - ${${${(M)${(f)"$(cvs -q status -vl .)"}:# *}##[ ]##}%%[ ]*}
}
_cvsrepositories () {
local root=$CVSROOT
[[ -f CVS/Root ]] && root=$(<CVS/Root)
if [[ $root = :* || ! -d $root ]]; then
compadd -UX "Enter repository name" -n '' &&
{ compstate[list]=list; compstate[force_list]=yes; compstate[insert]='' }
else
compadd - \
$root/^CVSROOT(:t) \
${${(M)${(f)"$(<$root/CVSROOT/modules)"}:#[^#]*}%%[ ]*}
fi
}
_cvsprefix () {
#if [[ -prefix */ ]]; then
if [[ x"$PREFIX" == x*/* ]]; then
qpref="${PREFIX%/*}/"
pref=$~qpref
else
qpref=
pref=./
fi
}
_cvsdirentries () {
setopt localoptions nullglob unset
if [[ -f ${pref}CVS/Entries ]]; then
entries=( ${${${(M)${(f)"$(<${pref}CVS/Entries)"}:#D/*}#D/}%%/*} )
else
entries=()
fi
}
_cvsentries () {
setopt localoptions nullglob unset
if [[ -f ${pref}CVS/Entries ]]; then
entries=( ${${${${(f)"$(<${pref}CVS/Entries)"}:#D}#(D|)/}%%/*} )
else
entries=()
fi
}
_cvsentries_modified () {
if (( $+_cvsentries_modified_disable_stat )) ||
! { zmodload -e stat || zmodload stat }; then
_cvsentries
return
fi
entries=()
local line Entries
typeset -A mtime
if [[ -f "${pref}CVS/Entries" ]]; then
Entries="$(<${pref}CVS/Entries)"
else
return
fi
local LANG=C
local OLDTZ="$TZ"; if ! (( $+TZ )); then unset OLDTZ; fi; export TZ=GMT
mtime=( ${(s:/:)${(j:/:)${${${${(M)${(f)Entries}:#/*}#/}%/*/*}/\\/*\\///}}} )
entries=( ${${${(M)${(f)Entries}:#D/*}#D/}%%/*} )
builtin stat -n +mtime -F '%a %b %e %T %Y' "$pref${(@k)^mtime}" |
while read line
do
line=${line#$pref}
if [[ x"$mtime[${line%% *}]" != x"${line#* }" ]]; then
entries=($entries "${line%% *}")
fi
done
if (( $+OLDTZ )); then TZ="$OLDTZ"; else unset TZ; fi
}
_cvsdirs () {
if [[ -d ${pref}CVS ]]; then
_cvsdirentries
if (( $#entries )); then
compgen "$@" -g '('${(j:|:)entries:q}')'
fi
else
_files
fi
}
_cvstargets () {
local qpref pref entries
_cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsentries
if (( $#entries )); then
compgen -g '('${(j:|:)entries:q}')'
fi
else
_files
fi
}
_cvstargets_modified () {
local qpref pref entries
_cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsentries_modified
if (( $#entries )); then
compgen -g '('${(j:|:)entries:q}')'
fi
else
_files
fi
}
_cvsremovep () {
local qpref pref entries
_cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsentries
setopt localoptions unset
local omit
omit=( ${pref}*(D:t) )
eval 'entries=( ${entries:#('${(j:|:)omit:q}')} )'
compadd -P "$qpref" - ${entries:q} ||
_cvsdirs
else
_files
fi
}
_cvsaddp () {
local qpref pref entries
_cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsentries
setopt localoptions unset
local all omit
all=( ${pref}*~${pref}CVS(D:t) )
omit=( CVS $entries ${=cvsignore} )
[[ -r ~/.cvsignore ]] && omit=( $omit $(<~/.cvsignore) )
[[ -r ${pref}.cvsignore ]] && omit=( $omit $(<${pref}.cvsignore) )
compgen -g '*~(*/|)('${(j:|:)omit:q}')' ||
{ _cvsdirentries; compgen -g '('${(j:|:)entries:q}')' }
else
_files
fi
}
_cvs "$@"
------------------------------------------------------------
--
Tanaka Akira
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
1999-07-27 11:45 ` Tanaka Akira
@ 1999-07-27 13:49 ` Bart Schaefer
1999-07-27 13:58 ` Tanaka Akira
0 siblings, 1 reply; 9+ messages in thread
From: Bart Schaefer @ 1999-07-27 13:49 UTC (permalink / raw)
To: Tanaka Akira, zsh-workers
On Jul 27, 8:45pm, Tanaka Akira wrote:
} Subject: Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User func
}
} So, I removed compset -P from _cvs.
Neither 7292 nor 7293 applied cleanly to the _cvs file from 7290. I don't
have time this morning to attempt to figure it out.
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
1999-07-27 10:07 ` Tanaka Akira
@ 1999-07-27 11:45 ` Tanaka Akira
1999-07-27 13:49 ` Bart Schaefer
0 siblings, 1 reply; 9+ messages in thread
From: Tanaka Akira @ 1999-07-27 11:45 UTC (permalink / raw)
To: zsh-workers
In article <rsqd7xexv75.fsf@crane.jaist.ac.jp>,
Tanaka Akira <akr@jaist.ac.jp> writes:
> Although _cvsremovep has same problem too, this fix is not applicable
> because compgen -g does not generate nonexisting filenames.
>
> Any ideas?
Hm. compset -P is bit dangerous for quoted characters.
is27e1u11% autoload -U compinit; compinit -D
is27e1u11% _tst () { compset -P '*/'; compadd tst }
is27e1u11% compdef _tst tst
is27e1u11% tst \#/<TAB>
Then, I get:
is27e1u11% tst \\\#/tst
So, I removed compset -P from _cvs.
--- Completion/User/_cvs Tue Jul 27 19:08:44 1999
+++ Completion/User/_cvs Tue Jul 27 20:44:07 1999
@@ -196,6 +196,8 @@
setopt localoptions nullglob unset
if [[ -f ${pref}CVS/Entries ]]; then
entries=( ${${${(M)${(f)"$(<${pref}CVS/Entries)"}:#D/*}#D/}%%/*} )
+ else
+ entries=()
fi
}
@@ -203,6 +205,8 @@
setopt localoptions nullglob unset
if [[ -f ${pref}CVS/Entries ]]; then
entries=( ${${${${(f)"$(<${pref}CVS/Entries)"}:#D}#(D|)/}%%/*} )
+ else
+ entries=()
fi
}
@@ -213,6 +217,7 @@
return
fi
+ entries=()
local line Entries
typeset -A mtime
@@ -242,52 +247,59 @@
_cvsdirs () {
if [[ -d ${pref}CVS ]]; then
_cvsdirentries
- compadd -fW "$pref" - $entries
+ if (( $#entries )); then
+ compgen "$@" -g '('${(j:|:)entries:q}')'
+ fi
else
- _files -W "$pref"
+ _files
fi
}
_cvstargets () {
local qpref pref entries
- _cvsprefix; compset -P '*/'
+ _cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsentries
- compgen -W "$pref" -g "(${(j:|:)entries})"
+ if (( $#entries )); then
+ compgen -g '('${(j:|:)entries:q}')'
+ fi
else
- _files -W "$pref"
+ _files
fi
}
_cvstargets_modified () {
local qpref pref entries
- _cvsprefix; compset -P '*/'
+ _cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsentries_modified
- compgen -W "$pref" -g "(${(j:|:)entries})"
+ if (( $#entries )); then
+ compgen -g '('${(j:|:)entries:q}')'
+ fi
else
- _files -W "$pref"
+ _files
fi
}
_cvsremovep () {
local qpref pref entries
- _cvsprefix; compset -P '*/'
+ _cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsentries
setopt localoptions unset
local omit
omit=( ${pref}*(D:t) )
- eval 'compadd -fW "$pref" - ${entries:#('${(j:|:)omit}')}' ||
+ eval 'entries=( ${entries:#('${(j:|:)omit:q}')} )'
+ compadd -P "$qpref" - ${entries:q} ||
_cvsdirs
else
- _files -W "$pref"
+ _files
fi
}
_cvsaddp () {
local qpref pref entries
- _cvsprefix; compset -P '*/'
+ _cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsentries
setopt localoptions unset
@@ -296,10 +308,10 @@
omit=( CVS $entries ${=cvsignore} )
[[ -r ~/.cvsignore ]] && omit=( $omit $(<~/.cvsignore) )
[[ -r ${pref}.cvsignore ]] && omit=( $omit $(<${pref}.cvsignore) )
- compgen -W "$pref" -g "*~*/(${(j:|:)omit})" ||
- _cvsdirs
+ compgen -g '*~(*/|)('${(j:|:)omit:q}')' ||
+ { _cvsdirentries; compgen -g '('${(j:|:)entries:q}')' }
else
- _files -W "$pref"
+ _files
fi
}
--
Tanaka Akira
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
1999-07-27 7:48 ` PATCH: " Bart Schaefer
1999-07-27 8:12 ` Peter Stephenson
@ 1999-07-27 10:07 ` Tanaka Akira
1999-07-27 11:45 ` Tanaka Akira
1 sibling, 1 reply; 9+ messages in thread
From: Tanaka Akira @ 1999-07-27 10:07 UTC (permalink / raw)
To: zsh-workers
In article <990727074804.ZM25420@candle.brasslantern.com>,
"Bart Schaefer" <schaefer@candle.brasslantern.com> writes:
> zsh% cvs add <C-d>
> F#bar F#baz
> zsh% cvs add <TAB>
> zsh% cvs add F\#<TAB>
> (BEEP)
> zsh% cvs add F\#<C-d>
> (BEEP)
> zsh% cvs add F\#<C-b><DEL><C-e>
> zsh% cvs add F#<C-d>
> F#bar F#baz
> zsh% cvs add F#<TAB>
> zsh% cvs add F\#
I tried to fix this problem by using compgen -g instead of compadd for
_cvsaddp, _cvstargets and _cvstargets_modified.
Although _cvsremovep has same problem too, this fix is not applicable
because compgen -g does not generate nonexisting filenames.
Any ideas?
--- Completion/User/_cvs Tue Jul 27 18:16:28 1999
+++ /home/fs114/akr/arch/sunos5/usr/local/share/zsh/functions/_cvs Tue Jul 27 19:01:03 1999
@@ -182,22 +182,14 @@
}
_cvsprefix () {
- local f
- qpref=$PREFIX
- if [[ $qpref != */ ]]; then
- if [[ $qpref = */* ]]; then
- qpref=$qpref:h
- else
- qpref=
- fi
- fi
- pref=$~qpref
- if [[ ! -d "$pref" ]]; then
+ #if [[ -prefix */ ]]; then
+ if [[ x"$PREFIX" == x*/* ]]; then
+ qpref="${PREFIX%/*}/"
+ pref=$~qpref
+ else
qpref=
- pref=
+ pref=./
fi
- [[ -n "$pref" && "$pref" != */ ]] && qpref=$qpref/ pref=$pref/
- [[ -z "$pref" ]] && pref=./
}
_cvsdirentries () {
@@ -248,56 +240,54 @@
}
_cvsdirs () {
- local qpref pref entries
- _cvsprefix
if [[ -d ${pref}CVS ]]; then
_cvsdirentries
- compadd -fP "$qpref" -W "$pref" - $entries
+ compadd -fW "$pref" - $entries
else
- _files
+ _files -W "$pref"
fi
}
_cvstargets () {
local qpref pref entries
- _cvsprefix
+ _cvsprefix; compset -P '*/'
if [[ -d ${pref}CVS ]]; then
_cvsentries
- compadd -fP "$qpref" -W "$pref" - $entries
+ compgen -W "$pref" -g "(${(j:|:)entries})"
else
- _files
+ _files -W "$pref"
fi
}
_cvstargets_modified () {
local qpref pref entries
- _cvsprefix
+ _cvsprefix; compset -P '*/'
if [[ -d ${pref}CVS ]]; then
_cvsentries_modified
- compadd -fP "$qpref" -W "$pref" - $entries
+ compgen -W "$pref" -g "(${(j:|:)entries})"
else
- _files
+ _files -W "$pref"
fi
}
_cvsremovep () {
local qpref pref entries
- _cvsprefix
+ _cvsprefix; compset -P '*/'
if [[ -d ${pref}CVS ]]; then
_cvsentries
setopt localoptions unset
local omit
omit=( ${pref}*(D:t) )
- eval 'compadd -fP "$qpref" -W "$pref" - ${entries:#('${(j:|:)omit}')}' ||
+ eval 'compadd -fW "$pref" - ${entries:#('${(j:|:)omit}')}' ||
_cvsdirs
else
- _files
+ _files -W "$pref"
fi
}
_cvsaddp () {
local qpref pref entries
- _cvsprefix
+ _cvsprefix; compset -P '*/'
if [[ -d ${pref}CVS ]]; then
_cvsentries
setopt localoptions unset
@@ -306,10 +296,10 @@
omit=( CVS $entries ${=cvsignore} )
[[ -r ~/.cvsignore ]] && omit=( $omit $(<~/.cvsignore) )
[[ -r ${pref}.cvsignore ]] && omit=( $omit $(<${pref}.cvsignore) )
- compgen -P "$qpref" -W "$pref" -g "*~*/(${(j:|:)omit})" ||
+ compgen -W "$pref" -g "*~*/(${(j:|:)omit})" ||
_cvsdirs
else
- _files
+ _files -W "$pref"
fi
}
--
Tanaka Akira
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
1999-07-27 7:48 ` PATCH: " Bart Schaefer
@ 1999-07-27 8:12 ` Peter Stephenson
1999-07-27 10:07 ` Tanaka Akira
1 sibling, 0 replies; 9+ messages in thread
From: Peter Stephenson @ 1999-07-27 8:12 UTC (permalink / raw)
To: zsh-workers
"Bart Schaefer" wrote:
> The following simplifies some of the parameter expansions (use inner quoted
> substitutions instead of multiple (@) flags) and fixes a bug where no matches
> were generated for `cvs commit' when the `stat' module is not available (now
> you may get too many matches, but at least you get some).
I had to apply this by hand to the modified versions. Could both of you
try
http://www.ifh.de/~pws/computing/_cvs.tar.gz
(just the _cvs* files) to see if this is correct?
--
Peter Stephenson <pws@ibmth.df.unipi.it> Tel: +39 050 844536
WWW: http://www.ifh.de/~pws/
Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy
^ permalink raw reply [flat|nested] 9+ messages in thread
* PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
1999-07-26 17:10 ` Tanaka Akira
@ 1999-07-27 7:48 ` Bart Schaefer
1999-07-27 8:12 ` Peter Stephenson
1999-07-27 10:07 ` Tanaka Akira
0 siblings, 2 replies; 9+ messages in thread
From: Bart Schaefer @ 1999-07-27 7:48 UTC (permalink / raw)
To: zsh-workers
On Jul 27, 2:10am, Tanaka Akira wrote:
}
} I think _cvs* are only for cvs, there is no necessity to make these
} autoloadable except _cvs.
The following simplifies some of the parameter expansions (use inner quoted
substitutions instead of multiple (@) flags) and fixes a bug where no matches
were generated for `cvs commit' when the `stat' module is not available (now
you may get too many matches, but at least you get some). The code obviously
was attempting to generate the same output as _cvstargets but had computed
the lines in the CVS/Entries file only in the `stat'-available branch.
There's still a bug, which may be a more general completion problem: If the
initial prefix of the completion contains a metacharacter (such as '#') that
is inserted quoted, the completer thereafter does not match. E.g.
zsh% cvs add <C-d>
F#bar F#baz
zsh% cvs add <TAB>
zsh% cvs add F\#<TAB>
(BEEP)
zsh% cvs add F\#<C-d>
(BEEP)
zsh% cvs add F\#<C-b><DEL><C-e>
zsh% cvs add F#<C-d>
F#bar F#baz
zsh% cvs add F#<TAB>
zsh% cvs add F\#
Watch out for tabs converted to spaces in the following ...
Index: Completion/User/_cvs
===================================================================
@@ -157,7 +157,7 @@
_cvsentries () {
setopt localoptions nullglob unset
if [[ -f ${pref}CVS/Entries ]]; then
- entries=( "${(@)${(@)${(@)${(f@)$(<${pref}CVS/Entries)}:#D}#(D|)/}%%/*}" )
+ entries=( ${${${${(f)"$(<${pref}CVS/Entries)"}:#D}#(D|)/}%%/*} )
fi
}
@@ -168,26 +168,27 @@
local line Entries
typeset -A mtime
+ if [[ -f "${pref}CVS/Entries" ]]; then
+ Entries="$(<${pref}CVS/Entries)"
+ fi
+
if ! zmodload -e stat; then zmodload stat; fi
if zmodload -e stat; then
- if [[ -f "${pref}CVS/Entries" ]]; then
- Entries="$(<${pref}CVS/Entries)"
- mtime=( "${(@s:/:)${(j:/:)${(@)${(@)${(@)${(M@)${(f@)Entries}:#/*}#/}%/*/*}/\/*\///}}}" )
- entries=( "${(@)${(@)${(M@)${(f@)Entries}:#D/*}#D/}%%/*}" )
- builtin stat -n +mtime -F '%a %b %e %T %Y' "$pref${(@k)^mtime}" |
- while read line
- do
- line=${line#$pref}
- if [[ x"$mtime[${line%% *}]" == x"${line#* }" ]]; then
- #print up-to-date "${line%% *}"
- else
- #print locally-modified "${line%% *}"
- entries=($entries "${line%% *}")
- fi
- done
- fi
+ mtime=( ${(s:/:)${(j:/:)${${${${(M)${(f)Entries}:#/*}#/}%/*/*}/\\/*\\///}}} )
+ entries=( ${${${(M)${(f)Entries}:#D/*}#D/}%%/*} )
+ builtin stat -n +mtime -F '%a %b %e %T %Y' "$pref${(@k)^mtime}" |
+ while read line
+ do
+ line=${line#$pref}
+ if [[ x"$mtime[${line%% *}]" == x"${line#* }" ]]; then
+ #print up-to-date "${line%% *}"
+ else
+ #print locally-modified "${line%% *}"
+ entries=($entries "${line%% *}")
+ fi
+ done
else
- entries=( "${(@)${(@)${(@)${(f@)Entries}:#D}#(D|)/}%%/*}" )
+ entries=( ${${${${(f)Entries}:#D}#(D|)/}%%/*} )
fi
if (( $+OLDTZ )); then TZ="$OLDTZ"; else unset TZ; fi
@@ -210,7 +211,7 @@
}
_cvsrevisions () {
- compadd - "${(@)${(@)${(@M)${(@f)$(cvs -q status -vl .)}:# *}##[ ]##}%%[ ]*}"
+ compadd - ${${${(M)${(f)"$(cvs -q status -vl .)"}:# *}##[ ]##}%%[ ]*}
}
_cvsrepositories () {
@@ -222,7 +223,7 @@
else
compadd - \
$root/^CVSROOT(:t) \
- "${(@)${(@M)${(@f)$(<$root/CVSROOT/modules)}:#[^#]*}%%[ ]*}"
+ ${${(M)${(f)"$(<$root/CVSROOT/modules)"}:#[^#]*}%%[ ]*}
fi
}
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~1999-08-02 9:47 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-08-02 9:47 PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again) Sven Wischnowsky
-- strict thread matches above, loose matches on Subject: below --
1999-07-21 11:27 Sven Wischnowsky
1999-07-21 15:54 ` Bart Schaefer
1999-07-25 9:23 ` Tanaka Akira
1999-07-26 4:48 ` Tanaka Akira
1999-07-26 16:26 ` Tanaka Akira
1999-07-26 17:10 ` Tanaka Akira
1999-07-27 7:48 ` PATCH: " Bart Schaefer
1999-07-27 8:12 ` Peter Stephenson
1999-07-27 10:07 ` Tanaka Akira
1999-07-27 11:45 ` Tanaka Akira
1999-07-27 13:49 ` Bart Schaefer
1999-07-27 13:58 ` Tanaka Akira
1999-07-27 14:11 ` Tanaka Akira
1999-07-28 16:05 ` Tanaka Akira
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).