#compdef pkg_add pkg_create pkg_delete pkg_info (( $+functions[_bsd_pkg_pkgfiles] )) || _bsd_pkg_pkgfiles() { local ret=1 paths portsdir pkgsdir case $OSTYPE in netbsd*) portsdir=/usr/pkgsrc ;; *) portsdir=${PORTSDIR:-/usr/ports} ;; esac pkgsdir=${PACKAGES:-$portsdir/packages}/All paths=( "${(@)${(@s.:.)PKG_PATH}:#}" ) _files "$@" -g '*.t[bg]z' && ret=0 (( $#path )) && _files "$@" -W paths -g '*.t[bg]z' && ret=0 compadd "$@" - $pkgsdir/*.t[bg]z && ret=0 return ret } (( $+functions[_bsd_pkg_pkgs] )) || _bsd_pkg_pkgs() { compadd "$@" - ${PKG_DBDIR:-/var/db/pkg}/*(/:t) } (( $+functions[_bsd_pkg_pkgs_and_files] )) || _bsd_pkg_pkgs_and_files() { local ret=1 if (( $words[(I)-*F*] )); then _files "$@" && ret=0 else _bsd_pkg_pkgs "$@" && ret=0 fi return ret } _bsd_pkg() { local flags case "$service" in pkg_add) flags=( '-f[force installation]' '-I[don'\''t execute installation scripts]' '-M[run in master mode]' '-n[don'\''t really install packages]' '-p[specify prefix]:prefix directory:_files -/' '-R[don'\''t record]' '-S[run in slave mode]' '-t[specify mktemp template]:mktemp template:_files -/' '-v[be verbose]' ) case "$OSTYPE" in freebsd*) flags=( $flags[@] '-r[fetch from remote site]' ) ;; netbsd*) flags=( $flags[@] '-u[update]' '-V[show version and exit]' ) ;; esac _arguments -s \ $flags[@] \ '*:package to install:_bsd_pkg_pkgfiles' ;; pkg_create) case "$OSTYPE" in freebsd*) flags=( '-f[specify plist file]:plist file:_files' '(-b)-c[specify comment file]:comment file:_files' '(-b)-d[specify descr file]:descr file:_files' '-Y[assume YES for any questions asked]' '-N[assume NO for any questions asked]' '(-b)-O[packing list only mode]' '-v[be verbose]' '-h[force tar to follow symlinks]' '(-b)-i[specify pre-install script]:pre-install script:_files' '(-b)-I[specify post-install script]:post-install script:_files' '(-b)-P[specify initial dependencies]:dependencies:_bsd_pkg_pkgs' '(-b)-p[specify prefix]:prefix directory:_files -/' '(-b)-k[specify deinstall script]:deinstall script:_files' '(-b)-K[specify post-deinstall script]:post-deinstall script:_files' '(-b)-r[specify req script]:req script:_files' '(-b)-s[specify source directory]:source directory:_files -/' '(-b)-t[specify mktemp template]:mktemp template:_files' '(-b)-X[specify exclude file]:exclude file for tar:_files' '(-b)-D[specify message file]:message file:_files' '(-b)-m[specify mtree file]:mtree file:_files' '(-b)-o[specify origin]:origin:_files -W ${PORTSDIR\:-/usr/ports} -/' '-j[use bzip2]' '-z[use gzip]' '(-c -d -O -i -I -P -p -k -K -r -s -t -X -D -m -o)-b[specify pkgname]:pkgname:_bsd_pkg_pkgs' '*:package file name:_files' ) ;; netbsd*) # NetBSD users, improve me! flags=( '*:package name:_bsd_pkg_pkgs' ) ;; esac _arguments -s \ $flags[@] ;; pkg_delete) flags=( '-D[don'\''t execute deinstallation scripts]' '-d[remove empty directories]' '-f[force deinstallation]' '-n[don'\''t really deinstall packages]' '-p[specify prefix]:prefix directory:_files -/' '-v[be verbose]' ) case "$OSTYPE" in freebsd*) flags=( $flags[@] '(:)-a[delete all installed packages]' '-G[do not expand glob patterns]' '-i[be interactive]' '-r[delete recursively]' '-x[use regular expression]' ) ;; netbsd*) flags=( $flags[@] '(:)-a[delete all installed packages]' '-F[specify each package by an installed file]' '-i[be interactive]' '-O[only delete the package'\''s entries]' '-R[delete upward recursively]' '-r[delete recursively]' '-V[show version and exit]' ) ;; esac _arguments -s \ $flags[@] \ '(-a)*:package name:_bsd_pkg_pkgs_and_files' ;; pkg_info) flags=( '(:)-a[show all installed packages]' '-c[show comment fields]' '-D[show install-message files]' '-d[show long descriptions]' '-e[test if package is installed]:package name:_bsd_pkg_pkgs' '-f[show packing list instructions]' '-I[show index lines]' '-i[show install scripts]' '-k[show deinstall scripts]' '-L[show full pathnames of files]' '-l[specify prefix string]:prefix string:' '-m[show mtree files]' '-p[show installation prefixes]' '-q[be quiet]' '-R[show list list of installed requiring packages]' '-r[show requirements scripts]' '-v[be verbose]' ) case "$OSTYPE" in freebsd*) flags=( $flags[@] '-G[do not expand glob patterns]' '-g[show files that'\''s modified]' '-o[show origin]' '-s[show total size occupied by each package]' '-t[specify mktemp template]:mktemp template:_files -/' '*-W[show which package the file belongs to]:file:_files' '-x[use regular expression]' ) ;; netbsd*) flags=( $flags[@] '-B[show build information]' '-b[show RCS Id strings]' '-F[specify each package by an installed file]' '-S[show total size occupied by each package and its dependents]' '-s[show total size occupied by each package]' '-V[show version and exit]' ) ;; esac _arguments -s \ $flags[@] \ '(-a)*:package name:_bsd_pkg_pkgs_and_files' ;; esac } _bsd_pkg "$@"