summaryrefslogtreecommitdiffstats
path: root/completions/pkgadd
diff options
context:
space:
mode:
Diffstat (limited to 'completions/pkgadd')
-rw-r--r--completions/pkgadd62
1 files changed, 62 insertions, 0 deletions
diff --git a/completions/pkgadd b/completions/pkgadd
new file mode 100644
index 0000000..3f5b6a1
--- /dev/null
+++ b/completions/pkgadd
@@ -0,0 +1,62 @@
+# pkgadd completion -*- shell-script -*-
+#
+# Copyright 2006 Yann Rouillard <yann@opencsw.org>
+
+_pkgadd()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ # if a device directory was given
+ # we must complete with the package
+ # available in this directory
+ local device=/var/spool/pkg
+ local i=$cword
+ while ((i-- > 0)); do
+ case "${words[i]}" in
+ -d)
+ device="${words[i + 1]}"
+ break
+ ;;
+ esac
+ done
+
+ case $prev in
+ -d)
+ _filedir pkg
+ _filedir -d
+ ;;
+ -a | -r | -V)
+ _filedir
+ ;;
+ -k | -s | -R)
+ _filedir -d
+ ;;
+ -P | -x) ;;
+
+ *)
+ if [[ ${cur} == -* ]]; then
+ local opts="-a -A -d -k -n -M -P -r -R -s -v -V -x"
+ COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+ else
+ local pkginst_list
+ if [[ -d $device ]]; then
+ local -a tmplist
+ for filedir in $(/bin/ls -1 $device); do
+ if [[ -d "$device/$filedir" ]] && [[ -f "$device/$filedir/pkginfo" ]]; then
+ tmplist+=(${tmplist[@]:-} "$filedir")
+ fi
+ done
+ pkginst_list="${tmplist[*]}"
+ else
+ pkginst_list="$(strings "$(dequote $device)" |
+ command grep ^PKG= | sort -u | cut -d= -f2)"
+ fi
+ COMPREPLY=($(compgen -W "$pkginst_list" -- ${cur}))
+ fi
+ ;;
+ esac
+} &&
+ complete -F _pkgadd pkgadd
+
+# ex: filetype=sh