diff options
Diffstat (limited to 'Completion/User/_cvs')
-rw-r--r-- | Completion/User/_cvs | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/Completion/User/_cvs b/Completion/User/_cvs new file mode 100644 index 000000000..4e191cecb --- /dev/null +++ b/Completion/User/_cvs @@ -0,0 +1,141 @@ +#compdef 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 yesterday week\\ ago month\\ ago" +local complete_k="compadd kv kvl k o b v" +local complete_r="compadd -UX 'Enter tag name or rev number' ''; $showhint" +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" || _files + ;; + 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" || _files + ;; + annotate|ann) # "+lr:D:fR" + _complete_opts l '' r: '' D: '' f '' R '' || _files + ;; + 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 '' || compadd MODULE + ;; + commit|ci|com) # "+nlRm:fF:r:" + _complete_opts n '' l '' R '' m: "$complete_m" f '' F: '' r: "$complete_r" || _files + ;; + 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" || _files + ;; + edit) # "+lRa:" + _complete_opts l '' R '' a: '' || _files + ;; + editors) # "+lR" + _complete_opts l '' R '' || _files + ;; + 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 '' || compadd MODULE + ;; + 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: '' || _files + ;; + 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) if [[ "${+CVSROOT}" == 1 && "$CVSROOT" != :* ]]; then + compgen -X "Enter repository name" -W "$CVSROOT" -g '*~*CVSROOT(/)' -s '' + else + compadd -UX "Enter repository name" -n '' && eval "$showhint" + fi + ;; + 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" || _files + ;; + release|re|rel) # "+Qdq" + _complete_opts Q '' d '' q '' || _files -/ + ;; + remove|rm|delete) # "+flR" + _complete_opts f '' l '' R '' || _files + ;; + status|st|stat) # "+vlR" + _complete_opts v '' l '' R '' || _files + ;; + tag|ta|freeze) # "+FQqlRcdr:D:bf" + _complete_opts F '' Q '' q '' l '' R '' c '' d '' r: "$complete_r" D: "$complete_D" b '' f '' || _files + ;; + unedit) # "+lR" + _complete_opts l '' R '' || _files + ;; + 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: '' || _files + ;; + watch) + if (( CURRENT == com + 1 )); then + compadd on off add remove + else + case "$words[com+1]" in + on|off) # "+lR" + _complete_opts l '' R '' || _files + ;; + add|remove) # "+lRa:" + _complete_opts l '' R '' a: '' || _files + ;; + esac + fi + ;; + watchers) # "+lR" + _complete_opts l '' R '' || _files + ;; + *) _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} |