Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
- X-seq: zsh-workers 7295
- From: Tanaka Akira <akr@xxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
- Date: 27 Jul 1999 22:58:12 +0900
- In-reply-to: "Bart Schaefer"'s message of "Tue, 27 Jul 1999 13:49:38 +0000"
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
- References: <199907211127.NAA02895@xxxxxxxxxxxxxxxxxxxxxxxxxxxx> <990721155446.ZM6856@xxxxxxxxxxxxxxxxxxxxxxx> <rsqvhb9ulqj.fsf@xxxxxxxxxxxxxxxxx> <rsqpv1g2eyy.fsf@xxxxxxxxxxxxxxxxx> <rsq4sirs7hf.fsf@xxxxxxxxxxxxxxxxx> <rsq1zdvs5fz.fsf@xxxxxxxxxxxxxxxxx> <990727074804.ZM25420@xxxxxxxxxxxxxxxxxxxxxxx> <rsqd7xexv75.fsf@xxxxxxxxxxxxxxxxx> <rsqg12afha7.fsf@xxxxxxxxxxxxxxxxx> <990727134938.ZM26449@xxxxxxxxxxxxxxxxxxxxxxx>
In article <990727134938.ZM26449@xxxxxxxxxxxxxxxxxxxxxxx>,
"Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxxxxxxxxx> 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
Messages sorted by:
Reverse Date,
Date,
Thread,
Author