summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2014-08-31 21:18:57 +0200
committerMichał Górny <mgorny@gentoo.org>2014-08-31 21:18:57 +0200
commit1781d5b81021858db447d4c63f68e081e320fd00 (patch)
treead712da72cf6ec26cb824dd3f947ab4efe1d263b
parentSplit common functions out of completions. (diff)
downloadgentoo-bashcomp-1781d5b81021858db447d4c63f68e081e320fd00.tar.gz
gentoo-bashcomp-1781d5b81021858db447d4c63f68e081e320fd00.tar.bz2
gentoo-bashcomp-1781d5b81021858db447d4c63f68e081e320fd00.zip
Split completions by completed command.
-rw-r--r--completions/browser-config31
-rw-r--r--completions/distcc-config41
-rw-r--r--completions/ebuild34
-rw-r--r--completions/ekeyword46
-rw-r--r--completions/emerge410
-rw-r--r--completions/epkginfo28
-rw-r--r--completions/epm48
-rw-r--r--completions/equery280
-rw-r--r--completions/euse60
-rw-r--r--completions/gcc-config45
-rw-r--r--completions/gentoo1652
-rw-r--r--completions/glsa-check33
-rw-r--r--completions/java-config158
-rw-r--r--completions/metagen30
-rw-r--r--completions/portageq87
-rw-r--r--completions/rc21
-rw-r--r--completions/rc-service111
-rw-r--r--completions/rc-status28
-rw-r--r--completions/rc-update40
-rw-r--r--completions/revdep-rebuild55
-rw-r--r--completions/splat33
-rw-r--r--completions/webapp-config169
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 <ian@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 <ian@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 <ian@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 <ian@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