diff --git a/CHANGES b/CHANGES index 3c0e2db8..4096518f 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,7 @@ * nmcli: new completion * svcadm: new completion, contributed by Yann Rouillard * pkg-get: new completion, contributed by Yann Rouillard + * pkgadd: new completion, contributed by Yann Rouillard bash-completion (2.0) diff --git a/completions/Makefile.am b/completions/Makefile.am index d54ea0aa..b9d261c4 100644 --- a/completions/Makefile.am +++ b/completions/Makefile.am @@ -236,6 +236,7 @@ bashcomp_DATA = a2x \ pkg-config \ pkg-get \ pkg_delete \ + pkgadd \ pkgtool \ plague-client \ pm-hibernate \ diff --git a/completions/pkgadd b/completions/pkgadd new file mode 100644 index 00000000..28098815 --- /dev/null +++ b/completions/pkgadd @@ -0,0 +1,59 @@ +# pkgadd completion -*- shell-script -*- +# +# Copyright 2006 Yann Rouillard + +_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--)) -gt 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|-k|-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 + for filedir in $(/bin/ls -1 $device); do + if [[ -d "$device/$filedir" ]] && [[ -f "$device/$filedir/pkginfo" ]]; then + pkginst_list+=( ${pkginst_list[@]:-} "$filedir" ) + fi + done + pkginst_list="${pkginst_list[@]}" + else + pkginst_list=$(strings $(dequote $device) | grep "^PKG=" | sort -u | cut -d= -f2) + fi + COMPREPLY=( $(compgen -W "$pkginst_list" -- ${cur}) ) + fi + esac +} && +complete -F _pkgadd pkgadd + +# ex: ts=4 sw=4 et filetype=sh diff --git a/test/completion/pkgadd.exp b/test/completion/pkgadd.exp new file mode 100644 index 00000000..128c823e --- /dev/null +++ b/test/completion/pkgadd.exp @@ -0,0 +1 @@ +assert_source_completions pkgadd diff --git a/test/lib/completions/pkgadd.exp b/test/lib/completions/pkgadd.exp new file mode 100644 index 00000000..ba5eadf9 --- /dev/null +++ b/test/lib/completions/pkgadd.exp @@ -0,0 +1,18 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "pkgadd " +sync_after_int + + +teardown