about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Completion/BSD/Command/_bsd_pkg178
2 files changed, 144 insertions, 39 deletions
diff --git a/ChangeLog b/ChangeLog
index 4d775d86e..72a8aa4e6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-09-16  Bart Schaefer  <schaefer@zsh.org>
+
+	* Akinori MUSHA: 15815: Completion/BSD/Command/_bsd_pkg: More
+	detailed completion of package options on different BSD flavors.
+
 2001-09-15  Bart Schaefer  <schaefer@zsh.org>
 
 	* 15812: Doc/Makefile.in, Doc/Zsh/zle.yo: Include mod_tcp.yo in
diff --git a/Completion/BSD/Command/_bsd_pkg b/Completion/BSD/Command/_bsd_pkg
index 5089bc1a3..26c722886 100644
--- a/Completion/BSD/Command/_bsd_pkg
+++ b/Completion/BSD/Command/_bsd_pkg
@@ -2,65 +2,165 @@
 
 (( $+functions[_bsd_pkg_packages] )) ||
 _bsd_pkg_packages() {
-  local ret=1 paths
+  local ret=1 paths portsdir
+
+  case $OSTYPE in
+  netbsd*)
+    portsdir=/usr/pkg
+    ;;
+  *)
+    portsdir=${PORTSDIR:-/usr/ports}
+    ;;
+  esac
 
   paths=( "${(@)${(@s.:.)PKG_PATH}:#}" )
   _files "$@" -g \*.tgz && ret=0
   (( $#path )) && _files "$@" -W paths -g \*.tgz && ret=0
-  compadd "$@" - /usr/ports/packages/All/*.tgz && ret=0
+  compadd "$@" - $portsdir/packages/All/*.tgz && ret=0
+
+  return ret
+}
+
+(( $+functions[_bsd_pkg_or_file] )) ||
+_bsd_pkg_or_file() {
+  local ret=1
+
+  if (( $words[(I)-*F*] )); then
+    _files "$@" && ret=0
+  else
+    compadd "$@" - ${PKGDBDIR:-/var/db/pkg}/*(/:t) && 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:prefix directory:_files -/'
+      '-R[don'\''t record]'
+      '-S[run in slave mode]'
+      '-t:mktemp template:_files -/'
+      '-v[be verbose]'
+    )
+
+    case "$OSTYPE" in
+    freebsd*)
+      flags=(
+        $flags[@]
+        '-r[use remote fetching]'
+      )
+      ;;
+    netbsd*)
+      flags=(
+	$flags[@]
+	'-u[update]'
+	'-V[show version and exit]'
+      )
+      ;;
+    esac
+
     _arguments -s \
-        '-v[be verbose]' \
-	'-I[don'\''t execute installation scripts]' \
-	'-n[don'\''t really install packages]' \
-	'-R[don'\''t record]' \
-	'-r[use remote fetching]' \
-	'-f[force installation]' \
-	'-M[run in master mode]' \
-	'-S[run in slave mode]' \
-        '-t:mktemp template:_files -/' \
-        '-p:prefix directory:_files -/' \
-        '*:package to install:_bsd_pkg_packages'
+      $flags[@] \
+      '*:package to install:_bsd_pkg_packages'
     ;;
 
   pkg_delete)
+    flags=(
+      '-D[don'\''t execute deinstallation scripts]'
+      '-d[remove empty directories]'
+      '-f[force deinstallation]'
+      '-n[don'\''t really deinstall packages]'
+      '-p:prefix directory:_files -/'
+      '-v[be verbose]'
+    )
+
+    case "$OSTYPE" in
+    freebsd*)
+      flags=(
+        $flags[@]
+	'(:)-a[show all installed packages]'
+        '-G[do not expand glob patterns]'
+	'-i[be interactive]'
+        '-x[use regular expression]'
+      )
+      ;;
+    netbsd*)
+      flags=(
+	$flags[@]
+	'(:)-a[show 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 \
-        '-v[be verbose]' \
-	'-D[don'\''t execute deinstallation scripts]' \
-	'-n[don'\''t really deinstall packages]' \
-	'-d[remove empty directories]' \
-	'-f[force deinstallation]' \
-        '-p:prefix directory:_files -/' \
-        '*:package to deinstall:compadd - /var/db/pkg/*(\:t)'
+      $flags[@] \
+      '(-a)*:package name:_bsd_pkg_or_file'
     ;;
 
   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:compadd - ${PKG_DBDIR:-/var/db/pkg}/*(\:t)'
+      '-f[show packing list instructions]'
+      '-I[show index lines]'
+      '-i[show install scripts]'
+      '-k[show deinstall scripts]'
+      '-L[show full pathnames of files]'
+      '-l:prefix directory:_files -/'
+      '-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:mktemp template:_files -/'
+	'*-W:show which package the file belongs to:_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 \
-        '(:)-a[show all installed packages]' \
-	'-v[be verbose]' \
-	'-p[show installation prefixes]' \
-	'-q[be quiet]' \
-	'-c[show comment fields]' \
-	'-d[show long descriptions]' \
-	'-D[show install-message files]' \
-        '-f[show packing list instructions]' \
-	'-i[show install scripts]' \
-	'-I[show index lines]' \
-	'-k[show deinstall scripts]' \
-	'-r[show requirements scripts]' \
-	'-R[show list list of installed requiring packages]' \
-	'-m[show mtree files]' \
-	'-L[show full pathnames of files]' \
-        '-e[test if package is installed]:package name:compadd - /var/db/pkg/*(\:t)' \
-        '-l:prefix directory:_files -/' \
-        '-t:mktemp template:_files -/' \
-        '(-a)*:package name:compadd - /var/db/pkg/*(\:t)'
+      $flags[@] \
+      '(-a)*:package name:_bsd_pkg_or_file'
     ;;
   esac
 }