commit:     1781d5b81021858db447d4c63f68e081e320fd00
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun Aug 31 19:18:57 2014 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Aug 31 19:18:57 2014 +0000
URL:        
http://sources.gentoo.org/gitweb/?p=proj/gentoo-bashcomp.git;a=commit;h=1781d5b8

Split completions by completed command.

---
 completions/browser-config |   31 +
 completions/distcc-config  |   41 ++
 completions/ebuild         |   34 +
 completions/ekeyword       |   46 ++
 completions/emerge         |  410 +++++++++++
 completions/epkginfo       |   28 +
 completions/epm            |   48 ++
 completions/equery         |  280 ++++++++
 completions/euse           |   60 ++
 completions/gcc-config     |   45 ++
 completions/gentoo         | 1652 --------------------------------------------
 completions/glsa-check     |   33 +
 completions/java-config    |  158 +++++
 completions/metagen        |   30 +
 completions/portageq       |   87 +++
 completions/rc             |   21 +
 completions/rc-service     |  111 +++
 completions/rc-status      |   28 +
 completions/rc-update      |   40 ++
 completions/revdep-rebuild |   55 ++
 completions/splat          |   33 +
 completions/webapp-config  |  169 +++++
 22 files changed, 1788 insertions(+), 1652 deletions(-)

