--- /dev/null
+# -*- shell-script -*-
+#
+# Gentoo Linux command completion.
+#
+# Copyright 1999-2002 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+#
+# Author: Geert Bevin <gbevin@theleaf.be>
+# Author: Zach Forrest <zach@disinformation.ca>
+#
+
+#
+# rc & rc-status completion command
+#
+_rc()
+{
+ local cur
+ COMPREPLY=()
+ cur=${COMP_WORDS[COMP_CWORD]}
+ if [ ${#COMP_WORDS[*]} -le 2 ]; then
+ COMPREPLY=( $( compgen -W "$(for i in /etc/runlevels/*; do echo ${i##*/}; done)" -- $cur ) )
+
+ fi
+ return 0
+}
+complete -F _rc rc
+
+_rcstatus()
+{
+ local cur opts
+ COMPREPLY=()
+ cur=${COMP_WORDS[COMP_CWORD]}
+ if [ ${#COMP_WORDS[*]} -le 2 ]; then
+ opts="-a -all -l --list -u --unused"
+ COMPREPLY=( $( compgen -W "${opts} $(for i in /etc/runlevels/*; do echo ${i##*/}; done)" -- $cur ) )
+
+ fi
+ return 0
+}
+complete -F _rcstatus rc-status
+
+#
+# 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
+ 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
+
+#
+# simple completion for Gentoo style init
+#
+complete -W "start stop restart pause zap ineed needsme iuse usesme broken" \
+ $(for i in /etc/init.d/*; do echo ${i##*/}; done)
+
+#
+# emerge completion command
+#
+_emerge()
+{
+ local cur prev grepcmd sedcmd systemactions setsma setbig portagedir origdir
+ local mode words opts curword numwords pkgdbdir
+
+ origdir="${PWD}"
+ portagedir=/usr/portage
+ pkgdbdir=/var/db/pkg
+ COMPREPLY=()
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
+ words="${COMP_WORDS[*]}"
+ numwords=${#COMP_WORDS[*]}
+ curword=${COMP_CWORD}
+ mode='ALL'
+
+ # Determine which mode we're running in.
+
+ if [ ${curword} -eq 1 ] && [ ${numwords} -eq 2 ]; then
+ # This is set when we nothing but the command name has been given.
+ mode='ALL'
+ elif [[ " ${words} " == *" --unmerge "* ]]; then
+ mode='UNMERGE'
+ elif [[ " ${words} " == *" --safe "* ]]; then
+ mode='SAFE'
+ elif [[ " ${words} " == *" --search "* ]]; then
+ mode='SEARCH'
+ elif [[ " ${words} " == *" --world "* ]]; then
+ mode='WORLD'
+ elif [[ " ${words} " == *" --help "* ]]; then
+ mode='HELP'
+ elif [[ " ${words} " == *" --clean "* ]]; then
+ mode='CLEAN'
+ elif [[ " ${words} " == *" --pretend "* ]]; then
+ mode='PRETEND'
+ else
+ # All except '--clean'
+ mode='NOCLEAN'
+ fi
+
+ if [[ "${cur}" == -* ]]; then
+
+ # Process Options
+
+ case "${mode}" in
+ "ALL")
+ opts='--clean --help --verbose --debug --fetchonly \
+ --onlydeps --noreplace --usepkg --buildpkg \
+ --autoclean --pretend --unmerge --safe \
+ --search --world'
+ ;;
+
+ "UNMERGE")
+ opts='--clean --verbose --debug --pretend \
+ --unmerge --safe'
+ ;;
+
+ "SAFE")
+ opts='--unmerge --verbose --debug'
+ ;;
+
+ "SEARCH")
+ opts='--verbose --debug'
+ ;;
+
+ "WORLD")
+ opts='--verbose --debug --pretend --world'
+ ;;
+
+ "HELP")
+ opts=''
+ ;;
+
+ "CLEAN")
+ opts='--verbose --debug --clean'
+ ;;
+
+ "PRETEND")
+ opts='--verbose --debug --fetchonly --onlydeps \
+ --noreplace --usepkg --buildpkg \
+ --autoclean --pretend --unmerge --safe \
+ --world'
+ ;;
+
+ "NOCLEAN")
+ opts='--help --verbose --debug --fetchonly \
+ --onlydeps --noreplace --usepkg --buildpkg \
+ --autoclean --pretend --unmerge --safe \
+ --search --world'
+ ;;
+ *)
+ # Same as ALL
+ opts='--clean --help --verbose --debug --fetchonly \
+ --onlydeps --noreplace --usepkg --buildpkg \
+ --autoclean --pretend --unmerge --safe \
+ --search --world'
+ ;;
+
+ esac
+
+ # Generate the reply.
+ COMPREPLY=($(compgen -W "${opts}" | grep ^$cur))
+
+ elif [ "${mode}" == "CLEAN" ]; then
+ # "rsync" is the only option that can follow "--clean"
+ COMPREPLY=($(compgen -W 'rsync'))
+
+ elif [ "${mode}" == "WORLD" ]; then
+ # "update" is the only option that can follow "--world"
+ #COMPREPLY=($(compgen -W 'update'))
+ COMPREPLY=($(compgen -W 'update' | grep ^${cur}))
+
+ elif [ "${mode}" == "HELP" ]; then
+ if [[ ! " ${words} " == *" "@(system|rsync)" "* ]]; then
+ COMPREPLY=($(compgen -W 'rsync system' | grep ^${cur}))
+ else
+ COMPREPLY=''
+ fi
+
+ elif [ "${mode}" == "SEARCH" ]; then
+ # We don't need to interfere here as the search string is a
+ # regular expression. (But wouldn't intelligent, dynamic,
+ # commandline completion of regular expressions be great!)
+ COMPREPLY=''
+
+ elif [ "${mode}" == "UNMERGE" ]; then
+ # Ignore >, >=, <, <=, and = for the purpose of completion.
+ sedcmd="sed -e s:=:: -e s:>:: -e s:<::"
+ cur=$(echo "${cur}" | ${sedcmd})
+
+ # If the current completion (minus conditional characters)
+ # starts with one of the following characters, then complete
+ # on filenames (i.e. an ebuild file) rather than referencing
+ # the package database.
+ if [[ "${cur} " == @('/'|'.'|'~'|'$')* ]]; then
+ # Setting this to nothing with tell bash to use default
+ # completion (i.e. pathname completion).
+ COMPREPLY=''
+ else
+ cd "${pkgdbdir}"
+ grepcmd="grep -E ^$cur.*"
+
+ if [ "${cur}" ]; then
+ if [ $(echo "${cur}" | grep '/') ]; then
+ setbig=$(compgen -G "${cur}*")
+ COMPREPLY=($(echo "${setbig}" | ${grepcmd}))
+ else
+ setsma=$(compgen -S '/' -G "${cur}*")
+ if [ $(echo "${setsma}" | ${grepcmd} | grep '/' | wc -l) = 1 ]; then
+ setbig=$(compgen -G "*/*")
+ COMPREPLY=($(echo "${setbig}" | ${grepcmd}))
+ else
+ COMPREPLY=($(echo "${setsma}" | ${grepcmd}))
+ fi
+ fi
+ else
+ setsma=$(compgen -S '/' -G "${cur}*")
+ COMPREPLY=($(echo "${setsma}"))
+ fi
+
+ cd "${origdir}"
+ fi
+
+ elif [ "${mode}" == "SAFE" ]; then
+ COMPREPLY=($(compgen -W '--unmerge' | grep ^${cur}))
+
+ elif [[ " ${words} " == *" "@(update|system|rsync)" "* ]]; then
+ # syncing the portage tree is a lonely job
+ # updating should be done by itself (also lonely)
+ COMPREPLY=''
+
+ elif [[ " ${words} " == *" --usepkg "* ]] && [[ "${cur} " == @('/'|'.'|'~'|'$')* ]]; then
+ # In order to complete on a package file, the name must be
+ # an absolute or realative pathname (even if it is in the
+ # current directory). This allows completion on both package
+ # names in /usr/portage and on arbitrary *.tbz2 packages.
+ #
+ # I'm planning to come up with a more elegant solution, but
+ # that will have to wait for another update. (The only thing
+ # that is really annoying right now is when specifying a
+ # *.tbz2 file in or below the current directory, you have
+ # to prefix the path with "./".)
+ COMPREPLY=''
+
+ else
+ cd "${portagedir}"
+ grepcmd="grep -E ^${cur}.*"
+ sedcmd="sed -e /^[^-]*$/d"
+
+ if [ ${COMP_CWORD} -eq 1 ]; then
+ # If emerge hasn't been given any args yet, include "rsync"
+ # among the system actions. The case where the "--clean" flag
+ # has been specified is handled above.
+ systemactions=$'\n'"system"$'\n'"update"$'\n'"rsync"
+ else
+ # Only allow these actions if no packages have been specified.
+ if [[ ! " ${words} " == *" "*[/]*" "* ]]; then
+ systemactions=$'\n'"system"$'\n'"update"
+ else
+ systemactions=''
+ fi
+ fi
+
+ if [ "${cur}" ]; then
+ if [[ "${cur} " == @('/'|'.'|'~'|'$')* ]]; then
+ COMPREPLY=''
+ elif [ $(echo "${cur}" | grep '/') ]; then
+ setbig=$(compgen -G "${cur}*" | ${sedcmd})"${systemactions}"
+ COMPREPLY=($(echo "${setbig}" | $grepcmd))
+ else
+ setsma=$(compgen -S '/' -G "${cur}*" | ${sedcmd})"${systemactions}"
+ if [ $(echo "${setsma}" | ${grepcmd} | grep '/' | wc -l) = 1 ]; then
+ setbig=$(compgen -G "*/*" | ${sedcmd})"${systemactions}"
+ COMPREPLY=($(echo "${setbig}" | ${grepcmd}))
+ else
+ COMPREPLY=($(echo "${setsma}" | ${grepcmd}))
+ fi
+ fi
+ else
+ setsma=$(compgen -S '/' -G "${cur}*" | ${sedcmd})"${systemactions}"
+ COMPREPLY=($(echo "${setsma}"))
+ fi
+
+ cd "${origdir}"
+ fi
+
+ # (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
+ [ "${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
+}
+complete -o default -F _emerge emerge
+
+#
+# ebuild completion command
+#
+_ebuild()
+{
+ local cur prev
+ COMPREPLY=()
+ cur=${COMP_WORDS[COMP_CWORD]}
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+ if [ $COMP_CWORD -eq 1 ]; then
+ #COMPREPLY=( $( compgen -o filenames -X '!*.ebuild' $cur ) )
+ COMPREPLY=($(compgen -o filenames))
+ elif [ $COMP_CWORD -eq 2 ]; then
+ COMPREPLY=( $( compgen -W 'check \
+ clean compile config \
+ depend digest \
+ fetch \
+ help \
+ install \
+ merge \
+ package postinst postrm preinst prerm \
+ qmerge \
+ rcheck remerge rpm \
+ setup \
+ touch \
+ unmerge unpack' $cur ) )
+ fi
+ return 0
+}
+complete -o default -F _ebuild ebuild
+
+#
+# rc-update completion command
+#
+_rcupdate()
+{
+ local cur prev initdir runlvdir origdir
+ origdir=${PWD}
+ initdir=/etc/init.d
+ runlvdir=/etc/runlevels
+ COMPREPLY=()
+ cur=${COMP_WORDS[COMP_CWORD]}
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+ if [ $COMP_CWORD -eq 1 ]; then
+ COMPREPLY=( $( compgen -W 'add del' ${cur} ) )
+ elif [ $COMP_CWORD -eq 2 ]; then
+ cd ${initdir}
+ COMPREPLY=( $( compgen -G "${cur}*" ) )
+ cd ${origdir}
+ elif [ $COMP_CWORD -eq 3 ]; then
+ cd ${runlvdir}
+ COMPREPLY=( $( compgen -G "${cur}*" ) )
+ cd ${origdir}
+ fi
+ return 0
+}
+complete -F _rcupdate rc-update
+
+#
+# gcc-config completion command
+#
+_gccconfig()
+{
+ local cur curword numwords opts
+ COMPREPLY=()
+ cur=${COMP_WORDS[COMP_CWORD]}
+ numwords=${#COMP_WORDS[*]}
+ curword=${COMP_CWORD}
+ if [ ${numwords} -gt 3 ]; then
+ return 0
+ fi
+ if [[ "${cur}" == -* ]] || [ ${curword} -eq 1 ]; then
+ if [ ${numwords} -le 2 ] && [ ${curword} -eq 1 ]; then
+ opts="--use-old \
+ --use-portage-chost \
+ --get-current-profile \
+ --list-profiles \
+ --print-environ \
+ --get-bin-path \
+ --get-lib-path \
+ --get-stdcxx-incdir"
+ else
+ opts=""
+ fi
+ elif [ ${numwords} -le 3 ] && [ ${curword} -eq 2 ]; then
+ case "${COMP_WORDS[1]}" in
+ "--print-environ"|"--get-bin-path"|"--get-lib-path"|"--get-stdcxx-incdir")
+ opts=$(gcc-config --list-profiles)
+ ;;
+ *)
+ opts=""
+ ;;
+ esac
+ else
+ opts=""
+ fi
+ COMPREPLY=($(compgen -W "${opts}" | grep ^$cur))
+ return 0
+}
+complete -F _gccconfig gcc-config
+
+_javaconfig()
+{
+ local cur curword numwords opts args arg spec flag sedcmd grepcmd
+ local multiplepkgs pkgs execopts
+ COMPREPLY=()
+ cur=${COMP_WORDS[COMP_CWORD]}
+ 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.cgijava_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 "${flag}" | cut --delimiter=' ' --fields=2 | ${vmsedcmd})
+ else
+ flag="--list-available-packages"
+ args=$(java-config "${flag}" | ${sedcmd})
+ fi
+ #echo "$(java-config ${flag})" >> output
+ #args=$(java-config "${flag}" | ${sedcmd})
+ for arg in ${args}
+ do
+ [ "${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 --list-available-vms | cut --delimiter=' ' --fields=2 | ${vmsedcmd})
+ # spec=$(echo "${cur}" | egrep -o "(--set-(system|user)-(classpath|vm)=)")
+ # spec=$(echo "${cur}" | ${grepcmd})
+ 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
+ [ "${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 --list-available-packages | ${sedcmd})
+ [ $(echo "${cur}" | grep -c ",") -gt 0 ] && multiplepkgs="true"
+ # spec=$(echo "${cur}" | ${grepcmd})
+ if [[ "${cur}" == "--set-system-classpath="* ]]; then
+ spec="${cur##--set-system-classpath=}"
+ else
+ spec="${cur##--set-user-classpath=}"
+ fi
+ if [[ "${multiplepkgs}" ]]; then
+ pkgs="${spec%,*}"
+ spec="${spec##*,}"
+ fi
+ if [[ "${multiplepkgs}" ]]; then
+ for arg in ${args}
+ do
+ if [[ "${spec}" ]]; then
+ if [[ "${arg:0:${#spec}}" == "${spec}" ]] \
+ && [[ ! $(echo "${cur}" | egrep -o "(=|,)${arg},") ]]; then
+ [ "${opts}" ] && opts="${opts} ${pkgs},${arg}" || opts="${pkgs},${arg}"
+ fi
+ else
+ if [[ ! $(echo "${cur}" | egrep -o "(=|,)${arg},") ]]; then
+ [ "${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
+ [ "${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
+ [ "${opts}" ] && opts="${opts} ${arg}" || opts="${arg}"
+ fi
+ done
+ [[ "${opts}" == "${spec}" ]] && opts=""
+ COMPREPLY=($(compgen -W "${opts}"))
+ return 0
+ else
+ opts="--javac \
+ --java \
+ --jar \
+ --jdk-home \
+ --jre-home \
+ --java-version \
+ --classpath \
+ --full-classpath \
+ --exec \
+ --list-available-packages \
+ --list-available-vms \
+ --set-system-vm \
+ --set-user-vm \
+ --set-system-classpath \
+ --set-user-classpath \
+ --clean-system-classpath"
+ fi
+ ;;
+ esac
+ else
+ opts=""
+ fi
+ COMPREPLY=($(compgen $nospace -W "${opts}" | grep ^${cur}))
+ return 0
+}
+complete $nospace -F _javaconfig java-config
+
+_openglupdate()
+{
+ local cur opts
+ COMPREPLY=()
+ cur=${COMP_WORDS[COMP_CWORD]}
+ numwords=${#COMP_WORDS[*]}
+ if [ ${numwords} -gt 2 ]; then
+ return 0
+ fi
+ COMPREPLY=($(compgen -W 'nvidia xfree' $cur))
+ COMPREPLY=($(echo " ${COMP_WORDS[@]}" | \
+ (while read -d ' ' i; do
+ [ "$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
+}
+complete -F _openglupdate opengl-update