zsh-workers
 help / color / mirror / code / Atom feed
From: Tanaka Akira <akr@jaist.ac.jp>
To: zsh-workers@sunsite.auc.dk
Subject: Re: PATCH: Re: CVS completer (Re: PATCH: Re: Completion/User functions again)
Date: 27 Jul 1999 22:58:12 +0900	[thread overview]
Message-ID: <rsqzp0idwjv.fsf@crane.jaist.ac.jp> (raw)
In-Reply-To: "Bart Schaefer"'s message of "Tue, 27 Jul 1999 13:49:38 +0000"

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


  reply	other threads:[~1999-07-27 14:00 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-07-21 11:27 Sven Wischnowsky
1999-07-21 12:35 ` Tanaka Akira
1999-07-21 15:43   ` Tanaka Akira
1999-07-21 15:54 ` Bart Schaefer
1999-07-25  9:23   ` Tanaka Akira
1999-07-25 11:38     ` 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 [this message]
1999-07-27 14:11                     ` Tanaka Akira
1999-07-28 16:05                       ` Tanaka Akira
1999-07-27  8:15           ` Peter Stephenson
1999-07-27  8:58             ` Tanaka Akira
1999-08-02  9:47 PATCH: " Sven Wischnowsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=rsqzp0idwjv.fsf@crane.jaist.ac.jp \
    --to=akr@jaist.ac.jp \
    --cc=zsh-workers@sunsite.auc.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).