diff --git a/completions/browser-config b/completions/browser-config
new file mode 100644
index 0000000..158ca42
--- /dev/null
+++ b/completions/browser-config
@@ -0,0 +1,31 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+#
+# browser-config completion command
+#
+_browserconfig()
+{
+    local cur prev
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    if [[ ${COMP_CWORD} -eq 1 ]]; then
+    COMPREPLY=($(compgen -W '-b -h -m' -- ${cur}))
+    elif [[ "${prev}" == "-b" ]]; then
+    COMPREPLY=($(compgen -W "$(for i in 
@GENTOO_PORTAGE_EPREFIX@/usr/share/browser-config/*; do [ -f $i ] && echo 
${i##*/}; done)" $cur))
+    elif [[ "${prev}" == "-m" ]]; then
+        COMPREPLY=($(compgen -W "same_window new_window new_tab new_browser" 
-- ${cur}))
+    if [[ -z "${COMPREPLY}" ]]; then
+        COMPREPLY=''
+    fi
+    else
+    unset COMPREPLY
+    fi
+    return 0
+} &&
+complete -F _browserconfig browser-config
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/distcc-config b/completions/distcc-config
new file mode 100644
index 0000000..41c315f
--- /dev/null
+++ b/completions/distcc-config
@@ -0,0 +1,41 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+#
+# distcc-config completion command
+#
+_distccconfig()
+{
+    local cur curword numwords opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    numwords=${#COMP_WORDS[*]}
+    curword=${COMP_CWORD}
+    if [[ ${numwords} -gt 3 ]]; then
+    unset COMPREPLY
+    return 0
+    fi
+    if [[ "${cur}" == -* ]] || [ ${curword} -eq 1 ]; then
+    if [[ ${numwords} -le 2 ]] && [[ ${curword} -eq 1 ]]; then
+        opts="--get-hosts \
+        --get-verbose \
+        --get-log \
+        --set-hosts \
+        --set-verbose \
+        --set-log \
+        --add-path \
+        --no-path"
+    else
+        opts=""
+    fi
+    else
+    opts=""
+    fi
+    COMPREPLY=($(compgen -W "${opts}" | grep ^$cur))
+    return 0
+} &&
+complete -F _distccconfig distcc-config
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/ebuild b/completions/ebuild
new file mode 100644
index 0000000..cd6e17e
--- /dev/null
+++ b/completions/ebuild
@@ -0,0 +1,34 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+#
+# ebuild completion command
+#
+_ebuild()
+{
+    local cur opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+
+    opts="help setup clean fetch digest manifest unpack compile test preinst \
+        install postinst qmerge merge unmerge prerm postrm config package rpm \
+        configure prepare"
+
+    if [[ $COMP_CWORD -eq 1 ]] ; then
+    COMPREPLY=($(compgen -f -X "!*.ebuild" -- ${cur}) \
+            $(compgen -d -- ${cur}) \
+            $(compgen -W '--debug --force --help --ignore-default-opts 
--skip-manifest' -- ${cur}))
+
+    elif [[ $COMP_CWORD -eq 2 && "${COMP_WORDS[1]}" = "--debug --force 
--ignore-default-opts --skip-manifest" ]] ; then
+    COMPREPLY=($(compgen -f -X "!*.ebuild" -- ${cur}) $(compgen -d -- ${cur}))
+
+    elif [[ $COMP_CWORD -ge 2 ]] ; then
+    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+    fi
+    return 0
+} &&
+complete -o filenames -F _ebuild ebuild
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/ekeyword b/completions/ekeyword
new file mode 100644
index 0000000..3bf3006
--- /dev/null
+++ b/completions/ekeyword
@@ -0,0 +1,46 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+source "@helpersdir@/gentoo-common.sh"
+
+#
+# ekeyword completion
+#
+
+_ekeyword()
+{
+    local cur portdir archl_s archl_u archl_r archl_m arch
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    portdir=$(_portdir)
+
+    [[ -f ${portdir}/profiles/arch.list ]] || return 0
+
+    for arch in all $(< ${portdir}/profiles/arch.list) ; do
+        archl_m="${archl_m} -${arch}"
+        archl_u="${archl_u} ~${arch}"
+        archl_r="${archl_r} ^${arch}"
+        archl_s="${archl_s}  ${arch}"
+    done
+
+    case ${cur} in
+        -*)
+            COMPREPLY=($(compgen -W "${archl_m}" -- ${cur}))
+            ;;
+        ~*)
+            COMPREPLY=($(compgen -W "${archl_u}" -- ${cur}))
+            ;;
+        ^*)
+            COMPREPLY=($(compgen -W "${archl_r}" -- ${cur}))
+            ;;
+        *)
+            COMPREPLY=($(compgen -W "${archl_s}" -- ${cur}))
+            _filedir 'ebuild'
+            ;;
+        esac
+} &&
+complete -o filenames -F _ekeyword ekeyword
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/emerge b/completions/emerge
new file mode 100644
index 0000000..63c02b4
--- /dev/null
+++ b/completions/emerge
@@ -0,0 +1,410 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+source "@helpersdir@/gentoo-common.sh"
+
+#
+# emerge completion command
+#
+_emerge()
+{
+    local c cur prev curword numwords opts cond prepend
+    local words stophere i x
+    local action actionpos sysactions pkgpos
+    local portdir=$(_portdir -o)
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    numwords=${#COMP_WORDS[*]}
+    curword=${COMP_CWORD}
+    opts=''
+
+    if [[ ${prev} == '>' || ${prev} == '<' ]] ; then
+        COMPREPLY=($(compgen -f -- ${cur}))
+        return 0
+    fi
+
+    # find action
+    for x in ${COMP_LINE} ; do
+        if [[ ${x} =~ ^(system|world)$ ]] || [[ ${x} =~ -[CPcs] ]] || \
+            [[ ${x} =~ 
--(clean|config|depclean|info|metadata|prune|regen|resume|search|sync|unmerge) 
]]
+        then
+            action=${x}
+            break
+        fi
+    done
+
+    if [[ -n ${action} ]]; then
+        for ((i = 0; i < ${numwords}; i++ )); do
+            if [[ ${COMP_WORDS[${i}]} == "${action}" ]]; then
+                actionpos=${i}
+                pkgpos=$((actionpos + 1))
+                break
+            fi
+        done
+
+        if [[ ${action} == -* && ${action} != --* ]] ; then
+            case "${action}" in
+            -*C*) action='--unmerge' ;;
+            -*P*) action='--prune' ;;
+            -*c*) action='--clean' ;;
+            -*s*) action='--search' ;;
+            esac
+        fi
+    else
+        for ((i = 1; i < ${numwords}; i++ )); do
+            if [[ ! ${COMP_WORDS[$i]} == -* ]]; then
+                pkgpos=${i}
+                break
+            fi
+        done
+        [[ -z ${pkgpos} ]] && pkgpos=${numwords}
+    fi
+
+    # Handle special cases.
+    if [[ ${action} == "--search" ]] || [[ ${COMP_LINE} == *" 
"-@(S|-searchdesc)* ]] || \
+        [[ ${COMP_LINE} == *" "-@(V|-version)* ]] || [[ ${action} == 
"--metadata" ]]
+    then
+        unset COMPREPLY
+        return 0
+    elif [[ ${COMP_LINE} == *" "-@(h|-help)* ]] ; then
+        unset COMPREPLY
+        [[ ${curword} -eq 2 ]] && COMPREPLY=($(compgen -W 'system world 
--sync' -- ${cur}))
+        return 0
+    fi
+
+    # Complete on options.
+    if [[ ${cur} == -* ]]; then
+        # If a resume option was specified, it needs special handling.
+        if [[ ${COMP_LINE} =~ --(resume|skipfirst) ]] ; then
+            if [[ ${cur} == --* ]]; then
+                opts="--ask --pretend --resume --skipfirst"
+            elif [[ ${cur} == -* ]]; then
+                [[ ${COMP_LINE} =~ --(ask|pretend) ]] && opts="-a -p"
+            fi
+        elif [[ ${cur} == --* ]]; then
+            # Complete on long options.
+            opts="--alphabetical --ask \
+                --buildpkg --buildpkgonly \
+                --changelog --clean --color=y --color=n --columns 
--complete-graph --config \
+                --debug --deep --depclean \
+                --emptytree \
+                --fetch-all-uri --fetchonly \
+                --getbinpkg --getbinpkgonly \
+                --ignore-default-opts --info \
+                --jobs= \
+                --keep-going \
+                --metadata \
+                --newuse --noconfmem --nodeps --noreplace --nospinner \
+                --oneshot --onlydeps \
+                --pretend --prune \
+                --quiet \
+                --reinstall=changed-use --regen \
+                --search \
+                --sync \
+                --tree \
+                --unmerge --update --upgradeonly --usepkg --usepkgonly \
+                --verbose \
+                --with-bdeps=y --with-bdeps=n"
+            if [[ ${curword} -eq 1 ]] && [[ ${numwords} -eq 2 ]] ; then
+                opts="${opts} --help --resume --searchdesc --version"
+            fi
+        elif [[ ${cur} == -* ]]; then
+            # Complete on short options.
+            opts="-B -D -G -K -N -O -a -b -d -e -f -g -k -l -n -o -p -q -t -u 
-v"
+            if [[ ${curword} -eq 1 ]] && [[ ${numwords} -eq 2 ]] ; then
+                opts="${opts} -h -S -V"
+            fi
+            if [[ -z ${action} ]] && [[ ${curword} -eq $((pkgpos - 1)) ]] ; 
then
+                opts="${opts} -C -P -c -s"
+            fi
+        fi
+
+        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+
+        # NOTE: This slows things down!
+        # (Adapted from bash_completion by Ian Macdonald <i...@caliban.org>)
+        # This removes any options from the list of completions that have
+        # already been specified on the command line.
+        COMPREPLY=($(echo "${COMP_WORDS[@]}" | \
+            (while read -d ' ' i; do
+                [[ -z ${i} ]] && continue
+                # flatten array with spaces on either side,
+                # otherwise we cannot grep on word boundaries of
+                # first and last word
+                COMPREPLY=" ${COMPREPLY[@]} "
+                # remove word from list of completions
+                COMPREPLY=(${COMPREPLY/ ${i%% *} / })
+            done
+            echo ${COMPREPLY[@]})))
+
+        return 0
+    fi # options
+
+    # Stop completion if a special case is encountered.
+    if [[ ${action} =~ (system|world) ]] || \
+        [[ ${COMP_LINE} =~ --(depclean|metadata|regen|resume|skipfirst|sync) ]]
+    then
+        unset COMPREPLY
+        return 0
+    fi
+
+    # Complete on installed packages when unmerging.
+    if [[ "${action}" == '--unmerge' ]]; then
+    if [[ -n "${cur}" ]] ; then
+        if [[ "${cur}" == */* ]]; then
+        words=$(builtin cd @GENTOO_PORTAGE_EPREFIX@/var/db/pkg; compgen -G 
"${cur}*")
+        else
+        words=$(builtin cd @GENTOO_PORTAGE_EPREFIX@/var/db/pkg; compgen -S '/' 
-G "${cur}*")
+
+                local n=0
+                for i in ${words} ; do
+                    [[ ${i} == ${cur}* ]] && n=$((n+1))
+                done
+
+                if [[ ${n} -eq 1 ]] ; then
+                    words="$(builtin cd @GENTOO_PORTAGE_EPREFIX@/var/db/pkg ; 
compgen -G "*-*/*")"
+                fi
+        fi
+            COMPREPLY=($(for i in ${words} ; do \
+                            [[ ${i} == ${cur}* ]] && echo ${i} ; \
+                        done))
+    else
+        COMPREPLY=($(builtin cd @GENTOO_PORTAGE_EPREFIX@/var/db/pkg ; compgen 
-S '/' -G "*-*"))
+    fi
+
+        [[ -z "${COMPREPLY}" ]] && _pkgname_only ${cur} 
@GENTOO_PORTAGE_EPREFIX@/var/db/pkg
+        return 0
+    fi
+
+    # Check for conditional.
+    cond="${cur%%[A-Za-z0-9]*}"
+    cur="${cur:${#cond}}"
+    if [[ ${cond:0:1} == "'" || ${cond:0:1} == '"' ]] ; then
+        prepend="-P ${cond:1}"
+        c="${cond:1}"
+    else
+        c="${cond}"
+    fi
+
+    # Handle cases where a conditional is specified.
+    if [[ -n "${cond}" ]]; then
+    if [[ -n "${cur}" ]]; then
+            if [[ ${cur} == */* ]]; then
+                if [[ ${cur} == *-[0-9]* ]] ; then
+                    words="$(\
+                        for pd in ${portdir} ; do \
+                            builtin cd ${pd} ; \
+                            local cat="${cur%/*}" ; \
+                            local pkg="$(echo ${cur%-[0-9]*})" ; \
+                            pkg="${pkg##*/}" ; \
+                            for x in ${cat}/${pkg}/*.ebuild ; do \
+                                [[ -f ${x} ]] || continue ; \
+                                x="${x/${pkg}\/}" ; \
+                                echo "${x%*.ebuild}" ; \
+                            done ; \
+                        done)"
+                else
+            words="$(\
+                    for pd in ${portdir} ; do \
+                        builtin cd ${pd}; \
+                        compgen -X "*metadata.xml" -G "${cur}*" -- ${cur} ; \
+                    done)"
+                fi
+
+                local w
+                for x in $words ; do
+                    w="${x}\n${w}"
+                done
+
+                words=$(echo -ne ${w} | sort | uniq)
+                COMPREPLY=( ${words} )
+
+                # Complete on the specific versions (if appropriate).
+                # TODO - see if we can use _pkgname
+                if [[ ${#COMPREPLY[@]} -le 1 ]]; then
+                    COMPREPLY=($(
+                        for pd in ${portdir}; do
+                            if [[ -d ${pd}/metadata/md5-cache ]]; then
+                                builtin cd ${pd}/metadata/md5-cache
+                                compgen ${prepend} -G "${cur}*" -- "${cur}"
+                            elif [[ -d ${pd}/metadata/cache ]]; then
+                                builtin cd ${pd}/metadata/cache
+                                compgen ${prepend} -G "${cur}*" -- "${cur}"
+                            else
+                                builtin cd ${pd}
+                                local cat="${cur%/*}"
+                                local pkg="$(echo ${cur%-[0-9]*}*)"
+                                pkg="${pkg##*/}"
+                                for x in ${cat}/${pkg}/*.ebuild; do
+                                    [[ -f "${x}" ]] || continue
+                                    x="${x/${pkg}\/}"
+                                    if [[ ${cond:0:1} == "'" ]] || [[ 
${cond:0:1} == '"' ]]; then
+                                        echo "${c}${x%*.ebuild}"
+                                    else
+                                        echo "${x%*.ebuild}"
+                                    fi
+                                done
+                            fi
+                        done
+                    ))
+                else
+                    COMPREPLY=($(compgen ${prepend} -W "${words}" -- $cur))
+                fi
+            else
+                words="$(\
+                    for pd in ${portdir} ; do \
+                        builtin cd ${pd} ; \
+                        compgen ${prepend} -S '/' -G "${cur}*" -- "${cur}" ; \
+                    done)"
+
+                local w
+                for x in words ; do
+                    w="${x}\n${w}"
+                done
+
+                COMPREPLY=($(echo -e ${w} | uniq))
+                [[ ${#COMPREPLY[@]} = 1 ]] && \
+                    COMPREPLY=($(\
+                        for pd in ${portdir} ; do \
+                            builtin cd ${pd} ; \
+                            compgen ${prepend} -G "${cur}*/*" -- "${cur}" ; \
+                        done))
+            fi
+        else
+        words="$(\
+                for pd in ${portdir} ; do \
+                    builtin cd ${pd}; \
+                    compgen -G "*-*"; \
+                done)"
+        COMPREPLY=($(compgen -W "${words}" -- "${cur}"))
+    fi
+
+        # If all else fails, try to complete on package names without the
+    # category being specified.
+    if [[ -z "${COMPREPLY}" ]]; then
+        words="$(\
+                for pd in ${portdir} ; do \
+                    builtin cd ${pd}; \
+                    for i in *-*/${cur}*; do \
+                        [[ -d $i ]] && echo ${i##*/}; \
+                    done ; \
+                done)"
+
+        COMPREPLY=($(compgen ${prepend} -W "${words}" -- ${cur}))
+
+        if [[ ${#COMPREPLY[@]} -le 1 ]]; then
+            # Now complete on the specific versions.
+            words="$(
+                for pd in ${portdir}; do
+                    if [[ -d ${pd}/metadata/md5-cache ]]; then
+                        builtin cd ${pd}/metadata/md5-cache
+                        for i in */${cur}*; do
+                            [[ -f $i ]] && echo ${i##*/}
+                        done
+                    elif [[ -d ${pd}/metadata/cache ]]; then
+                        builtin cd ${pd}/metadata/cache
+                        for i in */${cur}*; do
+                            [[ -f $i ]] && echo ${i##*/}
+                        done
+                    fi
+                done
+            )"
+            COMPREPLY=($(compgen ${prepend} -W "${words}" -- "${cur}"))
+        fi
+    fi
+    return 0
+    fi
+
+    # Complete on packages.
+    #
+    # Only allow these actions if no packages have been specified.
+    #
+    # TODO: This doesn't block these actions if no categories are
+    #       specified. Please fix me.
+    #
+    #       e.g. emerge -a gentoo-dev-sources
+    #
+    #            will still allow system and world actions to be specified,
+    #            as opposed to
+    #
+    #            emerge -a sys-kernel/gentoo-dev-sources
+    #
+    if [[ ${COMP_CWORD} -eq 1 ]] || [[ ! " ${COMP_LINE} " == *" "*[/]*" "* ]] 
; then
+        sysactions=$'\n'"system"$'\n'"world"
+    else
+        sysactions=''
+    fi
+
+    if [[ -n "${cur}" ]] ; then
+        if [[ ${cur} == */* ]] ; then
+            words=$(\
+                for pd in ${portdir} ; do \
+                    builtin cd ${pd}; \
+                    compgen -X "*metadata.xml" -G "${cur}*" ; \
+                done)"${sysactions}"
+        else
+            local ww=$(\
+                for pd in ${portdir} ; do \
+                    builtin cd ${pd} ; \
+                    compgen -X "!@(*-*|virtual)" -S '/' -G "${cur}*"; \
+                done)"${sysactions}"
+            # complete on virtuals
+            ww="${ww} $(\
+                for pd in ${portdir} ; do \
+                    if [[ -d ${pd}/profiles ]] ; then
+                        find ${pd}/profiles -name virtuals -exec \
+                            sed -n -e 's|^\(virtual/[[:alnum:]]\+\).*$|\1|p' 
{} \; | \
+                            sort -u
+                    fi ; \
+                done)"
+
+            local w
+            for x in ${ww} ; do w="${x}\n${w}" ; done
+
+            words=$(echo -e ${w} | sort -u)
+
+            local n=0
+            for i in ${words} ; do
+                [[ ${i} == ${cur}* ]] && n=$((n+1))
+            done
+
+            if [[ ${n} -eq 1 ]] ; then
+                words=$(for pd in ${portdir} ; do \
+                            builtin cd ${pd} ; \
+                            compgen -G "*-*/*" ; \
+                        done)"${sysactions}"
+            fi
+        fi
+        COMPREPLY=($(for i in ${words} ; do \
+                        [[ ${i} == ${cur}* ]] && echo ${i} ; \
+                    done))
+    else
+        words="$(\
+            for pd in ${portdir} ; do \
+                builtin cd ${pd} ; \
+                compgen -S '/' -G "*-*" ; \
+            done)""${sysactions}"
+    COMPREPLY=($(compgen -W "${words}" -- ${cur}))
+    fi
+
+    # If all else fails, try to complete on package names without the
+    # category being specified.
+    if [[ -z "${COMPREPLY}" ]]; then
+        words="$(\
+            for pd in ${portdir} ; do \
+                builtin cd ${pd}; \
+                for i in [a-z]*-[a-z0-9]*/${cur}*; do \
+                    [[ -d $i ]] && echo ${i##*/}; \
+                done ; \
+            done)"
+    COMPREPLY=($(compgen -W "${words}" -- ${cur}))
+    fi
+
+    return 0
+} &&
+complete -o filenames -F _emerge emerge
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/epkginfo b/completions/epkginfo
new file mode 100644
index 0000000..34c81f3
--- /dev/null
+++ b/completions/epkginfo
@@ -0,0 +1,28 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+source "@helpersdir@/gentoo-common.sh"
+
+#
+# epkginfo completion
+#
+
+_epkginfo()
+{
+    local cur prev
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    # Only complete if the previous entry on the command line is not
+    # a package name.
+    if [[ ${COMP_CWORD} -eq 1 || ${prev:0:1} == "-" ]]; then
+        _equery_meta $cur
+    fi
+
+    return 0
+} &&
+complete -F _epkginfo epkginfo
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/epm b/completions/epm
new file mode 100644
index 0000000..e8a8caa
--- /dev/null
+++ b/completions/epm
@@ -0,0 +1,48 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+source "@helpersdir@/gentoo-common.sh"
+
+_epm() {
+    local cur prev opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD]}"
+    opts="-q --query -V -y --verify -e --erase --help"
+
+    if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
+        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+        return 0
+    fi
+
+    case "${prev}" in
+        --help)
+            COMPREPLY=()
+            ;;
+        -q|--query)
+            _pkgname -I ${cur}
+            COMPREPLY=($(compgen -W "${COMPREPLY[@]} -l -f -G -a" -- ${cur}))
+            ;;
+        *)
+            local x all=0 file=0
+            for x in ${COMP_WORDS[@]} ; do
+                [[ ${x} == -* ]] || continue
+                [[ ${x} == *f* ]] && file=1
+                [[ ${x} == *a* ]] && all=1
+            done
+
+            if [[ ${file} -eq 1 ]] ; then
+                COMPREPLY=($(compgen -f -- ${cur}))
+            elif [[ ${all} -eq 1 ]] ; then
+                COMPREPLY=()
+            else
+                _pkgname -I ${cur}
+            fi
+            ;;
+    esac
+} &&
+complete -o filenames -F _epm epm
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/equery b/completions/equery
new file mode 100644
index 0000000..a8aa829
--- /dev/null
+++ b/completions/equery
@@ -0,0 +1,280 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+source "@helpersdir@/gentoo-common.sh"
+
+#
+# Bash completion for the Gentoo 'equery' command
+#
+_equery()
+{
+    local cur prev mode portdir i j
+    portdir=$(_portdir)
+    mode="GLOBAL"
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    # Find out what we're currently doing here.
+    j=0
+    for i in "${COMP_WORDS[@]}"; do
+        if [[ $j -lt $COMP_CWORD ]]; then
+        j=$((j + 1))
+        case $i in
+            
@(belongs|ch@(anges|eck)|dep@(ends|graph)|files|has?(use)|keywords|list|meta|size|uses|which|b|c|k|d|g|f|a|h|y|l|m|s|u|w))
+            mode=$i
+            ;;
+        esac
+    fi
+    done
+    # Now get to work.
+    case $mode in
+    GLOBAL)
+        # Complete commands and global options.
+        case $cur in
+        -*)
+            COMPREPLY=($(compgen -W "-q --quiet -C --nocolor -h --help -V 
--version" -- $cur))
+            ;;
+        *)
+            COMPREPLY=($(compgen -W "belongs changes check depends depgraph 
files has hasuse keywords list meta size uses which" -- $cur))
+            ;;
+        esac
+        ;;
+    c?(hanges))
+        # Complete package name only if it is not yet supplied.
+        if [[ ${prev} == ${mode} ]]; then
+            case $cur in
+                -*)
+                    COMPREPLY=($(compgen -W "-h --help" -- $cur))
+                ;;
+                *)
+                    _pkgname -A $cur
+                ;;
+            esac
+        else
+            case $cur in
+                *)
+                    COMPREPLY=($(compgen -W "-h --help -l --latest -f --full 
--limit --from --to" -- $cur))
+                ;;
+            esac
+        fi
+        ;;
+    f?(iles))
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+            # --filter=<list>: completion of the files types list
+            if [[ ${prev} == "-f" || "${cur}" == "--filter="* ]] ; then
+                COMPREPLY=($(_list_compgen "${cur#--filter=}" , \
+                    dir,obj,sym,dev,fifo,path,conf,cmd,doc,man,info))
+                return 0
+            fi
+        case $cur in
+            --f*)
+            # don't handle --filter= with others to avoid space after the "="
+            COMPREPLY=($(compgen -P "--filter=" \
+                -W "dir obj sym dev fifo path conf cmd doc man info"))
+            ;;
+            -*)
+            COMPREPLY=($(compgen -W "-h --help -m --md5sum -s --timestamp -t
+                --type --tree -f --filter=" -- $cur))
+            ;;
+            *)
+            # Only installed packages can have their files listed.
+                _pkgname -I $cur
+            ;;
+        esac
+        fi
+        ;;
+    a|has)
+        COMPREPLY=($(compgen -W "-h --help -I --exclude-installed -o \
+             --overlay-tree -p --portage-tree -F --format" -- $cur))
+        ;;
+    y|keywords)
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+            case "${cur}" in
+                -*)
+                    COMPREPLY=($(compgen -W "-h --help -v --version -a --arch 
-A
+                    --align -T --top-position -B --bold -C --color -O 
--overlays
+                    -P --prefix -S --ignore-slot" -- $cur))
+                    ;;
+                *)
+                    _pkgname -A $cur
+                    ;;
+            esac
+        fi
+        ;;
+    l?(ist))
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+        case "${cur}" in
+            -*)
+            COMPREPLY=($(compgen -W "-h --help -d --duplicates -b
+                --binpkgs-missing -f --full-regex -m --mask-reason -I
+                --exclude-installed -o --overlay-tree -p --portage-tree -F
+                --format" -- $cur))
+            ;;
+            *)
+                if [[ ${COMP_WORDS[@]} =~ -(p|o) || ${COMP_WORDS[@]} =~ 
--(portage|overlay)-tree ]]; then
+                    _pkgname -A $cur
+                else
+                    _pkgname -I $cur
+                fi
+            ;;
+        esac
+        fi
+        ;;
+    b?(elongs))
+        # Only complete if the previous entry on the command line is not
+        # a file name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+            case $cur in
+                -*)
+                    COMPREPLY=($(compgen -W "-h --help -f --full-regex -e
+                        --early-out -n --name-only" -- $cur))
+                    ;;
+                *)
+                    COMPREPLY=($(compgen -f -- $cur) \
+                        $(compgen -d -S '/' -- $cur))
+                    ;;
+            esac
+        fi
+        ;;
+    u?(ses))
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+            case $cur in
+                -*)
+                    COMPREPLY=($(compgen -W "-h --help -a --all" -- $cur))
+                ;;
+                *)
+                    # Complete on all package names.
+                    _pkgname -A $cur
+                ;;
+            esac
+        fi
+        ;;
+    w?(hich))
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+            case $cur in
+                -*)
+                    COMPREPLY=($(compgen -W "-h --help -m --include-masked" -- 
$cur))
+                ;;
+                *)
+                    # Complete on all package names.
+                    _pkgname -A $cur
+                ;;
+            esac
+        fi
+        ;;
+    g|depgraph)
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+            case $cur in
+            -*)
+                COMPREPLY=($(compgen -W "-h --help -A --no-atom -M --no-mask -U
+                    --no-useflags -l --linear --depth" -- $cur))
+            ;;
+            *)
+            # Complete on all package names.
+            _pkgname -A $cur
+            ;;
+        esac
+        fi
+        ;;
+    d?(epends))
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+        case $cur in
+            -*)
+                COMPREPLY=($(compgen -W "-h --help -a --all-packages -D
+                    --indirect --depth" -- $cur))
+            ;;
+            *)
+            case $prev in
+                -a|--all-packages)
+                # Complete on all package names.
+                _pkgname -A $cur
+                ;;
+                *)
+                # Complete on installed package names.
+                    _pkgname -I $cur
+                ;;
+                        esac
+                        ;;
+        esac
+        fi
+        ;;
+    m?(eta))
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+            _equery_meta $cur
+        fi
+        ;;
+    k|check)
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} ]]; then
+            case $cur in
+                -*)
+                    COMPREPLY=($(compgen -W "${COMPREPLY[@]} -h --help -f
+                        --full-regex -o --only-failures" -- ${cur}))
+                ;;
+                *)
+                # Only installed packages can have their integrity verified.
+                    _pkgname -I $cur
+                ;;
+            esac
+        fi
+        ;;
+    s?(ize))
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+        case $cur in
+            -*)
+            COMPREPLY=($(compgen -W "-h --help -b --bytes -f
+                --full-regex" -- $cur))
+            ;;
+            *)
+            # Only installed packages can have their size calculated.
+            _pkgname -I $cur
+            ;;
+        esac
+        fi
+        ;;
+        h?(asuse))
+        # Only complete if the previous entry on the command line is not
+        # a package name.
+        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
+            case $cur in
+                -*)
+                COMPREPLY=($(compgen -W "--help -i --installed -I 
--exclude-installed -p --portage-tree -o --overlay" -- $cur))
+                ;;
+                *)
+                local glob loc
+                        [[ -f ${portdir}/profiles/use.desc ]] || return 0
+                        [[ -f ${portdir}/profiles/use.local.desc ]] || return 0
+                glob=$(sed -n -e 's/^\([^ ]\+\) - .*$/\1/p' 
${portdir}/profiles/use.desc)
+                loc=$(sed -n -e 's/^[^ ]\+:\([^ ]*\) - .*$/\1/p' 
${portdir}/profiles/use.local.desc)
+                COMPREPLY=($(compgen -W "$glob $loc" -- $cur))
+                ;;
+            esac
+            fi
+            ;;
+    esac
+    return 0
+} &&
+complete -F _equery equery
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/euse b/completions/euse
new file mode 100644
index 0000000..e7bed0a
--- /dev/null
+++ b/completions/euse
@@ -0,0 +1,60 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+source "@helpersdir@/gentoo-common.sh"
+
+_euse() {
+    local cur prev opts sopts use portdir
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    opts="-h --help -v --version -i --info -I --info-installed -a --active
+        -E --enable -D --disable -P --prune"
+    sopts="-g --global -l --local"
+
+    if [[ ${cur} == -* ]] && [[ ${COMP_CWORD} -eq 1 ]] ; then
+        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+        return 0
+    fi
+
+    case "${prev}" in
+        -h|--help|-v|--version)
+            COMPREPLY=()
+            ;;
+        -a|--active)
+            COMPREPLY=($(compgen -W "${sopts}" -- ${cur}))
+            ;;
+        -i|--info|-I|--info-installed|-E|--enable|-D|--disable|-P|--prune)
+            portdir=$(_portdir)
+        use="$(sed -n -e 's/^\([^ ]\+\) - .*$/\1/p' 
${portdir}/profiles/use.desc) \
+        $(sed -n -e 's/^[^ ]\+:\([^ ]*\) - .*$/\1/p' 
${portdir}/profiles/use.local.desc)"
+        COMPREPLY=($(compgen -W "${use} ${sopts}" -- ${cur}))
+            ;;
+        *)
+            local l=0 g=0
+
+            if [[ ${COMP_LINE} == *" "@(-l|--local)* ]] ; then
+                l=1
+            elif [[ ${COMP_LINE} == *" "@(-g|--global)* ]] ; then
+                g=1
+            fi
+
+            if [[ ${COMP_LINE} == *" 
"@(-i|--info|-I|--info-installed|-E|--enable|-D|--disable|-P|--prune)* ]]
+            then
+                portdir=$(_portdir)
+
+                if [[ ${l} -eq 1 ]] ; then
+                    use=$(sed -n -e 's/^[^ ]\+:\([^ ]*\) - .*$/\1/p' 
${portdir}/profiles/use.local.desc)
+                elif [[ ${g} -eq 1 ]] ; then
+                    use=$(sed -n -e 's/^\([^ ]\+\) - .*$/\1/p' 
${portdir}/profiles/use.desc)
+                fi
+
+                COMPREPLY=($(compgen -W "${use}" -- ${cur}))
+            fi
+    esac
+} &&
+complete -F _euse euse
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/gcc-config b/completions/gcc-config
new file mode 100644
index 0000000..80e95c3
--- /dev/null
+++ b/completions/gcc-config
@@ -0,0 +1,45 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+#
+# gcc-config completion command
+#
+_gcc_config() {
+    local cur prev opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    opts="-O --use-old \
+        -P --use-portage-chost \
+        -c --get-current-profile \
+        -l --list-profiles \
+        -E --print-environ \
+        -B --get-bin-path \
+        -L --get-lib-path \
+        -X --get-stdcxx-incdir"
+
+    if [[ "${cur}" == -* ]] ; then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+    elif [[ ${COMP_CWORD} -eq 1 ]] ; then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) \
+            $(compgen -W "$(gcc-config -l | sed -r -e 's/(\[([^]]*)\]) //g')" \
+                -- ${cur}) )
+        return 0
+    fi
+
+    case "${prev}" in
+        
-O|--use-old|-P|--use-portage-chost|-c|--get-current-profile|-l|--list-profiles)
+            COMPREPLY=()
+            ;;
+        *)
+            COMPREPLY=( $(compgen -W "\
+                $(gcc-config -l | sed -r -e 's/(\[([^]]*)\]) //g')" -- ${cur}) 
)
+            ;;
+    esac
+} &&
+complete -F _gcc_config gcc-config
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/gentoo b/completions/gentoo
deleted file mode 100644
index 30a1eb1..0000000
--- a/completions/gentoo
+++ /dev/null
@@ -1,1652 +0,0 @@
-# Gentoo Linux Bash Shell Command Completion
-#
-# Copyright 1999-2013 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License, v2 or later
-
-source "@helpersdir@/gentoo-common.sh"
-
-#
-# emerge completion command
-#
-_emerge()
-{
-    local c cur prev curword numwords opts cond prepend
-    local words stophere i x
-    local action actionpos sysactions pkgpos
-    local portdir=$(_portdir -o)
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-    numwords=${#COMP_WORDS[*]}
-    curword=${COMP_CWORD}
-    opts=''
-
-    if [[ ${prev} == '>' || ${prev} == '<' ]] ; then
-        COMPREPLY=($(compgen -f -- ${cur}))
-        return 0
-    fi
-
-    # find action
-    for x in ${COMP_LINE} ; do
-        if [[ ${x} =~ ^(system|world)$ ]] || [[ ${x} =~ -[CPcs] ]] || \
-            [[ ${x} =~ 
--(clean|config|depclean|info|metadata|prune|regen|resume|search|sync|unmerge) 
]]
-        then
-            action=${x}
-            break
-        fi
-    done
-
-    if [[ -n ${action} ]]; then
-        for ((i = 0; i < ${numwords}; i++ )); do
-            if [[ ${COMP_WORDS[${i}]} == "${action}" ]]; then
-                actionpos=${i}
-                pkgpos=$((actionpos + 1))
-                break
-            fi
-        done
-
-        if [[ ${action} == -* && ${action} != --* ]] ; then
-            case "${action}" in
-            -*C*) action='--unmerge' ;;
-            -*P*) action='--prune' ;;
-            -*c*) action='--clean' ;;
-            -*s*) action='--search' ;;
-            esac
-        fi
-    else
-        for ((i = 1; i < ${numwords}; i++ )); do
-            if [[ ! ${COMP_WORDS[$i]} == -* ]]; then
-                pkgpos=${i}
-                break
-            fi
-        done
-        [[ -z ${pkgpos} ]] && pkgpos=${numwords}
-    fi
-
-    # Handle special cases.
-    if [[ ${action} == "--search" ]] || [[ ${COMP_LINE} == *" 
"-@(S|-searchdesc)* ]] || \
-        [[ ${COMP_LINE} == *" "-@(V|-version)* ]] || [[ ${action} == 
"--metadata" ]]
-    then
-        unset COMPREPLY
-        return 0
-    elif [[ ${COMP_LINE} == *" "-@(h|-help)* ]] ; then
-        unset COMPREPLY
-        [[ ${curword} -eq 2 ]] && COMPREPLY=($(compgen -W 'system world 
--sync' -- ${cur}))
-        return 0
-    fi
-
-    # Complete on options.
-    if [[ ${cur} == -* ]]; then
-        # If a resume option was specified, it needs special handling.
-        if [[ ${COMP_LINE} =~ --(resume|skipfirst) ]] ; then
-            if [[ ${cur} == --* ]]; then
-                opts="--ask --pretend --resume --skipfirst"
-            elif [[ ${cur} == -* ]]; then
-                [[ ${COMP_LINE} =~ --(ask|pretend) ]] && opts="-a -p"
-            fi
-        elif [[ ${cur} == --* ]]; then
-            # Complete on long options.
-            opts="--alphabetical --ask \
-                --buildpkg --buildpkgonly \
-                --changelog --clean --color=y --color=n --columns 
--complete-graph --config \
-                --debug --deep --depclean \
-                --emptytree \
-                --fetch-all-uri --fetchonly \
-                --getbinpkg --getbinpkgonly \
-                --ignore-default-opts --info \
-                --jobs= \
-                --keep-going \
-                --metadata \
-                --newuse --noconfmem --nodeps --noreplace --nospinner \
-                --oneshot --onlydeps \
-                --pretend --prune \
-                --quiet \
-                --reinstall=changed-use --regen \
-                --search \
-                --sync \
-                --tree \
-                --unmerge --update --upgradeonly --usepkg --usepkgonly \
-                --verbose \
-                --with-bdeps=y --with-bdeps=n"
-            if [[ ${curword} -eq 1 ]] && [[ ${numwords} -eq 2 ]] ; then
-                opts="${opts} --help --resume --searchdesc --version"
-            fi
-        elif [[ ${cur} == -* ]]; then
-            # Complete on short options.
-            opts="-B -D -G -K -N -O -a -b -d -e -f -g -k -l -n -o -p -q -t -u 
-v"
-            if [[ ${curword} -eq 1 ]] && [[ ${numwords} -eq 2 ]] ; then
-                opts="${opts} -h -S -V"
-            fi
-            if [[ -z ${action} ]] && [[ ${curword} -eq $((pkgpos - 1)) ]] ; 
then
-                opts="${opts} -C -P -c -s"
-            fi
-        fi
-
-        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
-
-        # NOTE: This slows things down!
-        # (Adapted from bash_completion by Ian Macdonald <i...@caliban.org>)
-        # This removes any options from the list of completions that have
-        # already been specified on the command line.
-        COMPREPLY=($(echo "${COMP_WORDS[@]}" | \
-            (while read -d ' ' i; do
-                [[ -z ${i} ]] && continue
-                # flatten array with spaces on either side,
-                # otherwise we cannot grep on word boundaries of
-                # first and last word
-                COMPREPLY=" ${COMPREPLY[@]} "
-                # remove word from list of completions
-                COMPREPLY=(${COMPREPLY/ ${i%% *} / })
-            done
-            echo ${COMPREPLY[@]})))
-
-        return 0
-    fi # options
-
-    # Stop completion if a special case is encountered.
-    if [[ ${action} =~ (system|world) ]] || \
-        [[ ${COMP_LINE} =~ --(depclean|metadata|regen|resume|skipfirst|sync) ]]
-    then
-        unset COMPREPLY
-        return 0
-    fi
-
-    # Complete on installed packages when unmerging.
-    if [[ "${action}" == '--unmerge' ]]; then
-    if [[ -n "${cur}" ]] ; then
-        if [[ "${cur}" == */* ]]; then
-        words=$(builtin cd @GENTOO_PORTAGE_EPREFIX@/var/db/pkg; compgen -G 
"${cur}*")
-        else
-        words=$(builtin cd @GENTOO_PORTAGE_EPREFIX@/var/db/pkg; compgen -S '/' 
-G "${cur}*")
-
-                local n=0
-                for i in ${words} ; do
-                    [[ ${i} == ${cur}* ]] && n=$((n+1))
-                done
-
-                if [[ ${n} -eq 1 ]] ; then
-                    words="$(builtin cd @GENTOO_PORTAGE_EPREFIX@/var/db/pkg ; 
compgen -G "*-*/*")"
-                fi
-        fi
-            COMPREPLY=($(for i in ${words} ; do \
-                            [[ ${i} == ${cur}* ]] && echo ${i} ; \
-                        done))
-    else
-        COMPREPLY=($(builtin cd @GENTOO_PORTAGE_EPREFIX@/var/db/pkg ; compgen 
-S '/' -G "*-*"))
-    fi
-
-        [[ -z "${COMPREPLY}" ]] && _pkgname_only ${cur} 
@GENTOO_PORTAGE_EPREFIX@/var/db/pkg
-        return 0
-    fi
-
-    # Check for conditional.
-    cond="${cur%%[A-Za-z0-9]*}"
-    cur="${cur:${#cond}}"
-    if [[ ${cond:0:1} == "'" || ${cond:0:1} == '"' ]] ; then
-        prepend="-P ${cond:1}"
-        c="${cond:1}"
-    else
-        c="${cond}"
-    fi
-
-    # Handle cases where a conditional is specified.
-    if [[ -n "${cond}" ]]; then
-    if [[ -n "${cur}" ]]; then
-            if [[ ${cur} == */* ]]; then
-                if [[ ${cur} == *-[0-9]* ]] ; then
-                    words="$(\
-                        for pd in ${portdir} ; do \
-                            builtin cd ${pd} ; \
-                            local cat="${cur%/*}" ; \
-                            local pkg="$(echo ${cur%-[0-9]*})" ; \
-                            pkg="${pkg##*/}" ; \
-                            for x in ${cat}/${pkg}/*.ebuild ; do \
-                                [[ -f ${x} ]] || continue ; \
-                                x="${x/${pkg}\/}" ; \
-                                echo "${x%*.ebuild}" ; \
-                            done ; \
-                        done)"
-                else
-            words="$(\
-                    for pd in ${portdir} ; do \
-                        builtin cd ${pd}; \
-                        compgen -X "*metadata.xml" -G "${cur}*" -- ${cur} ; \
-                    done)"
-                fi
-
-                local w
-                for x in $words ; do
-                    w="${x}\n${w}"
-                done
-
-                words=$(echo -ne ${w} | sort | uniq)
-                COMPREPLY=( ${words} )
-
-                # Complete on the specific versions (if appropriate).
-                # TODO - see if we can use _pkgname
-                if [[ ${#COMPREPLY[@]} -le 1 ]]; then
-                    COMPREPLY=($(
-                        for pd in ${portdir}; do
-                            if [[ -d ${pd}/metadata/md5-cache ]]; then
-                                builtin cd ${pd}/metadata/md5-cache
-                                compgen ${prepend} -G "${cur}*" -- "${cur}"
-                            elif [[ -d ${pd}/metadata/cache ]]; then
-                                builtin cd ${pd}/metadata/cache
-                                compgen ${prepend} -G "${cur}*" -- "${cur}"
-                            else
-                                builtin cd ${pd}
-                                local cat="${cur%/*}"
-                                local pkg="$(echo ${cur%-[0-9]*}*)"
-                                pkg="${pkg##*/}"
-                                for x in ${cat}/${pkg}/*.ebuild; do
-                                    [[ -f "${x}" ]] || continue
-                                    x="${x/${pkg}\/}"
-                                    if [[ ${cond:0:1} == "'" ]] || [[ 
${cond:0:1} == '"' ]]; then
-                                        echo "${c}${x%*.ebuild}"
-                                    else
-                                        echo "${x%*.ebuild}"
-                                    fi
-                                done
-                            fi
-                        done
-                    ))
-                else
-                    COMPREPLY=($(compgen ${prepend} -W "${words}" -- $cur))
-                fi
-            else
-                words="$(\
-                    for pd in ${portdir} ; do \
-                        builtin cd ${pd} ; \
-                        compgen ${prepend} -S '/' -G "${cur}*" -- "${cur}" ; \
-                    done)"
-
-                local w
-                for x in words ; do
-                    w="${x}\n${w}"
-                done
-
-                COMPREPLY=($(echo -e ${w} | uniq))
-                [[ ${#COMPREPLY[@]} = 1 ]] && \
-                    COMPREPLY=($(\
-                        for pd in ${portdir} ; do \
-                            builtin cd ${pd} ; \
-                            compgen ${prepend} -G "${cur}*/*" -- "${cur}" ; \
-                        done))
-            fi
-        else
-        words="$(\
-                for pd in ${portdir} ; do \
-                    builtin cd ${pd}; \
-                    compgen -G "*-*"; \
-                done)"
-        COMPREPLY=($(compgen -W "${words}" -- "${cur}"))
-    fi
-
-        # If all else fails, try to complete on package names without the
-    # category being specified.
-    if [[ -z "${COMPREPLY}" ]]; then
-        words="$(\
-                for pd in ${portdir} ; do \
-                    builtin cd ${pd}; \
-                    for i in *-*/${cur}*; do \
-                        [[ -d $i ]] && echo ${i##*/}; \
-                    done ; \
-                done)"
-
-        COMPREPLY=($(compgen ${prepend} -W "${words}" -- ${cur}))
-
-        if [[ ${#COMPREPLY[@]} -le 1 ]]; then
-            # Now complete on the specific versions.
-            words="$(
-                for pd in ${portdir}; do
-                    if [[ -d ${pd}/metadata/md5-cache ]]; then
-                        builtin cd ${pd}/metadata/md5-cache
-                        for i in */${cur}*; do
-                            [[ -f $i ]] && echo ${i##*/}
-                        done
-                    elif [[ -d ${pd}/metadata/cache ]]; then
-                        builtin cd ${pd}/metadata/cache
-                        for i in */${cur}*; do
-                            [[ -f $i ]] && echo ${i##*/}
-                        done
-                    fi
-                done
-            )"
-            COMPREPLY=($(compgen ${prepend} -W "${words}" -- "${cur}"))
-        fi
-    fi
-    return 0
-    fi
-
-    # Complete on packages.
-    #
-    # Only allow these actions if no packages have been specified.
-    #
-    # TODO: This doesn't block these actions if no categories are
-    #       specified. Please fix me.
-    #
-    #       e.g. emerge -a gentoo-dev-sources
-    #
-    #            will still allow system and world actions to be specified,
-    #            as opposed to
-    #
-    #            emerge -a sys-kernel/gentoo-dev-sources
-    #
-    if [[ ${COMP_CWORD} -eq 1 ]] || [[ ! " ${COMP_LINE} " == *" "*[/]*" "* ]] 
; then
-        sysactions=$'\n'"system"$'\n'"world"
-    else
-        sysactions=''
-    fi
-
-    if [[ -n "${cur}" ]] ; then
-        if [[ ${cur} == */* ]] ; then
-            words=$(\
-                for pd in ${portdir} ; do \
-                    builtin cd ${pd}; \
-                    compgen -X "*metadata.xml" -G "${cur}*" ; \
-                done)"${sysactions}"
-        else
-            local ww=$(\
-                for pd in ${portdir} ; do \
-                    builtin cd ${pd} ; \
-                    compgen -X "!@(*-*|virtual)" -S '/' -G "${cur}*"; \
-                done)"${sysactions}"
-            # complete on virtuals
-            ww="${ww} $(\
-                for pd in ${portdir} ; do \
-                    if [[ -d ${pd}/profiles ]] ; then
-                        find ${pd}/profiles -name virtuals -exec \
-                            sed -n -e 's|^\(virtual/[[:alnum:]]\+\).*$|\1|p' 
{} \; | \
-                            sort -u
-                    fi ; \
-                done)"
-
-            local w
-            for x in ${ww} ; do w="${x}\n${w}" ; done
-
-            words=$(echo -e ${w} | sort -u)
-
-            local n=0
-            for i in ${words} ; do
-                [[ ${i} == ${cur}* ]] && n=$((n+1))
-            done
-
-            if [[ ${n} -eq 1 ]] ; then
-                words=$(for pd in ${portdir} ; do \
-                            builtin cd ${pd} ; \
-                            compgen -G "*-*/*" ; \
-                        done)"${sysactions}"
-            fi
-        fi
-        COMPREPLY=($(for i in ${words} ; do \
-                        [[ ${i} == ${cur}* ]] && echo ${i} ; \
-                    done))
-    else
-        words="$(\
-            for pd in ${portdir} ; do \
-                builtin cd ${pd} ; \
-                compgen -S '/' -G "*-*" ; \
-            done)""${sysactions}"
-    COMPREPLY=($(compgen -W "${words}" -- ${cur}))
-    fi
-
-    # If all else fails, try to complete on package names without the
-    # category being specified.
-    if [[ -z "${COMPREPLY}" ]]; then
-        words="$(\
-            for pd in ${portdir} ; do \
-                builtin cd ${pd}; \
-                for i in [a-z]*-[a-z0-9]*/${cur}*; do \
-                    [[ -d $i ]] && echo ${i##*/}; \
-                done ; \
-            done)"
-    COMPREPLY=($(compgen -W "${words}" -- ${cur}))
-    fi
-
-    return 0
-} &&
-complete -o filenames -F _emerge emerge
-
-#
-# ebuild completion command
-#
-_ebuild()
-{
-    local cur opts
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-
-    opts="help setup clean fetch digest manifest unpack compile test preinst \
-        install postinst qmerge merge unmerge prerm postrm config package rpm \
-        configure prepare"
-
-    if [[ $COMP_CWORD -eq 1 ]] ; then
-    COMPREPLY=($(compgen -f -X "!*.ebuild" -- ${cur}) \
-            $(compgen -d -- ${cur}) \
-            $(compgen -W '--debug --force --help --ignore-default-opts 
--skip-manifest' -- ${cur}))
-
-    elif [[ $COMP_CWORD -eq 2 && "${COMP_WORDS[1]}" = "--debug --force 
--ignore-default-opts --skip-manifest" ]] ; then
-    COMPREPLY=($(compgen -f -X "!*.ebuild" -- ${cur}) $(compgen -d -- ${cur}))
-
-    elif [[ $COMP_CWORD -ge 2 ]] ; then
-    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
-    fi
-    return 0
-} &&
-complete -o filenames -F _ebuild ebuild
-
-#
-# rc completion command
-#
-_rc()
-{
-    local cur
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    if [[ ${#COMP_WORDS[*]} -le 2 ]]; then
-    COMPREPLY=($(compgen -W "$(for i in 
@GENTOO_PORTAGE_EPREFIX@/etc/runlevels/*; do echo ${i##*/}; done)" -- $cur))
-    fi
-    return 0
-} &&
-complete -F _rc rc
-
-#
-# rc-status completion command
-#
-_rcstatus()
-{
-    local cur
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    if [[ $COMP_CWORD -eq 1 ]]; then
-        if [[ "${cur}" == --* ]]; then
-        COMPREPLY=($(compgen -W '--all --list --unused' -- ${cur}))
-    elif [[ "${cur}" == -* ]]; then
-        COMPREPLY=($(compgen -W '-a -l -u' -- ${cur}))
-    else
-        COMPREPLY=($(compgen -W "$(rc-status --list)" -- ${cur}))
-    fi
-    else
-    unset COMPREPLY
-    fi
-    return 0
-} &&
-complete -F _rcstatus rc-status
-
-#
-# rc-update completion command
-#
-_rcupdate()
-{
-    local cur show
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    if [[ $COMP_CWORD -eq 1 ]]; then
-    if [[ "${cur}" == -* ]]; then
-        COMPREPLY=($(compgen -W '-a -d -s' -- ${cur}))
-    else
-        COMPREPLY=($(compgen -W 'add del show' ${cur}))
-    fi
-    else
-        if [[ "${COMP_WORDS[1]}" == "show" ]] || [[ "${COMP_WORDS[1]}" == "-s" 
]]; then
-        show="TRUE"
-    fi
-    if ([[ $COMP_CWORD -eq 3 ]] && [[ -z "$show" ]]) || \
-            ([[ $COMP_CWORD -eq 2 ]] && [[ -n "$show" ]])
-        then
-        COMPREPLY=($(compgen -W "$(for i in 
@GENTOO_PORTAGE_EPREFIX@/etc/runlevels/*; do echo ${i##*/}; done)" -- $cur))
-    elif [[ $COMP_CWORD -eq 2 ]]; then
-        COMPREPLY=($(compgen -X "*.@(c|sh|test)" -W "$(for i in 
@GENTOO_PORTAGE_EPREFIX@/etc/init.d/*; do echo ${i##*/}; done)" $cur))
-    elif [[ ${#COMP_WORDS[*]} -gt 2 ]] ; then
-        COMPREPLY=($(compgen -W "$(for i in 
@GENTOO_PORTAGE_EPREFIX@/etc/runlevels/*; do echo ${i##*/}; done)" -- $cur))
-    else
-        unset COMPREPLY
-    fi
-    fi
-    return 0
-} &&
-complete -F _rcupdate rc-update
-
-#
-# gcc-config completion command
-#
-_gcc_config() {
-    local cur prev opts
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-    opts="-O --use-old \
-        -P --use-portage-chost \
-        -c --get-current-profile \
-        -l --list-profiles \
-        -E --print-environ \
-        -B --get-bin-path \
-        -L --get-lib-path \
-        -X --get-stdcxx-incdir"
-
-    if [[ "${cur}" == -* ]] ; then
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-        return 0
-    elif [[ ${COMP_CWORD} -eq 1 ]] ; then
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) \
-            $(compgen -W "$(gcc-config -l | sed -r -e 's/(\[([^]]*)\]) //g')" \
-                -- ${cur}) )
-        return 0
-    fi
-
-    case "${prev}" in
-        
-O|--use-old|-P|--use-portage-chost|-c|--get-current-profile|-l|--list-profiles)
-            COMPREPLY=()
-            ;;
-        *)
-            COMPREPLY=( $(compgen -W "\
-                $(gcc-config -l | sed -r -e 's/(\[([^]]*)\]) //g')" -- ${cur}) 
)
-            ;;
-    esac
-} &&
-complete -F _gcc_config gcc-config
-
-#
-# distcc-config completion command
-#
-_distccconfig()
-{
-    local cur curword numwords opts
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    numwords=${#COMP_WORDS[*]}
-    curword=${COMP_CWORD}
-    if [[ ${numwords} -gt 3 ]]; then
-    unset COMPREPLY
-    return 0
-    fi
-    if [[ "${cur}" == -* ]] || [ ${curword} -eq 1 ]; then
-    if [[ ${numwords} -le 2 ]] && [[ ${curword} -eq 1 ]]; then
-        opts="--get-hosts \
-        --get-verbose \
-        --get-log \
-        --set-hosts \
-        --set-verbose \
-        --set-log \
-        --add-path \
-        --no-path"
-    else
-        opts=""
-    fi
-    else
-    opts=""
-    fi
-    COMPREPLY=($(compgen -W "${opts}" | grep ^$cur))
-    return 0
-} &&
-complete -F _distccconfig distcc-config
-
-#
-# java-config completion command
-#
-_javaconfig()
-{
-    local cur prev curword numwords opts args arg spec flag sedcmd grepcmd
-    local multiplepkgs pkgs execopts
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-    numwords=${#COMP_WORDS[*]}
-    curword=${COMP_CWORD}
-    opts=""
-    args=""
-    pkgs=""
-    sedcmd="sed -r -e s/\[([^]]+)\].*/\1/"
-    vmsedcmd="sed -r -e s/\[([^]]+)\]/\1/"
-    grepcmd="egrep -o (--set-(system|user)-(classpath|vm)=)"
-    multiplepkgs=""
-    execopts="HtmlConverter JavaPluginControlPanel \
-    appletviewer awt_robot \
-    extcheck \
-    idlj \
-    j2sdk-config jar jarsigner \
-    java java-rmi.cgi java_vm javac javadoc javah javap jdb \
-    keytool kinit klist ktab \
-    native2ascii \
-    oldjava oldjavac oldjdb orbd \
-    policytool \
-    realpath rmic rmid rmiregistry \
-    serialver servertool \
-        tnameserv"
-    if [[ "${cur}" == -* ]] || [ ${curword} -eq 1 ]; then
-    case "${cur}" in
-        --java)
-        opts="--java --javac --java-version"
-        ;;
-        --j@(a@(r|va@(c|-version))|@(dk|re)-home))
-        opts=""
-        ;;
-        --list-available-@(packages|vms))
-        opts=""
-        ;;
-        --@(exec|set-@(user|system)-@(classpath|vm)))
-        opts="${cur}="
-        ;;
-        --set-@(user|system)-@(classpath|vm)=)
-        if [[ "${cur}" == "--set-system-vm=" ]] || [[ "${cur}" == 
"--set-user-vm=" ]]; then
-            flag="--list-available-vms"
-            args=$(java-config --nocolor "${flag}" | cut --delimiter=' ' 
--fields=2 | ${vmsedcmd})
-        else
-            flag="--list-available-packages"
-            args=$(java-config --nocolor "${flag}" | ${sedcmd})
-        fi
-        for arg in ${args}; do
-            [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}"
-        done
-        COMPREPLY=($(compgen $nospace -W "${opts}"))
-        return 0
-        ;;
-        --exec=)
-        COMPREPLY=($(compgen $nospace -W "${execopts}"))
-        return 0
-        ;;
-        *)
-            if [[ "${cur}" == "--set-system-vm="* ]] || [[ "${cur}" == 
"--set-user-vm="* ]]; then
-            args=$(java-config --nocolor --list-available-vms | cut 
--delimiter=' ' --fields=2 | ${vmsedcmd})
-            if [[ "${cur}" == "--set-system-vm="* ]]; then
-            spec=${cur##--set-system-vm=}
-            else
-            spec=${cur##--set-user-vm=}
-            fi
-            for arg in ${args}; do
-            if [[ "${arg:0:${#spec}}" == "${spec}" ]]; then
-                [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}"
-            fi
-            done
-            [[ "${opts}" == "${spec}" ]] && opts=""
-            COMPREPLY=($(compgen -W "${opts}"))
-            return 0
-        elif [[ "${cur}" == "--set-system-classpath="* ]] || [[ "${cur}" == 
"--set-user-classpath="* ]]; then
-            args=$(java-config --nocolor --list-available-packages | ${sedcmd})
-            [[ $(echo "${cur}" | grep -c ",") -gt 0 ]] && multiplepkgs="true"
-            if [[ "${cur}" == "--set-system-classpath="* ]]; then
-            spec="${cur##--set-system-classpath=}"
-            else
-            spec="${cur##--set-user-classpath=}"
-            fi
-            if [[ -n "${multiplepkgs}" ]]; then
-            pkgs="${spec%,*}"
-            spec="${spec##*,}"
-            fi
-            if [[ -n "${multiplepkgs}" ]]; then
-                for arg in ${args}; do
-                if [[ "${spec}" ]]; then
-                    if [[ "${arg:0:${#spec}}" == "${spec}" ]] \
-                        && [[ ! $(echo "${cur}" | egrep -o "(=|,)${arg},") ]]
-                                then
-                    [[ -n "${opts}" ]] && opts="${opts} ${pkgs},${arg}" || 
opts="${pkgs},${arg}"
-                    fi
-                else
-                    if [[ ! $(echo "${cur}" | egrep -o "(=|,)${arg},") ]]; then
-                        [[ -n "${opts}" ]] && opts="${opts} ${pkgs},${arg}" || 
opts="${pkgs},${arg}"
-                    fi
-                fi
-                done
-            [[ "${opts}" == "${pkgs},${spec}" ]] && opts=""
-            else
-                for arg in ${args}; do
-                if [[ "${spec}" ]] && [[ "${arg:0:${#spec}}" == "${spec}" ]]; 
then
-                [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}"
-                fi
-            done
-            [[ "${opts}" == "${spec}" ]] && opts=""
-            fi
-            COMPREPLY=($(compgen -W "${opts}"))
-            return 0
-        elif [[ "${cur}" == "--exec="* ]]; then
-            spec=${cur##--exec=}
-            for arg in ${execopts}; do
-            if [[ "${arg:0:${#spec}}" == "${spec}" ]]; then
-                [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}"
-            fi
-            done
-            [[ "${opts}" == "${spec}" ]] && opts=""
-            COMPREPLY=($(compgen -W "${opts}"))
-            return 0
-        else
-            opts="--classpath --clean-system-classpath --clean-user-classpath \
-                --exec \
-            --full-classpath \
-                --jar --java --javac --java-version --jdk-home --jre-home \
-                --list-available-packages --list-available-vms \
-            --nocolor \
-            --set-system-classpath --set-system-vm --set-user-classpath 
--set-user-vm"
-            [[ "$prev" == "--nocolor" ]] && opts="${opts/--nocolor}"
-        fi
-            ;;
-        esac
-    elif [[ "$prev" == "--nocolor" ]] && [ ${curword} -eq 2 ] && [ $numwords 
-le 3 ]; then
-    opts="--classpath --clean-system-classpath --clean-user-classpath \
-        --exec \
-        --full-classpath \
-        --jar --java --javac --java-version --jdk-home --jre-home \
-        --list-available-packages --list-available-vms \
-        --set-system-classpath --set-system-vm --set-user-classpath 
--set-user-vm"
-    fi
-    COMPREPLY=($(compgen $nospace -W "${opts}" -- ${cur}))
-    return 0
-} &&
-complete $nospace -F _javaconfig java-config
-
-#
-# browser-config completion command
-#
-_browserconfig()
-{
-    local cur prev
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-    if [[ ${COMP_CWORD} -eq 1 ]]; then
-    COMPREPLY=($(compgen -W '-b -h -m' -- ${cur}))
-    elif [[ "${prev}" == "-b" ]]; then
-    COMPREPLY=($(compgen -W "$(for i in 
@GENTOO_PORTAGE_EPREFIX@/usr/share/browser-config/*; do [ -f $i ] && echo 
${i##*/}; done)" $cur))
-    elif [[ "${prev}" == "-m" ]]; then
-        COMPREPLY=($(compgen -W "same_window new_window new_tab new_browser" 
-- ${cur}))
-    if [[ -z "${COMPREPLY}" ]]; then
-        COMPREPLY=''
-    fi
-    else
-    unset COMPREPLY
-    fi
-    return 0
-} &&
-complete -F _browserconfig browser-config
-
-#
-# Bash completion for the Gentoo 'equery' command
-#
-_equery()
-{
-    local cur prev mode portdir i j
-    portdir=$(_portdir)
-    mode="GLOBAL"
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-    # Find out what we're currently doing here.
-    j=0
-    for i in "${COMP_WORDS[@]}"; do
-        if [[ $j -lt $COMP_CWORD ]]; then
-        j=$((j + 1))
-        case $i in
-            
@(belongs|ch@(anges|eck)|dep@(ends|graph)|files|has?(use)|keywords|list|meta|size|uses|which|b|c|k|d|g|f|a|h|y|l|m|s|u|w))
-            mode=$i
-            ;;
-        esac
-    fi
-    done
-    # Now get to work.
-    case $mode in
-    GLOBAL)
-        # Complete commands and global options.
-        case $cur in
-        -*)
-            COMPREPLY=($(compgen -W "-q --quiet -C --nocolor -h --help -V 
--version" -- $cur))
-            ;;
-        *)
-            COMPREPLY=($(compgen -W "belongs changes check depends depgraph 
files has hasuse keywords list meta size uses which" -- $cur))
-            ;;
-        esac
-        ;;
-    c?(hanges))
-        # Complete package name only if it is not yet supplied.
-        if [[ ${prev} == ${mode} ]]; then
-            case $cur in
-                -*)
-                    COMPREPLY=($(compgen -W "-h --help" -- $cur))
-                ;;
-                *)
-                    _pkgname -A $cur
-                ;;
-            esac
-        else
-            case $cur in
-                *)
-                    COMPREPLY=($(compgen -W "-h --help -l --latest -f --full 
--limit --from --to" -- $cur))
-                ;;
-            esac
-        fi
-        ;;
-    f?(iles))
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-            # --filter=<list>: completion of the files types list
-            if [[ ${prev} == "-f" || "${cur}" == "--filter="* ]] ; then
-                COMPREPLY=($(_list_compgen "${cur#--filter=}" , \
-                    dir,obj,sym,dev,fifo,path,conf,cmd,doc,man,info))
-                return 0
-            fi
-        case $cur in
-            --f*)
-            # don't handle --filter= with others to avoid space after the "="
-            COMPREPLY=($(compgen -P "--filter=" \
-                -W "dir obj sym dev fifo path conf cmd doc man info"))
-            ;;
-            -*)
-            COMPREPLY=($(compgen -W "-h --help -m --md5sum -s --timestamp -t
-                --type --tree -f --filter=" -- $cur))
-            ;;
-            *)
-            # Only installed packages can have their files listed.
-                _pkgname -I $cur
-            ;;
-        esac
-        fi
-        ;;
-    a|has)
-        COMPREPLY=($(compgen -W "-h --help -I --exclude-installed -o \
-             --overlay-tree -p --portage-tree -F --format" -- $cur))
-        ;;
-    y|keywords)
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-            case "${cur}" in
-                -*)
-                    COMPREPLY=($(compgen -W "-h --help -v --version -a --arch 
-A
-                    --align -T --top-position -B --bold -C --color -O 
--overlays
-                    -P --prefix -S --ignore-slot" -- $cur))
-                    ;;
-                *)
-                    _pkgname -A $cur
-                    ;;
-            esac
-        fi
-        ;;
-    l?(ist))
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-        case "${cur}" in
-            -*)
-            COMPREPLY=($(compgen -W "-h --help -d --duplicates -b
-                --binpkgs-missing -f --full-regex -m --mask-reason -I
-                --exclude-installed -o --overlay-tree -p --portage-tree -F
-                --format" -- $cur))
-            ;;
-            *)
-                if [[ ${COMP_WORDS[@]} =~ -(p|o) || ${COMP_WORDS[@]} =~ 
--(portage|overlay)-tree ]]; then
-                    _pkgname -A $cur
-                else
-                    _pkgname -I $cur
-                fi
-            ;;
-        esac
-        fi
-        ;;
-    b?(elongs))
-        # Only complete if the previous entry on the command line is not
-        # a file name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-            case $cur in
-                -*)
-                    COMPREPLY=($(compgen -W "-h --help -f --full-regex -e
-                        --early-out -n --name-only" -- $cur))
-                    ;;
-                *)
-                    COMPREPLY=($(compgen -f -- $cur) \
-                        $(compgen -d -S '/' -- $cur))
-                    ;;
-            esac
-        fi
-        ;;
-    u?(ses))
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-            case $cur in
-                -*)
-                    COMPREPLY=($(compgen -W "-h --help -a --all" -- $cur))
-                ;;
-                *)
-                    # Complete on all package names.
-                    _pkgname -A $cur
-                ;;
-            esac
-        fi
-        ;;
-    w?(hich))
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-            case $cur in
-                -*)
-                    COMPREPLY=($(compgen -W "-h --help -m --include-masked" -- 
$cur))
-                ;;
-                *)
-                    # Complete on all package names.
-                    _pkgname -A $cur
-                ;;
-            esac
-        fi
-        ;;
-    g|depgraph)
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-            case $cur in
-            -*)
-                COMPREPLY=($(compgen -W "-h --help -A --no-atom -M --no-mask -U
-                    --no-useflags -l --linear --depth" -- $cur))
-            ;;
-            *)
-            # Complete on all package names.
-            _pkgname -A $cur
-            ;;
-        esac
-        fi
-        ;;
-    d?(epends))
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-        case $cur in
-            -*)
-                COMPREPLY=($(compgen -W "-h --help -a --all-packages -D
-                    --indirect --depth" -- $cur))
-            ;;
-            *)
-            case $prev in
-                -a|--all-packages)
-                # Complete on all package names.
-                _pkgname -A $cur
-                ;;
-                *)
-                # Complete on installed package names.
-                    _pkgname -I $cur
-                ;;
-                        esac
-                        ;;
-        esac
-        fi
-        ;;
-    m?(eta))
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-            _equery_meta $cur
-        fi
-        ;;
-    k|check)
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} ]]; then
-            case $cur in
-                -*)
-                    COMPREPLY=($(compgen -W "${COMPREPLY[@]} -h --help -f
-                        --full-regex -o --only-failures" -- ${cur}))
-                ;;
-                *)
-                # Only installed packages can have their integrity verified.
-                    _pkgname -I $cur
-                ;;
-            esac
-        fi
-        ;;
-    s?(ize))
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-        case $cur in
-            -*)
-            COMPREPLY=($(compgen -W "-h --help -b --bytes -f
-                --full-regex" -- $cur))
-            ;;
-            *)
-            # Only installed packages can have their size calculated.
-            _pkgname -I $cur
-            ;;
-        esac
-        fi
-        ;;
-        h?(asuse))
-        # Only complete if the previous entry on the command line is not
-        # a package name.
-        if [[ ${prev} == ${mode} || ${prev:0:1} == "-" ]]; then
-            case $cur in
-                -*)
-                COMPREPLY=($(compgen -W "--help -i --installed -I 
--exclude-installed -p --portage-tree -o --overlay" -- $cur))
-                ;;
-                *)
-                local glob loc
-                        [[ -f ${portdir}/profiles/use.desc ]] || return 0
-                        [[ -f ${portdir}/profiles/use.local.desc ]] || return 0
-                glob=$(sed -n -e 's/^\([^ ]\+\) - .*$/\1/p' 
${portdir}/profiles/use.desc)
-                loc=$(sed -n -e 's/^[^ ]\+:\([^ ]*\) - .*$/\1/p' 
${portdir}/profiles/use.local.desc)
-                COMPREPLY=($(compgen -W "$glob $loc" -- $cur))
-                ;;
-            esac
-            fi
-            ;;
-    esac
-    return 0
-} &&
-complete -F _equery equery
-
-#
-# epkginfo completion
-#
-
-_epkginfo()
-{
-    local cur prev
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-
-    # Only complete if the previous entry on the command line is not
-    # a package name.
-    if [[ ${COMP_CWORD} -eq 1 || ${prev:0:1} == "-" ]]; then
-        _equery_meta $cur
-    fi
-
-    return 0
-} &&
-complete -F _epkginfo epkginfo
-
-#
-# ekeyword completion
-#
-
-_ekeyword()
-{
-    local cur portdir archl_s archl_u archl_r archl_m arch
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    portdir=$(_portdir)
-
-    [[ -f ${portdir}/profiles/arch.list ]] || return 0
-
-    for arch in all $(< ${portdir}/profiles/arch.list) ; do
-        archl_m="${archl_m} -${arch}"
-        archl_u="${archl_u} ~${arch}"
-        archl_r="${archl_r} ^${arch}"
-        archl_s="${archl_s}  ${arch}"
-    done
-
-    case ${cur} in
-        -*)
-            COMPREPLY=($(compgen -W "${archl_m}" -- ${cur}))
-            ;;
-        ~*)
-            COMPREPLY=($(compgen -W "${archl_u}" -- ${cur}))
-            ;;
-        ^*)
-            COMPREPLY=($(compgen -W "${archl_r}" -- ${cur}))
-            ;;
-        *)
-            COMPREPLY=($(compgen -W "${archl_s}" -- ${cur}))
-            _filedir 'ebuild'
-            ;;
-        esac
-} &&
-complete -o filenames -F _ekeyword ekeyword
-
-#
-# portageq completion
-#
-
-_portageq() {
-    local cur prev opts
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-
-    opts="config_protect_mask \
-      config_protect \
-      vdb_path \
-      gentoo_mirrors \
-      all_best_visible \
-      match \
-      best_visible \
-      mass_best_visible \
-      has_version \
-      portdir \
-      envvar \
-      mass_best_version \
-      best_version \
-      pkgdir \
-      portdir_overlay \
-      distdir"
-
-    if [[ $COMP_CWORD -eq 1 ]] ; then
-    # would always be correct, but it's pretty slow...
-    #COMPREPLY=($(compgen -W "$(portageq | grep '^   [[:lower:]]' | \
-    #    sed -e 's/^.*[[:space:]]\([[:lower:]_]\+\)[[:space:]].*$/\1/')" \
-    #    -- ${cur}))
-    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
-    fi
-
-    case "${prev}" in
-    config*|vdb_path|gentoo_mirrors|*dir*)
-        COMPREPLY=()
-        ;;
-
-    # this also isn't the fastest, but I welcome an alternative method
-    envvar)
-        COMPREPLY=($(compgen -W "$(env -i emerge -v --info | \
-                sed -n -e '/^[[:upper:]].*=".*"/s/^\(.*\)=".*$/\1/p')" -- 
${cur}))
-        ;;
-
-    *v@(isible|ersion)|match)
-        COMPREPLY=($(compgen $nospace -W '/' -- $cur))
-        ;;
-
-    # $prev is a path, so complete on category/package
-    */*)
-            local x a=0
-            for x in ${COMP_WORDS[@]} ; do
-                # This is the only one
-                if [[ "${x}" == "all_best_visible" ]] ; then
-                    a=1
-                    break
-                fi
-            done
-
-            if [[ ${a} -eq 1 ]] ; then
-                COMPREPLY=()
-            else
-                # Check for conditional.
-#                cond="${cur%%[A-Za-z0-9]*}"
-#                cur="${cur:${#cond}}"
-
-#                if [[ -n "${cond}" ]] ; then
-#                    _pkgname -A $cur
-#                else
-                    _pkgname -A $cur
-#                fi
-            fi
-        ;;
-    esac
-} &&
-complete -F _portageq portageq
-
-#
-# webapp-config completion
-#
-
-_webapp_complete_appver()
-{
-    local x proot ibase cur="$2"
-    eval $(. @GENTOO_PORTAGE_EPREFIX@/etc/vhosts/webapp-config ; \
-        echo 
proot="${MY_PERSISTROOT:-@GENTOO_PORTAGE_EPREFIX@/var/db/webapps}" ; \
-        echo ibase="${WA_INSTALLSBASE:-installs}")
-
-    case "$1" in
-    # complete on installed
-    installed)
-        COMPREPLY=($(compgen -W "$(\
-        for x in ${proot}/*/*/installs ; do \
-            if [[ -f "${x}" ]] ; then \
-            local y="${x%/*}" ; \
-            y="${y%/*}" ; \
-            echo "${y##*/}" ; \
-            fi ; \
-        done)" -- ${cur}))
-        ;;
-
-    # complete on uninstalled
-    uninstalled)
-        COMPREPLY=($(compgen -W "$(\
-        for x in ${proot}/*/* ; do \
-            if [[ ! -f "${x}/${ibase}" ]] ; then \
-            local y="${x%/*}" ; \
-            echo "${y##*/}" ; \
-            fi ; \
-        done)" -- ${cur}))
-        ;;
-
-    # all
-    all)
-        COMPREPLY=($(compgen -W "$(\
-        for x in ${proot}/* ; do \
-            [[ -d "${x}" ]] && echo "${x##*/}" ; \
-        done)" -- ${cur}))
-        ;;
-
-    # complete on version
-    *)
-        [[ -d "${proot}/$1" ]] || return 1
-        COMPREPLY=($(compgen -W "$(\
-        for x in ${proot}/$1/* ; do \
-            [[ -d "${x}" ]] && echo "${x##*/}" ; \
-        done)" -- ${cur}))
-        ;;
-    esac
-}
-
-_webapp_config()
-{
-    local cur prev actions opts hostroot
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-
-    actions="-I --install -U --upgrade -C --clean --list-installs \
-    --list-unused-installs --show-installed --show-postinst \
-    --help -v --version"
-    opts="--bug-report --pretend -p -u --user -g --group \
-    -d --dir -h --host -V --verbose --soft --secure --virtual-dirs \
-    --virtual-files --force-virtual"
-
-    eval $(. @GENTOO_PORTAGE_EPREFIX@/etc/vhosts/webapp-config ; \
-    echo hostroot="${VHOST_ROOT:-@GENTOO_PORTAGE_EPREFIX@/var/www}")
-
-    # --bug-report, --pretend, and -p can only be used as first arg
-    if [[ ${COMP_CWORD} -gt 1 ]] ; then
-        opts="${opts/--bug-report --pretend -p}"
-    fi
-
-    if [[ "${cur}" == -* ]] || [[ ${COMP_CWORD} -eq 1 ]] ; then
-        COMPREPLY=($(compgen -W "${opts} ${actions}" -- ${cur}))
-        return 0
-    fi
-
-    case "${prev}" in
-        --bug-report|-p|--pretend)
-        COMPREPLY=($(compgen -W "${opts} ${actions}" -- ${cur}))
-        ;;
-
-        -I|--install)
-            _webapp_complete_appver all ${cur}
-            ;;
-
-        -U|--upgrade)
-            _webapp_complete_appver installed ${cur}
-            ;;
-
-        # only complete on -d since it is required if -C is specified
-        -C|--clean)
-            COMPREPLY=($(compgen -W "-d" -- ${cur}))
-            ;;
-
-        --list-unused-installs)
-            _webapp_complete_appver uninstalled ${cur}
-            ;;
-
-        --list-installs|--show-postinst)
-            _webapp_complete_appver all ${cur}
-            ;;
-
-        #  hrm... anyone know a better way to reliably do this?
-        -h|--host)
-            local x
-            COMPREPLY=($(compgen -W "$(\
-                for x in ${hostroot}/* ; do \
-                    [[ -d "${x}" ]] && echo "${x##*/}" ; \
-                done)" -- ${cur}))
-            ;;
-
-        --virtual*)
-            COMPREPLY=($(compgen -W "server-owned config-owned virtual" \
-            -- ${cur}))
-            ;;
-
-        -d|--dir)
-        local host x i=0
-                # see if --host has been specified, and if so, get the value
-                # that was passed to it.
-        for x in ${COMP_WORDS[@]} ; do
-            if [[ "${x}" == "-h" || "${x}" == "--host" ]] ; then
-            host="${COMP_WORDS[((i+1))]}"
-            break
-            fi
-            i=$((i+1))
-        done
-
-                # otherwise, use the default host
-        if [[ "${host}" == "" ]] ; then
-            eval $(. @GENTOO_PORTAGE_EPREFIX@/etc/vhosts/webapp-config ; \
-            echo host="${VHOST_HOSTNAME:-localhost}")
-        fi
-
-            COMPREPLY=($(compgen -W "$(\
-            for x in ${hostroot}${host}/* ; do \
-            [[ -d "${x}" ]] && echo "${x}" ; \
-            done)" -- ${cur}))
-            ;;
-        -u|--user)
-            COMPREPLY=($(compgen -u -- ${cur}))
-            ;;
-        -g|--group)
-            COMPREPLY=($(compgen -g -- ${cur}))
-            ;;
-
-        # we haven't recognized it yet, so more than likely ${prev}
-        # is a 'app-name' ; assuming it is indeed a valid 'app-name'
-        # (_webapp_complete_appver does the check), complete on available
-        # 'app-version's
-        *)
-            _webapp_complete_appver ${prev} ${cur} || \
-                    _webapp_complete_appver all ${cur}
-            ;;
-    esac
-} &&
-complete -F _webapp_config webapp-config
-
-_revdep_rebuild() {
-    local cur prev numwords opts
-    local words i x
-    local action actionpos
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-    numwords=${#COMP_WORDS[*]}
-
-    if [[ ${prev} == '>' || ${prev} == '<' ]] ; then
-            COMPREPLY=($(compgen -f -- ${cur}))
-            return 0
-        fi
-
-    # find action
-    for ((i = 0; i < ${numwords}; i++ )); do
-        case ${COMP_WORDS[${i}]} in
-            --library|-L)
-                action=${COMP_WORDS[${i}]}
-                actionpos=${i}
-                ;;
-            --help|-h)
-                action=${COMP_WORDS[${i}]}
-                actionpos=${i}
-                ;;
-        esac
-    done
-
-    if [[ ${cur} == -* ]]; then
-        if [[ ${cur} == --* ]]; then
-            opts="--exact --help --ignore --keep-temp --library --nocolor 
--no-ld-path --no-order --no-progress --no-util --pretend --quiet --verbose"
-            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-        else
-            opts="-e -h -i -k -L -l -o -p -P -q -u -v"
-            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-        fi
-        return 0
-    fi
-    if [[ ${action} == '--library' ]] || [[ ${action} == '-L' ]] ; then
-        if [[ "${cur}" == */* ]]; then
-            COMPREPLY=( $(builtin cd @GENTOO_PORTAGE_EPREFIX@/lib; compgen -f 
-- "${cur}") )
-        else
-            COMPREPLY=( $(builtin cd @GENTOO_PORTAGE_EPREFIX@/lib; compgen -X 
'/' -f -- "${cur}") )
-        fi
-    fi
-    return 0
-} &&
-complete -F _revdep_rebuild revdep-rebuild
-
-_splat() {
-    local cur prev opts
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-    opts="-h --help -v --verbose -s --summary -f --logfile -c --colored -l
-    --list -u --count -p --package -t --sort -r --reverse"
-
-    if [[ ${cur} == -* ]] ; then
-        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
-        return 0
-    fi
-
-    case "${prev}" in
-        -f|--logfile)
-            COMPREPLY=($(compgen -f -- ${cur}))
-            ;;
-        *)
-            _pkgname -A ${cur}
-            COMPREPLY=($(compgen -W "${COMPREPLY[@]} ${opts}" -- ${cur}))
-            ;;
-    esac
-} &&
-complete -o filenames -F _splat splat
-
-_euse() {
-    local cur prev opts sopts use portdir
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-    opts="-h --help -v --version -i --info -I --info-installed -a --active
-        -E --enable -D --disable -P --prune"
-    sopts="-g --global -l --local"
-
-    if [[ ${cur} == -* ]] && [[ ${COMP_CWORD} -eq 1 ]] ; then
-        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
-        return 0
-    fi
-
-    case "${prev}" in
-        -h|--help|-v|--version)
-            COMPREPLY=()
-            ;;
-        -a|--active)
-            COMPREPLY=($(compgen -W "${sopts}" -- ${cur}))
-            ;;
-        -i|--info|-I|--info-installed|-E|--enable|-D|--disable|-P|--prune)
-            portdir=$(_portdir)
-        use="$(sed -n -e 's/^\([^ ]\+\) - .*$/\1/p' 
${portdir}/profiles/use.desc) \
-        $(sed -n -e 's/^[^ ]\+:\([^ ]*\) - .*$/\1/p' 
${portdir}/profiles/use.local.desc)"
-        COMPREPLY=($(compgen -W "${use} ${sopts}" -- ${cur}))
-            ;;
-        *)
-            local l=0 g=0
-
-            if [[ ${COMP_LINE} == *" "@(-l|--local)* ]] ; then
-                l=1
-            elif [[ ${COMP_LINE} == *" "@(-g|--global)* ]] ; then
-                g=1
-            fi
-
-            if [[ ${COMP_LINE} == *" 
"@(-i|--info|-I|--info-installed|-E|--enable|-D|--disable|-P|--prune)* ]]
-            then
-                portdir=$(_portdir)
-
-                if [[ ${l} -eq 1 ]] ; then
-                    use=$(sed -n -e 's/^[^ ]\+:\([^ ]*\) - .*$/\1/p' 
${portdir}/profiles/use.local.desc)
-                elif [[ ${g} -eq 1 ]] ; then
-                    use=$(sed -n -e 's/^\([^ ]\+\) - .*$/\1/p' 
${portdir}/profiles/use.desc)
-                fi
-
-                COMPREPLY=($(compgen -W "${use}" -- ${cur}))
-            fi
-    esac
-} &&
-complete -F _euse euse
-
-_glsa_check() {
-    local cur opts
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    opts="-l --list -d --dump --print -t --test -p --pretend -f --fix -i
-    --inject -n --nocolor -e --emergelike -h --help -V --version -v --verbose
-    -c --cve -m --mail"
-
-    if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
-        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
-        return 0
-    fi
-
-    # too slow otherwise
-    if [[ ! -f ${ROOT}/tmp/gc.out ]] || \
-        [[ $(stat ${ROOT}/tmp/gc.out | \
-        sed -n -e 's/^Modify: 
\([[:digit:]]\+-[[:digit:]]\+-[[:digit:]]\+\).*$/\1/p') != "$(date +%F)" ]]
-    then
-        glsa-check -nl 2>/dev/null | \
-            sed -n -e  's/^\([[:digit:]]\+-[[:digit:]]\+\) .*$/\1/p' > \
-                ${ROOT}/tmp/gc.out
-    fi
-
-    COMPREPLY=($(compgen -W "${opts} $(< ${ROOT}/tmp/gc.out)" -- ${cur}))
-} &&
-complete -F _glsa_check glsa-check
-
-_epm() {
-    local cur prev opts
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD]}"
-    opts="-q --query -V -y --verify -e --erase --help"
-
-    if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
-        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
-        return 0
-    fi
-
-    case "${prev}" in
-        --help)
-            COMPREPLY=()
-            ;;
-        -q|--query)
-            _pkgname -I ${cur}
-            COMPREPLY=($(compgen -W "${COMPREPLY[@]} -l -f -G -a" -- ${cur}))
-            ;;
-        *)
-            local x all=0 file=0
-            for x in ${COMP_WORDS[@]} ; do
-                [[ ${x} == -* ]] || continue
-                [[ ${x} == *f* ]] && file=1
-                [[ ${x} == *a* ]] && all=1
-            done
-
-            if [[ ${file} -eq 1 ]] ; then
-                COMPREPLY=($(compgen -f -- ${cur}))
-            elif [[ ${all} -eq 1 ]] ; then
-                COMPREPLY=()
-            else
-                _pkgname -I ${cur}
-            fi
-            ;;
-    esac
-} &&
-complete -o filenames -F _epm epm
-
-_metagen() {
-    local cur prev opts
-    COMPREPLY=()
-    _get_comp_words_by_ref cur prev
-    opts="$(_parse_help ${COMP_WORDS[0]})"
-
-    case $prev in
-        -h|--help|--version)
-            return 0
-            ;;
-        -H|-e|-n|-d|-l)
-            return 0
-            ;;
-        -o)
-            _filedir
-            return 0
-            ;;
-    esac
-
-    COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-    return 0
-} &&
-complete -F _metagen metagen
-
-_rc_service() {
-    local cur prev numwords opts
-    local words i x filename
-    local action actionpos
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-    numwords=${#COMP_WORDS[*]}
-
-    if [[ ${prev} == '>' || ${prev} == '<' ]] ; then
-            COMPREPLY=($(compgen -f -- ${cur}))
-            return 0
-        fi
-
-    # find action
-    for x in ${COMP_LINE} ; do
-        if [[ ${x} =~ --(list|exists|resolve) ]] || \
-            [[ ${x} =~ -(l|e|r) ]]
-        then
-            action=${x}
-            break
-        fi
-    done
-    if [[ -n ${action} ]]; then
-        for ((i = 0; i < ${numwords}; i++ )); do
-            if [[ ${COMP_WORDS[${i}]} == "${action}" ]]; then
-                actionpos=${i}
-                break
-            fi
-        done
-
-        for ((i = 1; i < ${numwords}; i++ )); do
-            if [[ ! ${COMP_WORDS[$i]} == -* ]]; then
-                break
-            fi
-        done
-    fi
-
-    if [[ ${COMP_CWORD} -eq 3 ]]; then
-        return 1
-    fi
-
-    # check if an option was typed
-    if [[ ${cur} == -* ]]; then
-        if [[ ${cur} == --* ]]; then
-            opts="--list --exists --resolve"
-            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-            return 0
-        elif [[ ${cur} == -* ]]; then
-            opts="-l -e -r"
-            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-            return 0
-        fi
-
-
-        # NOTE: This slows things down!
-        # (Adapted from bash_completion by Ian Macdonald <i...@caliban.org>)
-        # This removes any options from the list of completions that have
-        # already been specified on the command line.
-        COMPREPLY=($(echo "${COMP_WORDS[@]}" | \
-        (while read -d ' ' i; do
-            [[ -z ${i} ]] && continue
-            # flatten array with spaces on either side,
-            # otherwise we cannot grep on word boundaries of
-            # first and last word
-            COMPREPLY=" ${COMPREPLY[@]} "
-            # remove word from list of completions
-            COMPREPLY=(${COMPREPLY/ ${i%% *} / })
-        done
-        echo ${COMPREPLY[@]})))
-
-            return 0
-    # if no option typed
-    else
-        if [[ ${COMP_CWORD} -eq 1 ]]; then              # if first word typed
-            words="`rc-service -l | grep ^${cur}`"          # complete for 
init scripts
-            COMPREPLY=($(for i in ${words} ; do \
-            [[ ${i} == ${cur}* ]] && echo ${i} ; \
-            done))
-            return 0
-        elif [[ ${COMP_CWORD} -eq 2 ]] && [[ ${prev} != -* ]]; then # if 
second word typed and we didn't type in a function
-            filename=`rc-service -r ${prev}`
-            opts=`cat ${filename} | grep "^\w*()" | sed "s/().*$//"`    # 
Greps the functions included in the init script
-            if [[ "x${opts}" == "x" ]] ; then               # if no options 
found loosen the grep algorhythm
-                opts=`cat ${filename} | grep "\w*()" | sed "s/().*$//"`
-            fi
-            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-            return 0
-        fi
-    fi
-    if [[ ${action} == '--exists' ]] || [[ ${action} == '-e' ]] || \
-          [[ ${action} == '--resolve' ]]  || [[ ${action} == '-r' ]]; then
-        words="`rc-service -l | grep ^${cur}`"
-        COMPREPLY=($(for i in ${words} ; do \
-            [[ ${i} == ${cur}* ]] && echo ${i} ; \
-        done))
-        return 0
-    fi
-
-    return 0
-} &&
-complete -F _rc_service rc-service
-
-# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/glsa-check b/completions/glsa-check
new file mode 100644
index 0000000..76f6466
--- /dev/null
+++ b/completions/glsa-check
@@ -0,0 +1,33 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+_glsa_check() {
+    local cur opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    opts="-l --list -d --dump --print -t --test -p --pretend -f --fix -i
+    --inject -n --nocolor -e --emergelike -h --help -V --version -v --verbose
+    -c --cve -m --mail"
+
+    if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
+        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+        return 0
+    fi
+
+    # too slow otherwise
+    if [[ ! -f ${ROOT}/tmp/gc.out ]] || \
+        [[ $(stat ${ROOT}/tmp/gc.out | \
+        sed -n -e 's/^Modify: 
\([[:digit:]]\+-[[:digit:]]\+-[[:digit:]]\+\).*$/\1/p') != "$(date +%F)" ]]
+    then
+        glsa-check -nl 2>/dev/null | \
+            sed -n -e  's/^\([[:digit:]]\+-[[:digit:]]\+\) .*$/\1/p' > \
+                ${ROOT}/tmp/gc.out
+    fi
+
+    COMPREPLY=($(compgen -W "${opts} $(< ${ROOT}/tmp/gc.out)" -- ${cur}))
+} &&
+complete -F _glsa_check glsa-check
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/java-config b/completions/java-config
new file mode 100644
index 0000000..42bf11e
--- /dev/null
+++ b/completions/java-config
@@ -0,0 +1,158 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+#
+# java-config completion command
+#
+_javaconfig()
+{
+    local cur prev curword numwords opts args arg spec flag sedcmd grepcmd
+    local multiplepkgs pkgs execopts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    numwords=${#COMP_WORDS[*]}
+    curword=${COMP_CWORD}
+    opts=""
+    args=""
+    pkgs=""
+    sedcmd="sed -r -e s/\[([^]]+)\].*/\1/"
+    vmsedcmd="sed -r -e s/\[([^]]+)\]/\1/"
+    grepcmd="egrep -o (--set-(system|user)-(classpath|vm)=)"
+    multiplepkgs=""
+    execopts="HtmlConverter JavaPluginControlPanel \
+    appletviewer awt_robot \
+    extcheck \
+    idlj \
+    j2sdk-config jar jarsigner \
+    java java-rmi.cgi java_vm javac javadoc javah javap jdb \
+    keytool kinit klist ktab \
+    native2ascii \
+    oldjava oldjavac oldjdb orbd \
+    policytool \
+    realpath rmic rmid rmiregistry \
+    serialver servertool \
+        tnameserv"
+    if [[ "${cur}" == -* ]] || [ ${curword} -eq 1 ]; then
+    case "${cur}" in
+        --java)
+        opts="--java --javac --java-version"
+        ;;
+        --j@(a@(r|va@(c|-version))|@(dk|re)-home))
+        opts=""
+        ;;
+        --list-available-@(packages|vms))
+        opts=""
+        ;;
+        --@(exec|set-@(user|system)-@(classpath|vm)))
+        opts="${cur}="
+        ;;
+        --set-@(user|system)-@(classpath|vm)=)
+        if [[ "${cur}" == "--set-system-vm=" ]] || [[ "${cur}" == 
"--set-user-vm=" ]]; then
+            flag="--list-available-vms"
+            args=$(java-config --nocolor "${flag}" | cut --delimiter=' ' 
--fields=2 | ${vmsedcmd})
+        else
+            flag="--list-available-packages"
+            args=$(java-config --nocolor "${flag}" | ${sedcmd})
+        fi
+        for arg in ${args}; do
+            [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}"
+        done
+        COMPREPLY=($(compgen $nospace -W "${opts}"))
+        return 0
+        ;;
+        --exec=)
+        COMPREPLY=($(compgen $nospace -W "${execopts}"))
+        return 0
+        ;;
+        *)
+            if [[ "${cur}" == "--set-system-vm="* ]] || [[ "${cur}" == 
"--set-user-vm="* ]]; then
+            args=$(java-config --nocolor --list-available-vms | cut 
--delimiter=' ' --fields=2 | ${vmsedcmd})
+            if [[ "${cur}" == "--set-system-vm="* ]]; then
+            spec=${cur##--set-system-vm=}
+            else
+            spec=${cur##--set-user-vm=}
+            fi
+            for arg in ${args}; do
+            if [[ "${arg:0:${#spec}}" == "${spec}" ]]; then
+                [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}"
+            fi
+            done
+            [[ "${opts}" == "${spec}" ]] && opts=""
+            COMPREPLY=($(compgen -W "${opts}"))
+            return 0
+        elif [[ "${cur}" == "--set-system-classpath="* ]] || [[ "${cur}" == 
"--set-user-classpath="* ]]; then
+            args=$(java-config --nocolor --list-available-packages | ${sedcmd})
+            [[ $(echo "${cur}" | grep -c ",") -gt 0 ]] && multiplepkgs="true"
+            if [[ "${cur}" == "--set-system-classpath="* ]]; then
+            spec="${cur##--set-system-classpath=}"
+            else
+            spec="${cur##--set-user-classpath=}"
+            fi
+            if [[ -n "${multiplepkgs}" ]]; then
+            pkgs="${spec%,*}"
+            spec="${spec##*,}"
+            fi
+            if [[ -n "${multiplepkgs}" ]]; then
+                for arg in ${args}; do
+                if [[ "${spec}" ]]; then
+                    if [[ "${arg:0:${#spec}}" == "${spec}" ]] \
+                        && [[ ! $(echo "${cur}" | egrep -o "(=|,)${arg},") ]]
+                                then
+                    [[ -n "${opts}" ]] && opts="${opts} ${pkgs},${arg}" || 
opts="${pkgs},${arg}"
+                    fi
+                else
+                    if [[ ! $(echo "${cur}" | egrep -o "(=|,)${arg},") ]]; then
+                        [[ -n "${opts}" ]] && opts="${opts} ${pkgs},${arg}" || 
opts="${pkgs},${arg}"
+                    fi
+                fi
+                done
+            [[ "${opts}" == "${pkgs},${spec}" ]] && opts=""
+            else
+                for arg in ${args}; do
+                if [[ "${spec}" ]] && [[ "${arg:0:${#spec}}" == "${spec}" ]]; 
then
+                [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}"
+                fi
+            done
+            [[ "${opts}" == "${spec}" ]] && opts=""
+            fi
+            COMPREPLY=($(compgen -W "${opts}"))
+            return 0
+        elif [[ "${cur}" == "--exec="* ]]; then
+            spec=${cur##--exec=}
+            for arg in ${execopts}; do
+            if [[ "${arg:0:${#spec}}" == "${spec}" ]]; then
+                [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}"
+            fi
+            done
+            [[ "${opts}" == "${spec}" ]] && opts=""
+            COMPREPLY=($(compgen -W "${opts}"))
+            return 0
+        else
+            opts="--classpath --clean-system-classpath --clean-user-classpath \
+                --exec \
+            --full-classpath \
+                --jar --java --javac --java-version --jdk-home --jre-home \
+                --list-available-packages --list-available-vms \
+            --nocolor \
+            --set-system-classpath --set-system-vm --set-user-classpath 
--set-user-vm"
+            [[ "$prev" == "--nocolor" ]] && opts="${opts/--nocolor}"
+        fi
+            ;;
+        esac
+    elif [[ "$prev" == "--nocolor" ]] && [ ${curword} -eq 2 ] && [ $numwords 
-le 3 ]; then
+    opts="--classpath --clean-system-classpath --clean-user-classpath \
+        --exec \
+        --full-classpath \
+        --jar --java --javac --java-version --jdk-home --jre-home \
+        --list-available-packages --list-available-vms \
+        --set-system-classpath --set-system-vm --set-user-classpath 
--set-user-vm"
+    fi
+    COMPREPLY=($(compgen $nospace -W "${opts}" -- ${cur}))
+    return 0
+} &&
+complete $nospace -F _javaconfig java-config
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/metagen b/completions/metagen
new file mode 100644
index 0000000..3ba0dc9
--- /dev/null
+++ b/completions/metagen
@@ -0,0 +1,30 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+_metagen() {
+    local cur prev opts
+    COMPREPLY=()
+    _get_comp_words_by_ref cur prev
+    opts="$(_parse_help ${COMP_WORDS[0]})"
+
+    case $prev in
+        -h|--help|--version)
+            return 0
+            ;;
+        -H|-e|-n|-d|-l)
+            return 0
+            ;;
+        -o)
+            _filedir
+            return 0
+            ;;
+    esac
+
+    COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+    return 0
+} &&
+complete -F _metagen metagen
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/portageq b/completions/portageq
new file mode 100644
index 0000000..7922e59
--- /dev/null
+++ b/completions/portageq
@@ -0,0 +1,87 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+source "@helpersdir@/gentoo-common.sh"
+
+#
+# portageq completion
+#
+
+_portageq() {
+    local cur prev opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    opts="config_protect_mask \
+      config_protect \
+      vdb_path \
+      gentoo_mirrors \
+      all_best_visible \
+      match \
+      best_visible \
+      mass_best_visible \
+      has_version \
+      portdir \
+      envvar \
+      mass_best_version \
+      best_version \
+      pkgdir \
+      portdir_overlay \
+      distdir"
+
+    if [[ $COMP_CWORD -eq 1 ]] ; then
+    # would always be correct, but it's pretty slow...
+    #COMPREPLY=($(compgen -W "$(portageq | grep '^   [[:lower:]]' | \
+    #    sed -e 's/^.*[[:space:]]\([[:lower:]_]\+\)[[:space:]].*$/\1/')" \
+    #    -- ${cur}))
+    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+    fi
+
+    case "${prev}" in
+    config*|vdb_path|gentoo_mirrors|*dir*)
+        COMPREPLY=()
+        ;;
+
+    # this also isn't the fastest, but I welcome an alternative method
+    envvar)
+        COMPREPLY=($(compgen -W "$(env -i emerge -v --info | \
+                sed -n -e '/^[[:upper:]].*=".*"/s/^\(.*\)=".*$/\1/p')" -- 
${cur}))
+        ;;
+
+    *v@(isible|ersion)|match)
+        COMPREPLY=($(compgen $nospace -W '/' -- $cur))
+        ;;
+
+    # $prev is a path, so complete on category/package
+    */*)
+            local x a=0
+            for x in ${COMP_WORDS[@]} ; do
+                # This is the only one
+                if [[ "${x}" == "all_best_visible" ]] ; then
+                    a=1
+                    break
+                fi
+            done
+
+            if [[ ${a} -eq 1 ]] ; then
+                COMPREPLY=()
+            else
+                # Check for conditional.
+#                cond="${cur%%[A-Za-z0-9]*}"
+#                cur="${cur:${#cond}}"
+
+#                if [[ -n "${cond}" ]] ; then
+#                    _pkgname -A $cur
+#                else
+                    _pkgname -A $cur
+#                fi
+            fi
+        ;;
+    esac
+} &&
+complete -F _portageq portageq
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/rc b/completions/rc
new file mode 100644
index 0000000..7453ed4
--- /dev/null
+++ b/completions/rc
@@ -0,0 +1,21 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+#
+# rc completion command
+#
+_rc()
+{
+    local cur
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    if [[ ${#COMP_WORDS[*]} -le 2 ]]; then
+    COMPREPLY=($(compgen -W "$(for i in 
@GENTOO_PORTAGE_EPREFIX@/etc/runlevels/*; do echo ${i##*/}; done)" -- $cur))
+    fi
+    return 0
+} &&
+complete -F _rc rc
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/rc-service b/completions/rc-service
new file mode 100644
index 0000000..9ad2ce1
--- /dev/null
+++ b/completions/rc-service
@@ -0,0 +1,111 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+source "@helpersdir@/gentoo-common.sh"
+
+_rc_service() {
+    local cur prev numwords opts
+    local words i x filename
+    local action actionpos
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    numwords=${#COMP_WORDS[*]}
+
+    if [[ ${prev} == '>' || ${prev} == '<' ]] ; then
+            COMPREPLY=($(compgen -f -- ${cur}))
+            return 0
+        fi
+
+    # find action
+    for x in ${COMP_LINE} ; do
+        if [[ ${x} =~ --(list|exists|resolve) ]] || \
+            [[ ${x} =~ -(l|e|r) ]]
+        then
+            action=${x}
+            break
+        fi
+    done
+    if [[ -n ${action} ]]; then
+        for ((i = 0; i < ${numwords}; i++ )); do
+            if [[ ${COMP_WORDS[${i}]} == "${action}" ]]; then
+                actionpos=${i}
+                break
+            fi
+        done
+
+        for ((i = 1; i < ${numwords}; i++ )); do
+            if [[ ! ${COMP_WORDS[$i]} == -* ]]; then
+                break
+            fi
+        done
+    fi
+
+    if [[ ${COMP_CWORD} -eq 3 ]]; then
+        return 1
+    fi
+
+    # check if an option was typed
+    if [[ ${cur} == -* ]]; then
+        if [[ ${cur} == --* ]]; then
+            opts="--list --exists --resolve"
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+        elif [[ ${cur} == -* ]]; then
+            opts="-l -e -r"
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+        fi
+
+
+        # NOTE: This slows things down!
+        # (Adapted from bash_completion by Ian Macdonald <i...@caliban.org>)
+        # This removes any options from the list of completions that have
+        # already been specified on the command line.
+        COMPREPLY=($(echo "${COMP_WORDS[@]}" | \
+        (while read -d ' ' i; do
+            [[ -z ${i} ]] && continue
+            # flatten array with spaces on either side,
+            # otherwise we cannot grep on word boundaries of
+            # first and last word
+            COMPREPLY=" ${COMPREPLY[@]} "
+            # remove word from list of completions
+            COMPREPLY=(${COMPREPLY/ ${i%% *} / })
+        done
+        echo ${COMPREPLY[@]})))
+
+            return 0
+    # if no option typed
+    else
+        if [[ ${COMP_CWORD} -eq 1 ]]; then              # if first word typed
+            words="`rc-service -l | grep ^${cur}`"          # complete for 
init scripts
+            COMPREPLY=($(for i in ${words} ; do \
+            [[ ${i} == ${cur}* ]] && echo ${i} ; \
+            done))
+            return 0
+        elif [[ ${COMP_CWORD} -eq 2 ]] && [[ ${prev} != -* ]]; then # if 
second word typed and we didn't type in a function
+            filename=`rc-service -r ${prev}`
+            opts=`cat ${filename} | grep "^\w*()" | sed "s/().*$//"`    # 
Greps the functions included in the init script
+            if [[ "x${opts}" == "x" ]] ; then               # if no options 
found loosen the grep algorhythm
+                opts=`cat ${filename} | grep "\w*()" | sed "s/().*$//"`
+            fi
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+        fi
+    fi
+    if [[ ${action} == '--exists' ]] || [[ ${action} == '-e' ]] || \
+          [[ ${action} == '--resolve' ]]  || [[ ${action} == '-r' ]]; then
+        words="`rc-service -l | grep ^${cur}`"
+        COMPREPLY=($(for i in ${words} ; do \
+            [[ ${i} == ${cur}* ]] && echo ${i} ; \
+        done))
+        return 0
+    fi
+
+    return 0
+} &&
+complete -F _rc_service rc-service
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/rc-status b/completions/rc-status
new file mode 100644
index 0000000..794067f
--- /dev/null
+++ b/completions/rc-status
@@ -0,0 +1,28 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+#
+# rc-status completion command
+#
+_rcstatus()
+{
+    local cur
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    if [[ $COMP_CWORD -eq 1 ]]; then
+        if [[ "${cur}" == --* ]]; then
+        COMPREPLY=($(compgen -W '--all --list --unused' -- ${cur}))
+    elif [[ "${cur}" == -* ]]; then
+        COMPREPLY=($(compgen -W '-a -l -u' -- ${cur}))
+    else
+        COMPREPLY=($(compgen -W "$(rc-status --list)" -- ${cur}))
+    fi
+    else
+    unset COMPREPLY
+    fi
+    return 0
+} &&
+complete -F _rcstatus rc-status
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/rc-update b/completions/rc-update
new file mode 100644
index 0000000..ae45744
--- /dev/null
+++ b/completions/rc-update
@@ -0,0 +1,40 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+#
+# rc-update completion command
+#
+_rcupdate()
+{
+    local cur show
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    if [[ $COMP_CWORD -eq 1 ]]; then
+    if [[ "${cur}" == -* ]]; then
+        COMPREPLY=($(compgen -W '-a -d -s' -- ${cur}))
+    else
+        COMPREPLY=($(compgen -W 'add del show' ${cur}))
+    fi
+    else
+        if [[ "${COMP_WORDS[1]}" == "show" ]] || [[ "${COMP_WORDS[1]}" == "-s" 
]]; then
+        show="TRUE"
+    fi
+    if ([[ $COMP_CWORD -eq 3 ]] && [[ -z "$show" ]]) || \
+            ([[ $COMP_CWORD -eq 2 ]] && [[ -n "$show" ]])
+        then
+        COMPREPLY=($(compgen -W "$(for i in 
@GENTOO_PORTAGE_EPREFIX@/etc/runlevels/*; do echo ${i##*/}; done)" -- $cur))
+    elif [[ $COMP_CWORD -eq 2 ]]; then
+        COMPREPLY=($(compgen -X "*.@(c|sh|test)" -W "$(for i in 
@GENTOO_PORTAGE_EPREFIX@/etc/init.d/*; do echo ${i##*/}; done)" $cur))
+    elif [[ ${#COMP_WORDS[*]} -gt 2 ]] ; then
+        COMPREPLY=($(compgen -W "$(for i in 
@GENTOO_PORTAGE_EPREFIX@/etc/runlevels/*; do echo ${i##*/}; done)" -- $cur))
+    else
+        unset COMPREPLY
+    fi
+    fi
+    return 0
+} &&
+complete -F _rcupdate rc-update
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/revdep-rebuild b/completions/revdep-rebuild
new file mode 100644
index 0000000..cb0efe7
--- /dev/null
+++ b/completions/revdep-rebuild
@@ -0,0 +1,55 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+_revdep_rebuild() {
+    local cur prev numwords opts
+    local words i x
+    local action actionpos
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    numwords=${#COMP_WORDS[*]}
+
+    if [[ ${prev} == '>' || ${prev} == '<' ]] ; then
+            COMPREPLY=($(compgen -f -- ${cur}))
+            return 0
+        fi
+
+    # find action
+    for ((i = 0; i < ${numwords}; i++ )); do
+        case ${COMP_WORDS[${i}]} in
+            --library|-L)
+                action=${COMP_WORDS[${i}]}
+                actionpos=${i}
+                ;;
+            --help|-h)
+                action=${COMP_WORDS[${i}]}
+                actionpos=${i}
+                ;;
+        esac
+    done
+
+    if [[ ${cur} == -* ]]; then
+        if [[ ${cur} == --* ]]; then
+            opts="--exact --help --ignore --keep-temp --library --nocolor 
--no-ld-path --no-order --no-progress --no-util --pretend --quiet --verbose"
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        else
+            opts="-e -h -i -k -L -l -o -p -P -q -u -v"
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        fi
+        return 0
+    fi
+    if [[ ${action} == '--library' ]] || [[ ${action} == '-L' ]] ; then
+        if [[ "${cur}" == */* ]]; then
+            COMPREPLY=( $(builtin cd @GENTOO_PORTAGE_EPREFIX@/lib; compgen -f 
-- "${cur}") )
+        else
+            COMPREPLY=( $(builtin cd @GENTOO_PORTAGE_EPREFIX@/lib; compgen -X 
'/' -f -- "${cur}") )
+        fi
+    fi
+    return 0
+} &&
+complete -F _revdep_rebuild revdep-rebuild
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/splat b/completions/splat
new file mode 100644
index 0000000..ddae6a0
--- /dev/null
+++ b/completions/splat
@@ -0,0 +1,33 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+source "@helpersdir@/gentoo-common.sh"
+
+_splat() {
+    local cur prev opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    opts="-h --help -v --verbose -s --summary -f --logfile -c --colored -l
+    --list -u --count -p --package -t --sort -r --reverse"
+
+    if [[ ${cur} == -* ]] ; then
+        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+        return 0
+    fi
+
+    case "${prev}" in
+        -f|--logfile)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            _pkgname -A ${cur}
+            COMPREPLY=($(compgen -W "${COMPREPLY[@]} ${opts}" -- ${cur}))
+            ;;
+    esac
+} &&
+complete -o filenames -F _splat splat
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

diff --git a/completions/webapp-config b/completions/webapp-config
new file mode 100644
index 0000000..01679b5
--- /dev/null
+++ b/completions/webapp-config
@@ -0,0 +1,169 @@
+# Gentoo Linux Bash Shell Command Completion
+#
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+#
+# webapp-config completion
+#
+
+_webapp_complete_appver()
+{
+    local x proot ibase cur="$2"
+    eval $(. @GENTOO_PORTAGE_EPREFIX@/etc/vhosts/webapp-config ; \
+        echo 
proot="${MY_PERSISTROOT:-@GENTOO_PORTAGE_EPREFIX@/var/db/webapps}" ; \
+        echo ibase="${WA_INSTALLSBASE:-installs}")
+
+    case "$1" in
+    # complete on installed
+    installed)
+        COMPREPLY=($(compgen -W "$(\
+        for x in ${proot}/*/*/installs ; do \
+            if [[ -f "${x}" ]] ; then \
+            local y="${x%/*}" ; \
+            y="${y%/*}" ; \
+            echo "${y##*/}" ; \
+            fi ; \
+        done)" -- ${cur}))
+        ;;
+
+    # complete on uninstalled
+    uninstalled)
+        COMPREPLY=($(compgen -W "$(\
+        for x in ${proot}/*/* ; do \
+            if [[ ! -f "${x}/${ibase}" ]] ; then \
+            local y="${x%/*}" ; \
+            echo "${y##*/}" ; \
+            fi ; \
+        done)" -- ${cur}))
+        ;;
+
+    # all
+    all)
+        COMPREPLY=($(compgen -W "$(\
+        for x in ${proot}/* ; do \
+            [[ -d "${x}" ]] && echo "${x##*/}" ; \
+        done)" -- ${cur}))
+        ;;
+
+    # complete on version
+    *)
+        [[ -d "${proot}/$1" ]] || return 1
+        COMPREPLY=($(compgen -W "$(\
+        for x in ${proot}/$1/* ; do \
+            [[ -d "${x}" ]] && echo "${x##*/}" ; \
+        done)" -- ${cur}))
+        ;;
+    esac
+}
+
+_webapp_config()
+{
+    local cur prev actions opts hostroot
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    actions="-I --install -U --upgrade -C --clean --list-installs \
+    --list-unused-installs --show-installed --show-postinst \
+    --help -v --version"
+    opts="--bug-report --pretend -p -u --user -g --group \
+    -d --dir -h --host -V --verbose --soft --secure --virtual-dirs \
+    --virtual-files --force-virtual"
+
+    eval $(. @GENTOO_PORTAGE_EPREFIX@/etc/vhosts/webapp-config ; \
+    echo hostroot="${VHOST_ROOT:-@GENTOO_PORTAGE_EPREFIX@/var/www}")
+
+    # --bug-report, --pretend, and -p can only be used as first arg
+    if [[ ${COMP_CWORD} -gt 1 ]] ; then
+        opts="${opts/--bug-report --pretend -p}"
+    fi
+
+    if [[ "${cur}" == -* ]] || [[ ${COMP_CWORD} -eq 1 ]] ; then
+        COMPREPLY=($(compgen -W "${opts} ${actions}" -- ${cur}))
+        return 0
+    fi
+
+    case "${prev}" in
+        --bug-report|-p|--pretend)
+        COMPREPLY=($(compgen -W "${opts} ${actions}" -- ${cur}))
+        ;;
+
+        -I|--install)
+            _webapp_complete_appver all ${cur}
+            ;;
+
+        -U|--upgrade)
+            _webapp_complete_appver installed ${cur}
+            ;;
+
+        # only complete on -d since it is required if -C is specified
+        -C|--clean)
+            COMPREPLY=($(compgen -W "-d" -- ${cur}))
+            ;;
+
+        --list-unused-installs)
+            _webapp_complete_appver uninstalled ${cur}
+            ;;
+
+        --list-installs|--show-postinst)
+            _webapp_complete_appver all ${cur}
+            ;;
+
+        #  hrm... anyone know a better way to reliably do this?
+        -h|--host)
+            local x
+            COMPREPLY=($(compgen -W "$(\
+                for x in ${hostroot}/* ; do \
+                    [[ -d "${x}" ]] && echo "${x##*/}" ; \
+                done)" -- ${cur}))
+            ;;
+
+        --virtual*)
+            COMPREPLY=($(compgen -W "server-owned config-owned virtual" \
+            -- ${cur}))
+            ;;
+
+        -d|--dir)
+        local host x i=0
+                # see if --host has been specified, and if so, get the value
+                # that was passed to it.
+        for x in ${COMP_WORDS[@]} ; do
+            if [[ "${x}" == "-h" || "${x}" == "--host" ]] ; then
+            host="${COMP_WORDS[((i+1))]}"
+            break
+            fi
+            i=$((i+1))
+        done
+
+                # otherwise, use the default host
+        if [[ "${host}" == "" ]] ; then
+            eval $(. @GENTOO_PORTAGE_EPREFIX@/etc/vhosts/webapp-config ; \
+            echo host="${VHOST_HOSTNAME:-localhost}")
+        fi
+
+            COMPREPLY=($(compgen -W "$(\
+            for x in ${hostroot}${host}/* ; do \
+            [[ -d "${x}" ]] && echo "${x}" ; \
+            done)" -- ${cur}))
+            ;;
+        -u|--user)
+            COMPREPLY=($(compgen -u -- ${cur}))
+            ;;
+        -g|--group)
+            COMPREPLY=($(compgen -g -- ${cur}))
+            ;;
+
+        # we haven't recognized it yet, so more than likely ${prev}
+        # is a 'app-name' ; assuming it is indeed a valid 'app-name'
+        # (_webapp_complete_appver does the check), complete on available
+        # 'app-version's
+        *)
+            _webapp_complete_appver ${prev} ${cur} || \
+                    _webapp_complete_appver all ${cur}
+            ;;
+    esac
+} &&
+complete -F _webapp_config webapp-config
+
+# vim: ft=sh:et:ts=4:sw=4:tw=80

Reply via email to