From e264c1bee199acd99267e2142ab22507cadb488a Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Sun, 11 Mar 2001 22:53:41 +0000 Subject: Various new, improved, fixed or updated functions (13600) --- ChangeLog | 13 +++- Completion/Base/_subscript | 2 +- Completion/Core/_files | 1 + Completion/Core/_tags | 2 - Completion/User/.distfiles | 17 ++--- Completion/User/_dir_list | 5 +- Completion/User/_fetchmail | 11 ++++ Completion/User/_hosts | 2 +- Completion/User/_iconv | 54 ++++++++++++++++ Completion/User/_mutt | 47 +++++++------- Completion/User/_ncftp | 8 +++ Completion/User/_tar | 153 +++++++++++++++++++++++++++++++++++++++++--- Completion/User/_urls | 14 ++-- Completion/User/_webbrowser | 2 +- Completion/User/_wget | 19 ++++-- Completion/User/_xargs | 8 ++- Completion/User/_zip | 121 +++++++++++++++++++++++++++++++++++ Functions/Misc/mere | 2 +- 18 files changed, 420 insertions(+), 61 deletions(-) create mode 100644 Completion/User/_fetchmail create mode 100644 Completion/User/_iconv create mode 100644 Completion/User/_ncftp create mode 100644 Completion/User/_zip diff --git a/ChangeLog b/ChangeLog index 73bf18cc1..2ee34ab5c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2001-03-11 Oliver Kiddle + + * 13600: Completion/Base/_subscript, Completion/Core/_files, + Completion/Core/_tags, Completion/User/.distfiles, + Completion/User/_dir_list, Completion/User/_fetchmail, + Completion/User/_hosts, Completion/User/_iconv, Completion/User/_mutt, + Completion/User/_ncftp, Completion/User/_tar, Completion/User/_urls, + Completion/User/_webbrowser, Completion/User/_wget, + Completion/User/_xargs, Completion/User/_zip, Functions/Misc/mere: + various new, improved, fixed or updated functions + 2001-03-11 Bart Schaefer * 13599: Completion/User/_sh: Use _normal completion following @@ -40,7 +51,6 @@ * unposted: configure.in, aczsh.m4: support building with GCC on ReliantUNIX; use AC_TRY_COMMAND for better diagnostic - 2001-03-06 Oliver Kiddle * unposted: Completion/User/.distfiles, Completion/User/_webbrowser: @@ -73,7 +83,6 @@ * unposted: Etc/CONTRIBUTORS: use zsh.org mail address (courtesy of Geoff) for me :-) - 2001-03-05 Sven Wischnowsky * 13566: Completion/Builtins/_aliases, Completion/Core/_expand_alias, diff --git a/Completion/Base/_subscript b/Completion/Base/_subscript index 9a6801352..95e7cc4c6 100644 --- a/Completion/Base/_subscript +++ b/Completion/Base/_subscript @@ -1,6 +1,6 @@ #compdef -subscript- -local expl osuf=']' +local expl ind osuf=']' if [[ "$1" = -q ]]; then osuf='] ' diff --git a/Completion/Core/_files b/Completion/Core/_files index 8d2b245d0..03453bc48 100644 --- a/Completion/Core/_files +++ b/Completion/Core/_files @@ -1,6 +1,7 @@ #autoload local opts tmp glob pat pats expl tag i def descr end ign ret=1 match tried +local type sdef zparseopts -a opts \ '/=tmp' 'f=tmp' 'g+:-=tmp' q n 1 2 P: S: r: R: W: X+: M+: F: J+: V+: diff --git a/Completion/Core/_tags b/Completion/Core/_tags index 2afec2036..0af8d74d2 100644 --- a/Completion/Core/_tags +++ b/Completion/Core/_tags @@ -24,8 +24,6 @@ if (( $# )); then elif [[ "$1" = -C ]]; then curcontext="${curcontext%:*}:${2}" shift 2 - else - targs=() fi [[ "$1" = -(|-) ]] && shift diff --git a/Completion/User/.distfiles b/Completion/User/.distfiles index f9bf07035..4411fb28e 100644 --- a/Completion/User/.distfiles +++ b/Completion/User/.distfiles @@ -1,13 +1,14 @@ DISTFILES_SRC=' .distfiles - _a2ps _apachectl _archie _arp _bison _bzip2 _chown _compress - _configure _cvs _dd _dict _diff _diff_options _dir_list _dirs - _domains _dvi _enscript - _find _finger _fakeroot _flex _gcc _gdb _getconf _gprof _grep _groups - _gs _gv _gzip _hosts _imagemagick _init_d _ispell - _java _joe _killall _lp _look _ls _lynx _lzop + _a2ps _apachectl _archie _arp _bison _bzip2 + _chown _compress _configure _cvs + _dd _dict _diff _diff_options _dir_list _dirs _domains _dvi + _enscript _find _finger _fakeroot _fetchmail _flex + _gcc _gdb _getconf _gprof _grep _groups _gs _gv _gzip + _hosts _imagemagick _iconv _init_d _ispell + _java _joe _killall _look _lp _ls _lynx _lzop _mailboxes _make _man _mere _mh _mount _mutt _my_accounts _mysql_utils - _nedit _netscape _newsgroups _nslookup _other_accounts + _ncftp _nedit _netscape _newsgroups _nslookup _other_accounts _pack _patch _pbm _pdf _perl _perl_basepods _perl_builtin_funcs _perl_modules _perldoc _ports _prcs _printers _prompt _ps _pspdf _psutils _rcs _rlogin @@ -15,5 +16,5 @@ DISTFILES_SRC=' _tar _tar_archive _telnet _tex _texi _tiff _tilde_files _tin _urls _use_lo _user_at_host _users _users_on _w3m _webbrowser _wget _whereis _whois _xargs _yodl _yp - _zcat _zdump + _zcat _zdump _zip ' diff --git a/Completion/User/_dir_list b/Completion/User/_dir_list index 8e3615dac..122d7ad94 100644 --- a/Completion/User/_dir_list +++ b/Completion/User/_dir_list @@ -1,4 +1,7 @@ #autoload +local suf + compset -P '*:' -_files -S: -r ': \t\t\-' -/ +compset -S ':*' || suf=":" +_files -S "$suf" -r ': \t\t\-' -/ diff --git a/Completion/User/_fetchmail b/Completion/User/_fetchmail new file mode 100644 index 000000000..0f9095107 --- /dev/null +++ b/Completion/User/_fetchmail @@ -0,0 +1,11 @@ +#compdef fetchmail + +_arguments \ + {--bsmtp,'(--logfile)-L','(-L)--logfile','(--fetchmailrc)-f','(-f)--fetchmailrc','(--idfile)-i','(-i)--idfile'}':file:_files' \ + {--plugin,--plugout,'(--mda)-m','(-m)--mda'}':command:_command_names -e' \ + {'(--username)-u','(-u)--username'}:user:_users \ + '--auth:authentication types:(password kerberos kerberos_v5)' \ + {'(--protocol)-p','(-p)--protocol'}:protocol:'(auto pop2 pop3 apop rpop kpop sdps imap imap-k4 imap-gss etrn)' \ + {'(--port)-P','(-P)--port'}':port number' \ + '*:mail server:_hosts' \ + -- diff --git a/Completion/User/_hosts b/Completion/User/_hosts index 30c3b2357..f41097f96 100644 --- a/Completion/User/_hosts +++ b/Completion/User/_hosts @@ -1,4 +1,4 @@ -#compdef ftp ncftp ping rwho rup xping traceroute host +#compdef ftp ping rwho rup xping traceroute host lftp local expl hosts diff --git a/Completion/User/_iconv b/Completion/User/_iconv new file mode 100644 index 000000000..1e21b9655 --- /dev/null +++ b/Completion/User/_iconv @@ -0,0 +1,54 @@ +#compdef iconv + +local expl curcontext="$curcontext" state line codeset LOCPATH + +(( $+_is_gnu )) || typeset -gA _is_gnu +if (( ! $+_is_gnu[$words[1]] )); then + if [[ $(_call version $words[1] --version /dev/null) = *GNU* ]]; + then + _is_gnu[$words[1]]=yes + else + _is_gnu[$words[1]]= + fi +fi + +if [[ -n "$_is_gnu[$words[1]]" ]]; then + + _arguments -C \ + {'(--from-code --list)-f','(-f --list)--from-code='}'[specify code set of input file]:code set:->codeset' \ + {'(--to-code --list)-t','(-t --list)--to-code='}'[specify code set for output]:code set:->codeset' \ + '--list[list all character code sets]' \ + '--verbose[print progress information]' \ + {'(--help)-\?','(-\?)--help'}'[display help information]' \ + '--usage[display a short usage message]' \ + {'(--version)-V','(-V)--version'}'[print program version]' \ + '1:file:_files' && return 0 + + if [[ $state = codeset ]]; then + _wanted codesets expl 'code set' \ + compadd "$@" ${${(s:,:)$(iconv --list|sed -n '/^$/,$ p')}## #} + fi + +else + + _arguments -C \ + '-f[specify code set of input file]:code set:->codeset' \ + '-t[specify code set for output]:code set:->codeset' \ + '1:file:_files' && return 0 + + if [[ $state = codeset ]]; then + if [[ -f /usr/lib/iconv/iconv_data ]]; then # IRIX & Solaris + codeset=( ${${(f)"$(userhost' \ - '*-a:MIME attachment:_files' \ - '*-b:BCC recipient:->userhost' \ - '*-c:CC recipient:->userhost' \ - '-e:post-init configuration:' \ - '-f+:mailbox: _mailboxes' \ - '-F+:init file:_files' \ - '-h+:help:' \ - '-H+:draft file:_files' \ - '-i:include file:_files' \ - '-m+:default mailbox type:(mbox MMDF MH Maildir)' \ - '-n+:bypass system configuration:' \ - '-p+:resume postponed message:' \ - '-R+:open in read-only mode:' \ - '-s+:subject:' \ - '-v+:version:' \ - '-x+:emulate mailx compose:' \ - '-y+:start listing mailboxes:' \ - '-z+:start only if new messages:' \ - '-Z+:open first mailbox with new mail:' && ret=0 + '*-a[attach file using MIME]:file attachment:_files' \ + '*-b[specify a BCC recipient]:BCC recepient:->userhost' \ + '*-c[specify a CC recipient]:CC recipient:->userhost' \ + '-e+[specify a post-init configuration command]:post-init configuration:' \ + '-f+[specify mailbox to load]:mailbox: _mailboxes' \ + '-F+[specify an init file]:init file:_files' \ + '-h[display help]' \ + '-H+[specify a draft file for message]:draft file:_files' \ + '-i+[specify file to include in message]:include file:_files' \ + '-m+[specify default mailbox type]:mailbox type:(mbox MMDF MH Maildir)' \ + '-n[bypass system configuration]' \ + '-p[resume postponed message]' \ + '-R[open in read-only mode]' \ + '-s+[specify a subject]:subject:' \ + '-v[display mutt version]' \ + '-x[emulate mailx compose]' \ + '-y[start listing mailboxes]' \ + '-z[start only if new messages]' \ + '-Z[open first mailbox with new mail]' && return 0 if [[ "$state" = userhost ]]; then if compset -P '*@'; then _description hosts expl 'remote host name' _hosts "$expl[@]" -q -S, && return 0 else + compset -S '@*' || suf='@' _description users expl 'login name' - _users "$expl[@]" -q -S@ && return 0 + _users "$expl[@]" -q -S "$suf" && return 0 fi fi -return ret +return 1 diff --git a/Completion/User/_ncftp b/Completion/User/_ncftp new file mode 100644 index 000000000..e760b3536 --- /dev/null +++ b/Completion/User/_ncftp @@ -0,0 +1,8 @@ +#compdef ncftp + +if [[ -f ~/.ncftp/bookmarks ]]; then + _wanted bookmarks expl bookmark \ + compadd - $(awk -F, 'NR > 2 { print $1 }' ~/.ncftp/bookmarks) && return 0 +fi + +_hosts diff --git a/Completion/User/_tar b/Completion/User/_tar index 91767e44d..9a71d8cef 100644 --- a/Completion/User/_tar +++ b/Completion/User/_tar @@ -1,11 +1,148 @@ -#defcomp tar +#compdef tar -local nm=$NMATCHES tf="$2" +# Tar completion. Features: +# - Tries to collect tar commands from second position, single letter +# option, and long options. +# - `tar' can be called anything, will use the correct name +# - Uses the function `_tar_archive' to complete archive files. +# - Tries to find out if compressed archives should be used. +# - Completes files inside archive. This is supposed to look pretty +# much as if the files are in an ordinary directory hierarchy. +# Handles extraction from compressed archives (GNU tar). +# - Anywhere -- appears, gets a list of long options to complete from +# tar itself (GNU tar) +# - Things like --directory=... are also completed correctly. -if [[ ( -mword 1 *t*f* || -mword 1 *x*f* ) && -position 3 100000 ]]; then - complist -k "( $(tar tf $tf) )" -elif [[ -mword 1 *c*f* && -position 3 100000 ]]; then - _files -elif [[ -mcurrent -1 *f* && -position 2 ]]; then - _files -g '*.(tar|TAR)' +local _tar_cmd tf tmp tmpb del + +# First we collect in `_tar_cmd' single letter options describing what +# should be done with the archive and if it is compressed. This +# collected from options arguments that start with only one hyphen, +# from some of the possible long options, and from the second word if +# that does not start with a hyphen. + +tmp=("${(@M)words:#-[^-]*}") +_tar_cmd="${(j::)tmp#-}" + +(( $words[(I)--(un|)gzip] )) && _tar_cmd="z$_tar_cmd" +(( $words[(I)--(un|)compress] )) && _tar_cmd="Z$_tar_cmd" +(( $words[(I)--list] )) && _tar_cmd="t$_tar_cmd" +(( $words[(I)--(extract|get)] )) && _tar_cmd="x$_tar_cmd" +(( $words[(I)--create] )) && _tar_cmd="c$_tar_cmd" + +# Other ways of finding out what we're doing: first +# look in the first argument if it's not an option +if [[ "$words[2]" = *[txcdruA]*~-* ]]; then + _tar_cmd="$words[2]$_tar_cmd" +elif [[ $_tar_cmd != *[txcdruA]* && CURRENT -gt 2 ]]; then + # look for more obscure long options: these aren't all handled. + (( $words[(I)--(diff|compare)] )) && _tar_cmd="d$_tar_cmd" + (( $words[(I)--append] )) && _tar_cmd="r$_tar_cmd" + (( $words[(I)--update] )) && _tar_cmd="u$_tar_cmd" + (( $words[(I)--(con|)catenate] )) && _tar_cmd="A$_tar_cmd" + (( $words[(I)--delete] )) && del=1 +fi + +# Next, we try to find the archive name and store it in `tf'. The name +# is searched after a `--file=' long option, in the third word if the +# second one didn't start with a hyphen but contained a `f', and after +# an option argument starting with only one hyphen and containing a `f'. +# unless that option argument also contains a `C'. + +tmp="$words[(I)--file=*]" +tmpb="$words[(I)-*Cf*~--*]" + +if (( tmp )); then + tf=${~words[tmp][8,-1]} + _tar_cmd="f$_tar_cmd" +elif [[ "$words[2]" != -* && "$words[2]" = *f* ]]; then + tf=${~words[3]} + _tar_cmd="f$_tar_cmd" +elif (( tmpb )); then + tf=${~words[tmpb+2]} + wdir=${~words[tmpb+1]} + _tar_cmd="Cf$_tar_cmd" +else + tmp="${words[(I)-*f*~--*]}" + if (( tmp )); then + tf=${~words[tmp+1]} + _tar_cmd="f$_tar_cmd" + fi +fi + +# See if we should use a path prefix. We have to use eval as the dir can +# be any unevaluated thing which appears on the command line, including a +# parameter. + +# This isn't used right now. + +tmp=${words[(r)--dir[a-z]#=*]} + +if [[ -n $tmp ]]; then + eval "wdir=(${tmp#*=})" +fi + +# Now we complete... + +if [[ "$PREFIX" = --* ]]; then + + # ...long options after `--'. + + _arguments -- '--owner*:user:_users' \ + '*=(PROG|COMMAND)*:program:_command_names -e' \ + '*=ARCHIVE*:archive: _tar_archive' \ + '*=NAME*:file:_files' \ + '*=DIR*:directory:_files -/' \ + '*=CONTROL*::version control:(t numbered nil existing never simple)' + +elif [[ ( CURRENT -gt 2 && "$words[CURRENT-1]" = -*f* && + "$words[CURRENT-1]" != --* && "$words[CURRENT-1]" != -*Cf* ) || + ( CURRENT -eq 3 && "$words[2]" = *f* && "$words[2]" != -* && + "$words[2]" != *Cf* ) || + ( CURRENT -gt 2 && "$words[CURRENT-2]" = -*Cf* && + "$words[CURRENT-2]" != --* && "$words[CURRENT-1]" != --* ) || + ( CURRENT -eq 4 && "$words[2]" = *Cf* && "$words[2]" != -* ) ]]; then + + # ...archive files if we think they are wanted here. + + _tar_archive + +elif [[ ( CURRENT -gt 2 && "$words[CURRENT-1]" = -*Cf*) || + ( CURRENT -eq 3 && "$words[2]" = *Cf* ) ]]; then + + # a directory for -C + + _files -/ + +elif [[ ( "$_tar_cmd" = *[xt]* || -n $del ) && -n "$tf" ]]; then + + # ...and files from the archive if we found an archive name and tar + # commands. We run `tar t...' on the file, keeping the list of + # filenames cached, plus the name of the tarfile so we know if it + # changes. We skip this test if the alleged archive is not a file. + + local largs=-tf expl + + if [[ $_tar_cmd = *z* ]]; then + largs=-tzf + elif [[ $_tar_cmd = *y* ]]; then + largs=-tyf + elif [[ $_tar_cmd = *Z* ]]; then + largs=-tZf + elif [[ $_tar_cmd = *I* ]]; then + largs=-tIf + else + # Some random compression program + tmp="${words[(r)--use-comp*]}" + [[ -n $tmp ]] && largs=($tmp -tf) + fi + + if [[ $tf != $_tar_cache_name && -f $tf ]]; then + _tar_cache_list=("${(@f)$($words[1] $largs $tf)}") + _tar_cache_name=$tf + fi + + _wanted files expl 'file from archive' _multi_parts / _tar_cache_list +else + _files fi diff --git a/Completion/User/_urls b/Completion/User/_urls index 06df60c28..78a72f890 100644 --- a/Completion/User/_urls +++ b/Completion/User/_urls @@ -1,4 +1,4 @@ -#compdef curl +#compdef curl galeon # Usage: _urls [-f] # Options: @@ -38,7 +38,7 @@ # E.g.: # zstyle ':completion:*:urls' local www /usr/local/apache/htdocs public_html -local ipre scheme host user uhosts ret=1 expl match glob +local ipre scheme host user uhosts ret=1 expl match glob suf local urls_path localhttp zstyle -s ":completion:${curcontext}:urls" path urls_path || urls_path="${ZDOTDIR:-$HOME}/.zsh/urls" @@ -118,16 +118,16 @@ case "$scheme" in esac # Complete hosts -if ! compset -P '(#b)([^/]#)/'; then +if ! compset -P '(#b)([^:/]#)([:/])'; then uhosts=($urls_path/$scheme/$PREFIX*$SUFFIX(/:t)) _tags hosts while _tags; do while _next_label hosts expl host "$@"; do - compset -S '/*' || suf="/" - (( $#uhosts )) || _hosts -S "$suf" "$expl[@]" && ret=0 + compset -S '[:/]*' || suf="/" + (( $#uhosts )) || _hosts -S "$suf" -r '/:' "$expl[@]" && ret=0 [[ "$scheme" = http ]] && uhosts=($uhosts $localhttp_servername) - compadd -S "$suf" "$expl[@]" -a uhosts && ret=0 + compadd -S "$suf" -r '/:' "$expl[@]" -a uhosts && ret=0 done (( ret )) || return 0 done @@ -135,6 +135,8 @@ if ! compset -P '(#b)([^/]#)/'; then fi host="$match[1]" +[[ $match[2] = ':' ]] && ! compset -P '<->/' && _message 'port number' && return 0 + # Complete part after hostname _tags -C local files || return 1 diff --git a/Completion/User/_webbrowser b/Completion/User/_webbrowser index da8961ea8..6a82a4e9d 100644 --- a/Completion/User/_webbrowser +++ b/Completion/User/_webbrowser @@ -1,3 +1,3 @@ -#compdef amaya arena chimera express grail gzilla hotjava mmm mozilla www xmosaic Mosaic +#compdef amaya arena chimera express grail gzilla hotjava mmm mozilla opera www xmosaic Mosaic _urls -f diff --git a/Completion/User/_wget b/Completion/User/_wget index fbacc5b27..515f73eda 100644 --- a/Completion/User/_wget +++ b/Completion/User/_wget @@ -18,6 +18,8 @@ _arguments -C -s \ '*-n+[no]:flags:->noflags' \ {'(--input-file)-i+[input file]','(-i)--input-file='}':file containing URLs:_files' \ '(--force-html)-F[force html]' '(-F)--force-html' \ + {'(--base)-B+[prepend URL to relative links]','(-B)--base='}':base URL:_urls' \ + '--bind-address=:address to bind to (hostname or IP):_hosts' \ {'(--tries)-t+[tries]','(-t)--tries='}':number of retries:(0)' \ {'(--output-document)-O+[output document]','(-O)--output-document='}':output file:_files' \ '(--continue)-c[continue]' '(-c)--continue' \ @@ -27,6 +29,7 @@ _arguments -C -s \ '--spider' \ {'(--timeout)-T+[timeout]','(-T)--timeout='}':read timeout(seconds):' \ {'(--wait)-w+[wait]','(-w)--wait='}':wait between retrievals(seconds):' \ + '--waitretry=:seconds to wait between retries of a retieval:' \ {'(--proxy --use-proxy)-Y+[proxy]','(-Y --use-proxy)--proxy=','(-Y --proxy)--use-proxy='}':proxy:(on off)' \ {'(--quota)-Q+[quota]','(-Q)--quota='}':number:' \ '(--force-directories)-x[force directories]' '(-x)--force-directories' \ @@ -34,10 +37,13 @@ _arguments -C -s \ '--cut-dirs=:number:' \ '--http-user=:user:' \ '--http-passwd=:password:' \ + '(--html-extension)-E[save all text/html files with a .html extension]' \ + '(-E)--html-extension' \ '--ignore-length' \ '--header=:string:' \ '--proxy-user=:user:' \ '--proxy-passwd=:password:' \ + '--referer=:url:_urls' \ '(--save-headers)-s[save headers]' '(-s)--save-headers' \ {'(--user-agent)-U+[user agent]','(-U)--user-agent='}':user-agent:' \ '--retr-symlinks' \ @@ -47,17 +53,22 @@ _arguments -C -s \ {'(--level)-l+[level]','(-l)--level='}':level:(0)' \ '--delete-after' \ '(--convert-links)-k[convert links]' '(-k)--convert-links' \ + '(--backup-converted)-K[backup files before conversion]' \ + '(-K)--backup-converted' \ '(--mirror)-m[mirror]' '(-m)--mirror' \ - {'(--accept)-A+[accept]','(-A)--accept='}':accepted etensions:' \ - {'(--reject)-R+[reject]','(-R)--reject='}':rejected etensions:' \ + '(--page-requisites)-p[get all images needed to display page]' \ + '(-p)--page-requisites' \ + {'(--accept)-A+[accept]','(-A)--accept='}':accepted extensions:' \ + {'(--reject)-R+[reject]','(-R)--reject='}':rejected extensions:' \ {'(--domains)-D+[domains]','(-D)--domains='}':accepted domains:' \ '--exclude-domains=:rejected domains:' \ - '(--relative)-L[relative]' '(-L)--relative' \ '--follow-ftp' \ + '--follow-tags=:HTML tags:' \ + {'(--ignore-tags)-G+[ignored HTML tags]','(-G)--ignore-tags='}':HTML tags:' \ '(--span-hosts)-H[span hosts]' '(-H)--span-hosts' \ + '(--relative)-L[follow relative links only]' '(-L)--relative' \ {'(--include-directories)-I+[include directories]','(-I)--include-directories='}':allowed directories:' \ {'(--exclude-directories)-X+[exclude directories]','(-X)--exclude-directories='}':excluded directories:' \ - {'(--base)-B+[base]','(-B)--base='}':base:' \ '--no-host-lookup' \ '--no-parent' \ '--non-verbose' \ diff --git a/Completion/User/_xargs b/Completion/User/_xargs index 8b9291227..f727ed8b7 100644 --- a/Completion/User/_xargs +++ b/Completion/User/_xargs @@ -1,13 +1,15 @@ #compdef xargs _arguments \ - -{p,t,x} \ + '(-t)-p[prompt user for each command]' \ + '(-p)-t[verbose - echo each command]' \ + '-x[exit if max size exceeded]' \ -{e-,E}':end-of-file string:' \ '(-x -I)-i-:replacement string for lines:' \ '(-x -i)-I:replacement string for lines:' \ '(-n -L -x)-l-:number of input lines:' \ '(-n -l)-L:number of input lines:' \ - '(-l -L)-n:maximum number of arguments:' \ - '-s:maximum command line length:' \ + '(-l -L)-n-:maximum number of arguments:' \ + '-s-:maximum command line length:' \ '(-):command: _command_names -e' \ '*::args: _normal' diff --git a/Completion/User/_zip b/Completion/User/_zip new file mode 100644 index 000000000..d6bb2d835 --- /dev/null +++ b/Completion/User/_zip @@ -0,0 +1,121 @@ +#compdef zip unzip zipinfo + +local suffixes suf zipfile izip +local expl curcontext="$curcontext" state line +typeset -A opt_args + +case $service in + zip) + _arguments -C -s \ + '-f[freshen: only changed files]' \ + '-d[delete entries in zipfile]' \ + '-R[recurse into directories]' \ + '-q[quiet operation]' \ + '-c[add one-line comments]' \ + '-b[use "path" for temp file]:path for temporary archive:_files -/' \ + '-@[read names from stdin]' \ + '-F[fix zipfile]' \ + '-FF[try harder to fix zipfile]' \ + '-A[adjust self-extracting exe]' \ + '-T[test zipfile integrity]' \ + '-y[store symbolic links as the link instead of the referenced file]' \ + '-e[encrypt]' \ + '-h[show help]' \ + '-u[update: only changed or new files]' \ + '-m[move into zipfile (delete files)]' \ + '-g[allow growing existing zipfile]' \ + '-j[junk: do not record directory names]' \ + '-l[convert LF to CR LF]' \ + '-ll[convert CR LF to LF]' \ + '-L[display license]' \ + '-v[verbose operation/print version info]' \ + '-z[add zipfile comment]' \ + '-t[only do files after or at "mmddyyyy"]:mmddyyyy' \ + '-tt[only do files before "mmddyyyy"]:mmddyyyy' \ + '-o[make zipfile as old as latest entry]' \ + '-D[do not add directory entries]' \ + '-J[junk zip file prefix (unzipsfx)]' \ + '-X[eXclude eXtra file attributes]' \ + '-n[specify suffixes of files not to be compressed]:suffixes:->suffixes' \ + '( -1 -2 -3 -4 -5 -6 -7 -8 -9)-0[store only]' \ + '(-0 -2 -3 -4 -5 -6 -7 -8 -9)-1[compress faster]' \ + '(-0 -1 -3 -4 -5 -6 -7 -8 -9)-2' \ + '(-0 -1 -2 -4 -5 -6 -7 -8 -9)-3' \ + '(-0 -1 -2 -3 -5 -6 -7 -8 -9)-4' \ + '(-0 -1 -2 -3 -4 -6 -7 -8 -9)-5' \ + '(-0 -1 -2 -3 -4 -5 -7 -8 -9)-6' \ + '(-0 -1 -2 -3 -4 -5 -6 -8 -9)-7' \ + '(-0 -1 -2 -3 -4 -5 -6 -7 -9)-8' \ + '(-0 -1 -2 -3 -4 -5 -6 -7 -8 )-9[compress better]' \ + '-x[exclude the following names]' \ + '-i[include only the following names]' \ + "(-f -d -R -q -c -b -@ -F -FF -A -T -y -e -h -u -m -g -j -l -ll -L -v -z -t -tt -o -D -J -X -n -0 -1 -2 -3 -4 -5 -6 -7 -8 -9):zip file:_files -g '(#i)*.(zip|[jw]ar)'" \ + ':file:->files' && return 0 + ;; + unzip) + _arguments -C -s \ + '(-f -u -l -t -z -d)-p[extract files to pipe]' \ + '(-p -u -l -t -z)-f[freshen existing files; create none]' \ + '(-p -f -l -t -z)-u[update files; create if necessary]' \ + '(-p -f -u -t -z -d)-l[list files]' \ + '(-p -f -u -l -z -d)-t[test compressed archive data]' \ + '(-p -f -u -l -t -d)-z[display archive comment]' \ + '(-p -l -t -z)-d+[specify directory to extract files to]:directory:_files -/' \ + '(-p -l -t -z -o)-n[never overwrite existing files]' \ + '(-p -l -t -z -n)-o[overwrite files without prompting]' \ + "(-p -l -t -z)-j[junk paths (don't make directories)]" \ + '-C[match filenames case-insensitively]' \ + '(-p -l -t -z)-X[restore UID/GID info]' \ + '-q[quiet]' '-qq[quieter]' \ + '(-l -t -z)-a[auto-convert any text files]' \ + '(-l -t -z)-aa[treat all files as text]' \ + '-v[verbose/display version info]' \ + '(-p -z)-L[lowercase (some) filenames]' \ + '-M[page output]' \ + '-x[exclude the following names]' \ + "(-p -f -u -l -t -z -n -o -j -C -X -q -qq -a -aa -v -L -M)1:zip file:_files -g '(#i)*.(zip|[jw]ar)'" \ + '*:file:->files' && return 0 + ;; + zipinfo) + _arguments -C -s \ + '(-2 -s -m -l -v -h -t -T -z)-1[filenames only]' \ + '(-1 -s -m -l -v -T)-2[just filenames but allow -h/-t/-z]' \ + '(-1 -2 -m -l -v -h -t)-s[short format]' \ + '(-1 -2 -s -l -v -h -t)-m[medium format]' \ + '(-1 -2 -s -m -v -h -t)-l[long format]' \ + '(-1 -2 -s -m -l -h -z)-v[verbose, multi-page format]' \ + '(-1 -s -m -l -v)-h[print header line]' \ + '(-1 -v)-z[print zipfile comment]' \ + '-C[match filenames case-insensitively]' \ + '(-1 -s -m -l)-t[print totals]' \ + '(-1 -2)-T[use sortable decimal format for file times]' \ + '-M[page output]' \ + '-x[exclude the following names]' \ + "(-1 -2 -s -m -l -v -h -z -C -t -T -M)1:zip file:_files -g '(#i)*.(zip|[jw]ar)'" \ + '*:file:->files' && return 0 + ;; +esac + +case $state in + suffixes) + compset -P '*:' + compset -S ':*' || suf=":" + suffixes=( *.*(N:e) ) + _wanted suffixes expl suffixes compadd -S "$suf" -r " " .$^suffixes && return 0 + ;; + files) + if [[ $service = zip ]] && (( ! ${+opt_args[-d]} )); then + _files -g '^(#i)*.(zip|[jw]ar)' && return 0 + else + (( izip = 1 + words[(I)-[^xi]*] )) + (( izip == 1 )) && (( izip++ )) + zipfile=( $~words[izip](|.zip|.ZIP) ) + [[ -z $zipfile[1] ]] && return 1 + if [[ $zipfile[1] != $_zip_cache_list ]]; then + _zip_cache_name="$zipfile[1]" + _zip_cache_list=( $(zipinfo -1 $_zip_cache_name) ) + fi + _wanted files expl 'file from archive' _multi_parts / _zip_cache_list + fi + ;; +esac diff --git a/Functions/Misc/mere b/Functions/Misc/mere index 496c67061..a9beb2c10 100644 --- a/Functions/Misc/mere +++ b/Functions/Misc/mere @@ -80,4 +80,4 @@ fi | ( fi | nroff -T$terminal -man | $col -x ) | -${MANPAGER:-${PAGER:-more}} -s +${=MANPAGER:-${PAGER:-more}} -s -- cgit 1.4.1