diff options
5 files changed, 679 insertions, 2 deletions
diff --git a/app-shells/bash-completion/ChangeLog b/app-shells/bash-completion/ChangeLog index 6a414d1ff0d3..5e4d96a049ac 100644 --- a/app-shells/bash-completion/ChangeLog +++ b/app-shells/bash-completion/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for app-shells/bash-completion # Copyright 2002-2003 Gentoo Technologies, Inc.; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/app-shells/bash-completion/ChangeLog,v 1.48 2003/12/13 17:46:01 joker Exp $ +# $Header: /var/cvsroot/gentoo-x86/app-shells/bash-completion/ChangeLog,v 1.49 2003/12/19 18:40:47 joker Exp $ + +*bash-completion-20031215 (19 Dec 2003) + + 19 Dec 2003; Christian Birchinger <joker@gentoo.org> + bash-completion-20031215.ebuild, files/gentoo.completion-20031215: + Version bump *bash-completion-20031125-r1 (13 Dec 2003) diff --git a/app-shells/bash-completion/Manifest b/app-shells/bash-completion/Manifest index b62f39c4bb78..8a769932351e 100644 --- a/app-shells/bash-completion/Manifest +++ b/app-shells/bash-completion/Manifest @@ -1,9 +1,12 @@ -MD5 f7c6464d26bc3d4b65a77d8d4ea56158 ChangeLog 6383 +MD5 dcf6069b0640fd8a45f2d2e3d022baa2 ChangeLog 6564 MD5 7ad428257d9146f43c79585013af0a72 bash-completion-20031125-r1.ebuild 1481 +MD5 54b50136b8627279f78e2ad837ecdead bash-completion-20031215.ebuild 1478 MD5 f0b200452477f05371b05c637e08107c bash-completion-20031125.ebuild 1458 MD5 c85a85bd33aac22ae4872c85733e581f files/README.gentoo 491 MD5 9b22241df7258cb9677cf9a1497e07c5 files/bash-completion 625 MD5 3c7995eee919c34f968dcde5d7b05ae0 files/digest-bash-completion-20031125 76 MD5 3c7995eee919c34f968dcde5d7b05ae0 files/digest-bash-completion-20031125-r1 76 +MD5 e305c1d5975de631e7be98e887a893e2 files/digest-bash-completion-20031215 76 MD5 f96c9b92f176d02ecb313feb104f8af1 files/gentoo.completion 15731 MD5 f84b4350433e3f579107d1da4a30332f files/gentoo.completion-20031125-r1 16312 +MD5 f84b4350433e3f579107d1da4a30332f files/gentoo.completion-20031215 16312 diff --git a/app-shells/bash-completion/bash-completion-20031215.ebuild b/app-shells/bash-completion/bash-completion-20031215.ebuild new file mode 100644 index 000000000000..8403776cb7d9 --- /dev/null +++ b/app-shells/bash-completion/bash-completion-20031215.ebuild @@ -0,0 +1,55 @@ +# Copyright 1999-2003 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/app-shells/bash-completion/bash-completion-20031215.ebuild,v 1.1 2003/12/19 18:40:47 joker Exp $ + +S=${WORKDIR}/${PN/-/_} +DESCRIPTION="Programmable Completion for bash (includes emerge and ebuild commands)." +HOMEPAGE="http://www.caliban.org/bash/index.shtml#completion" +SRC_URI="http://www.caliban.org/files/bash/${P}.tar.bz2" + +SLOT="0" +LICENSE="GPL-2" +KEYWORDS="~x86 ~ppc ~sparc ~alpha ~mips ~hppa ~arm ~amd64" + +DEPEND="app-arch/tar + app-arch/bzip2" + +RDEPEND=">=app-shells/bash-2.05a" + +src_install() { + insinto /etc + doins bash_completion + + insinto /etc/bash_completion.d + + doins contrib/unrar + doins contrib/harbour + doins contrib/isql + doins contrib/larch + doins contrib/lilypond + doins contrib/p4 + doins contrib/ri + + newins ${FILESDIR}/gentoo.completion-${PVR/-r0/} gentoo + + insinto /etc/profile.d + doins ${FILESDIR}/bash-completion + + dodoc COPYING Changelog README +} + +pkg_postinst() { + echo + einfo "Add the following line to your ~/.bashrc to" + einfo "activate completion support in your bash:" + einfo "[ -f /etc/profile.d/bash-completion ] && source /etc/profile.d/bash-completion" + echo + + if [ -f /etc/bash_completion.d/gentoo.completion ] + then + echo + ewarn "The file 'gentoo.completion' in '/etc/bash_completion.d/' has been" + ewarn "replaced with 'gentoo'. Remove gentoo.completion to avoid problems." + echo + fi +} diff --git a/app-shells/bash-completion/files/digest-bash-completion-20031215 b/app-shells/bash-completion/files/digest-bash-completion-20031215 new file mode 100644 index 000000000000..a293bf88dd57 --- /dev/null +++ b/app-shells/bash-completion/files/digest-bash-completion-20031215 @@ -0,0 +1 @@ +MD5 c01b45c4357e2de9d764a938d240ba88 bash-completion-20031215.tar.bz2 75878 diff --git a/app-shells/bash-completion/files/gentoo.completion-20031215 b/app-shells/bash-completion/files/gentoo.completion-20031215 new file mode 100644 index 000000000000..33683e6f7000 --- /dev/null +++ b/app-shells/bash-completion/files/gentoo.completion-20031215 @@ -0,0 +1,612 @@ +# -*- 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 + +_rc-status() +{ + 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 _rc-status 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 [ $(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 -o nospace -W "${opts}")) + return 0 + ;; + "--exec=") + COMPREPLY=($(compgen -o 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 -o nospace -W "${opts}" | grep ^${cur})) + return 0 +} +complete -o 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 |