diff options
Diffstat (limited to 'completions/pkgadd')
-rw-r--r-- | completions/pkgadd | 62 |
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 |