diff options
Diffstat (limited to 'contrib')
147 files changed, 13914 insertions, 2386 deletions
diff --git a/contrib/_subversion b/contrib/_subversion index 5489f8a3..0168ecd4 100644 --- a/contrib/_subversion +++ b/contrib/_subversion @@ -1,8 +1,5 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # svn completion -# + have svn && { _svn() @@ -424,3 +421,11 @@ _svnlook() } complete -F _svnlook $default svnlook } + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/_yum b/contrib/_yum new file mode 100644 index 00000000..b2283078 --- /dev/null +++ b/contrib/_yum @@ -0,0 +1,180 @@ +# yum(8) completion + +have yum && { +_yum_list() +{ + if [[ "$1" == all ]] ; then + # Try to strip in between headings like "Available Packages" + # This will obviously only work for English :P + COMPREPLY=( $( yum -d 0 -C list $1 "$cur*" 2>/dev/null | \ + sed -ne '/^\(Available\|Installed\|Updated\) /d' \ + -e 's/[[:space:]].*//p' ) ) + else + # Drop first line (e.g. "Updated Packages") + COMPREPLY=( $( yum -d 0 -C list $1 "$cur*" 2>/dev/null | \ + sed -ne 1d -e 's/[[:space:]].*//p' ) ) + fi +} + +_yum_repolist() +{ + # -d 0 causes repolist to output nothing as of yum 3.2.22: + # http://yum.baseurl.org/ticket/83 + # Drop first ("repo id repo name") and last ("repolist: ...") rows + yum --noplugins -C repolist $1 2>/dev/null | \ + sed -ne '/^repo\(\s\+id\|list:\)/d' -e 's/[[:space:]].*//p' +} + +_yum_plugins() +{ + command ls /usr/lib/yum-plugins/*.py{,c,o} 2>/dev/null \ + | sed -ne 's|.*/\([^./]*\)\.py[co]\?$|\1|p' | sort -u +} + +_yum() +{ + local cur prev special split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do + if [[ ${COMP_WORDS[i]} == @(install|update|upgrade|remove|erase|deplist|info) ]]; then + special=${COMP_WORDS[i]} + fi + done + + if [ -n "$special" ]; then + # TODO: install|update|upgrade should not match *src.rpm + if [[ "$cur" == */* && "$special" == @(deplist|install|update|upgrade) ]]; then + _filedir rpm + return 0 + fi + case $special in + install) + _yum_list available + return 0 + ;; + deplist|info) + _yum_list all + return 0 + ;; + upgrade|update) + _yum_list updates + return 0 + ;; + remove|erase) + # _rpm_installed_packages is not arch-qualified + _yum_list installed + return 0 + ;; + esac + fi + + _split_longopt && split=true + + case $prev in + list) + COMPREPLY=( $( compgen -W 'all available updates \ + installed extras obsoletes recent' -- $cur ) ) + ;; + clean) + COMPREPLY=( $( compgen -W 'packages headers metadata \ + cache dbcache all' -- $cur ) ) + ;; + repolist) + COMPREPLY=( $( compgen -W 'all enabled disabled' -- $cur ) ) + ;; + localinstall|localupdate) + # TODO: should not match *src.rpm + _filedir rpm + ;; + -d|-e) + COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9 10' -- $cur ) ) + ;; + -c) + _filedir + ;; + --installroot) + _filedir -d + ;; + --enablerepo) + COMPREPLY=( $( compgen -W '$( _yum_repolist disabled )' -- $cur ) ) + ;; + --disablerepo) + COMPREPLY=( $( compgen -W '$( _yum_repolist enabled )' -- $cur ) ) + ;; + --disableexcludes) + COMPREPLY=( $( compgen -W '$( _yum_repolist all ) \ + all main' -- $cur ) ) + ;; + --enableplugin|--disableplugin) + COMPREPLY=( $( compgen -W '$( _yum_plugins )' -- $cur )) + ;; + --color) + COMPREPLY=( $( compgen -W 'always auto never' -- $cur )) + ;; + -R|-x|--exclude) + # argument required but no completions available + return 0 + ;; + -h|--help|--version) + # no other options useful with these + return 0 + ;; + *) + COMPREPLY=( $( compgen -W 'install update \ + check-update upgrade remove erase list info \ + provides whatprovides clean makecache \ + groupinstall groupupdate grouplist \ + groupremove groupinfo search shell resolvedep \ + localinstall localupdate deplist repolist \ + help' -- $cur ) ) + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h --help -t --tolerant -C -c -R \ + -d --showduplicates -e -q --quiet -v --verbose -y \ + --version --installroot --enablerepo --disablerepo -x \ + --exclude --disableexcludes --obsoletes --noplugins \ + --nogpgcheck --disableplugin --enableplugin \ + --skip-broken --color' -- $cur ) ) + return 0 + fi +} +} && +complete -F _yum $filenames yum + +# yum-arch(8) completion +# +have yum-arch && +_yum_arch() +{ + local cur + COMPREPLY=() + cur=`_get_cword` + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W '-d -v -vv -n -c -z -s -l -q' -- $cur ) ) + ;; + *) + _filedir -d + ;; + esac + + return 0 +} && +complete -F _yum_arch $filenames yum-arch + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/ant b/contrib/ant new file mode 100644 index 00000000..58423f71 --- /dev/null +++ b/contrib/ant @@ -0,0 +1,74 @@ +# bash completion for ant + +have ant && { +_ant() +{ + local cur prev buildfile i + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -buildfile|-file|-f) + _filedir 'xml' + return 0 + ;; + -logfile|-l) + _filedir + return 0 + ;; + -propertyfile) + _filedir properties + return 0 + ;; + -nice) + COMPREPLY=( $( compgen -W '1 2 3 4 5 6 7 8 9 10' \ + -- "$cur" ) ) + return 0 + ;; + -lib|-logger|-listener|-D|-inputhandler|-main) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-help -h -projecthelp -p -version \ + -diagnostics -quiet -q -verbose -v -debug -d -emacs -e \ + -lib -logfile -l -logger -listener -noinput -buildfile \ + -file -f -D -keep-going -k -propertyfile -inputhandler \ + -find -s -nice -nouserlib -noclasspath -autoproxy \ + -main' -- "$cur" ) ) + else + # available targets completion + # find which buildfile to use + buildfile=build.xml + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == -@(?(build)file|f) ]]; then + buildfile=${COMP_WORDS[i+1]} + break + fi + done + [ ! -f $buildfile ] && return 0 + + # parse buildfile for targets + # some versions of sed complain if there's no trailing linefeed, + # hence the 2>/dev/null + COMPREPLY=( $( compgen -W "$( cat $buildfile | \ + tr "'\t\n>" "\" \n" | \ + sed -ne 's/.*<target .*name="\([^"]*\).*/\1/p' \ + 2>/dev/null )" -- "$cur" ) ) + fi +} +have complete-ant-cmd.pl && \ + complete -C complete-ant-cmd.pl -F _ant $filenames ant || \ + complete -F _ant $filenames ant +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/apache2ctl b/contrib/apache2ctl index 8794b4a9..1987d245 100644 --- a/contrib/apache2ctl +++ b/contrib/apache2ctl @@ -1,18 +1,24 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # apache2ctl(1) completion -# + have apache2ctl && { _apache2ctl() { - local APWORDS - - COMPREPLY=() - cur=`_get_cword` - - APWORDS=$(apache2ctl 2>&1 >/dev/null | head -n1 | cut -f3 -d" " | tr "|" " ") - - COMPREPLY=( $( compgen -W "$APWORDS" -- "$cur" ) ) + local APWORDS + + COMPREPLY=() + cur=`_get_cword` + + APWORDS=$(apache2ctl 2>&1 >/dev/null | head -n1 | cut -f3 -d" " | \ + tr "|" " ") + + COMPREPLY=( $( compgen -W "$APWORDS" -- "$cur" ) ) } complete -F _apache2ctl apache2ctl } + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/apt b/contrib/apt new file mode 100644 index 00000000..36c66c99 --- /dev/null +++ b/contrib/apt @@ -0,0 +1,155 @@ +# Debian apt-get(8) completion. + +have apt-get && +_apt_get() +{ + local cur prev special i + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do + if [[ ${COMP_WORDS[i]} == @(install|remove|autoremove|purge|source|build-dep) ]]; then + special=${COMP_WORDS[i]} + fi + done + + if [ -n "$special" ]; then + case $special in + remove|autoremove|purge) + if [ -f /etc/debian_version ]; then + # Debian system + COMPREPLY=( $( _comp_dpkg_installed_packages $cur ) ) + else + # assume RPM based + _rpm_installed_packages + fi + return 0 + ;; + *) + COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \ + 2> /dev/null ) ) + return 0 + ;; + esac + fi + + case "$prev" in + -@(c|-config-file)) + _filedir + return 0 + ;; + -@(t|-target-release|-default-release)) + COMPREPLY=( $( apt-cache policy | \ + grep "release.o=Debian,a=$cur" | \ + sed -e "s/.*a=\(\w*\).*/\1/" | uniq 2> /dev/null) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d -f -h -v -m -q -s -y -u -t -b -c -o \ + --download-only --fix-broken --help --version --ignore-missing \ + --fix-missing --no-download --quiet --simulate --just-print \ + --dry-run --recon --no-act --yes --assume-yes --show-upgraded \ + --only-source --compile --build --ignore-hold --target-release \ + --no-upgrade --force-yes --print-uris --purge --reinstall \ + --list-cleanup --default-release --trivial-only --no-remove \ + --diff-only --no-install-recommends --tar-only --config-file \ + --option --auto-remove' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W 'update upgrade dselect-upgrade \ + dist-upgrade install remove purge source build-dep \ + check clean autoclean autoremove' -- "$cur" ) ) + fi + + return 0 +} && +complete -F _apt_get $filenames apt-get + +# Debian apt-cache(8) completion. +# +have apt-cache && +_apt_cache() +{ + local cur prev special i + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + + if [ "$cur" != show ]; then + for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do + if [[ ${COMP_WORDS[i]} == @(add|depends|dotty|madison|policy|rdepends|show?(pkg|src|)) ]]; then + special=${COMP_WORDS[i]} + fi + done + fi + + + if [ -n "$special" ]; then + case $special in + add) + _filedir + return 0 + ;; + + showsrc) + COMPREPLY=( $( apt-cache dumpavail | \ + grep "^Source: $cur" | sort | \ + uniq | cut -f2 -d" " ) ) + return 0 + ;; + + *) + COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" 2> /dev/null ) ) + return 0 + ;; + + esac + fi + + + case "$prev" in + -@(c|p|s|-config-file|-@(pkg|src)-cache)) + _filedir + return 0 + ;; + search) + if [[ "$cur" != -* ]]; then + return 0 + fi + ;; + esac + + if [[ "$cur" == -* ]]; then + + COMPREPLY=( $( compgen -W '-h -v -p -s -q -i -f -a -g -c \ + -o --help --version --pkg-cache --src-cache \ + --quiet --important --full --all-versions \ + --no-all-versions --generate --no-generate \ + --names-only --all-names --recurse \ + --config-file --option --installed' -- "$cur" ) ) + else + + COMPREPLY=( $( compgen -W 'add gencaches show showpkg showsrc \ + stats dump dumpavail unmet search search \ + depends rdepends pkgnames dotty xvcg \ + policy madison' -- "$cur" ) ) + + fi + + + return 0 +} && +complete -F _apt_cache $filenames apt-cache + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/apt-build b/contrib/apt-build new file mode 100644 index 00000000..6031d61f --- /dev/null +++ b/contrib/apt-build @@ -0,0 +1,67 @@ +# Debian apt-build(1) completion. + +have apt-build && +_apt_build() +{ + local cur prev special i + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do + if [[ ${COMP_WORDS[i]} == @(install|remove|source|info|clean) ]]; then + special=${COMP_WORDS[i]} + fi + done + + if [ -n "$special" ]; then + case $special in + @(install|source|info)) + COMPREPLY=( $( apt-cache pkgnames "$cur" 2> /dev/null ) ) + return 0 + ;; + remove) + COMPREPLY=( $( _comp_dpkg_installed_packages "$cur" ) ) + return 0 + ;; + *) + return 0 + ;; + esac + fi + + case "$prev" in + --@(patch|build-dir|repository-dir)) + _filedir + return 0 + ;; + -@(h|-help)) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--help --show-upgraded -u --build-dir \ + --repository-dir --build-only --build-command --reinstall \ + --rebuild --remove-builddep --no-wrapper --purge --patch \ + --patch-strip -p --yes -y --version -v --no-source' -- "$cur" ) ) + + else + COMPREPLY=( $( compgen -W 'update upgrade install remove source \ + dist-upgrade world clean info clean-build update-repository' \ + -- "$cur" ) ) + fi + + + return 0 +} && +complete -F _apt_build $filenames apt-build + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/aptitude b/contrib/aptitude new file mode 100644 index 00000000..b83440ed --- /dev/null +++ b/contrib/aptitude @@ -0,0 +1,96 @@ +# Debian aptitude(1) completion + +have aptitude && { +have grep-status && { +_comp_dpkg_hold_packages() +{ + grep-status -P -e "^$1" -a -FStatus 'hold' -n -s Package +} +} || { +_comp_dpkg_hold_packages() +{ + grep -B 2 'hold' /var/lib/dpkg/status | grep "Package: $1" | cut -d\ -f2 +} +} + +_aptitude() +{ + local cur dashoptions prev special i + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + + dashoptions='-S -u -i -h --help --version -s --simulate -d \ + --download-only -P --prompt -y --assume-yes -F \ + --display-format -O --sort -w --width -f -r -g \ + --with-recommends -R -G --without-recommends -t \ + --target-release -V --show-versions -D --show-deps\ + -Z -v --verbose --purge-unused --schedule-only' + + for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do + if [[ ${COMP_WORDS[i]} == @(install|reinstall|hold|unhold|markauto|unmarkauto|dist-upgrade|full-upgrade|download|show|forbid-version|purge|remove|changelog|why|why-not|keep|keep-all|build-dep) ]]; then + special=${COMP_WORDS[i]} + fi + #exclude some mutually exclusive options + [[ ${COMP_WORDS[i]} == '-u' ]] && dashoptions=${dashoptions/-i} + [[ ${COMP_WORDS[i]} == '-i' ]] && dashoptions=${dashoptions/-u} + done + + if [[ -n "$special" ]]; then + case $special in + @(install|hold|markauto|unmarkauto|dist-upgrade|full-upgrade|download|show|changelog|why|why-not|build-dep)) + COMPREPLY=( $( apt-cache pkgnames $cur 2> /dev/null ) ) + return 0 + ;; + @(purge|remove|reinstall|forbid-version)) + COMPREPLY=( $( _comp_dpkg_installed_packages "$cur" ) ) + return 0 + ;; + unhold) + COMPREPLY=( $( _comp_dpkg_hold_packages "$cur" ) ) + return 0 + ;; + esac + fi + + case $prev in + # don't complete anything if these options are found + @(autoclean|clean|forget-new|search|upgrade|safe-upgrade|update|keep-all)) + return 0 + ;; + -S) + _filedir + return 0 + ;; + -@(t|-target-release|-default-release)) + COMPREPLY=( $( apt-cache policy | \ + grep "release.o=Debian,a=$cur" | \ + sed -e "s/.*a=\(\w*\).*/\1/" | uniq 2> /dev/null ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$dashoptions" -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W 'update upgrade safe-upgrade forget-new \ + clean autoclean install reinstall remove \ + hold unhold purge markauto unmarkauto why why-not \ + dist-upgrade full-upgrade download search show \ + forbid-version changelog keep-all build-dep' -- "$cur" ) ) + fi + + return 0 +} +complete -F _aptitude $default aptitude +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/aspell b/contrib/aspell new file mode 100644 index 00000000..7a5b04ee --- /dev/null +++ b/contrib/aspell @@ -0,0 +1,98 @@ +# bash completion for aspell + +have aspell && { +_aspell_dictionary() +{ + local datadir + datadir=$( aspell config data-dir 2>/dev/null || echo /usr/lib/aspell ) + # First, get aliases (dicts dump does not list them) + COMPREPLY=( $( command ls $datadir/*.alias 2>/dev/null ) ) + COMPREPLY=( ${COMPREPLY[@]%.alias} ) + COMPREPLY=( ${COMPREPLY[@]#$datadir/} ) + # Then, add the canonical dicts + COMPREPLY=( "${COMPREPLY[@]}" $( aspell dicts 2>/dev/null ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- "$cur" ) ) +} + +_aspell() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -c|-p|check|--@(conf|personal|repl|per-conf)) + _filedir + return 0 + ;; + --@(conf-dir|data-dir|dict-dir|home-dir|local-data-dir|prefix)) + _filedir -d + return 0 + ;; + dump|create|merge) + COMPREPLY=( $( compgen -W 'master personal repl' -- "$cur" ) ) + return 0 + ;; + --mode) + COMPREPLY=( $( compgen -W 'none url email sgml tex' -- "$cur" ) ) + return 0 + ;; + --sug-mode) + COMPREPLY=( $( compgen -W 'ultra fast normal bad-speller' -- "$cur" ) ) + return 0 + ;; + --keymapping) + COMPREPLY=( $( compgen -W 'aspell ispell' -- "$cur" ) ) + return 0 + ;; + -d|--master) + _aspell_dictionary + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--conf --conf-dir --data-dir --dict-dir \ + --encoding --add-filter --rem-filter --mode -e \ + -H -t --add-extra-dicts --rem-extra-dicts \ + --home-dir -W --ignore --ignore-accents \ + --dont-ignore-accents --ignore-case --dont-ignore-case \ + --ignore-repl --dont-ignore-repl --jargon --keyboard \ + --lang --language-tag --local-data-dir -d --master \ + --module --add-module-search-order \ + --rem-module-search-order --per-conf -p --personal \ + --prefix --repl -C -B --run-together --dont-run-together \ + --run-together-limit --run-together-min --save-repl \ + --dont-save-repl --set-prefix --dont-set-prefix --size \ + --spelling --strip-accents --dont-strip-accents \ + --sug-mode --add-word-list-path --rem-word-list-path \ + -b -x --backup -b|-x --dont-backup --reverse --dont-reverse \ + --time --dont-time --keymapping --add-email-quote \ + --rem-email-quote --email-margin --add-tex-command \ + --rem-tex-command --tex-check-comments \ + --dont-tex-check-comments --add-tex-extension \ + --rem-tex-extension --add-sgml-check --rem-sgml-check \ + --add-sgml-extension --rem-sgml-extension' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W '-? help -c check -a pipe -l list \ + config config soundslike filter -v version dump \ + create merge' -- "$cur" ) ) + fi + +} +complete -F _aspell $filenames aspell +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/autorpm b/contrib/autorpm new file mode 100644 index 00000000..e111af02 --- /dev/null +++ b/contrib/autorpm @@ -0,0 +1,23 @@ +# autorpm(8) completion + +have autorpm && +_autorpm() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + COMPREPLY=( $( compgen -W '--notty --debug --help --version auto add \ + fullinfo info help install list remove set' -- "$cur" ) ) + +} && +complete -F _autorpm autorpm + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/bash-builtins b/contrib/bash-builtins new file mode 100644 index 00000000..c0af45d4 --- /dev/null +++ b/contrib/bash-builtins @@ -0,0 +1,133 @@ +# bash alias completion +# +_alias() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + case "$COMP_LINE" in + *[^=]) + COMPREPLY=( $( compgen -A alias -- "$cur" ) ) + ;; + *=) + COMPREPLY=( "$( alias ${cur%=} 2>/dev/null | sed \ + -e 's|^alias '"$cur"'\(.*\)$|\1|' )" ) + ;; + esac +} +complete -F _alias $nospace alias + +# bash export completion +# +_export() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + case "$COMP_LINE" in + *=\$*) + COMPREPLY=( $( compgen -v -P '$' -- "${cur#*=\$}" ) ) + ;; + *[^=]) + COMPREPLY=( $( compgen -v -S '=' -- "$cur" ) ) + ;; + *=) + COMPREPLY=( "$( eval echo -n \"$`echo ${cur%=}`\" | + ( echo -n \' + sed -e 's/'\''/'\''\\\'\'''\''/g' + echo -n \' ) )" ) + ;; + esac +} +complete -F _export $default $nospace export + +# bash shell function completion +# +_function() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + if [[ $1 == @(declare|typeset) ]]; then + if [ "$prev" = -f ]; then + COMPREPLY=( $( compgen -A function -- "$cur" ) ) + elif [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -f -F -i -r -x -p' -- "$cur" ) ) + fi + elif [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -A function -- "$cur" ) ) + else + COMPREPLY=( "() $( type -- ${COMP_WORDS[1]} | sed -e 1,2d )" ) + fi +} +complete -F _function function declare typeset + +# bash complete completion +# +_complete() +{ + local cur prev options + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -o) + options="default dirnames filenames" + [ -n "$bash205b" ] && options="$options nospace" + [ -n "$bash3" ] && options="$options bashdefault plusdirs" + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) + return 0 + ;; + + -A) + COMPREPLY=( $( compgen -W 'alias arrayvar binding \ + builtin command directory disabled enabled \ + export file function group helptopic hostname \ + job keyword running service setopt shopt \ + signal stopped user variable' -- "$cur" ) ) + return 0 + ;; + + -C) + COMPREPLY=( $( compgen -A command -- "$cur" ) ) + return 0 + ;; + -F) + COMPREPLY=( $( compgen -A function -- "$cur" ) ) + return 0 + ;; + -@(p|r)) + COMPREPLY=( $( complete -p | sed -e 's|.* ||' ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- "$cur" ) ) + return 0 + ;; + + esac + + if [[ "$cur" == -* ]]; then + # relevant options completion + options="-a -b -c -d -e -f -g -j -k -s -v -u -A -G -W -P -S -X -F -C" + [ -n "$bash205" ] && options="$options -o" + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) + else + COMPREPLY=( $( compgen -A command -- "$cur" ) ) + fi +} +complete -F _complete complete + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/bind-utils b/contrib/bind-utils new file mode 100644 index 00000000..6c005392 --- /dev/null +++ b/contrib/bind-utils @@ -0,0 +1,23 @@ +# bash completion for nslookup + +have nslookup && +_nslookup() +{ + local cur + + COMPREPLY=() + cur=${COMP_WORDS[COMP_CWORD]#-} + + COMPREPLY=( $( compgen -P '-' -W 'all class= debug d2 domain= srchlist= \ + defname search port= querytype= type= recurse retry root timeout vc \ + ignoretc' -- "$cur" ) ) +} && +complete -F _nslookup nslookup + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/bitkeeper b/contrib/bitkeeper index 8e1cc3cd..737837e1 100644 --- a/contrib/bitkeeper +++ b/contrib/bitkeeper @@ -1,20 +1,25 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # BitKeeper completion adapted from code by Bart Trojanowski <bart@jukie.net> +have bk && _bk() { local BKCMDS COMPREPLY=() cur=`_get_cword` - BKCMDS="$( bk help topics | grep '^ bk' | cut -d ' ' -f 4 | \ - xargs echo )" + BKCMDS="$( bk help topics | grep '^ bk' | cut -d ' ' -f 4 | xargs echo )" COMPREPLY=( $( compgen -W "$BKCMDS" -- "$cur" ) ) _filedir return 0 -} +} && complete -F _bk bk + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/bittorrent b/contrib/bittorrent index a240d47c..cc1e95ea 100644 --- a/contrib/bittorrent +++ b/contrib/bittorrent @@ -1,38 +1,42 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # btdownloadheadless(1) completion by Guillaume Rousse <rousse@ccr.jussieu.fr> +have btdownloadheadless.py || have btdownloadcurses.py || \ +have btdownloadgui.py && _btdownload() { - local cur prev + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - --@(responsefile|saveas)) - _filedir - return 0 - ;; - esac + case "$prev" in + --@(responsefile|saveas)) + _filedir + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--max_uploads --keepalive_interval \ - --download_slice_size --request_backlog \ - --max_message_length --ip --minport --maxport \ - --responsefile --url --saveas --timeout \ - --timeout_check_interval --max_slice_length \ - --max_rate_period --bind --upload_rate_fudge \ - --display_interval --rerequest_interval \ - --min_peers --http_timeout --max_initiate \ - --max_allow_in --check_hashes \ - --max_upload_rate --snub_time --spew \ - --rarest_first_cutoff --min_uploads \ - --report_hash_failures' -- $cur ) ) - else - _filedir - fi -} + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--max_uploads --keepalive_interval \ + --download_slice_size --request_backlog --max_message_length \ + --ip --minport --maxport --responsefile --url --saveas --timeout \ + --timeout_check_interval --max_slice_length --max_rate_period \ + --bind --upload_rate_fudge --display_interval --rerequest_interval \ + --min_peers --http_timeout --max_initiate --max_allow_in \ + --check_hashes --max_upload_rate --snub_time --spew \ + --rarest_first_cutoff --min_uploads --report_hash_failures' \ + -- "$cur" ) ) + else + _filedir + fi +} && complete -F _btdownload btdownloadheadless.py btdownloadcurses.py btdownloadgui.py + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/bluez-utils b/contrib/bluez-utils new file mode 100644 index 00000000..f4d56ea5 --- /dev/null +++ b/contrib/bluez-utils @@ -0,0 +1,452 @@ +# bash completion for bluez-utils + +have hcitool && { +_bluetooth_adresses() +{ + if [ -n "${COMP_BLUETOOTH_SCAN:-}" ]; then + COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "$( hcitool scan | \ + awk '/^\t/{print $1}' )" -- "$cur" ) ) + fi +} + +_bluetooth_devices() +{ + COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "$( hcitool dev | \ + awk '/^\t/{print $1}' )" -- "$cur" ) ) +} + +_bluetooth_services() +{ + COMPREPLY=( $( compgen -W 'DID SP DUN LAN FAX OPUSH FTP HS HF HFAG \ + SAP NAP GN PANU HCRP HID CIP A2SRC A2SNK AVRCT AVRTG UDIUE \ + UDITE SYNCML' -- "$cur" ) ) +} + +_bluetooth_packet_types() +{ + COMPREPLY=( $( compgen -W 'DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3' \ + -- "$cur" ) ) +} + +_get_command() +{ + local i + + command= + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" != -* ]]; then + command=${COMP_WORDS[i]} + break + fi + done +} + +_hcitool() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -i) + _bluetooth_devices + return 0; + ;; + --role) + COMPREPLY=( $( compgen -W 'm s' -- "$cur" ) ) + return 0; + ;; + --pkt-type) + _bluetooth_packet_types + return 0; + ;; + esac + + $split && return 0 + + _get_command + if [ -z $command ]; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h -i' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W 'dev inq scan name info \ + spinq epinq cmd con cc dc sr cpt rssi lq tpl \ + afh lst auth enc key clkoff clock' -- "$cur" ) ) + fi + else + case $command in + @(name|info|dc|rssi|lq|afh|auth|key|clkoff|lst)) + _count_args + if [ $args -eq 2 ]; then + _bluetooth_adresses + fi + ;; + cc) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--role --pkt-type' -- "$cur" ) ) + else + _count_args + if [ $args -eq 2 ]; then + _bluetooth_adresses + fi + fi + ;; + sr) + _count_args + if [ $args -eq 2 ]; then + _bluetooth_adresses + else + COMPREPLY=( $( compgen -W 'master slave' -- "$cur" ) ) + fi + ;; + cpt) + _count_args + if [ $args -eq 2 ]; then + _bluetooth_adresses + else + _bluetooth_packet_types + fi + ;; + @(tpl|enc|clock)) + _count_args + if [ $args -eq 2 ]; then + _bluetooth_adresses + else + COMPREPLY=( $( compgen -W '0 1' -- "$cur" ) ) + fi + ;; + esac + fi +} +complete -F _hcitool hcitool + +_sdptool() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + --bdaddr) + _bluetooth_adresses + return 0; + ;; + esac + + $split && return 0 + + _get_command + if [ -z $command ]; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--help' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W 'search browse records add \ + del get setattr setseq' -- "$cur" ) ) + fi + else + case $command in + search) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--bdaddr \ + --tree --raw --xml' -- "$cur" ) ) + else + _bluetooth_services + fi + ;; + @(browse|records)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--tree --raw --xml' -- "$cur" ) ) + else + _bluetooth_adresses + fi + ;; + add) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--handle --channel' -- "$cur" ) ) + else + _bluetooth_services + fi + ;; + get) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--bdaddr \ + --tree --raw --xml' -- "$cur" ) ) + fi + ;; + esac + fi +} +complete -F _sdptool sdptool + +_l2ping() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -i) + _bluetooth_devices + return 0; + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-i -s -c -t -f -r' -- "$cur" ) ) + else + _bluetooth_adresses + fi + +} +complete -F _l2ping l2ping + +_rfcomm() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -@(f|-config)) + _filedir + return 0; + ;; + -i) + _bluetooth_devices + _bluetooth_adresses + return 0; + ;; + esac + + _get_command + if [ -z $command ]; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h --help -a -r --raw -f \ + --config -i -A --auth -E --encrypt -S --secure \ + -M --master' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W 'show connect listen watch \ + bind release' -- "$cur" ) ) + fi + else + _count_args + if [ $args -eq 2 ]; then + _bluetooth_devices + else + case $command in + @(connect|bind)) + if [ $args -eq 3 ]; then + _bluetooth_adresses + fi + ;; + esac + fi + fi +} +complete -F _rfcomm rfcomm + +_ciptool() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -i) + _bluetooth_devices + _bluetooth_adresses + return 0; + ;; + esac + + _get_command + if [ -z $command ]; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h --help -i' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W 'show search connect release \ + loopback' -- "$cur" ) ) + fi + else + case $command in + @(connect|release|loopback)) + _count_args + if [ $args -eq 2 ]; then + _bluetooth_adresses + fi + ;; + esac + fi +} +complete -F _ciptool ciptool + +_dfutool() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -@(d|-device)) + _bluetooth_devices + return 0; + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h --help -d --device' -- "$cur" ) ) + else + _count_args + case $args in + 1) + COMPREPLY=( $( compgen -W 'verify modify \ + upgrade archive' -- "$cur" ) ) + ;; + 2) + _filedir + ;; + esac + fi +} +complete -F _dfutool dfutool + +_hciconfig() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _get_command + if [ -z $command ]; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h --help -a --all' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W 'up down reset rstat auth \ + noauth encrypt noencrypt secmgr nosecmgr \ + piscan noscan iscan pscan ptype name class \ + voice iac inqmode inqdata inqtype inqparams \ + pageparms pageto afhmode aclmtu scomtu putkey \ + delkey commands features version revision lm' \ + -- "$cur" ) ) + fi + else + case $command in + @(putkey|delkey)) + _count_args + if [ $args -eq 2 ]; then + _bluetooth_adresses + fi + ;; + lm) + _count_args + if [ $args -eq 2 ]; then + COMPREPLY=( $( compgen -W 'MASTER \ + SLAVE NONE ACCEPT' -- "$cur" ) ) + fi + ;; + ptype) + _count_args + if [ $args -eq 2 ]; then + _bluetooth_packet_types + fi + ;; + esac + fi +} +complete -F _hciconfig hciconfig + +_hciattach() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-n -p -t -b -s -l' -- "$cur" ) ) + else + _count_args + case $args in + 1) + COMPREPLY=( $( command ls /dev/tty* ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]} \ + ${COMPREPLY[@]#/dev/}' -- "$cur" ) ) + ;; + 2) + COMPREPLY=( $( compgen -W 'any ericsson digi \ + xircom csr bboxes swave bcsp 0x0105 \ + 0x080a 0x0160 0x0002' -- "$cur" ) ) + ;; + 3) + COMPREPLY=( $( compgen -W '9600 19200 38400 \ + 57600 115200 230400 460800 921600' -- "$cur" ) ) + ;; + 4) + COMPREPLY=( $( compgen -W 'flow noflow' -- "$cur" ) ) + ;; + 5) + _bluetooth_adresses + ;; + esac + fi + +} +complete -F _hciattach hciattach + +_hid2hci() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h --help -q --quiet -0 --tohci -1 \ + --tohid' -- "$cur" ) ) + fi +} +complete -F _hid2hci hid2hci + +_avctrl() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h --help -q --quiet' -- "$cur" ) ) + else + _count_args + if [ $args -eq 1 ]; then + COMPREPLY=( $( compgen -W 'discover switch' -- "$cur" ) ) + fi + fi +} +complete -F _avctrl avctrl +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/brctl b/contrib/brctl index 1ecdc127..a612034c 100644 --- a/contrib/brctl +++ b/contrib/brctl @@ -1,44 +1,48 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash completion for brctl have brctl && _brctl() { - local cur command + local cur command - COMPREPLY=() - cur=`_get_cword` - command=${COMP_WORDS[1]} + COMPREPLY=() + cur=`_get_cword` + command=${COMP_WORDS[1]} - case $COMP_CWORD in - 1) - COMPREPLY=( $( compgen -W "addbr delbr addif delif \ - setageing setbridgeprio setfd sethello \ - setmaxage setpathcost setportprio show \ - showmacs showstp stp" -- $cur ) ) - ;; - 2) - case $command in - show) - ;; - *) - COMPREPLY=( $( compgen -W "$(brctl \ - show | sed '1d' | \ - awk '{print $1}' )" -- $cur ) ) - esac - ;; - 3) - case $command in - @(add|del)if) - _configured_interfaces - ;; - stp) - COMPREPLY=( $( compgen -W 'on off' -- $cur ) ) - ;; - esac - ;; - esac + case $COMP_CWORD in + 1) + COMPREPLY=( $( compgen -W "addbr delbr addif delif \ + setageing setbridgeprio setfd sethello \ + setmaxage setpathcost setportprio show \ + showmacs showstp stp" -- "$cur" ) ) + ;; + 2) + case $command in + show) + ;; + *) + COMPREPLY=( $( compgen -W "$(brctl show | sed '1d' | \ + awk '{print $1}' )" -- "$cur" ) ) + esac + ;; + 3) + case $command in + @(add|del)if) + _configured_interfaces + ;; + stp) + COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) + ;; + esac + ;; + esac } && complete -F _brctl $default brctl + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/bzip2 b/contrib/bzip2 new file mode 100644 index 00000000..5572d09a --- /dev/null +++ b/contrib/bzip2 @@ -0,0 +1,47 @@ +# bash completion for bzip2 + +have bzip2 && +_bzip2() +{ + local cur prev xspec + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c -d -f -h -k -L -q -s \ + -t -v -V -z -1 -2 -3 -4 -5 -6 -7 -8 -9 \ + --help --decompress --compress --keep --force \ + --test --stdout --quiet --verbose --license \ + --version --small --fast --best' -- "$cur" ) ) + return 0 + fi + + local IFS=$'\t\n' + + xspec="*.bz2" + if [[ "$prev" == --* ]]; then + [[ "$prev" == --decompress || \ + "$prev" == --list || \ + "$prev" == --test ]] && xspec="!"$xspec + [[ "$prev" == --compress ]] && xspec= + elif [[ "$prev" == -* ]]; then + [[ "$prev" == -*[dt]* ]] && xspec="!"$xspec + [[ "$prev" == -*z* ]] && xspec= + fi + + _expand || return 0 + + COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ + $( compgen -d -- "$cur" ) ) +} && +complete -F _bzip2 $filenames bzip2 + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/cardctl b/contrib/cardctl new file mode 100644 index 00000000..c16c52d5 --- /dev/null +++ b/contrib/cardctl @@ -0,0 +1,24 @@ +# Linux cardctl(8) completion + +have cardctl && +_cardctl() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -W 'status config ident suspend \ + resume reset eject insert scheme' -- "$cur" ) ) + fi +} && +complete -F _cardctl cardctl + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/cfengine b/contrib/cfengine new file mode 100644 index 00000000..0f40e0cd --- /dev/null +++ b/contrib/cfengine @@ -0,0 +1,93 @@ +# bash completion for cfengine + +have cfagent && { +_cfagent_options() +{ + COMPREPLY=( $( compgen -W '-a --sysadm -b --force-net-copy -c \ + --no-check-files -C --no-check-mounts -d --debug -D --define \ + -e --no-edits -E --enforce-links -f --file -h --help -H \ + --no-hard-classes -i --no-ifconfig -I --inform -k --no-copy \ + -K --no-lock -l --traverse-links -L --delete-stale-links -m \ + --no-mount -M --no-modules -n --recon --dry-run --just-print \ + -N --negate --undefine -p --parse-only -P --no-processes -q \ + --no-splay -s --no-commands -S --silent -t --no-tidy -u \ + --use-env -U --underscore-classes -v --verbose -V --version \ + -x --no-preconf -X --no-links -w --no-warn --quiet' -- "$cur" ) ) +} + +_cfagent() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -@(f|-file)) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + _cfagent_options + fi +} +complete -F _cfagent cfagent + +_cfrun() +{ + local i section cfinputs + + COMPREPLY=() + cur=`_get_cword` + + section=1 + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == -- ]]; then + section=$((section + 1)) + fi + done + + case $section in + 1) + prev=${COMP_WORDS[COMP_CWORD-1]} + case $prev in + -f) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-f -h -d -S -T -v' -- $cur ) ) + else + hostfile=${CFINPUTS:-/var/lib/cfengine/inputs}/cfrun.hosts + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == -f ]]; then + hostfile=${COMP_WORDS[i+1]} + break + fi + done + [ ! -f $hostfile ] && return 0 + + COMPREPLY=( $(compgen -W "$( grep -v \ + -E '(=|^$|^#)' $hostfile )" -- "$cur" ) ) + fi + ;; + 2) + _cfagent_options + ;; + esac +} +complete -F _cfrun cfrun +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/chkconfig b/contrib/chkconfig new file mode 100644 index 00000000..7c12c0d8 --- /dev/null +++ b/contrib/chkconfig @@ -0,0 +1,45 @@ +# chkconfig(8) completion + +have chkconfig && +_chkconfig() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + @(?(--level=)[1-6]|--@(list|add|del|override))) + _services + return 0 + ;; + --level) + COMPREPLY=( $( compgen -W '1 2 3 4 5 6' -- "$cur" ) ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--list --add --del --override --level' -- "$cur" ) ) + else + if [ $COMP_CWORD -eq 2 -o $COMP_CWORD -eq 4 ]; then + COMPREPLY=( $( compgen -W 'on off reset resetpriorities' -- "$cur" ) ) + else + _services + fi + fi +} && +complete -F _chkconfig chkconfig + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/chsh b/contrib/chsh new file mode 100644 index 00000000..46ee029f --- /dev/null +++ b/contrib/chsh @@ -0,0 +1,27 @@ +# chsh(1) completion + +_chsh() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + if [ "$prev" = "-s" ]; then + _shells + else + COMPREPLY=( $( compgen -u -- "$cur" ) ) + fi + + return 0 +} +complete -F _chsh chsh + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/cksfv b/contrib/cksfv index f759e9ee..0ddea02f 100644 --- a/contrib/cksfv +++ b/contrib/cksfv @@ -1,30 +1,36 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # cksfv completion by Chris <xris@forevermore.net> +have cksfv && _cksfv() { - COMPREPLY=() - cur=`_get_cword` - - if [ $COMP_CWORD -eq 1 ]; then - COMPREPLY=( $( compgen -W '-C -f -i -q -v' -- $cur ) ) - return 0 - fi - - case "${COMP_WORDS[$COMP_CWORD-1]}" in - -C) - _filedir -d - return 0 - ;; - -f) - _filedir 'sfv' - return 0 - ;; - esac - - _filedir - return 0 -} + COMPREPLY=() + cur=`_get_cword` + + if [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -W '-C -f -i -q -v' -- "$cur" ) ) + return 0 + fi + + case "${COMP_WORDS[$COMP_CWORD-1]}" in + -C) + _filedir -d + return 0 + ;; + -f) + _filedir 'sfv' + return 0 + ;; + esac + + _filedir + return 0 +} && complete -F _cksfv cksfv + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/clisp b/contrib/clisp index 6c6d9b63..322faabb 100644 --- a/contrib/clisp +++ b/contrib/clisp @@ -1,9 +1,7 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash brogrammable completion for various Common Lisp implementations by # Nikodemus Siivola <nikodemus@random-state.net> +have clisp && _clisp() { local cur @@ -13,14 +11,21 @@ _clisp() # completing an option (may or may not be separated by a space) if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-h --help --version --license -B -K \ - -M -m -L -N -E -q --quiet --silent -w -I -ansi \ - -traditional -p -C -norc -i -c -l -o -x ' \ - -- $cur ) ) + COMPREPLY=( $( compgen -W '-h --help --version --license -B -K \ + -M -m -L -N -E -q --quiet --silent -w -I -ansi \ + -traditional -p -C -norc -i -c -l -o -x ' -- "$cur" ) ) else - _filedir + _filedir fi return 0 -} +} && complete -F _clisp $default clisp + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/configure b/contrib/configure new file mode 100644 index 00000000..3195bcb9 --- /dev/null +++ b/contrib/configure @@ -0,0 +1,32 @@ +# bash completion for configure + +_configure() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + # if $COMP_CONFIGURE_HINTS is not null, then completions of the form + # --option=SETTING will include 'SETTING' as a contextual hint + [[ "$cur" != -* ]] && return 0 + + if [ -n "$COMP_CONFIGURE_HINTS" ]; then + COMPREPLY=( $( $1 --help 2>&1 | awk '/^ --[A-Za-z]/ { print $1; \ + if ($2 ~ /--[A-Za-z]/) print $2 }' | sed -e 's/[[,].*//g' | \ + grep ^$cur ) ) + else + COMPREPLY=( $( $1 --help 2>&1 | awk '/^ --[A-Za-z]/ { print $1; \ + if ($2 ~ /--[A-Za-z]/) print $2 }' | sed -e 's/[[,=].*//g' | \ + grep ^$cur ) ) + fi +} +complete -F _configure $default configure + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/cowsay b/contrib/cowsay index d9f8bc46..0a441446 100644 --- a/contrib/cowsay +++ b/contrib/cowsay @@ -1,26 +1,32 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash completion for cowsay have cowsay && _cowsay() { - local cur prev + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case $prev in - -f) - COMPREPLY=( $( cowsay -l | tail -n +2 | tr " " "\n" | grep "^$cur" ) ) - return 0 - ;; - esac + case $prev in + -f) + COMPREPLY=( $( compgen -W '$( cowsay -l | tail -n +2)' -- "$cur" ) ) + return 0 + ;; + esac - # relevant options completion - COMPREPLY=( $( compgen -W '-b -d -g -p -s -t -w -y -e -f -h -l -n -T -W' -- $cur ) ) + # relevant options completion + COMPREPLY=( $( compgen -W '-b -d -g -p -s -t -w -y -e -f -h -l -n -T -W' \ + -- "$cur" ) ) } && complete -F _cowsay $default cowsay cowthink + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/cpan2dist b/contrib/cpan2dist index caec18fa..e2147bfa 100644 --- a/contrib/cpan2dist +++ b/contrib/cpan2dist @@ -1,45 +1,53 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash completion for cpan2dist have cpan2dist && _cpan2dist() { - local cur prev packagelist cpandirs + local cur prev packagelist cpandirs - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case $prev in - --format) - # should remove ":" from COMP_WORDBREAKS, but doesn't work (?) - COMPREPLY=( $( compgen -W '$(perl -MCPANPLUS::Dist -e "print map { \"\$_\n\" } CPANPLUS::Dist->dist_types")' -- "$cur" ) ) - return 0 - ;; - --@(banlist|ignorelist|modulelist|logfile)) - _filedir - return 0 - ;; - esac + case $prev in + --format) + # should remove ":" from COMP_WORDBREAKS, but doesn't work (?) + COMPREPLY=( $( compgen -W '$(perl -MCPANPLUS::Dist -e \ + "print map { \"\$_\n\" } CPANPLUS::Dist->dist_types")' \ + -- "$cur" ) ) + return 0 + ;; + --@(banlist|ignorelist|modulelist|logfile)) + _filedir + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--help --skiptest --force --install \ - --verbose --keepsource --makefile --buildprereq \ - --archive --flushcache --defaults --edit-metafile \ - --format --ban --banlist --ignore --ignorelist \ - --modulelist --logfile --timeout --set-config \ - --set-program --dist-opts --default-banlist \ - --default-ignorelist' -- $cur ) ) - else - cpandirs=( "$HOME/.cpanplus/" "$HOME/.cpan/source/modules/" ) - for dir in ${cpandirs[@]}; do - [ -d "$dir" -a -r "$dir/02packages.details.txt.gz" ] && packagelist="$dir/02packages.details.txt.gz" - done - COMPREPLY=( $( zgrep "^${cur//-/::}" \ - $packagelist 2>/dev/null \ - | awk '{print $1}' | sed -e 's/::/-/g' ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--help --skiptest --force --install \ + --verbose --keepsource --makefile --buildprereq \ + --archive --flushcache --defaults --edit-metafile \ + --format --ban --banlist --ignore --ignorelist \ + --modulelist --logfile --timeout --set-config \ + --set-program --dist-opts --default-banlist \ + --default-ignorelist' -- $cur ) ) + else + cpandirs=( "$HOME/.cpanplus/" "$HOME/.cpan/source/modules/" ) + for dir in ${cpandirs[@]}; do + [ -d "$dir" -a -r "$dir/02packages.details.txt.gz" ] && \ + packagelist="$dir/02packages.details.txt.gz" + done + COMPREPLY=( $( zgrep "^${cur//-/::}" \ + $packagelist 2>/dev/null \ + | awk '{print $1}' | sed -e 's/::/-/g' ) ) + fi } && complete -F _cpan2dist $default cpan2dist + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/cpio b/contrib/cpio new file mode 100644 index 00000000..f28b1b21 --- /dev/null +++ b/contrib/cpio @@ -0,0 +1,101 @@ +# bash completion for cpio + +have cpio && { +_cpio_format() +{ + COMPREPLY=( $( compgen -W 'bin odc newc crc tar ustar hpbin hpodc' -- "$cur" ) ) +} + +_cpio() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + # --name value style option + case $prev in + -H|--format) + _cpio_format + return 0 + ;; + -@(E|F|I|-?(pattern-)file)) + _filedir + return 0 + ;; + -R|--owner) + _usergroup + return 0 + ;; + --rsh-command) + COMPREPLY=( $( compgen -c -- "$cur" ) ) + return 0 + ;; + esac + + $split && return 0 + + if [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -W '-o --create -i --extract -p --pass-through' -- "$cur" ) ) + else + case ${COMP_WORDS[1]} in + -@(o|-create)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-0 -a -c -v -A -B\ + -L -V -C -H -M -O -F --file --format\ + --message --null --reset-access-time\ + --verbose --dot --append --block-size\ + --dereference --io-size --quiet\ + --force-local --rsh-command --help\ + --version' -- "$cur" ) ) + fi + ;; + -@(i|-extract)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-b -c -d -f -m -n -r\ + -t -s -u -v -B -S -V -C -E -H -M -R -I\ + -F --file --make-directories\ + --nonmatching\ + --preserve-modification-time\ + --numeric-uid-gid --rename -t --list\ + --swap-bytes --swap --dot\ + --unconditional --verbose --block-size\ + --swap-halfwords --io-size\ + --pattern-file --format --owner\ + --no-preserve-owner --message\ + --force-local --no-absolute-filenames\ + --sparse --only-verify-crc --quiet\ + --rsh-command --help\ + --version' -- "$cur" ) ) + fi + ;; + -@(p|-pass-through)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-0 -a -d -l -m -u -v\ + -L -V -R --null --reset-access-time\ + --make-directories --link --quiet\ + --preserve-modification-time\ + --unconditional --verbose --dot\ + --dereference --owner\ + --no-preserve-owner --sparse --help\ + --version' -- "$cur" ) ) + else + _filedir -d + fi + ;; + esac + fi +} +complete -F _cpio cpio +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/cups b/contrib/cups new file mode 100644 index 00000000..0d7ceaba --- /dev/null +++ b/contrib/cups @@ -0,0 +1,21 @@ +# bash completion for cups + +have cancel && +_cancel() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + COMPREPLY=( $( compgen -W "$( lpstat | cut -d' ' -f1 )" -- "$cur" ) ) +} && +complete -F _cancel $filenames cancel + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/cvs b/contrib/cvs new file mode 100644 index 00000000..aa2d46c9 --- /dev/null +++ b/contrib/cvs @@ -0,0 +1,266 @@ +# cvs(1) completion + +have cvs && { +set_prefix() +{ + [ -z ${prefix:-} ] || prefix=${cur%/*}/ + [ -r ${prefix:-}CVS/Entries ] || prefix="" +} + +get_entries() +{ + local IFS=$'\n' + [ -r ${prefix:-}CVS/Entries ] && \ + entries=$(cut -d/ -f2 -s ${prefix:-}CVS/Entries) +} + +get_modules() +{ + if [ -n "$prefix" ]; then + COMPREPLY=( $( command ls -d ${cvsroot}/${prefix}/!(CVSROOT) ) ) + else + COMPREPLY=( $( command ls -d ${cvsroot}/!(CVSROOT) ) ) + fi +} + +_cvs() +{ + local cur count mode i cvsroot cvsroots pwd + local -a flags miss files entries changed newremoved + + COMPREPLY=() + cur=`_get_cword` + + count=0 + for i in "${COMP_WORDS[@]}"; do + [ $count -eq $COMP_CWORD ] && break + # Last parameter was the CVSROOT, now go back to mode selection + if [ "${COMP_WORDS[((count))]}" == "$cvsroot" -a "$mode" == "cvsroot" ]; then + mode="" + fi + if [ -z "$mode" ]; then + case $i in + -d) + mode=cvsroot + cvsroot=${COMP_WORDS[((count+1))]} + ;; + @(ad?(d)|new)) + mode=add + ;; + @(adm?(in)|rcs)) + mode=admin + ;; + ann?(notate)) + mode=annotate + ;; + @(checkout|co|get)) + mode=checkout + ;; + @(com?(mit)|ci)) + mode=commit + ;; + di?(f?(f))) + mode=diff + ;; + ex?(p?(ort))) + mode=export + ;; + ?(un)edit) + mode=$i + ;; + hi?(s?(tory))) + mode=history + ;; + im?(p?(ort))) + mode=import + ;; + re?(l?(ease))) + mode=release + ;; + ?(r)log) + mode=log + ;; + @(rdiff|patch)) + mode=rdiff + ;; + @(remove|rm|delete)) + mode=remove + ;; + @(rtag|rfreeze)) + mode=rtag + ;; + st?(at?(us))) + mode=status + ;; + @(tag|freeze)) + mode=tag + ;; + up?(d?(ate))) + mode=update + ;; + *) + ;; + esac + elif [[ "$i" = -* ]]; then + flags=( "${flags[@]}" $i ) + fi + count=$((++count)) + done + + case "$mode" in + add) + if [[ "$cur" != -* ]]; then + set_prefix + if [ $COMP_CWORD -gt 1 -a -r ${prefix:-}CVS/Entries ]; then + get_entries + [ -z "$cur" ] && \ + files=$( command ls -Ad !(CVS) ) || \ + files=$( command ls -d ${cur}* 2>/dev/null ) + for i in "${entries[@]}"; do + files=( ${files[@]/#$i//} ) + done + COMPREPLY=( $( compgen -X '*~' -W '${files[@]}' -- $cur ) ) + fi + else + COMPREPLY=( $( compgen -W '-k -m' -- "$cur" ) ) + fi + ;; + admin) + if [[ "$cur" = -* ]]; then + COMPREPLY=( $( compgen -W '-i -a -A -e -b -c -k -l -u -L -U -m -M \ + -n -N -o -q -I -s -t -t- -T -V -x -z' -- $cur ) ) + fi + ;; + annotate) + if [[ "$cur" = -* ]]; then + COMPREPLY=( $( compgen -W '-D -F -f -l -R -r' -- "$cur" ) ) + else + get_entries + COMPREPLY=( $( compgen -W '${entries[@]}' -- "$cur" ) ) + fi + ;; + checkout) + if [[ "$cur" != -* ]]; then + [ -z "$cvsroot" ] && cvsroot=$CVSROOT + COMPREPLY=( $( cvs -d "$cvsroot" co -c 2> /dev/null | \ + awk '{print $1}' ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W '-A -N -P -R -c -f -l -n -p \ + -s -r -D -d -k -j' -- "$cur" ) ) + fi + ;; + commit) + set_prefix + + if [[ "$cur" != -* ]] && [ -r ${prefix:-}CVS/Entries ]; then + # if $COMP_CVS_REMOTE is not null, 'cvs commit' will + # complete on remotely checked-out files (requires + # passwordless access to the remote repository + if [ -n "${COMP_CVS_REMOTE:-}" ]; then + # this is the least computationally intensive + # way found so far, but other changes + # (something other than changed/removed/new) + # may be missing + changed=( $( cvs -q diff --brief 2>&1 | \ + sed -ne 's/^Files [^ ]* and \([^ ]*\) differ$/\1/p' ) ) + newremoved=( $( cvs -q diff --brief 2>&1 | \ + sed -ne 's/^cvs diff: \([^ ]*\) .*, no comparison available$/\1/p' ) ) + COMPREPLY=( $( compgen -W '${changed[@]:-} \ + ${newremoved[@]:-}' -- "$cur" ) ) + else + COMPREPLY=( $(compgen $default -- "$cur") ) + fi + else + COMPREPLY=( $( compgen -W '-n -R -l -f -F -m -r' -- $cur ) ) + fi + ;; + cvsroot) + if [ -r ~/.cvspass ]; then + # Ugly escaping because of bash treating ':' specially + cvsroots=$( sed 's/^[^ ]* //; s/:/\\:/g' ~/.cvspass ) + COMPREPLY=( $( compgen -W '$cvsroots' -- "$cur" ) ) + fi + ;; + export) + if [[ "$cur" != -* ]]; then + [ -z "$cvsroot" ] && cvsroot=$CVSROOT + COMPREPLY=( $( cvs -d "$cvsroot" co -c | awk '{print $1}' ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W '-N -f -l -R -n -r -D -d -k' \ + -- "$cur" ) ) + fi + ;; + diff) + if [[ "$cur" == -* ]]; then + _longopt diff + else + get_entries + COMPREPLY=( $( compgen -W '${entries[@]:-}' -- "$cur" ) ) + fi + ;; + remove) + if [[ "$cur" != -* ]]; then + set_prefix + if [ $COMP_CWORD -gt 1 -a -r ${prefix:-}CVS/Entries ]; then + get_entries + # find out what files are missing + for i in "${entries[@]}"; do + [ ! -r "$i" ] && miss=( "${miss[@]}" $i ) + done + COMPREPLY=( $(compgen -W '${miss[@]:-}' -- "$cur") ) + fi + else + COMPREPLY=( $( compgen -W '-f -l -R' -- "$cur" ) ) + fi + ;; + import) + if [[ "$cur" != -* ]]; then + # starts with same algorithm as checkout + [ -z "$cvsroot" ] && cvsroot=$CVSROOT + prefix=${cur%/*} + if [ -r ${cvsroot}/${prefix} ]; then + get_modules + COMPREPLY=( ${COMPREPLY[@]#$cvsroot} ) + COMPREPLY=( ${COMPREPLY[@]#\/} ) + fi + pwd=$( pwd ) + pwd=${pwd##*/} + COMPREPLY=( $( compgen -W '${COMPREPLY[@]} $pwd' -- $cur ) ) + else + COMPREPLY=( $( compgen -W '-d -k -I -b -m -W' -- "$cur" )) + fi + ;; + update) + if [[ "$cur" = -* ]]; then + COMPREPLY=( $( compgen -W '-A -P -C -d -f -l -R -p \ + -k -r -D -j -I -W' -- "$cur" ) ) + fi + ;; + "") + COMPREPLY=( $( compgen -W 'add admin annotate checkout ci co \ + commit diff delete edit export \ + freeze get history import log new \ + patch rcs rdiff release remove \ + rfreeze rlog rm rtag stat status \ + tag unedit up update -H -Q -q -b \ + -d -e -f -l -n -t -r -v -w -x -z \ + --help --version' -- "$cur" ) ) + ;; + *) + ;; + esac + + return 0 +} +complete -F _cvs $default cvs +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/dcop b/contrib/dcop new file mode 100644 index 00000000..6f384f71 --- /dev/null +++ b/contrib/dcop @@ -0,0 +1,26 @@ +# bash completion for dcop + +have dcop && +_dcop() +{ + local cur compstr + + COMPREPLY=() + cur=`_get_cword` + if [ -z $cur ]; then + compstr=${COMP_WORDS[*]} + else + compstr=$( command echo ${COMP_WORDS[*]} | sed "s/ $cur$//" ) + fi + COMPREPLY=( $( compgen -W '$( command $compstr | sed s/\(.*\)// )' \ + -- "$cur" ) ) +} && +complete -F _dcop dcop + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/dd b/contrib/dd new file mode 100644 index 00000000..3c1d3c37 --- /dev/null +++ b/contrib/dd @@ -0,0 +1,39 @@ +# bash completion for dd + +have dd && +_dd() +{ + local cur + + COMPREPLY=() + cur=`_get_cword =` + + case "$cur" in + if=*|of=*) + cur=${cur#*=} + _filedir + return 0 + ;; + conv=*) + cur=${cur#*=} + COMPREPLY=( $( compgen -W 'ascii ebcdic ibm block unblock \ + lcase notrunc ucase swab noerror sync' -- "$cur" ) ) + return 0 + ;; + esac + + _expand || return 0 + + COMPREPLY=( $( compgen -W '--help --version' -- "$cur" ) \ + $( compgen -W 'bs cbs conv count ibs if obs of seek skip'\ + -S '=' -- "$cur" ) ) +} && +complete -F _dd $nospace $filenames dd + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/dhclient b/contrib/dhclient new file mode 100644 index 00000000..9ea79f34 --- /dev/null +++ b/contrib/dhclient @@ -0,0 +1,37 @@ +# bash completion for dhclient + +have dhclient && _dhclient() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(cf|lf|pf|sf)) + _filedir + return 0 + ;; + -s) + _known_hosts_real "$cur" + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-p -d -q -1 -r -lf -pf \ + -cf -sf -s -g -n -nw -w' -- "$cur" ) ) + else + _available_interfaces + fi +} && +complete -F _dhclient dhclient + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/dict b/contrib/dict new file mode 100644 index 00000000..c45310f4 --- /dev/null +++ b/contrib/dict @@ -0,0 +1,78 @@ +# dict(1) completion + +{ have dict || have rdict; } && { +_dictdata() +{ + dict $host $port $1 2>/dev/null | sed -ne \ + 's/^['$'\t '']['$'\t '']*\([^'$'\t '']*\).*$/\1/p' +} + +_dict() +{ + local cur prev host port db dictfile + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + dictfile=/usr/share/dict/words + + for (( i=1; i < COMP_CWORD; i++ )); do + case "${COMP_WORDS[i]}" in + -@(h|--host)) + host=${COMP_WORDS[i+1]} + [ -n "$host" ] && host="-h $host" + i=$((++i)) + ;; + -@(p|-port)) + port=${COMP_WORDS[i+1]} + [ -n "$port" ] && port="-p $port" + i=$((++i)) + ;; + -@(d|-database)) + db=${COMP_WORDS[i+1]} + [ -n "$db" ] && host="-d $db" + i=$((++i)) + ;; + *) + ;; + esac + done + + if [[ "$cur" = -* ]]; then + COMPREPLY=( $( compgen -W '-h --host -p --port -d --database \ + -m --match -s --strategy -c --config -C \ + --nocorrect -D --dbs -S --strats -H \ + --serverhelp -i --info -I --serverinfo \ + -a --noauth -u --user -k --key -V --version \ + -L --license --help -v --verbose -r --raw \ + -P --pager --debug --html --pipesize --client' \ + -- "$cur" ) ) + return 0 + fi + + case "$prev" in + -@(d|-database|i|info)) + COMPREPLY=( $( compgen -W '$( _dictdata -D )' -- "$cur" ) ) + return 0 + ;; + -@(s|-strategy)) + COMPREPLY=( $( compgen -W '$( _dictdata -S )' -- "$cur" ) ) + return 0 + ;; + *) + ;; + esac + + [ -r $dictfile ] && \ + COMPREPLY=( $( compgen -W '$( cat $dictfile )' -- "$cur" ) ) +} +complete -F _dict $default dict rdict +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/dpkg b/contrib/dpkg new file mode 100644 index 00000000..6437b8af --- /dev/null +++ b/contrib/dpkg @@ -0,0 +1,268 @@ +# This function is required by _dpkg() and _dpkg-reconfigure() +have dpkg && { +have grep-status && { +_comp_dpkg_installed_packages() +{ + grep-status -P -e "^$1" -a -FStatus 'install ok installed' -n -s Package +} +} || { +_comp_dpkg_installed_packages() +{ + grep -A 1 "Package: $1" /var/lib/dpkg/status | \ + grep -B 1 -Ee "ok installed|half-installed|unpacked| \ + half-configured|config-files" \ + -Ee "^Essential: yes" | \ + grep "Package: $1" | cut -d\ -f2 +} +} + +# Debian dpkg(8) completion +# +_dpkg() +{ + local cur prev i + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + i=$COMP_CWORD + + _expand || return 0 + + _split_longopt + + # find the last option flag + if [[ $cur != -* ]]; then + while [[ $prev != -* && $i != 1 ]]; do + i=$((i-1)) + prev=${COMP_WORDS[i-1]} + done + fi + + case "$prev" in + -@(c|i|A|I|f|e|x|X|-@(install|unpack|record-avail|contents|info|fsys-tarfile|field|control|extract))) + _filedir '?(u)deb' + return 0 + ;; + -@(b|-build)) + _filedir -d + return 0 + ;; + -@(s|p|l|-@(status|print-avail|list))) + COMPREPLY=( $( apt-cache pkgnames "$cur" 2>/dev/null ) ) + return 0 + ;; + -@(S|-search)) + _filedir + return 0 + ;; + -@(r|L|P|-@(remove|purge|listfiles))) + COMPREPLY=( $( _comp_dpkg_installed_packages "$cur" ) ) + return 0 + ;; + *) + COMPREPLY=( $( compgen -W '-i --install --unpack -A --record-avail \ + --configure -r --remove -P --purge --get-selections \ + --set-selections --update-avail --merge-avail \ + --clear-avail --command-fd --forget-old-unavail -s \ + --status -p --print-avail -L --listfiles -l --list \ + -S --search -C --audit --print-architecture \ + --print-gnu-build-architecture \ + --print-installation-architecture \ + --compare-versions --help --version --force-help \ + --force-all --force-auto-select --force-downgrade \ + --force-configure-any --force-hold --force-bad-path \ + --force-not-root --force-overwrite \ + --force-overwrite-diverted --force-bad-verify \ + --force-depends-version --force-depends \ + --force-confnew --force-confold --force-confdef \ + --force-confmiss --force-conflicts --force-architecture\ + --force-overwrite-dir --force-remove-reinstreq \ + --force-remove-essential -Dh \ + --debug=help --licence --admindir --root --instdir \ + -O --selected-only -E --skip-same-version \ + -G --refuse-downgrade -B --auto-deconfigure \ + --no-debsig --no-act -D --debug --status-fd \ + -b --build -I --info -f --field -c --contents \ + -x --extract -X --vextract --fsys-tarfile -e --control \ + --ignore-depends --abort-after' -- "$cur" ) ) + ;; + esac + + +} +complete -F _dpkg $filenames dpkg dpkg-deb +} + +# Debian GNU dpkg-reconfigure(8) completion +# +have dpkg-reconfigure && +_dpkg_reconfigure() +{ + local cur prev opt + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + + case "$prev" in + -@(f|-frontend)) + opt=( $( echo /usr/share/perl5/Debconf/FrontEnd/* ) ) + opt=( ${opt[@]##*/} ) + opt=( ${opt[@]%.pm} ) + COMPREPLY=( $( compgen -W '${opt[@]}' -- "$cur" ) ) + return 0 + ;; + -@(p|-priority)) + COMPREPLY=( $( compgen -W 'low medium high critical' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-f --frontend -p --priority -a --all -u \ + --unseen-only -h --help -s --showold --force --terse' -- "$cur" ) ) + else + COMPREPLY=( $( _comp_dpkg_installed_packages "$cur" ) ) + fi +} && +complete -F _dpkg_reconfigure $default dpkg-reconfigure + +# Debian dpkg-source completion +# +have dpkg-source && +_dpkg_source() +{ + local cur prev options work i action packopts unpackopts + + packopts="-c -l -F -V -T -D -U -W -E -sa -i -I -sk -sp -su -sr -ss -sn -sA -sK -sP -sU -sR" + unpackopts="-sp -sn -su" + options=`echo "-x -b $packopts $unpackopts" | xargs echo | sort -u | xargs echo` + + COMPREPLY=() + if [ "$1" != "dpkg-source" ]; then + return 1 + fi + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + action="options" + for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do + if [[ ${COMP_WORDS[$i]} == "-x" ]]; then + action=unpack + elif [[ ${COMP_WORDS[$i]} == "-b" ]]; then + action=pack + elif [[ ${COMP_WORDS[$i]} == "-h" ]]; then + action=help + fi + done + # if currently seeing a complete option, return just itself. + for i in $options; do + if [ "$cur" = "$i" ]; then + COMPREPLY=( "$cur" ) + return 0 + fi + done + case "$action" in + "unpack") + if [ "$cur" = "-" -o "$cur" = "-s" ]; then + COMPREPLY=( $unpackopts ) + return 0 + fi + case "$prev" in + "-x") + COMPREPLY=( $( compgen -d -- "$cur" ) \ + $( compgen -f -X '!*.dsc' -- "$cur" ) ) + return 0 + ;; + *) + COMPREPLY=( $unpackopts $(compgen -d -f -- "$cur" ) ) + return 0 + ;; + esac + return 0 + ;; + "pack") + if [ "$cur" = "-" ]; then + COMPREPLY=( $packopts ) + return 0 + fi + if [ "$cur" = "-s" ]; then + COMPREPLY=( "-sa" "-sk" "-sp" "-su" "-sr" "-ss" "-sn" \ + "-sA" "-sK" "-sP" "-sU" "-sR" ) + return 0 + fi + case "$prev" in + "-b") + COMPREPLY=( $( compgen -d -- "$cur" ) ) + return 0 + ;; + "-c"|"-l"|"-T"|"-i"|"-I") + # -c: get controlfile + # -l: get per-version info from this file + # -T: read variables here, not debian/substvars + # -i: <regexp> filter out files to ignore diffs of. + # -I: filter out files when building tarballs. + # return directory names and file names + COMPREPLY=( $( compgen -d -f ) ) + return 0 + ;; + "-F") + # -F: force change log format + COMPREPLY=( $( ( cd /usr/lib/dpkg/parsechangelog; compgen -f "$cur" ) ) ) + return 0 + ;; + "-V"|"-D") + # -V: set a substitution variable + # we don't know anything about possible variables or values + # so we don't try to suggest any completion. + COMPREPLY=() + return 0 + ;; + "-D") + # -D: override or add a .dsc field and value + # if $cur doesn't contain a = yet, suggest variable names + if echo -- "$cur" | grep -q "="; then + # $cur contains a "=" + COMPREPLY=() + return 0 + else + COMPREPLY=( Format Source Version Binary Maintainer Uploader Architecture Standards-Version Build-Depends Files ) + return 0 + fi + ;; + "-U") + # -U: remove a field + # Suggest possible fieldnames + COMPREPLY=( Format Source Version Binary Maintainer Uploader Architecture Standards-Version Build-Depends Files ) + return 0 + ;; + *) + COMPREPLY=( $packopts ) + return 0 + ;; + esac + return 0 + ;; + *) + # if seeing a partial option, return possible completions. + if [ "$cur" = "-s" ]; then + COMPREPLY=( "-sa" "-sk" "-sp" "-su" "-sr" "-ss" "-sn" \ + "-sA" "-sK" "-sP" "-sU" "-sR" ) + return 0 + fi + # else return all possible options. + COMPREPLY=( $options ) + return 0 + ;; + esac +} && +complete -F _dpkg_source dpkg-source + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/dselect b/contrib/dselect new file mode 100644 index 00000000..31ad2de8 --- /dev/null +++ b/contrib/dselect @@ -0,0 +1,42 @@ +# Debian Linux dselect(8) completion. + +have dselect && +_dselect() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + --admindir) + _filedir -d + return 0 + ;; + -@(D|debug)) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--admindir --help --version --licence \ + --license --expert --debug' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W 'access update select install config \ + remove quit' -- "$cur" ) ) + fi + + + return 0 +} && +complete -F _dselect $filenames dselect + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/dsniff b/contrib/dsniff index 614005a2..901fa8e2 100644 --- a/contrib/dsniff +++ b/contrib/dsniff @@ -1,272 +1,287 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # dsniff util completion by Guillaume Rousse <rousse@ccr.jussieu.fr> # arpspoof(8) completion # +have arpspoof && _arpspoof() { - local cur - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case "$prev" in - -i) - _interfaces - return 0 - ;; - -t) - _known_hosts - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-i -t' -- $cur ) ) - else - _known_hosts - fi - -} + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -i) + _interfaces + return 0 + ;; + -t) + _known_hosts_real "$cur" + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-i -t' -- "$cur" ) ) + else + _known_hosts_real "$cur" + fi + +} && complete -F _arpspoof arpspoof # dnsspoof(8) completion # +have dnsspoof && _dnsspoof() { - local cur - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case "$prev" in - -i) - _interfaces - return 0 - ;; - -f) - _filedir - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-i -f' -- $cur ) ) - fi - -} + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -i) + _interfaces + return 0 + ;; + -f) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-i -f' -- "$cur" ) ) + fi + +} && complete -F _dnsspoof dnsspoof # dsniff(8) completion # +have dsniff && _dsniff() { - local cur - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case "$prev" in - -@(r|w|f)) - _filedir - return 0 - ;; - -i) - _interfaces - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-c -d -m -n -i -s -f -t \ - -r -w' -- $cur ) ) - fi - -} + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(r|w|f)) + _filedir + return 0 + ;; + -i) + _interfaces + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c -d -m -n -i -s -f -t -r -w' -- "$cur" ) ) + fi + +} && complete -F _dsniff dsniff # filesnarf(8), mailsnarf(8) and msgsnarf (8) completion # +have filesnarf || have mailsnarf || have msgsnarf && _snarf() { - local cur + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -i) - _interfaces - return 0 - ;; - esac + case "$prev" in + -i) + _interfaces + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-i -v' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-i -v' -- "$cur" ) ) + fi -} +} && complete -F _snarf filesnarf mailsnarf msgsnarf # macof(8) completion # +have macof && _macof() { - local cur + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -i) - _interfaces - return 0 - ;; - esac + case "$prev" in + -i) + _interfaces + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-i -s -d -e -x -y -n' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-i -s -d -e -x -y -n' -- "$cur" ) ) + fi -} +} && complete -F _macof macof # sshmitm(8) completion # +have sshmitm && _sshmitm() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-d -I -p' -- $cur ) ) - else - _known_hosts - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d -I -p' -- "$cur" ) ) + else + _known_hosts_real "$cur" + fi -} +} && complete -F _sshmitm sshmitm # sshow(8) completion # +have sshow && _sshow() { - local cur + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -i) - _interfaces - return 0 - ;; - esac + case "$prev" in + -i) + _interfaces + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-d -i' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d -i' -- "$cur" ) ) + fi -} +} && complete -F _sshow sshow # tcpkill(8) completion # +have tcpkill && _tcpkill() { - local cur + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -i) - _interfaces - return 0 - ;; - esac + case "$prev" in + -i) + _interfaces + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-i -1 -2 -3 -4 -5 -6 -7 -8 -9' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-i -1 -2 -3 -4 -5 -6 -7 -8 -9' -- "$cur" ) ) + fi -} +} && complete -F _tcpkill tcpkill # tcpnice(8) completion # +have tcpnice && _tcpnice() { - local cur + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -i) - _interfaces - return 0 - ;; - esac + case "$prev" in + -i) + _interfaces + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-A -I -M -i' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A -I -M -i' -- "$cur" ) ) + fi -} +} && complete -F _tcpnice tcpnice # urlsnarf(8) completion # +have urlsnarf && _urlsnarf() { - local cur + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -i) - _interfaces - return 0 - ;; - esac + case "$prev" in + -i) + _interfaces + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-n -i -v' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-n -i -v' -- "$cur" ) ) + fi -} +} && complete -F _urlsnarf urlsnarf # webmitm(8) completion # +have webmitm && _webmitm() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-d' -- $cur ) ) - else - _known_hosts - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d' -- "$cur" ) ) + else + _known_hosts_real "$cur" + fi -} +} && complete -F _webmitm webmitm + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/findutils b/contrib/findutils new file mode 100644 index 00000000..d77c892d --- /dev/null +++ b/contrib/findutils @@ -0,0 +1,122 @@ +# bash completion for GNU find. This makes heavy use of ksh style extended +# globs and contains Linux specific code for completing the parameter +# to the -fstype option. + +have find && +_find() +{ + local cur prev i exprfound onlyonce + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(max|min)depth) + COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' -- "$cur" ) ) + return 0 + ;; + -?(a|c)newer|-fls|-fprint?(0|f)|-?(i)?(l)name|-?(i)wholename) + _filedir + return 0 + ;; + -fstype) + # this is highly non-portable + [ -e /proc/filesystems ] && + COMPREPLY=( $( compgen -W "$( cut -d$'\t' -f2 /proc/filesystems )" \ + -- "$cur" ) ) + return 0 + ;; + -gid) + _gids + return 0 + ;; + -group) + if [ -n "$bash205" ]; then + COMPREPLY=( $( compgen -g -- $cur 2>/dev/null) ) + fi + return 0 + ;; + -?(x)type) + COMPREPLY=( $( compgen -W 'b c d p f l s' -- "$cur" ) ) + return 0 + ;; + -uid) + _uids + return 0 + ;; + -user) + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + -exec|-ok) + COMP_WORDS=(COMP_WORDS[0] "$cur") + COMP_CWORD=1 + _command + return 0 + ;; + -[acm]min|-[acm]time|-?(i)?(l)?(whole)name|-inum|-?(i)path|-?(i)regex| \ + -links|-perm|-size|-used|-printf) + # do nothing, just wait for a parameter to be given + return 0 + ;; + esac + + _expand || return 0 + + # set exprfound to 1 if there is already an expression present + for i in ${COMP_WORDS[@]}; do + [[ "$i" = [-\(\),\!]* ]] && exprfound=1 && break + done + + # handle case where first parameter is not a dash option + if [ "$exprfound" != 1 ] && [[ "$cur" != [-\(\),\!]* ]]; then + _filedir -d + return 0 + fi + + # complete using basic options + COMPREPLY=( $( compgen -W '-daystart -depth -follow -help -maxdepth \ + -mindepth -mount -noleaf -version -xdev -amin -anewer \ + -atime -cmin -cnewer -ctime -empty -false -fstype \ + -gid -group -ilname -iname -inum -ipath -iregex \ + -wholename \ + -links -lname -mmin -mtime -name -newer -nouser \ + -nogroup -perm -regex -size -true -type -uid -used \ + -user -xtype -exec -fls -fprint -fprint0 -fprintf -ok \ + -print -print0 -printf -prune -ls -wholename -iwholename' -- "$cur" ) ) + + # this removes any options from the list of completions that have + # already been specified somewhere on the command line, as long as + # these options can only be used once (in a word, "options", in + # opposition to "tests" and "actions", as in the find(1) manpage). + onlyonce=' -daystart -depth -follow -help -maxdepth -mindepth -mount \ + -noleaf -version -xdev ' + COMPREPLY=( $( echo "${COMP_WORDS[@]}" | \ + (while read -d ' ' i; do + [ "$i" == "" ] || + [ "${onlyonce/ ${i%% *} / }" == "$onlyonce" ] && + 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[@]}") + ) ) + + _filedir + + return 0 +} && +complete -F _find $filenames find + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/freeciv b/contrib/freeciv index 0a5cf359..202596d0 100644 --- a/contrib/freeciv +++ b/contrib/freeciv @@ -1,64 +1,69 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # civserver completion by Guillaume Rousse <rousse@ccr.jussieu.fr> +have civserver && _civserver() { - local cur + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -@(f|g|l|r|-file|-log|-gamelog|-read)) - _filedir - return 0 - ;; - esac + case "$prev" in + -@(f|g|l|r|-file|-log|-gamelog|-read)) + _filedir + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-d -f -g -h -i -l -m -M -p -q -r -v\ - --debug --file --gamelog --help --info --log --meta \ - --Metaserver --port --quitidle --read --version' \ - -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d -f -g -h -i -l -m -M -p -q -r -v\ + --debug --file --gamelog --help --info --log --meta \ + --Metaserver --port --quitidle --read --version' -- "$cur" ) ) + fi -} +} && complete -F _civserver civserver # civclient completion by Guillaume Rousse <rousse@ccr.jussieu.fr> # +have civclient && _civclient() { - local cur + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -@(l|S|t|-log|-Sound|-tiles)) - _filedir - return 0 - ;; - -@(P|-Plugin)) - COMPREPLY=( $( compgen -W 'none esd sdl' -- $cur ) ) - return 0 - ;; - -@(s|-server)) - _known_hosts - return 0 - ;; - esac + case "$prev" in + -@(l|S|t|-log|-Sound|-tiles)) + _filedir + return 0 + ;; + -@(P|-Plugin)) + COMPREPLY=( $( compgen -W 'none esd sdl' -- "$cur" ) ) + return 0 + ;; + -@(s|-server)) + _known_hosts_real "$cur" + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-a -d -h -l -m -n -p -P -s -S -t -v\ - --autoconnect --debug --help --log --meta --name \ - --port --Plugin --server --Sound --tiles --version' \ - -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -d -h -l -m -n -p -P -s -S -t -v\ + --autoconnect --debug --help --log --meta --name --port \ + --Plugin --server --Sound --tiles --version' -- "$cur" ) ) + fi -} +} && complete -F _civclient civclient + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/gcc b/contrib/gcc new file mode 100644 index 00000000..a4f80952 --- /dev/null +++ b/contrib/gcc @@ -0,0 +1,59 @@ +# gcc(1) completion +# +# The only unusual feature is that we don't parse "gcc --help -v" output +# directly, because that would include the options of all the other backend +# tools (linker, assembler, preprocessor, etc) without any indication that +# you cannot feed such options to the gcc driver directly. (For example, the +# linker takes a -z option, but you must type -Wl,-z for gcc.) Instead, we +# ask the driver ("g++") for the name of the compiler ("cc1"), and parse the +# --help output of the compiler. + +have gcc && +_gcc() +{ + local cur cc backend + + COMPREPLY=() + cur=`_get_cword` + + _expand || return 0 + + case "$1" in + gcj) + backend=jc1 + ;; + gpc) + backend=gpc1 + ;; + *77) + backend=f771 + ;; + *) + backend=cc1 # (near-)universal backend + ;; + esac + + if [[ "$cur" == -* ]]; then + cc=$( $1 -print-prog-name=$backend ) + # sink stderr: + # for C/C++/ObjectiveC it's useless + # for FORTRAN/Java it's an error + COMPREPLY=( $( compgen -W "$( $cc --help 2>/dev/null | \ + tr '\t' ' ' | \ + sed -e '/^ *-/!d' -e 's/ *-\([^ ]*\).*/-\1/' | \ + sort -u )" -- "$cur" ) ) + else + _filedir + fi +} && +complete $filenames -F _gcc gcc g++ c++ g77 gcj gpc +[ $USERLAND = GNU -o $UNAME = Cygwin ] && \ +[ -n "${have:-}" ] && complete $filenames -F _gcc cc + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/gcl b/contrib/gcl index dd4f25e0..ce6923fc 100644 --- a/contrib/gcl +++ b/contrib/gcl @@ -1,9 +1,7 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash programmable completion for various Common Lisp implementations by # Nikodemus Siivola <nikodemus@random-state.net> +have gcl && _gcl() { local cur @@ -13,13 +11,20 @@ _gcl() # completing an option (may or may not be separated by a space) if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-eval -load -f -batch -dir -libdir \ - -compile -o-file -c-file -h-file -data-file -system-p '\ - -- $cur ) ) + COMPREPLY=( $( compgen -W '-eval -load -f -batch -dir -libdir \ + -compile -o-file -c-file -h-file -data-file -system-p '-- "$cur" ) ) else - _filedir + _filedir fi return 0 -} -complete -F _gcl -o default gcl +} && +complete -F _gcl $default gcl + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/gdb b/contrib/gdb new file mode 100644 index 00000000..7ea304e1 --- /dev/null +++ b/contrib/gdb @@ -0,0 +1,43 @@ +# bash completion for gdb + +have gdb && +_gdb() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + if [ $COMP_CWORD -eq 1 ]; then + local IFS + if [[ "$cur" == */* ]]; then + # compgen -c works as expected if $cur contains any slashes. + IFS=$'\n' + COMPREPLY=( $( PATH="$PATH:." compgen -d -c -- "$cur" ) ) + else + # otherwise compgen -c contains Bash's built-in commands, + # functions and aliases. Thus we need to retrieve the program + # names manually. + IFS=":" + local path_array=( $(echo "$PATH" | sed 's/::\+/:/g;s/^:\|:$//g') ) + IFS=$'\n' + COMPREPLY=( $( compgen -d -W '$(find "${path_array[@]}" . \ + -mindepth 1 -maxdepth 1 -not -type d -executable \ + -printf "%f\\n" 2>/dev/null)' -- "$cur" ) ) + fi + elif [ $COMP_CWORD -eq 2 ]; then + prev=${prev##*/} + COMPREPLY=( $( compgen -fW "$( command ps axo comm,pid | \ + awk '{if ($1 ~ /^'"$prev"'/) print $2}' )" -- "$cur" ) ) + fi +} && +complete -F _gdb $default gdb + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/genisoimage b/contrib/genisoimage new file mode 100644 index 00000000..7f3abfe6 --- /dev/null +++ b/contrib/genisoimage @@ -0,0 +1,79 @@ +# bash completion for mkisofs/genisoimage + +(have mkisofs || have genisoimage) && +_mkisofs() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(o|abstract|biblio|check-session|copyright|log-file|root-info|prep-boot|*-list)) + _filedir + return 0 + ;; + -*-charset) + COMPREPLY=( $( compgen -W '$( mkisofs -input-charset \ + help 2>&1 | tail -n +3 )' -- "$cur" ) ) + return 0 + ;; + -uid) + _uids + return 0 + ;; + -gid) + _gids + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-abstract -A -allow-lowercase \ + -allow-multidot -biblio -cache-inodes \ + -no-cache-inodes -b -eltorito-alt-boot -B -G \ + -hard-disk-boot -no-emul-boot -no-boot \ + -boot-load-seg -boot-load-size \ + -boot-info-table -C -c -check-oldname \ + -check-session -copyright -d -D -dir-mode \ + -dvd-video -f -file-mode -gid -gui \ + -graft-points -hide -hide-list -hidden \ + -hidden-list -hide-joliet -hide-joliet-list \ + -hide-joliet-trans-tbl -hide-rr-moved \ + -input-charset -output-charset -iso-level -J \ + -joliet-long -jcharset -l -L -log-file -m \ + -exclude-list -max-iso9660-filenames -M -N \ + -new-dir-mode -nobak -no-bak -force-rr -no-rr \ + -no-split-symlink-components \ + -no-split-symlink-fields -o -pad -no-pad \ + -path-list -P -p -print-size -quiet -R -r \ + -relaxed-filenames -sort -split-output \ + -stream-media-size -stream-file-name -sysid -T\ + -table-name -ucs-level -udf -uid \ + -use-fileversion -U -no-iso-translate -V \ + -volset -volset-size -volset-seqno -v -x -z \ + -hfs -apple -map -magic -hfs-creator \ + -hfs-type -probe -no-desktop -mac-name \ + -boot-hfs-file -part -auto -cluster-size \ + -hide-hfs -hide-hfs-list -hfs-volid \ + -icon-position -root-info -prep-boot \ + -input-hfs-charset -output-hfs-charset \ + -hfs-unlock -hfs-bless -hfs-parms --cap \ + --netatalk --double --ethershare --ushare \ + --exchange --sgi --xinet --macbin --single \ + --dave --sfm --osx-double --osx-hfs' -- "$cur" )) + else + _filedir + fi + +} && +complete -F _mkisofs $filenames mkisofs genisoimage + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/getent b/contrib/getent new file mode 100644 index 00000000..ec49e2e7 --- /dev/null +++ b/contrib/getent @@ -0,0 +1,56 @@ +# bash completion for getent + +have getent && +_getent() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + passwd) + COMPREPLY=( $( compgen -u "$cur" ) ) + return 0 + ;; + group) + COMPREPLY=( $( compgen -g "$cur" ) ) + return 0 + ;; + services) + COMPREPLY=( $( compgen -s "$cur" ) ) + return 0 + ;; + hosts) + COMPREPLY=( $( compgen -A hostname "$cur" ) ) + return 0 + ;; + protocols|networks|ahosts|ahostsv4|ahostsv6|rpc) + COMPREPLY=( $( getent "$prev" | \ + sed -ne 's|^\('"$cur"'[^[:space:]]*\).*|\1|p' ) ) + return 0 + ;; + aliases|shadow) + COMPREPLY=( $( getent "$prev" | \ + sed -ne 's|^\('"$cur"'[^:]*\).*|\1|p' ) ) + return 0 + ;; + esac + + + if [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -W 'passwd group hosts services protocols \ + networks ahosts ahostsv4 ahostsv6 aliases ethers netgroup rpc \ + shadow' -- "$cur" ) ) + fi +} && +complete -F _getent getent + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/gkrellm b/contrib/gkrellm index 43603b10..64144102 100644 --- a/contrib/gkrellm +++ b/contrib/gkrellm @@ -1,37 +1,42 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # gkrellm(1) completion by Guillaume Rousse <rousse@ccr.jussieu.fr> +have gkrellm || have gkrellm2 && _gkrellm() { - local cur + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -@(t|-theme)) - _filedir -d - return 0 - ;; - -@(p|-plugin)) - _filedir 'so' - return 0 - ;; - -@(s|-server)) - _known_hosts - return 0 - ;; - esac + case "$prev" in + -@(t|-theme)) + _filedir -d + return 0 + ;; + -@(p|-plugin)) + _filedir 'so' + return 0 + ;; + -@(s|-server)) + _known_hosts_real "$cur" + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--help -t --theme -s --server \ - -g --geometry -wm -w --withdrawn -c --config -nc \ - -f --force-host-config -demo -p --plugin -P \ - --port' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--help -t --theme -s --server \ + -g --geometry -wm -w --withdrawn -c --config -nc \ + -f --force-host-config -demo -p --plugin -P --port' -- "$cur" ) ) + fi -} +} && complete -F _gkrellm gkrellm gkrellm2 + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/gnatmake b/contrib/gnatmake index e4d4e41f..3b66aa31 100644 --- a/contrib/gnatmake +++ b/contrib/gnatmake @@ -1,32 +1,37 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # Gnatmake completion by Ralf_Schroth@t-online.de (Ralf Schroth) +have gnatmake && _gnatmake() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - # relevant (and less relevant ;-) )options completion - COMPREPLY=( $( compgen -W '-a -c -f -i -j -k -m -M -n -o \ - -q -s -v -z -aL -A -aO -aI -I -I- -L -nostdinc \ - -nostdlib -cargs -bargs -largs -fstack-check \ - -fno-inline -g -O1 -O0 -O2 -O3 -gnata -gnatA \ - -gnatb -gnatc -gnatd -gnatD -gnate -gnatE \ - -gnatf -gnatF -gnatg -gnatG -gnath -gnati \ - -gnatk -gnatl -gnatL -gnatm -gnatn -gnato \ - -gnatO -gnatp -gnatP -gnatq -gnatR -gnats \ - -gnatt -gnatT -gnatu -gnatU -gnatv -gnatws \ - -gnatwe -gnatwl -gnatwu -gnatW -gnatx -gnatX \ - -gnaty -gnatz -gnatZ -gnat83' -- $cur ) ) - else - # source file completion - _filedir '@(adb|ads)' - - fi -} -complete -F _gnatmake -o filenames gnatmake + if [[ "$cur" == -* ]]; then + # relevant (and less relevant ;-) )options completion + COMPREPLY=( $( compgen -W '-a -c -f -i -j -k -m -M -n -o \ + -q -s -v -z -aL -A -aO -aI -I -I- -L -nostdinc \ + -nostdlib -cargs -bargs -largs -fstack-check \ + -fno-inline -g -O1 -O0 -O2 -O3 -gnata -gnatA \ + -gnatb -gnatc -gnatd -gnatD -gnate -gnatE \ + -gnatf -gnatF -gnatg -gnatG -gnath -gnati \ + -gnatk -gnatl -gnatL -gnatm -gnatn -gnato \ + -gnatO -gnatp -gnatP -gnatq -gnatR -gnats \ + -gnatt -gnatT -gnatu -gnatU -gnatv -gnatws \ + -gnatwe -gnatwl -gnatwu -gnatW -gnatx -gnatX \ + -gnaty -gnatz -gnatZ -gnat83' -- "$cur" ) ) + else + # source file completion + _filedir '@(adb|ads)' + fi +} && +complete -F _gnatmake $filenames gnatmake + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/gpg b/contrib/gpg new file mode 100644 index 00000000..a0dea7d1 --- /dev/null +++ b/contrib/gpg @@ -0,0 +1,49 @@ +# bash completion for gpg + +have gpg && +_gpg() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(s|-sign|-clearsign|-decrypt-files|-load-extension)) + _filedir + return 0 + ;; + --@(export|@(?(l|nr|nrl)sign|edit)-key)) + # return list of public keys + COMPREPLY=( $( compgen -W "$( gpg --list-keys 2>/dev/null | \ + sed -ne 's@^pub.*/\([^ ]*\).*$@\1@p;s@^.*\(<\([^>]*\)>\).*$@\2@p')" -- "$cur" )) + return 0 + ;; + -@(r|-recipient)) + COMPREPLY=( $( compgen -W "$( gpg --list-keys 2>/dev/null | \ + sed -ne 's@^.*<\([^>]*\)>.*$@\1@p')" -- "$cur" )) + if [ -e ~/.gnupg/gpg.conf ]; then + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "$( sed -ne \ + 's@^[ \t]*group[ \t][ \t]*\([^=]*\).*$@\1@p' \ + ~/.gnupg/gpg.conf )" -- "$cur") ) + fi + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-s -b -e -f -c -d -a -r -u -Z -o -v\ + -q -n -N $(gpg --dump-options)' -- "$cur" ) ) + fi + +} && +complete -F _gpg $default gpg + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/gpg2 b/contrib/gpg2 index c41aa0af..56e3c6eb 100644 --- a/contrib/gpg2 +++ b/contrib/gpg2 @@ -1,44 +1,53 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # gpg2(1) completion -# + have gpg2 && { _gpg2 () { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case "$prev" in - --homedir) - _filedir -d - return 0 - ;; - -@(s|-sign|-clearsign|-options|-decrypt)) - _filedir - return 0 - ;; - --@(export|@(?(l|nr|nrl)sign|edit)-key)) - # return list of public keys - COMPREPLY=( $( compgen -W "$( gpg2 --list-keys 2>/dev/null | sed -ne 's@^pub.*/\([^ ]*\).*$@\1@p;s@^.*\(<\([^>]*\)>\).*$@\2@p')" -- "$cur" )) - return 0 - ;; - -@(r|-recipient)) - COMPREPLY=( $( compgen -W "$( gpg2 --list-keys 2>/dev/null | sed -ne 's@^.*<\([^>]*\)>.*$@\1@p')" -- "$cur" )) - if [ -e ~/.gnupg/gpg.conf ]; then - COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "$( sed -ne 's@^[ \t]*group[ \t][ \t]*\([^=]*\).*$@\1@p' ~/.gnupg/gpg.conf)" -- "$cur")) - fi - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-s -b -e -c -d -k -K -a -r -u -z -o -v \ - -n -N -i -h -R -t $(gpg2 --dump-options)' -- $cur ) ) - fi + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + --homedir) + _filedir -d + return 0 + ;; + -@(s|-sign|-clearsign|-options|-decrypt)) + _filedir + return 0 + ;; + --@(export|@(?(l|nr|nrl)sign|edit)-key)) + # return list of public keys + COMPREPLY=( $( compgen -W "$( gpg2 --list-keys 2>/dev/null | \ + sed -ne 's@^pub.*/\([^ ]*\).*$@\1@p;s@^.*\(<\([^>]*\)>\).*$@\2@p')" -- "$cur" )) + return 0 + ;; + -@(r|-recipient)) + COMPREPLY=( $( compgen -W "$( gpg2 --list-keys 2>/dev/null | \ + sed -ne 's@^.*<\([^>]*\)>.*$@\1@p')" -- "$cur" )) + if [ -e ~/.gnupg/gpg.conf ]; then + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "$( sed -ne \ + 's@^[ \t]*group[ \t][ \t]*\([^=]*\).*$@\1@p' \ + ~/.gnupg/gpg.conf)" -- "$cur")) + fi + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-s -b -e -c -d -k -K -a -r -u -z -o -v \ + -n -N -i -h -R -t $(gpg2 --dump-options)' -- "$cur" ) ) + fi } && complete -F _gpg2 $default gpg2 } + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/gzip b/contrib/gzip new file mode 100644 index 00000000..0bfd748a --- /dev/null +++ b/contrib/gzip @@ -0,0 +1,48 @@ +# bash completion for gzip + +have gzip && +_gzip() +{ + local cur prev xspec helpopts + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + helpopts=`_parse_help gzip` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$helpopts -2 -3 -4 -5 -6 -7 -8" -- "$cur" ) ) + return 0 + fi + + local IFS=$'\t\n' + + xspec="*.?(t)gz" + if [[ "$prev" == --* ]]; then + [[ "$prev" == --decompress || \ + "$prev" == --list || \ + "$prev" == --test ]] && xspec="!"$xspec + [[ "$prev" == --force ]] && xspec= + elif [[ "$prev" == -* ]]; then + [[ "$prev" == -*[dlt]* ]] && xspec="!"$xspec + [[ "$prev" == -*f* ]] && xspec= + elif [ "$prev" = '>' -o "$prev" = '>>' ]; then + xspec= + elif [ "$prev" = '<' ]; then + xspec= + fi + + _expand || return 0 + + COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ + $( compgen -d -- "$cur" ) ) +} && +complete -F _gzip $filenames gzip + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/harbour b/contrib/harbour deleted file mode 100644 index 0d111bd1..00000000 --- a/contrib/harbour +++ /dev/null @@ -1,8 +0,0 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# -# harbour completion by Dave Pearson <davep@davep.org> -# http://www.harbour-project.org/ - -complete -f -X '!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])' harbour gharbour hbpp -complete -f -X '!*.[Hh][Rr][Bb]' hbrun diff --git a/contrib/heimdal b/contrib/heimdal new file mode 100644 index 00000000..6d79d142 --- /dev/null +++ b/contrib/heimdal @@ -0,0 +1,134 @@ +# bash completion for heimdal + +have ktutil && { +_heimdal_principals() +{ + + COMPREPLY=( $( compgen -W "$( kadmin -l dump 2>/dev/null | \ + awk '{print $1}' )" -- "$cur" ) ) +} + +_heimdal_realms() +{ + + COMPREPLY=( $( compgen -W "( kadmin -l dump 2>/dev/null | \ + awk '{print $1}' | awk -F @ '{print $2}' )" -- "$cur" ) ) +} + +_heimdal_encodings() +{ + + COMPREPLY=( $( compgen -W 'des-cbc-mcrc des-cbc-md4 des-cbc-md5 \ + des3-cbc-sha1 arcfour-hmac-md5 aes128-cts-hmac-sha1-96 \ + aes256-cts-hmac-sha1-96' -- "$cur" ) ) +} + +_ktutil() +{ + local cur prev command options split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -p|--principal) + _heimdal_principals + return 0 + ;; + -e|--enctype) + _heimdal_encodings + return 0 + ;; + -a|--admin-server) + _known_hosts_real "$cur" + return 0 + ;; + -r|--realm) + _heimdal_realms + return 0 + ;; + -@(s|k|-@(srv|key)tab)) + _filedir + return 0 + ;; + esac + + $split && return 0 + + commands='add change copy get list remove rename purge srvconvert \ + srv2keytab srvcreate key2srvtab' + + for (( i=1; i < COMP_CWORD; i++ )); do + case ${COMP_WORDS[i]} in + -@(k|-keytab)) + i=$(($i+1)) + ;; + -*) + ;; + *) + command=${COMP_WORDS[i]} + break + ;; + esac + done + + if [[ "$cur" == -* ]]; then + case $command in + add) + options='-p --principal -V -e --enctype -w --password -r \ + --random -s --no-salt -h --hex' + ;; + change) + options='-r --realm -a --admin-server -s --server-port' + ;; + get) + options='-p --principal -e --enctype -r --realm -a \ + --admin-server -s server --server-port' + ;; + list) + options='--keys --timestamp' + ;; + remove) + options='-p --principal -V --kvno -e --enctype' + ;; + purge) + options='--age' + ;; + @(srv2keytab|key2srvtab)) + options='-s --srvtab' + ;; + *) + options='-k --keytab -v --verbose --version -v --help' + ;; + esac + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) + else + case $command in + copy) + _filedir + ;; + get) + _heimdal_principals + ;; + rename) + _heimdal_principals + ;; + *) + COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) ) + ;; + esac + fi +} +complete -F _ktutil ktutil +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/iconv b/contrib/iconv new file mode 100644 index 00000000..cf497e99 --- /dev/null +++ b/contrib/iconv @@ -0,0 +1,35 @@ +# iconv(1) completion + +have iconv && +_iconv() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(f|t|-@(from|to)-code)) + COMPREPLY=( $( compgen -W \ + '$( iconv --list | sed -e "s@//@@;" )' -- "$cur" ) ) + return 0 + ;; + esac + + + if [[ "$cur" = -* ]]; then + COMPREPLY=( $( compgen -W '--from-code -f --to-code -t --list + --output -o --verbose' -- "$cur" ) ) + return 0 + fi +} && +complete -F _iconv $default iconv + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/imagemagick b/contrib/imagemagick new file mode 100644 index 00000000..ed2d01e0 --- /dev/null +++ b/contrib/imagemagick @@ -0,0 +1,532 @@ +# bash completion for ImageMagick + +have convert && { +_ImageMagick() +{ + local prev + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -channel) + COMPREPLY=( $( compgen -W 'Red Green Blue Opacity \ + Matte Cyan Magenta Yellow Black' -- "$cur" ) ) + return 0 + ;; + -colormap) + COMPREPLY=( $( compgen -W 'shared private' -- "$cur" ) ) + return 0 + ;; + -colorspace) + COMPREPLY=( $( compgen -W 'GRAY OHTA RGB Transparent \ + XYZ YCbCr YIQ YPbPr YUV CMYK' -- "$cur" ) ) + return 0 + ;; + -compose) + COMPREPLY=( $( compgen -W 'Over In Out Atop Xor Plus \ + Minus Add Subtract Difference Multiply Bumpmap\ + Copy CopyRed CopyGreen CopyBlue CopyOpacity' -- "$cur" ) ) + return 0 + ;; + -compress) + COMPREPLY=( $( compgen -W 'None BZip Fax Group4 JPEG \ + Lossless LZW RLE Zip' -- "$cur" ) ) + return 0 + ;; + -dispose) + COMPREPLY=( $( compgen -W 'Undefined None Background Previous' \ + -- "$cur" ) ) + return 0 + ;; + -encoding) + COMPREPLY=( $( compgen -W 'AdobeCustom AdobeExpert \ + AdobeStandard AppleRoman BIG5 GB2312 Latin2 \ + None SJIScode Symbol Unicode Wansung' -- "$cur")) + return 0 + ;; + -endian) + COMPREPLY=( $( compgen -W 'MSB LSB' -- "$cur" ) ) + return 0 + ;; + -filter) + COMPREPLY=( $( compgen -W 'Point Box Triangle Hermite \ + Hanning Hamming Blackman Gaussian Quadratic \ + Cubic Catrom Mitchell Lanczos Bessel Sinc' -- "$cur" ) ) + return 0 + ;; + -format) + COMPREPLY=( $( compgen -W "$( convert -list format | \ + awk '/ [r-][w-][+-] / {print $1}' | \ + tr -d '*' | tr [:upper:] [:lower:] )" -- "$cur" ) ) + return 0 + ;; + -gravity) + COMPREPLY=( $( compgen -W 'Northwest North NorthEast \ + West Center East SouthWest South SouthEast' -- "$cur" ) ) + return 0 + ;; + -intent) + COMPREPLY=( $( compgen -W 'Absolute Perceptual \ + Relative Saturation' -- "$cur" ) ) + return 0 + ;; + -interlace) + COMPREPLY=( $( compgen -W 'None Line Plane Partition' -- "$cur" ) ) + return 0 + ;; + -limit) + COMPREPLY=( $( compgen -W 'Disk File Map Memory' -- "$cur" ) ) + return 0 + ;; + -list) + COMPREPLY=( $( compgen -W 'Delegate Format Magic Module Resource \ + Type' -- "$cur" ) ) + return 0 + ;; + -map) + COMPREPLY=( $( compgen -W 'best default gray red green blue' \ + -- "$cur" ) ) + _filedir + return 0 + ;; + -noise) + COMPREPLY=( $( compgen -W 'Uniform Gaussian Multiplicative \ + Impulse Laplacian Poisson' -- "$cur" ) ) + return 0 + ;; + -preview) + COMPREPLY=( $( compgen -W 'Rotate Shear Roll Hue \ + Saturation Brightness Gamma Spiff \ + Dull Grayscale Quantize Despeckle \ + ReduceNoise AddNoise Sharpen Blur \ + Treshold EdgeDetect Spread Shade \ + Raise Segment Solarize Swirl Implode \ + Wave OilPaint CharcoalDrawing JPEG' -- "$cur" ) ) + return 0 + ;; + -@(mask|profile|texture|tile|write)) + _filedir + return 0 + ;; + -type) + COMPREPLY=( $( compgen -W 'Bilevel Grayscale Palette PaletteMatte \ + TrueColor TrueColorMatte ColorSeparation ColorSeparationlMatte \ + Optimize' -- "$cur" ) ) + return 0 + ;; + -units) + COMPREPLY=( $( compgen -W 'Undefined PixelsPerInch \ + PixelsPerCentimeter' -- "$cur" ) ) + return 0 + ;; + -virtual-pixel) + COMPREPLY=( $( compgen -W 'Constant Edge mirror tile' -- "$cur" ) ) + return 0 + ;; + -visual) + COMPREPLY=( $( compgen -W 'StaticGray GrayScale StaticColor \ + PseudoColor TrueColor DirectColor defaut visualid' -- "$cur" )) + return 0 + ;; + esac +} + +_convert() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-adaptive-blur -adaptive-resize \ + -adaptive-sharpen -adjoin -affine -alpha -annotate \ + -antialias -append -attenuate -authenticate \ + -auto-orient -average -background -bench -bias \ + -black-point-compensation -black-threshold \ + -blue-primary -blur -border -bordercolor -caption \ + -channel -charcoal -chop -clip -clip-mask -clip-path \ + -clone -clut -coalesce -colorize -colors -colorspace \ + -combine -comment -compose -composite -compress \ + -contrast -contrast-stretch -convolve -crop -cycle \ + -debug -decipher -deconstruct -define -delay -delete \ + -density -depth -despeckle -display -dispose -distort \ + -dither -draw -edge -emboss -encipher -encoding \ + -endian -enhance -equalize -evaluate -extent -extract \ + -family -fill -filter -flatten -flip -floodfill -flop \ + -font -format -frame -fuzz -fx -gamma -gaussian-blur \ + -geometry -gravity -green-primary -help -identify \ + -implode -insert -intent -interlace -interpolate \ + -label -lat -layers -level -limit -linear-stretch \ + -liquid-rescale -list -log -loop -map -mask \ + -mattecolor -median -modulate -monitor -monochrome \ + -morph -mosaic -motion-blur -negate -noise -normalize \ + -opaque -ordered-dither -orient -page -paint -ping \ + -pointsize -polaroid -posterize -preview -print \ + -process -profile -quality -quantize -quiet \ + -radial-blur -raise -random-threshold -recolor \ + -red-primary -regard-warnings -region -render -repage \ + -resample -resize -respect-parenthesis -reverse -roll \ + -rotate -sample -sampling-factor -scale -scene -seed \ + -segment -separate -sepia-tone -set -shade -shadow \ + -sharpen -shave -shear -sigmoidal-contrast -size \ + -sketch -solarize -splice -spread -stretch -strip \ + -stroke -strokewidth -style -swap -swirl -taint \ + -texture -threshold -thumbnail -tile -tile-offset \ + -tint -transform -transparent -transparent-color \ + -transpose -transverse -treedepth -trim -type \ + -undercolor -unique-colors -units -unsharp -verbose \ + -version -view -vignette -virtual-pixel -wave \ + -weight -white-point -white-threshold \ + -write' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+adjoin +append +compress \ + +contrast +debug +dither +endian +gamma +label +map \ + +mask +matte +negate +noise +page +raise +render \ + +write' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _convert $filenames convert + +_mogrify() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-adaptive-blur -adaptive-resize \ + -adaptive-sharpen -adjoin -affine -alpha -annotate \ + -antialias -attenuate -authenticate -auto-orient \ + -background -bias -black-point-compensation \ + -black-threshold -blue-primary -blur -border \ + -bordercolor -caption -channel -charcoal -chop -clip \ + -clip-mask -clip-path -clut -colorize -colors \ + -colorspace -comment -compose -compress -contrast \ + -contrast-stretch -convolve -cycle -debug -decipher \ + -define -delay -density -depth -despeckle -display \ + -dispose -distort -dither -draw -edge -emboss \ + -encipher -encoding -endian -enhance -equalize \ + -evaluate -extent -extract -family -fill -filter \ + -flip -floodfill -flop -font -format -frame -fuzz \ + -gamma -gaussian-blur -geometry -gravity \ + -green-primary -help -identify -implode -intent \ + -interlace -interpolate -label -lat -layers -level \ + -limit -linear-stretch -liquid-rescale -list -log \ + -loop -mask -mattecolor -median -modulate -monitor \ + -monochrome -motion-blur -negate -noise -normalize \ + -opaque -ordered-dither -orient -page -paint -path \ + -ping -pointsize -polaroid -posterize -preview -print \ + -profile -quality -quantize -quiet -radial-blur \ + -raise -random-threshold -recolor -red-primary \ + -regard-warnings -region -render -repage -resample \ + -resize -roll -rotate -sample -sampling-factor -scale \ + -scene -seed -segment -sepia-tone -set -shade -shadow \ + -sharpen -shave -shear -sigmoidal-contrast -size \ + -sketch -solarize -splice -spread -stretch -strip \ + -stroke -strokewidth -style -swirl -taint -texture \ + -threshold -thumbnail -tile -tile-offset -tint \ + -transform -transparent -transparent-color -transpose \ + -transverse -treedepth -trim -type -undercolor \ + -unique-colors -units -unsharp -verbose -version \ + -view -vignette -virtual-pixel -wave -weight \ + -white-point -white-threshold' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+compress +contrast +debug +dither \ + +endian +gamma +label +map +mask +matte +negate +page \ + +raise' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _mogrify $filenames mogrify + +_display() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-alpha -antialias -authenticate \ + -auto-orient -backdrop -background -border \ + -bordercolor -borderwidth -channel -clip \ + -clip-path -coalesce -colormap -colors -colorspace \ + -comment -compress -contrast -crop -debug -decipher \ + -define -delay -density -depth -despeckle -display \ + -dispose -dither -edge -endian -enhance -extract \ + -filter -flatten -flip -flop -font -foreground \ + -format -frame -gamma -geometry -help -iconGeometry \ + -iconic -identify -immutable -interlace -interpolate \ + -label -limit -list -log -loop -map -mattecolor \ + -monitor -monochrome -name -negate -page -profile \ + -quality -quantize -quiet -raise -regard-warnings \ + -remote -repage -resample -resize \ + -respect-parenthesis -roll -rotate -sample \ + -sampling-factor -scenes -seed -segment -set \ + -shared-memory -sharpen -size -strip -texture -title \ + -transparent-color -treedepth -trim -update \ + -usePixmap -verbose -version -virtual-pixel -visual \ + -window -window-group -write' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+compress +contrast +debug +dither \ + +endian +gamma +label +map +matte +negate +page \ + +raise +write' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _display $filenames display + +_animate() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-alpha -authenticate -backdrop \ + -background -bordercolor -borderwidth -channel \ + -coalesce -colormap -colors -colorspace -crop -debug \ + -decipher -define -delay -density -depth -display \ + -dispose -dither -extract -filter -flatten -font \ + -foreground -format -gamma -geometry -help \ + -iconGeometry -iconic -identify -immutable -interlace \ + -interpolate -limit -list -log -loop -map -mattecolor \ + -mattecolor -monitor -monochrome -name -page -pause \ + -quantize -quiet -regard-warnings -remote -repage \ + -resample -resize -respect-parenthesis -rotate \ + -sampling-factor -scenes -seed -set -shared-memory \ + -size -strip -title -transparent-color -treedepth \ + -trim -verbose -version -virtual-pixel -visual \ + -window' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+debug +dither +gamma +map +matte' \ + -- "$cur" ) ) + else + _filedir + fi +} +complete -F _animate $filenames animate + +_identify() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-alpha -antialias -authenticate \ + -channel -colorspace -crop -debug -define -density \ + -depth -extract -format -fuzz -gamma -help -interlace \ + -interpolate -limit -list -log -monitor -ping -quiet \ + -regard-warnings -respect-parenthesis \ + -sampling-factor -seed -set -size -strip -units \ + -verbose -version -virtual-pixel' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+debug' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _identify $filenames identify + +_montage() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-adjoin -affine -alpha \ + -authenticate -background -blue-primary -blur -border \ + -bordercolor -borderwidth -caption -channel -clone \ + -coalesce -colors -colorspace -comment -compose \ + -compress -crop -debug -define -density -depth \ + -display -dispose -dither -draw -encoding -endian \ + -extract -fill -filter -flatten -flip -flop -font \ + -format -frame -gamma -geometry -gravity \ + -green-primary -help -identify -interlace \ + -interpolate -label -limit -list -log -mattecolor \ + -mode -monitor -monochrome -origin -page -pointsize \ + -polaroid -profile -quality -quantize -quiet \ + -red-primary -regard-warnings -repage -resize \ + -respect-parenthesis -rotate -sampling-factor -scenes \ + -seed -set -shadow -size -strip -stroke -texture \ + -thumbnail -tile -title -transform -transparent \ + -transparent-color -treedepth -trim -type -units \ + -verbose -version -virtual-pixel \ + -white-point' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+adjoin +compress +debug +dither \ + +endian +gamma +label +matte +page' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _montage $filenames montage + +_composite() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-affine -alpha -authenticate \ + -blend -blue-primary -border -bordercolor -channel \ + -colors -colorspace -comment -compose -compress \ + -debug -decipher -define -density -depth -displace \ + -display -dispose -dissolve -dither -encipher \ + -encoding -endian -extract -filter -font -format \ + -geometry -gravity -green-primary -help -identify \ + -interlace -interpolate -label -limit -list -log \ + -monitor -monochrome -negate -page -profile -quality \ + -quantize -quiet -red-primary -regard-warnings \ + -repage -resize -respect-parenthesis -rotate \ + -sampling-factor -scene -seed -sharpen -shave -size \ + -stegano -stereo -strip -swap -thumbnail -tile \ + -transform -transparent-color -treedepth -type -units \ + -unsharp -verbose -version -virtual-pixel -watermark \ + -white-point -write' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+compress +debug +dither +endian +label \ + +matte +negate +page +write' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _composite $filenames composite + +_compare() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-alpha -authenticate -channel \ + -colorspace -compress -debug -decipher -define \ + -density -depth -encipher -extract -format -fuzz \ + -help -highlight-color -identify -interlace -limit \ + -list -log -metric -monitor -passphrase -profile \ + -quality -quantize -quiet -regard-warnings \ + -respect-parenthesis -sampling-factor -seed -set \ + -size -transparent-color -type -verbose -version \ + -virtual-pixel' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+debug' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _compare $filenames compare + +_conjure() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-debug -help -list -log -monitor -quiet \ + -regard-warnings -seed -verbose -version' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+debug' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _conjure $filenames conjure + +_import() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-adjoin -annotate -border -channel \ + -colors -colorspace -comment -compress -crop -debug \ + -define -delay -density -depth -descend -display \ + -dispose -dither -encipher -encoding -endian -filter \ + -format -frame -geometry -gravity -help -identify \ + -interlace -interpolate -label -limit -list -log \ + -monitor -monochrome -negate -page -pause -pointsize \ + -quality -quantize -quiet -regard-warnings -repage \ + -resize -respect-parenthesis -rotate -sampling-factor \ + -scene -screen -seed -set -silent -snaps -strip \ + -thumbnail -transparent -transparent-color -treedepth \ + -trim -type -verbose -version -virtual-pixel \ + -window' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+debug' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _import $filenames import + +_stream() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + _ImageMagick + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-authenticate -channel -colorspace \ + -compress -debug -define -density -depth -extract \ + -help -identify -interlace -interpolate -limit -list \ + -log -map -monitor -quantize -quiet -regard-warnings \ + -respect-parenthesis -sampling-factor -seed -set \ + -size -storage-type -transparent-color -verbose \ + -version -virtual-pixel' -- "$cur" ) ) + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W '+debug' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _stream $filenames stream +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/info b/contrib/info new file mode 100644 index 00000000..5d491453 --- /dev/null +++ b/contrib/info @@ -0,0 +1,58 @@ +# bash completion for info + +have info && +_info() +{ + local cur i infopath + + COMPREPLY=() + cur=`_get_cword` + + _expand || return 0 + + # default completion if parameter contains / + if [[ "$cur" == */* ]]; then + _filedir + return 0 + fi + + infopath='/usr/share/info' + + if [ "${INFOPATH: -1:1}" == ':' ]; then + infopath=${INFOPATH}${infopath} + elif [ ${INFOPATH:+set} ]; then + infopath=$INFOPATH + fi + + infopath=$infopath: + if [ -n "$cur" ]; then + infopath="${infopath//://$cur* }" + else + infopath="${infopath//:// }" + fi + + # redirect stderr for when path doesn't exist + COMPREPLY=( $( eval command ls "$infopath" 2>/dev/null ) ) + # weed out directory path names and paths to info pages + COMPREPLY=( ${COMPREPLY[@]##*/?(:)} ) + # weed out info dir file + for (( i=0 ; i < ${#COMPREPLY[@]} ; ++i )); do + if [ "${COMPREPLY[$i]}" == 'dir' ]; then + unset COMPREPLY[$i]; + fi; + done + # strip suffix from info pages + COMPREPLY=( ${COMPREPLY[@]%.@(gz|bz2|xz|lzma)} ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]%.*}' -- "${cur//\\\\/}" ) ) + + return 0 +} && +complete -F _info $filenames info + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/ipmitool b/contrib/ipmitool new file mode 100644 index 00000000..3862491c --- /dev/null +++ b/contrib/ipmitool @@ -0,0 +1,39 @@ +# bash completion for ipmitool + +have ipmitool && +_ipmitool() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -I) + COMPREPLY=( $( compgen -W 'open imb lan lanplus free' -- "$cur" ) ) + return 0 + ;; + esac + + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h -V -v -c -d -I -H -p -U -f -S -a \ + -e -C -k -y -K -A -P -E -K -m -b -r -B -T -l -o -O' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W 'raw i2c spd lan chassis power event \ + mc sdr sensor fru gendev sel pef sol tsol isol user \ + channel session sunoem kontronoem picmg fwum firewall \ + exec set hpm ekanalyzer' -- "$cur" ) ) + fi + +} && +complete -F _ipmitool ipmitool + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/iptables b/contrib/iptables new file mode 100644 index 00000000..849fd543 --- /dev/null +++ b/contrib/iptables @@ -0,0 +1,70 @@ +# bash completion for iptables + +have iptables && +_iptables() +{ + local cur prev table chain + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + chain='s/^Chain \([^ ]\+\).*$/\1/p' + + if [[ $COMP_LINE == *-t\ *filter* ]]; then + table="-t filter" + elif [[ $COMP_LINE == *-t\ *nat* ]]; then + table="-t nat" + elif [[ $COMP_LINE == *-t\ *mangle* ]]; then + table="-t mangle" + fi + + _split_longopt + + case "$prev" in + -*[AIDRPFXLZ]) + COMPREPLY=( $( compgen -W '`iptables $table -nL | \ + sed -ne "s/^Chain \([^ ]\+\).*$/\1/p"`' -- "$cur" ) ) + ;; + -*t) + COMPREPLY=( $( compgen -W 'nat filter mangle' -- "$cur" ) ) + ;; + -j) + if [ "$table" = "-t filter" -o "$table" = "" ]; then + COMPREPLY=( $( compgen -W 'ACCEPT DROP LOG ULOG REJECT \ + `iptables $table -nL | sed -ne "$chain" \ + -e "s/INPUT|OUTPUT|FORWARD|PREROUTING|POSTROUTING//"`' -- \ + "$cur" ) ) + elif [ "$table" = "-t nat" ]; then + COMPREPLY=( $( compgen -W 'ACCEPT DROP LOG ULOG REJECT \ + MIRROR SNAT DNAT MASQUERADE `iptables $table -nL | \ + sed -ne "$chain" -e "s/OUTPUT|PREROUTING|POSTROUTING//"`' \ + -- "$cur" ) ) + elif [ "$table" = "-t mangle" ]; then + COMPREPLY=( $( compgen -W 'ACCEPT DROP LOG ULOG REJECT \ + MARK TOS `iptables $table -nL | sed -ne "$chain" \ + -e "s/INPUT|OUTPUT|FORWARD|PREROUTING|POSTROUTING//"`' -- \ + "$cur" ) ) + fi + ;; + *) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-i -o -s -d -p -f -m --append \ + --delete --insert --replace --list --flush --zero --new \ + --delete-chain --policy --rename-chain --proto --source \ + --destination --in-interface --jump --match --numeric \ + --out-interface --table --verbose --line-numbers --exact \ + --fragment --modprobe --set-counters --version' -- "$cur") ) + fi + ;; + esac + +} && +complete -F _iptables iptables + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/isql b/contrib/isql index fd66af58..ff4ad888 100644 --- a/contrib/isql +++ b/contrib/isql @@ -1,13 +1,20 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # isql completion by Victor Bogado da Silva Lins <victor@bogado.net> +have isql && _isql() { - local cur - cur=`_get_cword` - - [ -f "$ODBCINI" ] && COMPREPLY=( $( grep \\[$cur "$ODBCINI" | tr -d \\[\\] ) ) -} + local cur + cur=`_get_cword` + + [ -f "$ODBCINI" ] \ + && COMPREPLY=( $( grep \\["$cur" "$ODBCINI" | tr -d \\[\\] ) ) +} && complete -F _isql isql + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/jar b/contrib/jar new file mode 100644 index 00000000..6ef632bf --- /dev/null +++ b/contrib/jar @@ -0,0 +1,36 @@ +# jar(1) completion + +have jar && +_jar() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [ $COMP_CWORD = 1 ]; then + COMPREPLY=( $( compgen -W 'c t x u' -- "$cur" ) ) + return 0 + fi + + case "${COMP_WORDS[1]}" in + *c*f) + _filedir + ;; + *f) + _filedir '?([ejw]ar|zip|[EJW]AR|ZIP)' + ;; + *) + _filedir + ;; + esac +} && +complete -F _jar $filenames jar + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/java b/contrib/java new file mode 100644 index 00000000..9b8c95d5 --- /dev/null +++ b/contrib/java @@ -0,0 +1,260 @@ +# bash completion for java, javac and javadoc + +# available path elements completion +have java && { +_java_path() +{ + cur=${cur##*:} + _filedir '@(jar|zip)' +} + +# exact classpath determination +_java_find_classpath() +{ + local i + + # search first in current options + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == -@(cp|classpath) ]]; then + classpath=${COMP_WORDS[i+1]} + break + fi + done + + # default to environment + [ -z "$classpath" ] && classpath=$CLASSPATH + + # default to current directory + [ -z "$classpath" ] && classpath=. +} + +# exact sourcepath determination +_java_find_sourcepath() +{ + local i + + # search first in current options + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == -sourcepath ]]; then + sourcepath=${COMP_WORDS[i+1]} + break + fi + done + + # default to classpath + if [ -z "$sourcepath" ]; then + _java_find_classpath + sourcepath=$classpath + fi +} + +# available classes completion +_java_classes() +{ + local classpath i + + # find which classpath to use + _java_find_classpath + + # convert package syntax to path syntax + cur=${cur//.//} + # parse each classpath element for classes + for i in ${classpath//:/ }; do + if [ -r $i ] && [[ "$i" == *.@(jar|zip) ]]; then + if type zipinfo &>/dev/null; then + COMPREPLY=( "${COMPREPLY[@]}" $( zipinfo -1 \ + "$i" "$cur*" 2>/dev/null | \ + grep '^[^$]*\.class$' ) ) + else + COMPREPLY=( "${COMPREPLY[@]}" $( jar tf "$i" \ + "$cur" | grep '^[^$]*\.class$' ) ) + fi + + elif [ -d $i ]; then + i=${i%/} + + # See Debian bug #496828 + COMPREPLY=( "${COMPREPLY[@]}" $( find "$i" -type f \ + -maxdepth 1 -path "$i/$cur*.class" 2>/dev/null | \ + grep -v "\\$" | sed -e "s|^$i/||" ) ) + + # FIXME: if we have foo.class and foo/, the completion + # returns "foo/"... how to give precedence to files + # over directories? + fi + done + + # remove class extension + COMPREPLY=( ${COMPREPLY[@]%.class} ) + # convert path syntax to package syntax + COMPREPLY=( ${COMPREPLY[@]//\//.} ) +} + +# available packages completion +_java_packages() +{ + local sourcepath i + + # find which sourcepath to use + _java_find_sourcepath + + # convert package syntax to path syntax + cur=${cur//.//} + # parse each sourcepath element for packages + for i in ${sourcepath//:/ }; do + if [ -d $i ]; then + COMPREPLY=( "${COMPREPLY[@]}" $( command ls -F -d \ + $i/$cur* 2>/dev/null | sed -e 's|^'$i'/||' ) ) + fi + done + # keep only packages + COMPREPLY=( $( echo "${COMPREPLY[@]}" | tr " " "\n" | grep "/$" ) ) + # remove packages extension + COMPREPLY=( ${COMPREPLY[@]%/} ) + # convert path syntax to package syntax + cur=${COMPREPLY[@]//\//.} +} + +# java completion +# +_java() +{ + local cur prev i + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + for ((i=1; i < $COMP_CWORD; i++)); do + case ${COMP_WORDS[$i]} in + -cp|-classpath) + ((i++)) # skip the classpath string. + ;; + -*) + # this is an option, not a class/jarfile name. + ;; + *) + # once we've seen a class, just do filename completion + _filedir + return 0 + ;; + esac + done + + case $prev in + -@(cp|classpath)) + _java_path + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + # relevant options completion + COMPREPLY=( $( compgen -W '-client -hotspot -server -classic \ + -cp -classpath -D -verbose -verbose:class \ + -verbose:gc -version:jni -version \ + -showversion -? -help -X -jar \ + -ea -enableassertions -da -disableassertions \ + -esa -enablesystemassertions \ + -dsa -disablesystemassertions ' -- "$cur" ) ) + else + if [[ "$prev" == -jar ]]; then + # jar file completion + _filedir jar + else + # classes completion + _java_classes + fi + fi +} +complete -F _java $filenames java +} + +have javadoc && +_javadoc() +{ + COMPREPLY=() + local cur prev + + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -@(overview|helpfile|stylesheetfile)) + _filedir + return 0 + ;; + -d) + _filedir -d + return 0 + ;; + -@(classpath|bootclasspath|docletpath|sourcepath|extdirs)) + _java_path + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + # relevant options completion + COMPREPLY=( $( compgen -W '-overview -public -protected \ + -package -private -help -doclet -docletpath \ + -sourcepath -classpath -exclude -subpackages \ + -breakiterator -bootclasspath -source -extdirs \ + -verbose -locale -encoding -J -d -use -version \ + -author -docfilessubdirs -splitindex \ + -windowtitle -doctitle -header -footer -bottom \ + -link -linkoffline -excludedocfilessubdir \ + -group -nocomment -nodeprecated -noqualifier \ + -nosince -nodeprecatedlist -notree -noindex \ + -nohelp -nonavbar -quiet -serialwarn -tag \ + -taglet -tagletpath -charset -helpfile \ + -linksource -stylesheetfile -docencoding' -- "$cur" ) ) + else + # source files completion + _filedir java + # packages completion + _java_packages + fi +} && +complete -F _javadoc $filenames javadoc + +have javac && +_javac() +{ + COMPREPLY=() + local cur prev + + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -d) + _filedir -d + return 0 + ;; + -@(classpath|bootclasspath|sourcepath|extdirs)) + _java_path + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + # relevant options completion + COMPREPLY=( $( compgen -W '-g -g:none -g:lines -g:vars\ + -g:source -O -nowarn -verbose -deprecation -classpath\ + -sourcepath -bootclasspath -extdirs -d -encoding -source\ + -target -help' -- "$cur" ) ) + else + # source files completion + _filedir java + fi +} && +complete -F _javac $filenames javac + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/kldload b/contrib/kldload new file mode 100644 index 00000000..36207afb --- /dev/null +++ b/contrib/kldload @@ -0,0 +1,38 @@ +# bash completion for FreeBSD kernel module commands + +[ $UNAME = FreeBSD ] && +{ + +_kldload() +{ + local cur moddir + + moddir=/modules/ + [ -d $moddir ] || moddir=/boot/kernel/ + cur=`_get_cword` + + COMPREPLY=( $( compgen -f "$moddir$cur" ) ) + COMPREPLY=( ${COMPREPLY[@]#$moddir} ) + COMPREPLY=( ${COMPREPLY[@]%.ko} ) + + return 0 +} +complete -F _kldload $filenames kldload + +_kldunload() +{ + local cur + cur=`_get_cword` + COMPREPLY=( $(kldstat | sed -ne "s/^.*[ \t]\+\($cur[a-z_]\+\).ko$/\1/p") ) +} +complete -F _kldunload $filenames kldunload + +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/larch b/contrib/larch index 3ec04014..c3a55199 100644 --- a/contrib/larch +++ b/contrib/larch @@ -1,39 +1,49 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # larch(1) completion by Alex Shinn <foof@synthcode.com> +have larch && _larch() { - local cur prev + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - if [ $COMP_CWORD -eq 1 ] || [[ "$prev" == -* ]]; then - COMPREPLY=( $( compgen -W ' \ -my-id my-default-archive register-archive whereis-archive archives \ -init-tree tree-root tree-version set-tree-version inventory tagging-method \ -tree-lint missing-tags add delete move explicit-default set-manifest \ -manifest check-manifest mkpatch dopatch patch-report empty-patch \ -make-archive make-category make-branch make-version categories \ -branches versions revisions cat-archive-log archive-cache-revision \ -archive-cached-revisions archive-uncache-revision category-readme \ -branch-readme version-readme make-log logs add-log log-ls cat-log \ -log-header-field changelog log-for-merge merge-points new-on-branch \ -import commit get get-patch lock-branch lock-revision push-mirror \ -build-config update-config replay-config record-config show-config \ -config-history update replay delta-patch star-merge tag prepare-branch \ -finish-branch join-branch whats-missing what-changed file-diffs pristines \ -lock-pristine my-revision-library library-find library-add library-remove \ -library-archives library-categories library-branches library-versions \ -library-revisions library-log library-file touched-files-prereqs \ -patch-set-web update-distributions distribution-name notify my-notifier \ -mail-new-categories mail-new-branches mail-new-versions mail-new-revisions \ -notify-library notify-browser push-new-revisions sendmail-mailx' $cur )) - fi + if [ $COMP_CWORD -eq 1 ] || [[ "$prev" == -* ]]; then + COMPREPLY=( $( compgen -W ' \ + my-id my-default-archive register-archive whereis-archive archives \ + init-tree tree-root tree-version set-tree-version inventory \ + tagging-method tree-lint missing-tags add delete \ + move explicit-default set-manifest manifest check-manifest mkpatch \ + dopatch patch-report empty-patch make-archive make-category \ + make-branch make-version categories branches versions revisions \ + cat-archive-log archive-cache-revision archive-cached-revisions \ + archive-uncache-revision category-readme branch-readme \ + version-readme make-log logs add-log log-ls cat-log \ + log-header-field changelog log-for-merge merge-points \ + new-on-branch import commit get get-patch lock-branch \ + lock-revision push-mirror build-config update-config replay-config \ + record-config show-config config-history update replay delta-patch \ + star-merge tag prepare-branch finish-branch join-branch \ + whats-missing what-changed file-diffs pristines lock-pristine \ + my-revision-library library-find library-add library-remove \ + library-archives library-categories library-branches \ + library-versions library-revisions library-log library-file \ + touched-files-prereqs patch-set-web update-distributions \ + distribution-name notify my-notifier mail-new-categories \ + mail-new-branches mail-new-versions mail-new-revisions \ + notify-library notify-browser push-new-revisions sendmail-mailx' \ + "$cur" )) + fi - return 0 -} -complete -F _larch -o default larch + return 0 +} && +complete -F _larch $default larch + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/ldapvi b/contrib/ldapvi new file mode 100644 index 00000000..e006f56e --- /dev/null +++ b/contrib/ldapvi @@ -0,0 +1,73 @@ +# bash completion for ldapvi + +have ldapvi && +_ldapvi() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(h|-host)) + _known_hosts_real "$cur" + return 0 + ;; + -@(Y|-sasl-mech)) + COMPREPLY=( $( compgen -W 'EXTERNAL GSSAPI DIGEST-MD5 \ + CRAM-MD5 PLAIN ANONYMOUS' -- "$cur" ) ) + return 0 + ;; + --bind) + COMPREPLY=( $( compgen -W 'simple sasl' -- "$cur" ) ) + return 0 + ;; + --bind-dialog) + COMPREPLY=( $( compgen -W 'never auto always' -- $cur ) ) + return 0 + ;; + --scope) + COMPREPLY=( $( compgen -W 'base one sub' -- "$cur" ) ) + return 0 + ;; + --deref) + COMPREPLY=( $( compgen -W 'never searching finding always' \ + -- "$cur" ) ) + return 0 + ;; + --encoding) + COMPREPLY=( $( compgen -W 'ASCII UTF-8 binary' -- "$cur" ) ) + return 0 + ;; + --tls) + COMPREPLY=( $( compgen -W 'never allow try strict' \ + -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--discover --out --in --delete \ + --rename -h --host -D --user -w --password --bind \ + --bind-dialog -I --sasl-interactive --bind-dialog -O \ + --sasl-secprops -Q --sasl-quiet -R --sasl-realm -U \ + --sasl-authcid -X --sasl-authzid -Y --sasl-mech -b \ + --base -s --scope -S --sort --add -o --class --config \ + -c --continue --deleteoldrdn -a --deref -d --discover \ + -A --empty --ncoding -H --help --ldap-conf -m --may -M \ + --managedsait --noquestions -! --noninteractive -q \ + --quiet -R --read -Z --starttls --tls -v --verbose \ + --ldapsearch --ldapmodify --ldapdelete --ldapmoddn' \ + -- "$cur" ) ) + fi +} && +complete -F _ldapvi ldapvi + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/lftp b/contrib/lftp new file mode 100644 index 00000000..feb8af62 --- /dev/null +++ b/contrib/lftp @@ -0,0 +1,26 @@ +# bash completion for lftp + +have lftp && +_lftp() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [ $COMP_CWORD -eq 1 ] && [ -f ~/.lftp/bookmarks ]; then + COMPREPLY=( $( compgen -W '$( sed -ne "s/^\(.*\)'$'\t''.*$/\1/p" \ + ~/.lftp/bookmarks )' -- "$cur" ) ) + fi + + return 0 +} && +complete -F _lftp $default lftp + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/lilo b/contrib/lilo new file mode 100644 index 00000000..afff3722 --- /dev/null +++ b/contrib/lilo @@ -0,0 +1,61 @@ +# bash completion for lilo(8) + +have lilo && { +_lilo_labels() +{ + COMPREPLY=( $( compgen -W "$( awk -F'=' '/label/ {print $2}' \ + /etc/lilo.conf | sed -e 's/\"//g' )" -- "$cur" ) ) +} + +_lilo() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -@(C|i|m|s|S)) + _filedir + return 0 + ;; + -r) + _filedir -d + return 0 + ;; + -@(I|D|R)) + # label completion + _lilo_labels + return 0 + ;; + -@(A|b|M|u|U)) + # device completion + cur=${cur:=/dev/} + _filedir + return 0 + ;; + -T) + # topic completion + COMPREPLY=( $( compgen -W 'help ChRul EBDA geom geom= \ + table= video' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + # relevant options completion + COMPREPLY=( $( compgen -W '-A -b -c -C -d -f -g -i -I -l -L -m \ + -M -p -P -q -r -R -s -S -t -T -u -U -v -V -w -x -z' -- "$cur" ) ) + fi +} +complete -F _lilo lilo +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/lilypond b/contrib/lilypond deleted file mode 100644 index 9c523efd..00000000 --- a/contrib/lilypond +++ /dev/null @@ -1,6 +0,0 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# -# lilypond completion by Laurent Martelli <laurent@bearteam.org> - -complete -f -X '!*.ly' lilypond ly2dvi diff --git a/contrib/links b/contrib/links new file mode 100644 index 00000000..b2b41cff --- /dev/null +++ b/contrib/links @@ -0,0 +1,43 @@ +# bash completion for links + +have links && +_links() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + case "$cur" in + --*) + COMPREPLY=( $( compgen -W '--help' -- "$cur" ) ) + ;; + -*) + COMPREPLY=( $( compgen -W '-async-dns -max-connections \ + -max-connections-to-host -retries -receive-timeout \ + -unrestartable-receive-timeout -format-cache-size \ + -memory-cache-size -http-proxy -ftp-proxy -download-dir \ + -assume-codepage -anonymous -dump -no-connect \ + -source -version -help' -- "$cur" ) ) + ;; + *) + if [ -r ~/.links/links.his ]; then + COMPREPLY=( $( compgen -W '$( < ~/.links/links.his )' \ + -- "$cur" ) ) + fi + _filedir '@(htm|html)' + return 0 + ;; + esac + + return 0 +} && +complete -F _links $filenames links + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/lisp b/contrib/lisp index be8e1f92..cf9e2f8b 100644 --- a/contrib/lisp +++ b/contrib/lisp @@ -1,9 +1,7 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash programmable completion for various Common Lisp implementations by # Nikodemus Siivola <nikodemus@random-state.net> +have lisp && _lisp() { local cur @@ -13,14 +11,21 @@ _lisp() # completing an option (may or may not be separated by a space) if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-core -lib -batch -quit -edit -eval -init \ - -dynamic-space-size -hinit -noinit -nositeinit -load \ - -slave ' \ - -- $cur ) ) + COMPREPLY=( $( compgen -W '-core -lib -batch -quit -edit -eval -init \ + -dynamic-space-size -hinit -noinit -nositeinit -load -slave ' \ + -- "$cur" ) ) else - _filedir + _filedir fi return 0 -} -complete -F _lisp -o default lisp +} && +complete -F _lisp $default lisp + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/lvm b/contrib/lvm new file mode 100644 index 00000000..647564ab --- /dev/null +++ b/contrib/lvm @@ -0,0 +1,1128 @@ +# bash completion for lvm + +have lvm && { +_volumegroups() +{ + COMPREPLY=( $(compgen -W "$( vgscan 2>/dev/null | \ + sed -n -e 's|.*Found.*"\(.*\)".*$|\1|p' )" -- "$cur" ) ) +} + +_physicalvolumes() +{ + COMPREPLY=( $(compgen -W "$( pvscan 2>/dev/null | \ + sed -n -e 's|^.*PV \(.*\) VG.*$|\1|p' )" -- "$cur" ) ) +} + +_logicalvolumes() +{ + COMPREPLY=( $(compgen -W "$( lvscan 2>/dev/null | \ + sed -n -e "s|^.*'\(.*\)'.*$|\1|p" )" -- "$cur" ) ) +} + +_units() +{ + COMPREPLY=( $( compgen -W 'h s b k m g t H K M G T' -- "$cur" ) ) +} + +_sizes() +{ + COMPREPLY=( $( compgen -W 'k K m M g G t T' -- "$cur" ) ) +} + +_args() +{ + args=0 + if [[ "${COMP_WORDS[0]}" == lvm ]]; then + offset=2 + else + offset=1 + fi + for (( i=$offset; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" != -* ]]; then + args=$(($args + 1)) + fi + done +} + +_lvmdiskscan() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --debug -h -? --help -l \ + --lvmpartition -v --verbose --version' -- "$cur" ) ) + fi +} +complete -F _lvmdiskscan lvmdiskscan + +_pvscan() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --debug -e \ + --exported -n --novolumegroup -h -? \ + --help --ignorelockingfailure -P \ + --partial -s --short -u --uuid -v \ + --verbose --version' -- "$cur" ) ) + fi +} +complete -F _pvscan pvscan + +_pvs() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(o|O|-options|-sort)) + COMPREPLY=( $( compgen -W 'pv_fmt pv_uuid \ + pv_size pv_free pv_used pv_name \ + pv_attr pv_pe_count \ + pv_pe_alloc_count' -- "$cur" ) ) + return 0 + ;; + --units) + _units + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--aligned -a --all -d --debug \ + -h -? --help --ignorelockingfailure --noheadings \ + --nosuffix -o --options -O --sort \ + --separator --unbuffered --units \ + -v --verbose --version' -- "$cur" ) ) + else + _physicalvolumes + fi +} +complete -F _pvs pvs + +_pvdisplay() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + --units) + _units + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c --colon -C --columns --units \ + -v --verbose -d --debug -h --help --version' -- "$cur" ) ) + else + _physicalvolumes + fi +} +complete -F _pvdisplay pvdisplay + +_pvchange() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|x|-autobackup|--allocatable)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --all -A --autobackup \ + -d --debug -h --help -t --test -u --uuid -x \ + --allocatable -v --verbose --addtag --deltag \ + --version' -- "$cur" ) ) + else + _physicalvolumes + fi +} +complete -F _pvchange pvchange + +_pvcreate() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + --restorefile) + _filedir + return 0 + ;; + -@(M|-metadatatype)) + COMPREPLY=( $( compgen -W '1 2' -- "$cur" ) ) + return 0 + ;; + --metadatacopies) + COMPREPLY=( $( compgen -W '0 1 2' -- "$cur" ) ) + return 0 + ;; + --@(metadatasize|setphysicalvolumesize)) + _sizes + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--restorefile -d --debug -f \ + --force -h -? --help --labelsector -M --metadatatype \ + --metadatacopies --metadatasize \ + --setphysicalvolumesize -t --test -u --uuid uuid -v \ + --verbose -y --yes --version' -- "$cur" ) ) + else + _physicalvolumes + fi +} +complete -F _pvcreate pvcreate + +_pvmove() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + -@(n|-name)) + _logicalvolumes + return 0 + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--abort -A --autobackup \ + -b --background -d --debug -f --force -h -? \ + --help -i --interval -t --test -v --verbose \ + --version -n --name' -- "$cur" ) ) + else + _physicalvolumes + fi +} +complete -F _pvmove pvmove + +_pvremove() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --debug -f --force -h -? \ + --help -y --yes -t --test -v --verbose \ + --version' -- "$cur" ) ) + else + _physicalvolumes + fi +} +complete -F _pvremove pvremove + +_vgscan() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --debug -h --help \ + --ignorelockingfailure --mknodes -P \ + --partial -v --verbose --version' -- "$cur" ) ) + fi +} +complete -F _vgscan vgscan + +_vgs() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(o|O|-options|-sort)) + COMPREPLY=( $( compgen -W 'vg_fmt vg_uuid vg_name \ + vg_attr vg_size vg_free vg_sysid \ + vg_extent_size vg_extent_count vg_free_count \ + max_lv max_pv pv_count lv_count snap_count \ + vg_seqno' -- "$cur" ) ) + return 0 + ;; + --units) + _units + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--aligned -d --debug \ + -h --help --ignorelockingfailure --noheadings \ + --nosuffix -o --options -O --sort -P --partial \ + --separator --unbuffered --units \ + -v --verbose --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgs vgs + +_vgdisplay() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + --units) + _units + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c --colon -C --columns --units \ + -P --partial -A --activevolumegroups -v --verbose \ + -d --debug -h --help --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgdisplay vgdisplay + +_vgchange() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(a|A|x|-available|-autobackup|-resizeable)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup --alloc -P \ + --partial -d --debug -h --help --ignorelockingfailure \ + -t --test -u --uuid -v --verbose --version -a \ + --available -x --resizeable -l --logicalvolume \ + --addtag --deltag' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgchange vgchange + +_vgcreate() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + -@(M|-metadatatype)) + COMPREPLY=( $( compgen -W '1 2' -- "$cur" ) ) + return 0 + ;; + -@(s|-physicalextentsize)) + _sizes + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup --addtag --alloc -d \ + --debug -h --help -l --maxlogicalvolumes -M --metadatatype -p \ + --maxphysicalvolumes -s --physicalextentsize -t --test -v \ + --verbose --version' -- "$cur" ) ) + else + _args + if [ $args -eq 0 ]; then + _volumegroups + else + _physicalvolumes + fi + fi +} +complete -F _vgcreate vgcreate + +_vgremove() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --debug -h --help -t --test \ + -v --verbose --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgremove vgremove + +_vgrename() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup -d --debug -h \ + -? --help -t --test -v --verbose --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgrename vgrename + +_vgreduce() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --all -A --autobackup -d \ + --debug -h --help --removemissing -t --test -v \ + --verbose --version' -- "$cur" ) ) + + else + _args + if [ $args -eq 0 ]; then + _volumegroups + else + _physicalvolumes + fi + fi +} +complete -F _vgreduce vgreduce + +_vgextend() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + -@(L|-size)) + _sizes + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup -d --debug -h \ + -? --help -t --test -v --verbose --version' -- "$cur" ) ) + else + _args + if [ $args -eq 0 ]; then + _volumegroups + else + _physicalvolumes + fi + fi +} +complete -F _vgextend vgextend + +_vgport() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --all -d --debug -h \ + -? --help -v --verbose --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgport vgimport vgexport + +_vgck() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --debug -h \ + -? --help -v --verbose --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgck vgck + +_vgconvert() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(M|-metadatatype)) + COMPREPLY=( $( compgen -W '1 2' -- "$cur" ) ) + return 0 + ;; + --metadatacopies) + COMPREPLY=( $( compgen -W '0 1 2' -- "$cur" ) ) + return 0 + ;; + --metadatasize) + _sizes + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --debug -h --help --labelsector \ + -M --metadatatype --metadatacopies --metadatasize \ + -t --test -v --verbose --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgconvert vgconvert + +_vgcfgbackup() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(f|-file)) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --debug -f --file -h --help \ + --ignorelockingfailure -P --partial -v --verbose \ + --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgcfgbackup vgcfgbackup + +_vgcfgrestore() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(f|-file)) + _filedir + return 0 + ;; + -@(M|-metadatatype)) + COMPREPLY=( $( compgen -W '1 2' -- "$cur" ) ) + return 0 + ;; + -@(n|-name)) + _volumegroups + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --debug -f --file -l --list \ + -h --help -M --Metadatatype -n --name -t --test \ + -v --verbose --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgcfgrestore vgcfgrestore + +_vgmerge() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup -d --debug -h --help -l \ + --list -t --test -v --verbose --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgmerge vgmerge + +_vgsplit() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + -@(M|-metadatatype)) + COMPREPLY=( $( compgen -W '1 2' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup -d --debug \ + -h --help -l --list -M --metadatatype -t --test \ + -v --verbose --version' -- "$cur" ) ) + else + _args + if [ $args -eq 0 -o $args -eq 1 ]; then + _volumegroups + else + _physicalvolumes + fi + fi +} +complete -F _vgsplit vgsplit + +_vgmknodes() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --debug -h --help -v --verbose \ + --version' -- "$cur" ) ) + else + _volumegroups + fi +} +complete -F _vgmknodes vgmknodes + +_lvscan() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-b --blockdevice -d --debug \ + -h -? --help --ignorelockingfailure -P \ + --partial -v --verbose --version' -- "$cur" ) ) + fi +} +complete -F _lvscan lvscan + +_lvs() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(o|O|-options|-sort)) + COMPREPLY=( $( compgen -W 'lv_uuid lv_name lv_attr lv_minor \ + lv_size seg_count origin snap_percent segtype stripes \ + stripesize chunksize seg_start seg_size' -- "$cur" ) ) + return 0 + ;; + --units) + _units + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--aligned -d --debug -h --help \ + --ignorelockingfailure --noheadings --nosuffix -o --options -O \ + --sort -P --partial --segments --separator --unbuffered --units \ + -v --verbose --version' -- "$cur" ) ) + else + _logicalvolumes + fi +} +complete -F _lvs lvs + +_lvdisplay() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + --units) + _units + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c --colon -C --columns --units \ + -P --partial -m --maps -v --verbose -d --debug -h \ + --help --version' -- "$cur" ) ) + else + _logicalvolumes + fi +} +complete -F _lvdisplay lvdisplay + +_lvchange() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(a|A|C|M|-available|-autobackup|-continguous|-persistent)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + -@(p|-permission)) + COMPREPLY=( $( compgen -W 'r rw' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup -a --available \ + --addtag --alloc -C --contiguous -d --debug --deltag \ + -f --force -h --help --ignorelockingfailure -M \ + --persistent --major major --minor minor -P --partial \ + -p --permission -r --readahead --refresh -t --test \ + -v --verbose --version' -- "$cur" ) ) + else + _logicalvolumes + fi +} +complete -F _lvchange lvchange + +_lvcreate() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|C|M|Z|-autobackup|-continguous|-persistent|-zero)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + -@(L|-size)) + _sizes + return 0 + ;; + -@(p|-permission)) + COMPREPLY=( $( compgen -W 'r rw' -- "$cur" ) ) + return 0 + ;; + -@(n|-name)) + _logicalvolumes + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup --addtag --alloc \ + -C --contiguous -d --debug -h -? --help -i --stripes \ + -I --stripesize -l --extents -L --size -M --persistent \ + --major --minor -n --name -p --permission -r \ + --readahead -t --test --type -v --verbose -Z --zero \ + --version' -- "$cur" ) ) + else + _args + if [ $args -eq 0 ]; then + _volumegroups + else + _physicalvolumes + fi + fi +} +complete -F _lvcreate lvcreate + +_lvremove() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup -d --debug -f \ + --force -h -? --help -t --test -v --verbose \ + --version' -- "$cur" ) ) + else + _logicalvolumes + fi +} +complete -F _lvremove lvremove + +_lvrename() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup -d --debug -h \ + -? --help -t --test -v --verbose --version' -- "$cur" ) ) + else + _logicalvolumes + fi +} +complete -F _lvrename lvrename + +_lvreduce() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + -@(L|-size)) + _sizes + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup -d \ + --debug -f --force -h --help -l --extents \ + -L --size -n --nofsck -r --resizefs -t --test \ + -v --verbose --version' -- "$cur" ) ) + else + _logicalvolumes + fi +} +complete -F _lvreduce lvreduce + +_lvresize() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + -@(L|-size)) + _sizes + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup --alloc -d \ + --debug -h --help -i --stripes -I --stripesize \ + -l --extents -L --size -n --nofsck -r --resizefs \ + -t --test --type -v --verbose --version' -- "$cur" ) ) + else + _args + if [ $args -eq 0 ]; then + _logicalvolumes + else + _physicalvolumes + fi + fi +} +complete -F _lvresize lvresize + +_lvextend() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(A|-autobackup)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur" ) ) + return 0 + ;; + -@(L|-size)) + _sizes + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --autobackup --alloc -d \ + --debug -h --help -i --stripes -I --stripesize \ + -l --extents -L --size -n --nofsck -r --resizefs \ + -t --test --type -v --verbose --version' -- "$cur" ) ) + else + _args + if [ $args -eq 0 ]; then + _logicalvolumes + else + _physicalvolumes + fi + fi +} +complete -F _lvextend lvextend + +_lvm() +{ + local prev + + COMPREPLY=() + cur=`_get_cword` + + if [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -W 'dumpconfig help lvchange \ + lvcreate lvdisplay lvextend lvmchange \ + lvmdiskscan lvmsadc lvmsar lvreduce \ + lvremove lvrename lvresize lvs lvscan \ + pvchange pvcreate pvdata pvdisplay pvmove \ + pvremove pvresize pvs pvscan vgcfgbackup \ + vgcfgrestore vgchange vgck vgconvert \ + vgcreate vgdisplay vgexport vgextend \ + vgimport vgmerge vgmknodes vgreduce \ + vgremove vgrename vgs vgscan vgsplit \ + version' -- "$cur" ) ) + else + case ${COMP_WORDS[1]} in + pvchange) + _pvchange + ;; + pvcreate) + _pvcreate + ;; + pvdisplay) + _pvdisplay + ;; + pvmove) + _pvmove + ;; + pvremove) + _pvremove + ;; + pvresize) + _pvresize + ;; + pvs) + _pvs + ;; + pvscan) + _pvscan + ;; + vgcfgbackup) + _vgcfgbackup + ;; + vgcfgrestore) + _vgcfgrestore + ;; + vgchange) + _vgchange + ;; + vgck) + _vgck + ;; + vgconvert) + _vgconvert + ;; + vgcreate) + _vgcreate + ;; + vgdisplay) + _vgdisplay + ;; + vgexport) + _vgexport + ;; + vgextend) + _vgextend + ;; + vgimport) + _vgimport + ;; + vgmerge) + _vgmerge + ;; + vgmknodes) + _vgmknodes + ;; + vgreduce) + _vgreduce + ;; + vgremove) + _vgremove + ;; + vgrename) + _vgrename + ;; + vgs) + _vgs + ;; + vgscan) + _vgscan + ;; + vgsplit) + _vgsplit + ;; + lvchange) + _lvchange + ;; + lvcreate) + _lvcreate + ;; + lvdisplay) + _lvdisplay + ;; + lvextend) + _lvextend + ;; + lvreduce) + _lvreduce + ;; + lvremove) + _lvremove + ;; + lvrename) + _lvrename + ;; + lvresize) + _lvresize + ;; + lvs) + _lvs + ;; + lvscan) + _lvscan + ;; + esac + fi +} +complete -F _lvm lvm +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/lzma b/contrib/lzma index 99005bc8..42d2bfb1 100644 --- a/contrib/lzma +++ b/contrib/lzma @@ -1,42 +1,47 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # lzma(1) completion by Per Øyvind Karlsen <peroyvind@mandriva.org> -# + have lzma && _lzma() { - local cur prev xspec - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-c -d -f -h -k -L -q -s \ - -v -V -z -1 -2 -3 -4 -5 -6 -7 -8 -9 \ - --help --decompress --compress --keep --force \ - --test --stdout --quiet --verbose --license \ - --version --small --fast --best --text' -- $cur ) ) - return 0 - fi - - local IFS=$'\t\n' - - xspec="*.lzma" - if [[ "$prev" == --* ]]; then - [[ "$prev" == --decompress || \ - "$prev" == --list || \ - "$prev" == --test ]] && xspec="!"$xspec - [[ "$prev" == --compress ]] && xspec= - elif [[ "$prev" == -* ]]; then - [[ "$prev" == -*[dt]* ]] && xspec="!"$xspec - [[ "$prev" == -*z* ]] && xspec= - fi - - _expand || return 0 - - COMPREPLY=( $( compgen -f -X "$xspec" -- $cur ) \ - $( compgen -d -- $cur ) ) + local cur prev xspec + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c -d -f -h -k -L -q -s \ + -v -V -z -1 -2 -3 -4 -5 -6 -7 -8 -9 \ + --help --decompress --compress --keep --force \ + --test --stdout --quiet --verbose --license \ + --version --small --fast --best --text' -- "$cur" ) ) + return 0 + fi + + local IFS=$'\t\n' + + xspec="*.lzma" + if [[ "$prev" == --* ]]; then + [[ "$prev" == --decompress || \ + "$prev" == --list || \ + "$prev" == --test ]] && xspec="!"$xspec + [[ "$prev" == --compress ]] && xspec= + elif [[ "$prev" == -* ]]; then + [[ "$prev" == -*[dt]* ]] && xspec="!"$xspec + [[ "$prev" == -*z* ]] && xspec= + fi + + _expand || return 0 + + COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ + $( compgen -d -- "$cur" ) ) } && complete -F _lzma $filenames lzma + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/lzop b/contrib/lzop index 59a7a429..9090bac4 100644 --- a/contrib/lzop +++ b/contrib/lzop @@ -1,53 +1,74 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # lzop(1) completion have lzop && _lzop() { - local cur prev xspec - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - # TODO: -p: takes a dir argument, without a separating space - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-d -x -l -t -h -I -V -L -1 -2 -3 \ - -4 -5 -6 -7 -8 -9 -q -v -c -f -F -n -N -P -k -U -o \ - -S --fast --best --decompress --uncompress --extract \ - --test --list --ls --info --sysinfo --license --help \ - --version --stdout --to-stdout --output --path \ - --force --no-checksum --no-name --name --no-mode \ - --no-time --suffix --keep --unlink --delete --crc32 \ - --no-warn --ignore-warn --quiet --silent --verbose \ - --no-stdin --filter --checksum --no-color --mono \ - --color' -- $cur ) ) - return 0 - fi - - case "$prev" in - -o|--output) _filedir ; return 0 ;; - --path) _filedir -d ; return 0 ;; - -S|--suffix) return 0 ;; - esac - - xspec="*.?(t)lzo" - case "$prev" in - --@(@(de|un)compress|extract|list|ls|info|test)) - xspec="!"$xspec ;; - --force) xspec= ;; - --*) ;; - -*f*|'<'|'>') xspec= ;; - -*[dltx]*) xspec="!"$xspec ;; - esac - - _expand || return 0 - - local IFS=$'\t\n' - COMPREPLY=( $( compgen -f -X "$xspec" -- $cur ) \ - $( compgen -d -- $cur ) ) + local cur prev xspec + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + # TODO: -p: takes a dir argument, without a separating space + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d -x -l -t -h -I -V -L -1 -2 -3 \ + -4 -5 -6 -7 -8 -9 -q -v -c -f -F -n -N -P -k -U -o \ + -S --fast --best --decompress --uncompress --extract \ + --test --list --ls --info --sysinfo --license --help \ + --version --stdout --to-stdout --output --path \ + --force --no-checksum --no-name --name --no-mode \ + --no-time --suffix --keep --unlink --delete --crc32 \ + --no-warn --ignore-warn --quiet --silent --verbose \ + --no-stdin --filter --checksum --no-color --mono \ + --color' -- "$cur" ) ) + return 0 + fi + + case "$prev" in + -o|--output) + _filedir + return 0 + ;; + --path) + _filedir -d + return 0 + ;; + -S|--suffix) + return 0 + ;; + esac + + xspec="*.?(t)lzo" + case "$prev" in + --@(@(de|un)compress|extract|list|ls|info|test)) + xspec="!"$xspec + ;; + --force) + xspec= + ;; + --*) + ;; + -*f*|'<'|'>') + xspec= + ;; + -*[dltx]*) + xspec="!"$xspec + ;; + esac + + _expand || return 0 + + local IFS=$'\t\n' + COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ + $( compgen -d -- "$cur" ) ) } && complete -F _lzop $filenames lzop + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/mailman b/contrib/mailman index 45b7db36..8cfec3e8 100644 --- a/contrib/mailman +++ b/contrib/mailman @@ -1,533 +1,601 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # Mailman completion by Guillaume Rousse <rousse@ccr.jussieu.fr> +have list_lists && { _mailman_lists() { - COMPREPLY=( $( list_lists -b | grep "^$cur") ) + COMPREPLY=( $( compgen -W '$( list_lists -b )' -- "$cur" ) ) } -_add_members() +_list_lists() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case "$prev" in - -@(r|d|-regular-members-file=|-digest-members-file=)) - _filedir - return 0 - ;; - -@(w|a|-welcome-msg=|-admin-notify=)) - COMPREPLY=( $( compgen -W 'y n' -- $cur) ) - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--regular-members-file= -r \ - --digest-members-file= -d --welcome-msg= -w \ - --admin-notify= -a --help -h' -- $cur ) ) - else - _mailman_lists - fi + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --advertised --virtual-host-overview -V \ + -b --bare -h --help' -- "$cur" ) ) + fi +} && +complete -F _list_lists list_lists } + +have add_members && +_add_members() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -@(r|d|-regular-members-file|-digest-members-file)) + _filedir + return 0 + ;; + -@(w|a|-welcome-msg|-admin-notify)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur") ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--regular-members-file -r \ + --digest-members-file -d --welcome-msg -w \ + --admin-notify -a --help -h' -- "$cur" ) ) + else + _mailman_lists + fi + +} && complete -F _add_members add_members +have remove_members && _remove_members() { + local cur prev split=false - local cur prev + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + _split_longopt && split=true - case "$prev" in - -@(f|-file=)) - _filedir - return 0 - ;; - esac + case "$prev" in + -@(f|-file)) + _filedir + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--file= -f --all -a \ - --fromall --nouserack -n --noadminack -N \ - --help -h' -- $cur ) ) - else - _mailman_lists - fi + $split && return 0 -} + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--file -f --all -a --fromall --nouserack -n \ + --noadminack -N --help -h' -- "$cur" ) ) + else + _mailman_lists + fi + +} && complete -F _remove_members remove_members +have find_member && _find_member() { + local cur prev split=false - local cur prev + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + _split_longopt && split=true - case "$prev" in - -@(l|x|-listname=|-exclude=)) - _mailman_lists - return 0 - ;; - esac + case "$prev" in + -@(l|x|-listname|-exclude)) + _mailman_lists + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-l --listname= -x \ - --exclude= --owners -w --help -h' -- $cur ) ) - fi + $split && return 0 -} + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-l --listname -x --exclude --owners -w \ + --help -h' -- "$cur" ) ) + fi + +} && complete -F _find_member find_member +have clone_member && _clone_member() { + local cur prev split=false - local cur prev + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + _split_longopt && split=true - case "$prev" in - -@(l|-listname=)) - _mailman_lists - return 0 - ;; - esac + case "$prev" in + -@(l|-listname)) + _mailman_lists + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-l --listname= --remove -r \ - --admin -a --quiet -q --nomodify -n --help -h' -- $cur ) ) - fi + $split && return 0 -} + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-l --listname --remove -r --admin -a \ + --quiet -q --nomodify -n --help -h' -- "$cur" ) ) + fi + +} && complete -F _clone_member clone_member +have sync_members && _sync_members() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case "$prev" in - -@(w|g|d|--welcome-msg=|-goodbye-msg|-digest=)) - COMPREPLY=( $( compgen -W 'y n' -- $cur) ) - return 0 - ;; - -@(d|-file)) - _filedir - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--no-change -n --welcome-msg= -w \ - --goodbye-msg= -g --digest= -d --notifyadmin= -a \ - -f --file -h --help' -- $cur ) ) - else - _mailman_lists - fi - -} + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -@(w|g|d|--welcome-msg|-goodbye-msg|-digest)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur") ) + return 0 + ;; + -@(d|-file)) + _filedir + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--no-change -n --welcome-msg -w \ + --goodbye-msg -g --digest -d --notifyadmin -a -f --file -h --help' \ + -- "$cur" ) ) + else + _mailman_lists + fi + +} && complete -F _sync_members sync_members -_list_lists() -{ - local cur - - COMPREPLY=() - cur=`_get_cword` - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-a --advertised \ - --virtual-host-overview= -V -b --bare \ - -h --help' -- $cur ) ) - fi - -} -complete -F _list_lists list_lists - +have unshunt && _unshunt() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-h --help' -- $cur ) ) - else - _filedir -d - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h --help' -- "$cur" ) ) + else + _filedir -d + fi -} +} && complete -F _unshunt unshunt +have list_admins && _list_admins() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--all-vhost= -v \ - --all -a -h --help' -- $cur ) ) - else - _mailman_lists - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--all-vhost -v --all -a -h --help' \ + -- "$cur" ) ) + else + _mailman_lists + fi -} +} && complete -F _list_admins list_admins +have list_owners && _list_owners() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-w --with-listnames \ - -m --moderators -h --help' -- $cur ) ) - else - _mailman_lists - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-w --with-listnames -m --moderators -h \ + --help' -- "$cur" ) ) + else + _mailman_lists + fi -} +} && complete -F _list_owners list_owners +have list_members && _list_members() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case "$prev" in - -@(o|-output)) - _filedir - return 0 - ;; - -@(d|-digest=)) - COMPREPLY=( $( compgen -W 'mime plain' -- $cur) ) - return 0 - ;; - -@(n|-nomail=)) - COMPREPLY=( $( compgen -W 'byadmin byuser bybounce unknown' -- $cur) ) - return 0 - ;; - esac - - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--output -o --regular -r \ - --digest= -d --nomail= -n --fullnames -f \ - --preserve -p -h --help' -- $cur ) ) - else - _mailman_lists - fi - -} + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -@(o|-output)) + _filedir + return 0 + ;; + -@(d|-digest)) + COMPREPLY=( $( compgen -W 'mime plain' -- "$cur") ) + return 0 + ;; + -@(n|-nomail)) + COMPREPLY=( $( compgen -W 'byadmin byuser bybounce unknown' \ + -- "$cur") ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--output -o --regular -r --digest -d \ + --nomail -n --fullnames -f --preserve -p -h --help' -- "$cur" ) ) + else + _mailman_lists + fi + +} && complete -F _list_members list_members +have change_pw && _change_pw() { - local cur prev + local cur prev split=false - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -@(l|-listname=)) - _mailman_lists - return 0 - ;; - esac + _split_longopt && split=true - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-a --all --domain= -d --listname= -l \ - --password= -p --quiet -q -h --help' -- $cur ) ) - fi + case "$prev" in + -@(l|-listname)) + _mailman_lists + return 0 + ;; + esac -} + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --all --domain -d --listname -l \ + --password -p --quiet -q -h --help' -- "$cur" ) ) + fi + +} && complete -F _change_pw change_pw +have withlist && _withlist() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-l --lock -i --interactive \ - -r --run -a --all -q --quiet -h --help' -- $cur ) ) - else - _mailman_lists - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-l --lock -i --interactive \ + -r --run -a --all -q --quiet -h --help' -- "$cur" ) ) + else + _mailman_lists + fi -} +} && complete -F _withlist withlist +have newlist && _newlist() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-l --language -q --quiet -h --help' -- $cur ) ) - else - _mailman_lists - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-l --language -q --quiet -h --help' \ + -- "$cur" ) ) + else + _mailman_lists + fi -} +} && complete -F _newlist newlist +have rmlist && _rmlist() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--archives -a \ - -h --help' -- $cur ) ) - else - _mailman_lists - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--archives -a -h --help' -- "$cur" ) ) + else + _mailman_lists + fi -} +} && complete -F _rmlist rmlist +have config_list && _config_list() { - local cur prev + local cur prev split=false - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -@(i|o|-inputfile|-outputfile)) - _filedir - return 0 - ;; - esac + _split_longopt && split=true + case "$prev" in + -@(i|o|-inputfile|-outputfile)) + _filedir + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--inputfile -i --outputfile -o \ - --checkonly -c --verbose -v -h --help' -- $cur ) ) - else - _mailman_lists - fi + $split && return 0 -} + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--inputfile -i --outputfile -o \ + --checkonly -c --verbose -v -h --help' -- "$cur" ) ) + else + _mailman_lists + fi + +} && complete -F _config_list $filenames config_list +have arch && _arch() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case "$prev" in - -@(w|g|d|--welcome-msg=|-goodbye-msg|-digest=)) - COMPREPLY=( $( compgen -W 'y n' -- $cur) ) - return 0 - ;; - -@(d|-file)) - _filedir - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--wipe -s --start= -e --end= \ - -q --quiet -h --help' -- $cur ) ) - else - args=$COMP_CWORD - for (( i=1; i < COMP_CWORD; i++ )); do - if [[ "${COMP_WORDS[i]}" == -* ]]; then - args=$(($args-1)) - fi - done - case $args in - 1) - _mailman_lists - ;; - 2) - _filedir - ;; - esac - fi - -} + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -@(w|g|d|--welcome-msg|-goodbye-msg|-digest)) + COMPREPLY=( $( compgen -W 'y n' -- "$cur") ) + return 0 + ;; + -@(d|-file)) + _filedir + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--wipe -s --start -e --end -q --quiet -h \ + --help' -- "$cur" ) ) + else + args=$COMP_CWORD + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == -* ]]; then + args=$(($args-1)) + fi + done + case $args in + 1) + _mailman_lists + ;; + 2) + _filedir + ;; + esac + fi + +} && complete -F _arch $filenames arch +have cleanarch && _cleanarch() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-s --status -n --dry-run \ - -q --quiet -h --help' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-s --status -n --dry-run -q --quiet -h \ + --help' -- "$cur" ) ) + fi -} +} && complete -F _cleanarch cleanarch +have inject && _inject() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case "$prev" in - -@(l|-listname=)) - _mailman_lists - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-l --listname= -q --queue= \ - -h --help' -- $cur ) ) - else - _filedir - fi + local cur prev split=false -} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -@(l|-listname)) + _mailman_lists + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-l --listname -q --queue -h --help' \ + -- "$cur" ) ) + else + _filedir + fi + +} && complete -F _inject $filenames inject +have dumpdb && _dumpdb() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--marshal -m --pickle -p --noprint -n -h --help' -- $cur ) ) - else - _filedir - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--marshal -m --pickle -p --noprint -n -h \ + --help' -- "$cur" ) ) + else + _filedir + fi -} +} && complete -F _dumpdb $filenames dumpdb +have check_db && _check_db() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--all -a --verbose -v \ - -h --help' -- $cur ) ) - else - _mailman_lists - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--all -a --verbose -v -h --help' \ + -- "$cur" ) ) + else + _mailman_lists + fi -} +} && complete -F _check_db check_db +have check_perms && _check_perms() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-f -v -h' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-f -v -h' -- "$cur" ) ) + fi -} +} && complete -F _check_perms check_perms +have genaliases && _genaliases() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-q --quiet -h --help' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-q --quiet -h --help' -- "$cur" ) ) + fi -} +} && complete -F _genaliases genaliases +have mmsitepass && _mmsitepass() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-c --listcreator -h --help' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c --listcreator -h --help' -- "$cur" ) ) + fi -} +} && complete -F _mmsitepass mmsitepass +have qrunner && _qrunner() { - local cur + local cur prev - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-r --runner= --once -o \ - -l --list -v --verbose -s --subproc -h --help' -- $cur ) ) - fi + _split_longopt && return 0 -} + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-r --runner --once -o \ + -l --list -v --verbose -s --subproc -h --help' -- "$cur" ) ) + fi + +} && complete -F _qrunner qrunner +have mailmanctl && _mailmanctl() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-n --no-restart -u --run-as-user \ - -s --stale-lock-cleanup --quiet -q -h --help' -- $cur ) ) - else - COMPREPLY=( $( compgen -W 'start stop restart reopen' -- $cur ) ) - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-n --no-restart -u --run-as-user \ + -s --stale-lock-cleanup --quiet -q -h --help' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W 'start stop restart reopen' -- "$cur" ) ) + fi -} +} && complete -F _mailmanctl mailmanctl + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/make b/contrib/make new file mode 100644 index 00000000..ecbd56e3 --- /dev/null +++ b/contrib/make @@ -0,0 +1,79 @@ +# bash completion for GNU make + +have make || have gmake || have gnumake || have pmake && +_make() +{ + local file makef makef_dir="." makef_inc cur prev i split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -@(f|o|W|-@(?(make|old-|new-)file|assume-@(old|new)|what-if))) + _filedir + return 0 + ;; + -I|-C|--directory|--include-dir) + _filedir -d + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-b -m -B -C -d -e -f -h -i -I\ + -j -l -k -n -o -p -q -r -R - s -S -t -v -w -W \ + --always-make --directory --debug \ + --environment-overrides --file --makefile --help \ + --ignore-errors --include-dir --jobs --load-average \ + --max-load --keep-going --just-print --dry-run \ + --recon --old-file --assume-old --print-data-base \ + --question --no-builtin-rules --no-builtin-variables \ + --silent --quiet --no-keep-goind --stop --touch \ + --version --print-directory --no-print-directory \ + --what-if --new-file --assume-new \ + --warn-undefined-variables' -- "$cur" ) ) + else + # before we check for makefiles, see if a path was specified + # with -C + for (( i=0; i < ${#COMP_WORDS[@]}; i++ )); do + if [[ ${COMP_WORDS[i]} == -C ]]; then + # eval for tilde expansion + eval makef_dir=${COMP_WORDS[i+1]} + break + fi + done + + # before we scan for targets, see if a Makefile name was + # specified with -f + for (( i=0; i < ${#COMP_WORDS[@]}; i++ )); do + if [[ ${COMP_WORDS[i]} == -f ]]; then + # eval for tilde expansion + eval makef=${COMP_WORDS[i+1]} + break + fi + done + + [ -n "$makef" ] && makef="-f ${makef}" + [ -n "$makef_dir" ] && makef_dir="-C ${makef_dir}" + + COMPREPLY=( $( compgen -W "$( make -qp $makef $makef_dir 2>/dev/null | \ + awk -F':' '/^[a-zA-Z0-9][^$#\/\t=]*:([^=]|$)/ \ + {split($1,A,/ /);for(i in A)print A[i]}' )" \ + -- "$cur" ) ) + + fi +} && +complete -F _make $filenames make gmake gnumake pmake + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/man b/contrib/man new file mode 100644 index 00000000..4804a949 --- /dev/null +++ b/contrib/man @@ -0,0 +1,83 @@ +# man(1) completion + +[ $USERLAND = GNU -o $UNAME = Darwin \ + -o $UNAME = FreeBSD -o $UNAME = SunOS -o $UNAME = Cygwin \ + -o $UNAME = OpenBSD ] && +_man() +{ + local cur i prev sect manpath manext mansect uname + + manext="@([0-9lnp]|[0-9][px]|man|3pm)?(.@(gz|bz2|lzma))" + mansect="@([0-9lnp]|[0-9][px]|3pm)" + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + if [[ "$prev" == -l ]]; then + _filedir $manext + return 0 + fi + + _expand || return 0 + + # file based completion if parameter contains / + if [[ "$cur" == */* ]]; then + _filedir $manext + return 0 + fi + + uname=$( uname -s ) + if [[ $uname == @(Linux|GNU|GNU/*|FreeBSD|Cygwin|CYGWIN_*) ]]; then + manpath=$( manpath 2>/dev/null || command man --path ) + else + manpath=$MANPATH + fi + + if [ -z "$manpath" ]; then + COMPREPLY=( $( compgen -c -- "$cur" ) ) + return 0 + fi + + # determine manual section to search + [[ "$prev" == $mansect ]] && sect=$prev || sect='*' + + manpath=$manpath: + if [ -n "$cur" ]; then + manpath="${manpath//://*man$sect/$cur* } ${manpath//://*cat$sect/$cur* }" + else + manpath="${manpath//://*man$sect/ } ${manpath//://*cat$sect/ }" + fi + + # redirect stderr for when path doesn't exist + COMPREPLY=( $( eval command ls "$manpath" 2>/dev/null ) ) + # weed out directory path names and paths to man pages + COMPREPLY=( ${COMPREPLY[@]##*/?(:)} ) + # strip suffix from man pages + COMPREPLY=( ${COMPREPLY[@]%.@(gz|bz2|lzma)} ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]%.*}' -- "${cur//\\\\/}" ) ) + + if [[ "$prev" != $mansect ]]; then + # File based completion for the rest, prepending ./ if needed + # (man 1.6f needs that for man pages in current dir) + local start=${#COMPREPLY[@]} + _filedir $manext + for (( i=$start; i < ${#COMPREPLY[@]}; i++ )); do + [[ ${COMPREPLY[i]} == */* ]] || COMPREPLY[i]=./${COMPREPLY[i]} + done + fi + + return 0 +} +[ $USERLAND = GNU -o $UNAME = Darwin \ + -o $UNAME = FreeBSD -o $UNAME = SunOS -o $UNAME = Cygwin \ + -o $UNAME = OpenBSD ] && \ +complete -F _man $filenames man apropos whatis + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/mc b/contrib/mc new file mode 100644 index 00000000..c834e05e --- /dev/null +++ b/contrib/mc @@ -0,0 +1,50 @@ +# bash completion for mc + +have mc && +_mc() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -e|--edit|-v|--view|-l|--ftplog|-P|--printwd) + _filedir + return 0 + ;; + -C|--colors|-D|--debuglevel) + # argument required but no completions available + return 0 + ;; + -h|--help|-V|--version) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --stickchars -b --nocolor -c \ + --color -C --colors -d --nomouse -e --edit -f \ + --datadir -k --resetsoft -l --ftplog -P --printwd \ + -s --slow -t --termcap -u --nosubshell -U --subshell \ + -v --view -V --version -x --xterm -D --debuglevel -h \ + --help' -- "$cur" ) ) + else + _filedir -d + fi +} && +complete -F _mc $filenames mc + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/mcrypt b/contrib/mcrypt index 81f5d8b3..3ee8c41e 100644 --- a/contrib/mcrypt +++ b/contrib/mcrypt @@ -1,80 +1,85 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # mcrypt(1) completion by Ariel Fermani <the_end@bbs.frc.utn.edu.ar> +have mcrypt || have mdecrypt && _mcrypt() { - local cur prev i decrypt + local cur prev i decrypt - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case "$prev" in - -@(g|-openpgp-z)) - COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' \ - -- $cur ) ) - return 0 - ;; - -@(o|-keymode)) - COMPREPLY=( $( mcrypt --list-keymodes 2> /dev/null | - grep "^$cur" ) ) - return 0 - ;; - -@(m|-mode)) - COMPREPLY=( $( mcrypt --list 2> /dev/null | - sed -e 's/.*: //' -e 's/ $//' | sort | - uniq | tr " " "\n" | grep "^$cur" ) ) - return 0 - ;; - -@(a|-algorithm)) - COMPREPLY=( $( mcrypt --list 2> /dev/null | - awk '{print $1}' | grep "^$cur" ) ) - return 0 - ;; - -@(h|-hash)) - COMPREPLY=( $( mcrypt --list-hash 2> /dev/null | - sed 1d | grep "^$cur" ) ) - return 0 - ;; - -@(k|s|-@(key?(size)))) - return 0 - ;; - -@(f|c|-@(keyfile|config))) - _filedir - return 0 - ;; - --@(algorithm|mode)s-directory) - _filedir -d - return 0 - ;; - esac + case "$prev" in + -@(g|-openpgp-z)) + COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' -- "$cur" ) ) + return 0 + ;; + -@(o|-keymode)) + COMPREPLY=( $( compgen -W '$( mcrypt --list-keymodes \ + 2>/dev/null )' -- "$cur" ) ) + return 0 + ;; + -@(m|-mode)) + COMPREPLY=( $( compgen -W "$( mcrypt --list \ + 2>/dev/null | sed -e 's/.*: //' -e 's/ $//' | \ + sort | uniq )" -- "$cur" ) ) + return 0 + ;; + -@(a|-algorithm)) + COMPREPLY=( $( compgen -W "$( mcrypt --list 2>/dev/null | \ + awk '{print $1}' )" -- "$cur" ) ) + return 0 + ;; + -@(h|-hash)) + COMPREPLY=( $( compgen -W '$( mcrypt --list-hash 2>/dev/null | \ + sed -e 1d )' -- "$cur" ) ) + return 0 + ;; + -@(k|s|-@(key?(size)))) + return 0 + ;; + -@(f|c|-@(keyfile|config))) + _filedir + return 0 + ;; + --@(algorithm|mode)s-directory) + _filedir -d + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-g --openpgp --openpgp-z -d \ - --decrypt -s --keysize -o --keymode -f --keyfile \ - -c --config -a --algorithm --algorithms-directory \ - -m --mode --modes-directory -h --hash -k --key \ - --noiv -b --bare -z --gzip -p --bzip2 --flush -l \ - --doublecheck -u --unlink --nodelete -t --time -F \ - --force --echo -r --random --list --list-keymodes \ - --list-hash -V --verbose -q --quiet --help -v \ - --version -L --license' -- $cur ) ) - elif [[ ${COMP_WORDS[0]} == mdecrypt ]]; then - _filedir '@(nc)' - else - decrypt=0 - for (( i=1; i < ${#COMP_WORDS[@]}-1; i++ )); do - if [[ ${COMP_WORDS[i]} == -@(d|-decrypt) ]]; then - _filedir '@(nc)' - decrypt=1 - break - fi - done - if [[ $decrypt -eq 0 ]]; then - _filedir - fi - fi -} -complete -o filenames -F _mcrypt mcrypt mdecrypt + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-g --openpgp --openpgp-z -d \ + --decrypt -s --keysize -o --keymode -f --keyfile \ + -c --config -a --algorithm --algorithms-directory \ + -m --mode --modes-directory -h --hash -k --key \ + --noiv -b --bare -z --gzip -p --bzip2 --flush -l \ + --doublecheck -u --unlink --nodelete -t --time -F \ + --force --echo -r --random --list --list-keymodes \ + --list-hash -V --verbose -q --quiet --help -v \ + --version -L --license' -- "$cur" ) ) + elif [[ ${COMP_WORDS[0]} == mdecrypt ]]; then + _filedir '@(nc)' + else + decrypt=0 + for (( i=1; i < ${#COMP_WORDS[@]}-1; i++ )); do + if [[ ${COMP_WORDS[i]} == -@(d|-decrypt) ]]; then + _filedir '@(nc)' + decrypt=1 + break + fi + done + if [[ $decrypt -eq 0 ]]; then + _filedir + fi + fi +} && +complete $filenames -F _mcrypt mcrypt mdecrypt + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/mdadm b/contrib/mdadm new file mode 100644 index 00000000..0847b61f --- /dev/null +++ b/contrib/mdadm @@ -0,0 +1,187 @@ +# bash completion for mdadm + +have mdadm && { +_mdadm_raid_level() +{ + local mode + + for (( i=1; i < COMP_CWORD; i++ )); do + case ${COMP_WORDS[i]} in + -@(C|-create)) + mode=create + break + ;; + -@(B|-build)) + mode=build + break + ;; + esac + done + + case $mode in + create) + COMPREPLY=( $( compgen -W 'linear raid0 0 stripe raid1 1 mirror \ + raid4 4 raid5 5 raid6 6 raid10 10 multipath mp faulty' \ + -- "$cur" ) ) + ;; + build) + COMPREPLY=( $( compgen -W 'linear stripe raid0 0 raid1 multipath \ + mp faulty' -- "$cur" ) ) + ;; + esac +} + +_mdadm_raid_layout() +{ + local level + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == -@(l|-level) ]]; then + level=${COMP_WORDS[i+1]} + break + fi + done + + case $level in + raid5) + COMPREPLY=( $( compgen -W 'left-asymmetric left-symmetric \ + right-asymmetric right-symmetric la ra ls rs' -- "$cur" ) ) + ;; + raid10) + COMPREPLY=( $( compgen -W 'n o p' -- "$cur" ) ) + ;; + faulty) + COMPREPLY=( $( compgen -W 'write-transient wt read-transient rt \ + write-persistent wp read-persistent rp write-all read-fixable \ + rf clear flush none' -- $cur ) ) + ;; + esac +} + +_mdadm_auto_flag() +{ + COMPREPLY=( $( compgen -W 'no yes md mdp part p' -- "$cur" ) ) +} + +_mdadm_update_flag() +{ + COMPREPLY=( $( compgen -W 'sparc2.2 summaries uuid name homehost resync \ + byteorder super-minor' -- "$cur" ) ) +} + + +_mdadm() +{ + local cur prev mode options + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + # --name value style option + case $prev in + -@(c|b)) + _filedir + return 0 + ;; + -l) + _mdadm_raid_level + return 0 + ;; + -p) + _mdadm_raid_layout + return 0 + ;; + -a) + _mdadm_auto_flag + return 0 + ;; + -U) + _mdadm_update_flag + return 0 + ;; + esac + + # --name=value style option + if [[ "$cur" == *=* ]]; then + prev=${cur/=*/} + cur=${cur/*=/} + case "$prev" in + --@(config|bitmap|backup-file)) + _filedir + return 0 + ;; + --level) + _mdadm_raid_level + return 0 + ;; + --@(layout|parity)) + _mdadm_raid_layout + return 0 + ;; + --auto) + _mdadm_auto_flag + return 0 + ;; + --update) + _mdadm_update_flag + return 0 + ;; + esac + fi + + options='-h --help --help-options -V --version -v --verbose -q --quiet -b \ + --brief -f --force -c --config= -s --scan -e --metadata= --homehost=' + + if [[ "$cur" == -* ]]; then + if [[ $COMP_CWORD -eq 1 ]] ; then + COMPREPLY=( $( compgen -W "$options -A --assemble -B --build -C \ + --create -F --follow --monitor -G --grow" -- "$cur" ) ) + else + case ${COMP_WORDS[COMP_CWORD-1]} in + -@(A|-assemble)) + COMPREPLY=( $( compgen -W "$options -u --uuid= -m \ + --super-minor= -N --name= -f --force -R --run \ + --no-degraded -a --auto -b --bitmap= --backup-file= \ + -U --update= --auto-update-homehost" -- "$cur" ) ) + ;; + -@(B|C|G|-build|-create|-grow)) + COMPREPLY=( $( compgen -W "$options -n --raid-devices= -x \ + --spare-devices= -z --size= -c --chunk= --rounding= -l \ + --level= -p --layout= --parity= -b --bitmap= \ + --bitmap-chunk= -W --write-mostly --write-behind= \ + --assume-clean --backup-file= -N --name= -R --run -f \ + --force -a --auto" -- "$cur" ) ) + ;; + -@(F|-follow|-monitor)) + COMPREPLY=( $( compgen -W "$options -m --mail -p --program \ + --alert -y --syslog -d --delay -f --daemonise -i \ + --pid-file -1 --oneshot -t --test" -- "$cur" ) ) + + ;; + @(/dev/*|--add|--fail|--remove)) + COMPREPLY=( $( compgen -W "$options -a --add --re-add -r \ + --remove -f --fail --set-faulty" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$options -Q --query -D --detail \ + -E --examine --sparc2.2 -X --examine-bitmap -R --run \ + -S --stop -o --readonly -w --readwrite \ + --zero-superblock -t --test" -- "$cur" ) ) + ;; + esac + fi + else + cur=${cur:=/dev/} + _filedir + fi +} +complete -F _mdadm mdadm +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/minicom b/contrib/minicom index dcc4b5f2..4b6a9e71 100644 --- a/contrib/minicom +++ b/contrib/minicom @@ -1,46 +1,54 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash completion for minicom have minicom && _minicom() { - local cur prev confdir + local cur prev confdir - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case $prev in - -@(a|c)) - COMPREPLY=( $( compgen -W 'on off' -- $cur ) ) - return 0 - ;; - -@(S|C)) - _filedir - return 0 - ;; - -P) - COMPREPLY=( $( command ls /dev/tty* ) ) - COMPREPLY=( $( compgen -W '${COMPREPLY[@]} ${COMPREPLY[@]#/dev/}' -- $cur ) ) - return 0 - ;; - esac + case $prev in + -@(a|c)) + COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) + return 0 + ;; + -@(S|C)) + _filedir + return 0 + ;; + -P) + COMPREPLY=( $( command ls /dev/tty* ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]} ${COMPREPLY[@]#/dev/}' \ + -- "$cur" ) ) + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-s -o -m -M -z -l -L -w -a -t \ - -c -S -d -p -C -T -7 -8' -- $cur ) ) - return 0 - else - [ -n "$( command ls /etc/minirc.* 2>/dev/null)" ] && confdir=/etc - [ -n "$( command ls /etc/minicom/minirc.* 2>/dev/null)" ] && confdir=/etc/minicom - if [ -n "$confdir" ]; then - COMPREPLY=( $( compgen -W '$( command ls $confdir/minirc.* | \ - sed -e "s|$confdir/minirc.||")' -- $cur ) ) - return 0 - fi - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-s -o -m -M -z -l -L -w -a -t \ + -c -S -d -p -C -T -7 -8' -- "$cur" ) ) + return 0 + else + [ -n "$( command ls /etc/minirc.* 2>/dev/null)" ] \ + && confdir=/etc + [ -n "$( command ls /etc/minicom/minirc.* 2>/dev/null)" ] \ + && confdir=/etc/minicom + if [ -n "$confdir" ]; then + COMPREPLY=( $( compgen -W '$( command ls $confdir/minirc.* | \ + sed -e "s|$confdir/minirc.||")' -- "$cur" ) ) + return 0 + fi + fi } && complete -F _minicom $default minicom + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/mkinitrd b/contrib/mkinitrd new file mode 100644 index 00000000..040ab2ad --- /dev/null +++ b/contrib/mkinitrd @@ -0,0 +1,60 @@ +# bash completion for mkinitrd + +have mkinitrd && +_mkinitrd() +{ + local cur prev args split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + --@(preload|with|builtin)) + _modules + return 0 + ;; + --@(fstab|dsdt)) + _filedir + return 0 + ;; + --net-dev) + _available_interfaces + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--version --help -v -f --preload \ + --force-scsi-probe --omit-scsi-modules \ + --omit-ide-modules --image-version --force-raid-probe \ + --omit-raid-modules --with --force-lvm-probe \ + --omit-lvm-modules --builtin --omit-dmraid --net-dev \ + --fstab --nocompress --dsdt --bootchart' -- "$cur" ) ) + else + _count_args + + case $args in + 1) + _filedir + ;; + 2) + _kernel_versions + ;; + esac + fi + +} && +complete -F _mkinitrd mkinitrd + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/mock b/contrib/mock new file mode 100644 index 00000000..0c94e1b4 --- /dev/null +++ b/contrib/mock @@ -0,0 +1,85 @@ +# bash completion for mock + +have mock && +_mock() +{ + local cur prev plugins cfgdir split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + plugins='tmpfs root_cache yum_cache bind_mount ccache' + cfgdir=/etc/mock + + count=0 + for i in "${COMP_WORDS[@]}" ; do + [ $count -eq $COMP_CWORD ] && break + if [[ "$i" == --configdir ]] ; then + cfgdir="${COMP_WORDS[((count+1))]}" + elif [[ "$i" == --configdir=* ]] ; then + cfgdir=${i/*=/} + fi + count=$((++count)) + done + + _split_longopt && split=true + + case $prev in + -@(h|-help|-copy@(in|out)|-arch|D|-define|-with?(out)|-uniqueext|-rpmbuild_timeout|-sources|-cwd)) + return 0 + ;; + -r|--root) + COMPREPLY=( $( compgen -W "$( command ls $cfgdir )" -- $cur ) ) + COMPREPLY=( ${COMPREPLY[@]/%.cfg/} ) + return 0 + ;; + --@(config|result)dir) + _filedir -d + return 0 + ;; + --spec) + _filedir spec + return 0 + ;; + --target) + # Yep, compatible archs, not compatible build archs + # (e.g. ix86 chroot builds in x86_64 mock host) + # This would actually depend on what the target root + # can be used to build for... + COMPREPLY=( $( compgen -W "$( command rpm --showrc | \ + sed -ne 's/^\s*compatible\s\+archs\s*:\s*\(.*\)/\1/i p' )" \ + -- "$cur" ) ) + return 0 + ;; + --@(en|dis)able-plugin) + COMPREPLY=( $( compgen -W "$plugins" -- "$cur" ) ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]] ; then + COMPREPLY=( $( compgen -W '--version -h --help --rebuild \ + --buildsrpm --shell --chroot --clean --init \ + --installdeps --install --update --orphanskill \ + --copyin --copyout -r --root --offline --no-clean \ + --cleanup-after --no-cleanup-after --arch --target \ + -D --define --with --without --resultdir --uniqueext \ + --configdir --rpmbuild_timeout --unpriv --cwd --spec \ + --sources -v --verbose -q --quiet --trace \ + --enable-plugin --disable-plugin --print-root-path' \ + -- "$cur" ) ) + else + _filedir '?(no)src.rpm' + fi +} && +complete -F _mock $filenames mock + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/modules b/contrib/modules index 9218d0b8..1f99534f 100644 --- a/contrib/modules +++ b/contrib/modules @@ -1,6 +1,3 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # module completion by Ted Stern <stern@cray.com> # # Completion for Environment Modules `module' alias. @@ -17,7 +14,9 @@ # module command is an alias, and the `module avail' command returns # its output as stderr. -type module &>/dev/null && { +# Test for existence of /etc/profile.d/modules.sh too because we may end up +# being sourced before it and thus before the `module' alias has been defined. +have module || [ -f /etc/profile.d/modules.sh ] && { _module_list () { @@ -55,30 +54,36 @@ _module () { options="$( module help 2>&1 | egrep '^[[:space:]]*\+' | \ awk '{print $2}' | sed -e 's/|/ /g' | sort )" - COMPREPLY=( $(compgen -W "$options" -- $cur) ) - - elif [ $COMP_CWORD -eq 2 ] ; then + COMPREPLY=( $(compgen -W "$options" -- "$cur") ) - case "$prev" in - @(add|display|help|load|show|whatis)) - COMPREPLY=( $(_module_avail $cur) ) - ;; - - @(rm|switch|swap|unload|update)) - COMPREPLY=( $(_module_list $cur) ) - ;; - unuse) - COMPREPLY=( $(_module_path $cur) ) - ;; - esac - elif [ $COMP_CWORD -eq 3 ] ; then - case ${COMP_WORDS[1]} in - @(sw?(ap|itch))) - COMPREPLY=( $(_module_avail $cur) ) - ;; - esac + elif [ $COMP_CWORD -eq 2 ] ; then + case "$prev" in + @(add|display|help|load|show|whatis)) + COMPREPLY=( $(_module_avail "$cur") ) + ;; + @(rm|switch|swap|unload|update)) + COMPREPLY=( $(_module_list "$cur") ) + ;; + unuse) + COMPREPLY=( $(_module_path "$cur") ) + ;; + esac + elif [ $COMP_CWORD -eq 3 ] ; then + case ${COMP_WORDS[1]} in + @(sw?(ap|itch))) + COMPREPLY=( $(_module_avail "$cur") ) + ;; + esac fi return 0 } -complete -o default -F _module module +complete -F _module $default module } + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/monodevelop b/contrib/monodevelop index 3d8430cb..5ec82021 100644 --- a/contrib/monodevelop +++ b/contrib/monodevelop @@ -1,97 +1,86 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # Monodevelop completion -# + have monodevelop && _monodevelop() { - local cur - cur=`_get_cword` - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-? -help \ - -help2 \ - -ipc-tcp \ - -newwindow \ - -nologo \ - -usage \ - -V -version' -- "$cur" ) ) - else - _filedir - fi - return 0 + local cur + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-? -help -help2 -ipc-tcp -newwindow -nologo \ + -usage -V -version' -- "$cur" ) ) + else + _filedir + fi + return 0 } && complete -F _monodevelop monodevelop have mdtool && _mdtool() { - local cur prev command i + local cur prev command i + + COMPREPLY=() - COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do - if [[ ${COMP_WORDS[i]} == @(build|generate-makefiles|setup) ]]; then - command=${COMP_WORDS[i]} - fi - done + for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do + if [[ ${COMP_WORDS[i]} == @(build|generate-makefiles|setup) ]]; then + command=${COMP_WORDS[i]} + fi + done - if [[ -n "$command" ]]; then - case $command in - "build") - COMPREPLY=( $( compgen -W '--f --buildfile --p --project' -S":" -- "$cur" ) ) - # TODO: This does not work :( - #if [[ "$prev" == *: ]]; then - # case "$prev" in - # @(--p:|--project:)) - # COMPREPLY=( $( compgen -f -G "*.mdp" -- "$cur" ) ) - # ;; - # @(--f:|--buildfile:)) - # COMPREPLY=( $( compgen -f -G "*.mdp" -G "*.mds" -- "$cur" ) ) - # ;; - # esac - #fi - return 0 - ;; - "generate-makefiles") - COMPREPLY=( $( compgen $filenames -G"*.mds" -- "$cur" ) ) - if [[ "$prev" == *mds ]]; then - COMPREPLY=( $( compgen -W '--simple-makefiles --s --d:' -- "$cur" ) ) - fi - return 0 - ;; - "setup") - # TODO: at least return filenames after these options. - COMPREPLY=( $( compgen -W 'install i \ - uninstall u \ - check-install ci \ - update up \ - list l \ - list-av la \ - list-update lu \ - rep-add ra \ - rep-remove rr \ - rep-update ru \ - rep-list rl \ - reg-update reg-build rgu \ - info \ - rep-build rb \ - pack p \ - help h \ - dump-file' -- "$cur" ) ) - return 0 - ;; - esac - fi - - COMPREPLY=( $( compgen -W 'gsetup build dbgen project-export \ - generate-makefiles gettext-update \ - setup -q' -- "$cur" ) ) - - return 0 + if [[ -n "$command" ]]; then + case $command in + "build") + COMPREPLY=( $( compgen -W '--f --buildfile --p --project' \ + -S":" -- "$cur" ) ) + # TODO: This does not work :( + #if [[ "$prev" == *: ]]; then + # case "$prev" in + # @(--p:|--project:)) + # COMPREPLY=( $( compgen -f -G "*.mdp" -- "$cur" ) ) + # ;; + # @(--f:|--buildfile:)) + # COMPREPLY=( $( compgen -f -G "*.mdp" -G "*.mds" -- "$cur" ) ) + # ;; + # esac + #fi + return 0 + ;; + "generate-makefiles") + COMPREPLY=( $( compgen $filenames -G"*.mds" -- "$cur" ) ) + if [[ "$prev" == *mds ]]; then + COMPREPLY=( $( compgen -W '--simple-makefiles --s --d:' \ + -- "$cur" ) ) + fi + return 0 + ;; + "setup") + # TODO: at least return filenames after these options. + COMPREPLY=( $( compgen -W 'install i uninstall u check-install \ + ci update up list l list-av la list-update lu rep-add ra \ + rep-remove rr rep-update ru rep-list rl reg-update \ + reg-build rgu info rep-build rb pack p help h dump-file' \ + -- "$cur" ) ) + return 0 + ;; + esac + fi + + COMPREPLY=( $( compgen -W 'gsetup build dbgen project-export \ + generate-makefiles gettext-update setup -q' -- "$cur" ) ) + + return 0 } && complete -F _mdtool $filenames mdtool + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/mplayer b/contrib/mplayer new file mode 100644 index 00000000..5c8d8f74 --- /dev/null +++ b/contrib/mplayer @@ -0,0 +1,242 @@ +# mplayer(1) completion + +have mplayer && { +_mplayer_options_list() +{ + cur=${cur%\\} + COMPREPLY=( $( compgen -W "$( $1 $2 help 2>/dev/null | \ + sed -e '1,/^Available/d' | awk '{print $1}' | \ + sed -e 's/:$//' -e 's/^'${2#-}'$//' -e 's/<.*//' )" -- "$cur" ) ) +} + +_mplayer() +{ + local cmd cur prev skinsdir IFS=$' \t\n' i j k=0 + + COMPREPLY=() + cmd=${COMP_WORDS[0]} + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@([av][cfo]|[av]fm|vop|fstype|demuxer|o[av]c|of|profile)) + _mplayer_options_list $cmd $prev + return 0 + ;; + -audiofile) + _filedir '@(mp3|MP3|mpg|MPG|ogg|OGG|w?(a)v|W?(A)V|mid|MID|flac|FLAC|mka|MKA|ape|APE)' + return 0 + ;; + -font) + _filedir '@(desc|ttf)' + return 0 + ;; + -sub) + _filedir '@(srt|SRT|sub|SUB|txt|TXT|utf|UTF|rar|RAR|mpsub|smi|js|ssa|SSA|ass|ASS)' + return 0 + ;; + -vobsub) + _filedir '@(idx|IDX|ifo|IFO|sub|SUB)' + IFS=$'\t\n' + COMPREPLY=( $( for i in "${COMPREPLY[@]}"; do + if [ -f $i -a -r $i ]; then + echo ${i%.*} + else + echo $i + fi + done ) ) + IFS=$' \t\n' + return 0 + ;; + -ifo) + _filedir '@(ifo|IFO)' + return 0 + ;; + -cuefile) + _filedir '@(bin|BIN|cue|CUE)' + return 0 + ;; + -skin) + # if you don't have installed mplayer in /usr you + # may want to set the MPLAYER_SKINS_DIR global variable + if [ -n "$MPLAYER_SKINS_DIR" ]; then + skinsdir=$MPLAYER_SKINS_DIR + else + skinsdir=/usr/share/mplayer/Skin + fi + + IFS=$'\t\n' + for i in ~/.mplayer/Skin $skinsdir; do + if [ -d $i -a -r $i ]; then + for j in $( compgen -d $i/$cur ); do + COMPREPLY[$k]=${j#$i/} + k=$((++k)) + done + fi + done + IFS=$' \t\n' + return 0 + ;; + -@(mixer|@(cdrom|dvd)-device|dvdauth|fb|zrdev)) + cur=${cur:=/dev/} + _filedir + return 0 + ;; + -@(edl?(out)|lircconf|menu-cfg|playlist|csslib|dumpfile)| \ + -@(subfile|vobsub|aofile|fbmodeconfig|include|o|dvdkey)| \ + -passlogfile) + _filedir + return 0 + ;; + -@(auto@(q|sync)|loop|menu-root|speed|sstep|aid|alang)| \ + -@(?(@(audio|sub)-)demuxer|bandwidth|cache|chapter)| \ + -@(dvd?(angle)|fps|frames|mc|passwd|user|sb|srate|ss|vcd)| \ + -@(vi?(d|vo)|ffactor|sid|slang|spu@(align|aa|gauss))| \ + -@(vobsubid|delay|bpp|brightness|contrast|dfbopts|display)| \ + -@(fbmode|geometry|guiwid|hue|icelayer|screen[wh]|wid)| \ + -@(monitor@(aspect|-@(dotclock|[hv]freq))|panscan|saturation)| \ + -@(xineramascreen|zr@(crop|norm|quality|[xy]doff|[vh]dec))| \ + -@(aspect|pp|x|y|xy|z|stereo|audio-@(density|delay|preload))| \ + -@(endpos|osdlevel|ffourcc|sws|channels|skiplimit|format)| \ + -@(ofps|aa@(driver|@(osd|sub)color)|vobsubout?(i@(ndex|d)))| \ + -sub@(-bg-@(alpha|color)|cp|delay|fps|pos|align|width)| \ + -sub@(font-@(blur|outline|autoscale|encoding|@(osd|text)-scale))) + return 0 + ;; + -lavdopts) + COMPREPLY=( $( compgen -W 'ec er= bug= idct= gray' -- "$cur" ) ) + return 0 + ;; + -lavcopts) + COMPREPLY=( $( compgen -W 'vcodec= vqmin= vqscale= vqmax= mbqmin= \ + mbqmax= vqdiff= vmax_b_frames= vme= vhq v4mv keyint= \ + vb_strategy= vpass= aspect= vbitrate= vratetol= vrc_maxrate= \ + vrc_minrate= vrc_buf_size= vb_qfactor= vi_qfactor= vb_qoffset= \ + vi_qoffset= vqblur= vqcomp= vrc_eq= vrc_override= \ + vrc_init_cplx= vqsquish= vlelim= vcelim= vstrict= vdpart \ + vpsize= gray vfdct= idct= lumi_mask= dark_mask= tcplx_mask= \ + scplx_mask= naq ildct format= pred qpel precmp= cmp= subcmp= \ + predia= dia= trell last_pred= preme= subq= psnr mpeg_quant aic \ + umv' -- "$cur" ) ) + return 0 + ;; + -ssf) + COMPREPLY=( $( compgen -W 'lgb= cgb= ls= cs= chs= cvs=' -- "$cur" ) ) + return 0 + ;; + -jpeg) + COMPREPLY=( $( compgen -W 'noprogressive progressive nobaseline \ + baseline optimize= smooth= quality= outdir=' -- "$cur" ) ) + return 0 + ;; + -xvidopts) + COMPREPLY=( $( compgen -W 'dr2 nodr2' -- "$cur" ) ) + return 0 + ;; + -xvidencopts) + COMPREPLY=( $( compgen -W 'pass= bitrate= fixed_quant= me_quality= \ + 4mv rc_reaction_delay_factor= rc_averaging_period= rc_buffer= \ + quant_range= min_key_interval= max_key_interval= mpeg_quant \ + mod_quant lumi_mask hintedme hintfile debug keyframe_boost= \ + kfthreshold= kfreduction=' -- "$cur" ) ) + return 0 + ;; + -divx4opts) + COMPREPLY=( $( compgen -W 'br= key= deinterlace q= min_quant= \ + max_quant= rc_period= rc_reaction_period= crispness= \ + rc_reaction_ratio= pass= vbrpass= help' -- "$cur" ) ) + return 0 + ;; + -info) + COMPREPLY=( $( compgen -W 'name= artist= genre= subject= \ + copyright= srcform= comment= help' -- "$cur" ) ) + return 0 + ;; + -lameopts) + COMPREPLY=( $( compgen -W 'vbr= abr cbr br= q= aq= ratio= vol= \ + mode= padding= fast preset= help' -- "$cur" ) ) + return 0 + ;; + -rawaudio) + COMPREPLY=( $( compgen -W 'on channels= rate= samplesize= format=' \ + -- "$cur" ) ) + return 0 + ;; + -rawvideo) + COMPREPLY=( $( compgen -W 'on fps= sqcif qcif cif 4cif pal ntsc w= \ + h= y420 yv12 yuy2 y8 format= size=' -- "$cur" ) ) + return 0 + ;; + -aop) + COMPREPLY=( $( compgen -W 'list= delay= format= fout= volume= mul= \ + softclip' -- "$cur" ) ) + return 0 + ;; + -dxr2) + COMPREPLY=( $( compgen -W 'ar-mode= iec958-encoded iec958-decoded \ + mute ucode= 75ire bw color interlaced macrovision= norm= \ + square-pixel ccir601-pixel cr-left= cr-right= cr-top= cr-bot= \ + ck-rmin= ck-gmin= ck-bmin= ck-rmax= ck-gmax= ck-bmax= ck-r= \ + ck-g= ck-b= ignore-cache= ol-osd= olh-cor= olw-cor= olx-cor= \ + oly-cor= overlay overlay-ratio= update-cache' -- "$cur" )) + return 0 + ;; + -tv) + COMPREPLY=( $( compgen -W 'on noaudio driver= device= input= freq= \ + outfmt= width= height= buffersize= norm= channel= chanlist= \ + audiorate= forceaudio alsa amode= forcechan= adevice= audioid= \ + volume= bass= treble= balance= fps= channels= immediatemode=' \ + -- "$cur" ) ) + return 0 + ;; + -mf) + COMPREPLY=( $( compgen -W 'on w= h= fps= type=' -- "$cur" ) ) + return 0 + ;; + -cdda) + COMPREPLY=( $( compgen -W 'speed= paranoia= generic-dev= \ + sector-size= overlap= toc-bias toc-offset= skip noskip' \ + -- "$cur" ) ) + return 0 + ;; + -input) + COMPREPLY=( $( compgen -W 'conf= ar-delay ar-rate keylist cmdlist \ + js-dev file' -- "$cur" ) ) + return 0 + ;; + -af) + COMPREPLY=( $( compgen -W 'resample resample= channels channels= \ + format format= volume volume= delay delay= pan pan= sub sub= \ + surround surround=' -- "$cur" ) ) + return 0 + ;; + -af-adv) + COMPREPLY=( $( compgen -W 'force= list=' -- "$cur" ) ) + return 0 + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W '$( $cmd -list-options 2>/dev/null | \ + sed -ne '1,/^[[:space:]]*Name/d' \ + -e "s/^[[:space:]]*/-/" -e "s/[[:space:]:].*//" \ + -e "/^-\(Total\|.*\*\)\?$/!p" )' -- "$cur" ) ) + ;; + *) + _filedir '@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|ASF|vob|VOB|bin|BIN|dat|DAT|vcd|VCD|ps|PS|pes|PES|fl[iv]|FL[IV]|viv|VIV|rm?(j)|RM?(J)|ra?(m)|RA?(M)|yuv|YUV|mov|MOV|qt|QT|mp[234]|MP[234]|m4[av]|M4[AV]|og[gmavx]|OG[GMAVX]|w?(a)v|W?(A)V|dump|DUMP|mk[av]|MK[AV]|m4a|M4A|aac|AAC|m[24]v|M[24]V|dv|DV|rmvb|RMVB|mid|MID|ts|TS|3g[p2]|mpc|MPC|flac|FLAC|vro|VRO|divx|DIVX|aif?(f)|AIF?(F)|m2ts|M2TS|vdr|VDR|xvid|XVID|ape|APE)' + ;; + esac + + return 0 +} +complete $filenames -F _mplayer mplayer mencoder gmplayer kplayer +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/msynctool b/contrib/msynctool new file mode 100644 index 00000000..31923050 --- /dev/null +++ b/contrib/msynctool @@ -0,0 +1,55 @@ +# bash completion for msynctool + +have msynctool && +_msynctool() +{ + local cur prev anteprev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + if [ $COMP_CWORD -ge 2 ]; then + anteprev=${COMP_WORDS[COMP_CWORD-2]} + fi + + case $anteprev in + --configure) + COMPREPLY=( $( compgen -W "$(msynctool --showgroup \ + $prev | awk '/^Member/ {print $2}' | sed \ + -e 's/:$//' )" -- "$cur" ) ) + return 0 + ;; + --addmember) + COMPREPLY=( $( compgen -W '$(msynctool --listplugins \ + | sed -e '1d' )' -- "$cur" ) ) + return 0 + ;; + esac + + case $prev in + --@(configure|@(add|del|show)group|sync|addmember)) + COMPREPLY=( $( compgen -W '$(msynctool --listgroups \ + | sed -e '1d' )' -- "$cur" ) ) + return 0 + ;; + --@(showformats|filter-objtype|slow-sync)) + COMPREPLY=( $( compgen -W '$(msynctool --listobjects \ + | sed -e '1d' )' -- "$cur" ) ) + return 0 + ;; + esac + + COMPREPLY=( $( compgen -W '--listgroups --listplugins --listobjects \ + --showformats --showgroup --sync --filter-objtype --slow-sync \ + --wait --multi --addgroup --delgroup --addmember --configure \ + --manual --configdir --conflict' -- "$cur" ) ) +} && +complete -F _msynctool msynctool + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/mtx b/contrib/mtx index 82652054..4b20ba70 100644 --- a/contrib/mtx +++ b/contrib/mtx @@ -1,46 +1,52 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # mtx completion by Jon Middleton <jjm@ixtab.org.uk> +have mtx && _mtx() { local cur prev options tapes drives - + COMPREPLY=() cur=`_get_cword` prev=${COMP_WORDS[COMP_CWORD-1]} options="-f nobarcode invert noattach --version inquiry noattach \ - inventory status load unload eepos first last next" + inventory status load unload eepos first last next" tapes=$(mtx status | \ - awk '/Storage Element [0-9]+:Full/ { printf "%s ", $3 }') + awk '/Storage Element [0-9]+:Full/ { printf "%s ", $3 }') tapes=${tapes//:Full} drives=$(mtx status | \ - awk '/Data Transfer Element [0-9]+:(Full|Empty)/ { printf "%s ", $4 }') + awk '/Data Transfer Element [0-9]+:(Full|Empty)/ { printf "%s ", $4 }') drives=${drives//:Full} drives=${drives//:Empty} if [ $COMP_CWORD -gt 1 ]; then - case $prev in - load) - COMPREPLY=( $( compgen -W "$tapes" -- $cur ) ) - ;; - unload|first|last|next) - COMPREPLY=( $( compgen -W "$drives" -- $cur ) ) - ;; - -f) - true - ;; - *) - true - ;; - esac + case $prev in + load) + COMPREPLY=( $( compgen -W "$tapes" -- "$cur" ) ) + ;; + unload|first|last|next) + COMPREPLY=( $( compgen -W "$drives" -- "$cur" ) ) + ;; + -f) + true + ;; + *) + true + ;; + esac else - COMPREPLY=( $( compgen -W "$options" -- $cur ) ) + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) fi return 0 -} +} && complete -F _mtx mtx + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/munin-node b/contrib/munin-node new file mode 100644 index 00000000..2753fc2a --- /dev/null +++ b/contrib/munin-node @@ -0,0 +1,103 @@ +# bash completion for munin node + +have munin-run && +_munin-run() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + --@(config|sconffile)) + _filedir + return 0 + ;; + --@(service|sconf)dir) + _filedir -d + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--config --servicedir --sconfdir \ + --sconffile --help --debug --version' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W '$( command ls /etc/munin/plugins )' \ + -- "$cur" ) ) + fi +} && +complete -F _munin-run munin-run + +have munin-update && +_munin-update() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + --config) + _filedir + return 0 + ;; + --host) + _known_hosts_real "$cur" + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--force-root --[no]force-root \ + --service --host --config --help --debug --nodebug \ + --fork --nofork --stdout --nostdout --timeout' -- "$cur" ) ) + fi +} && +complete -F _munin-update munin-update + +have munin-node-configure && +_munin-node-configure() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + --config) + _filedir + return 0 + ;; + --@(service|lib)dir) + _filedir -d + return 0 + ;; + --snmp) + _known_hosts_real "$cur" + return 0 + ;; + --snmpversion) + COMPREPLY=( $( compgen -W '1 2c 3' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--help --version --debug --config \ + --servicedir --libdir --families --suggest --shell \ + --remove-also --snmp --snmpversion --snmpcommunity' -- "$cur" ) ) + fi +} && +complete -F _munin-node-configure munin-node-configure + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/mutt b/contrib/mutt new file mode 100644 index 00000000..62540bde --- /dev/null +++ b/contrib/mutt @@ -0,0 +1,146 @@ +# mutt completion +# +# Mutt doesn't have an "addressbook" like Pine, but it has aliases and +# a "query" function to retrieve addresses, so that's what we use here. + +have mutt || have muttng && { +_muttaddr() +{ + _muttaliases + _muttquery + + cur=`_get_cword` + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -u -- "$cur" ) ) + + return 0 +} + +_muttconffiles() +{ + local file sofar + local -a newconffiles + + sofar=" $1 " + shift + while [[ "$1" ]]; do + newconffiles=( $(sed -rn 's|^source[[:space:]]+([^[:space:]]+).*$|\1|p' $(eval echo $1) ) ) + for file in "${newconffiles[@]}"; do + [[ ! "$file" ]] || [[ "${sofar/ ${file} / }" != "$sofar" ]] && + continue + sofar="$sofar $file" + sofar=" $(eval _muttconffiles \"$sofar\" $file) " + done + shift + done + echo $sofar +} + +_muttaliases() +{ + local cur muttrc muttcmd=${COMP_WORDS[0]} + local -a conffiles aliases + cur=`_get_cword =` + + [ -f ~/.${muttcmd}/${muttcmd}rc ] && muttrc="~/.${muttcmd}/${muttcmd}rc" + [ -f ~/.${muttcmd}rc ] && muttrc="~/.${muttcmd}rc" + [ -z "$muttrc" ] && return 0 + + conffiles=( $(eval _muttconffiles $muttrc $muttrc) ) + aliases=( $( sed -rn 's|^alias[[:space:]]+([^[:space:]]+).*$|\1|p' \ + $(eval echo "${conffiles[@]}") ) ) + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "${aliases[*]}" -- "$cur" ) ) + + return 0 +} + +_muttquery() +{ + local cur querycmd muttcmd=${COMP_WORDS[0]} + local -a queryresults + cur=`_get_cword` + + querycmd="$( $muttcmd -Q query_command | sed -r 's|^query_command=\"(.*)\"$|\1|; s|%s|'$cur'|' )" + if [ -z "$cur" -o -z "$querycmd" ]; then + queryresults=() + else + queryresults=( $( $querycmd | sed -nr '2,$s|^([^[:space:]]+).*|\1|p' ) ) + fi + + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "${queryresults[*]}" \ + -- "$cur" ) ) + + return 0 +} + +_muttfiledir() +{ + local cur folder spoolfile muttcmd=${COMP_WORDS[0]} + cur=`_get_cword` + + # This is currently not working so well. Perhaps this function should + # just call _filedir() for the moment. + if [[ $cur == [=+]* ]]; then + folder="$( $muttcmd -Q folder | sed -r 's|^folder=\"(.*)\"$|\1|' )" + : folder:=~/Mail + + # Match any file in $folder beginning with $cur + # (minus the leading '=' sign). + COMPREPLY=( $( compgen -f -- "$folder/${cur:1}" ) ) + COMPREPLY=( ${COMPREPLY[@]#$folder/} ) + return 0 + elif [ "$cur" == !* ]; then + spoolfile="$( $muttcmd -Q spoolfile | \ + sed -r 's|^spoolfile=\"(.*)\"$|\1|' )" + [ ! -z "$spoolfile" ] && eval cur="${cur/^!/$spoolfile}"; + fi + _filedir + + return 0 +} + +_mutt() +{ + local cur prev + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + COMPREPLY=() + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W '-A -a -b -c -e -f -F -H -i -m -n \ + -p -Q -R -s -v -x -y -z -Z -h' -- "$cur" ) ) + return 0 + ;; + *) + case "$prev" in + -@(a|f|F|H|i)) + _muttfiledir + return 0 + ;; + -A) + _muttaliases + return 0 + ;; + -@(e|m|Q|s|h|p|R|v|y|z|Z)) + return 0 + ;; + *) + _muttaddr + return 0 + ;; + esac + ;; + esac + +} +complete -F _mutt $default $filenames mutt muttng +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/mysqladmin b/contrib/mysqladmin new file mode 100644 index 00000000..0a84de1e --- /dev/null +++ b/contrib/mysqladmin @@ -0,0 +1,38 @@ +# bash completion for mysqladmin + +have mysqladmin && +_mysqladmin() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -u) + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + *) + ;; + esac + + COMPREPLY=( $( compgen -W '-# -f -? -C -h -p -P -i -r -E -s -S -t -u \ + -v -V -w' -- "$cur" ) ) + + COMPREPLY=( "${COMPREPLY[@]}" \ + $( compgen -W 'create drop extended-status flush-hosts flush-logs \ + flush-status flush-tables flush-threads flush-privileges kill \ + password ping processlist reload refresh shutdown status variables \ + version' -- "$cur" ) ) +} && +complete -F _mysqladmin mysqladmin + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/ncftp b/contrib/ncftp new file mode 100644 index 00000000..6d5a611a --- /dev/null +++ b/contrib/ncftp @@ -0,0 +1,26 @@ +# bash completion for ncftp + +have ncftp && +_ncftp() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [ $COMP_CWORD -eq 1 ] && [ -f ~/.ncftp/bookmarks ]; then + COMPREPLY=( $( compgen -W '$( sed -ne "s/^\([^,]\{1,\}\),.*$/\1/p" \ + ~/.ncftp/bookmarks )' -- "$cur" ) ) + fi + + return 0 +} && +complete -F _ncftp $default ncftp + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/net-tools b/contrib/net-tools index d926e084..b3bf8615 100644 --- a/contrib/net-tools +++ b/contrib/net-tools @@ -1,89 +1,115 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash completion for net tools have mii-tool && _mii_tool() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - # --name value style option - case $prev in - -F) - COMPREPLY=( $( compgen -W '100baseTx-FD 100baseTx-HD \ - 10baseT-FD 10baseT-HD' -- $cur ) ) - return 0 - ;; - -A) - COMPREPLY=( $( compgen -W '100baseT4 100baseTx-FD 100baseTx-HD \ - 10baseT-FD 10baseT-HD' -- $cur ) ) - return 0 - ;; - esac - - - # --name=value style option - if [[ "$cur" == *=* ]]; then - prev=${cur/=*/} - cur=${cur/*=/} - case "$prev" in - --force) - COMPREPLY=( $( compgen -W '100baseTx-FD \ - 100baseTx-HD 10baseT-FD \ - 10baseT-HD' -- $cur ) ) - return 0 - ;; - --advertise) - COMPREPLY=( $( compgen -W '100baseT4 \ - 100baseTx-FD 100baseTx-HD 10baseT-FD \ - 10baseT-HD' -- $cur ) ) - return 0 - ;; - esac - fi - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-v --verbose -V --version -R \ - --reset -r --restart -w --watch -l --log -A \ - --advertise= -F --force=' -- $cur ) ) - else - _available_interfaces -a - fi + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -F|--force) + COMPREPLY=( $( compgen -W '100baseTx-FD 100baseTx-HD \ + 10baseT-FD 10baseT-HD' -- "$cur" ) ) + return 0 + ;; + -A|--advertise) + COMPREPLY=( $( compgen -W '100baseT4 100baseTx-FD 100baseTx-HD \ + 10baseT-FD 10baseT-HD' -- "$cur" ) ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-v --verbose -V --version -R \ + --reset -r --restart -w --watch -l --log -A \ + --advertise -F --force' -- "$cur" ) ) + else + _available_interfaces -a + fi } && complete -F _mii_tool $default mii-tool have mii-diag && _mii_diag() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - # --name value style option - case $prev in - -@(F|A|-advertise|-fixed-speed)) - COMPREPLY=( $( compgen -W '100baseT4 100baseTx \ - 100baseTx-FD 100baseTx-HD 10baseT 10baseT-FD \ - 10baseT-HD' -- $cur ) ) - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-A --advertise -F --fixed-speed -a \ - --all-interfaces -s --status -D --debug -g \ - --read-parameters -G --set-parameters -M --msg-level \ - -p --phy -r --restart -R --reset -v -V -w --watch \ - -? --help' -- $cur ) ) - else - _available_interfaces -a - fi + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -@(F|A|-advertise|-fixed-speed)) + COMPREPLY=( $( compgen -W '100baseT4 100baseTx \ + 100baseTx-FD 100baseTx-HD 10baseT 10baseT-FD \ + 10baseT-HD' -- "$cur" ) ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A --advertise -F --fixed-speed -a \ + --all-interfaces -s --status -D --debug -g \ + --read-parameters -G --set-parameters -M --msg-level \ + -p --phy -r --restart -R --reset -v -V -w --watch \ + -? --help' -- "$cur" ) ) + else + _available_interfaces -a + fi } && complete -F _mii_diag $default mii-diag + +# Linux route(8) completion +# +[ $UNAME = Linux ] && +_route() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + if [ "$prev" = dev ]; then + COMPREPLY=( $( ifconfig -a | sed -ne 's|^\('$cur'[^ ]*\).*$|\1|p' )) + return 0 + fi + + COMPREPLY=( $( compgen -W 'add del -host -net netmask metric mss \ + window irtt reject mod dyn reinstate dev \ + default gw' -- "$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 +} +[ $UNAME = Linux ] && complete -F _route route + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/ntpdate b/contrib/ntpdate new file mode 100644 index 00000000..233f69f1 --- /dev/null +++ b/contrib/ntpdate @@ -0,0 +1,38 @@ +# bash completion for ntpdate + +have ntpdate && +_ntpdate() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -k) + _filedir + return 0 + ;; + -U) + COMPREPLY=( $( compgen -u "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-4 -6 -b -B -d -Q -q -s -u -v -a\ + -e -k -p -o -r -t' -- "$cur" ) ) + else + _known_hosts_real "$cur" + fi +} && +complete -F _ntpdate ntpdate + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/openldap b/contrib/openldap new file mode 100644 index 00000000..5869811d --- /dev/null +++ b/contrib/openldap @@ -0,0 +1,273 @@ +# bash completion for openldap + +have ldapsearch && { +_ldap_uris() +{ + COMPREPLY=( $( compgen -W 'ldap:// ldaps://' -- "$cur" ) ) +} + +_ldap_protocols() +{ + COMPREPLY=( $( compgen -W '2 3' -- "$cur" ) ) +} + +_ldapsearch() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -h) + _known_hosts_real "$cur" + return 0 + ;; + -H) + _ldap_uris + return 0 + ;; + -T) + _filedir -d + return 0 + ;; + -@(f|y)) + _filedir + return 0 + ;; + -s) + COMPREPLY=( $( compgen -W 'base one sub children' -- "$cur" ) ) + return 0 + ;; + -a) + COMPREPLY=( $( compgen -W 'never always search find' \ + -- "$cur" ) ) + return 0 + ;; + -P) + _ldap_protocols + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-n -u -v -t -tt -T -F -A -C -L -LL \ + -LLL -M -MM -S -d -f -x -D -W -w -y -H -h -p -b -s -a \ + -P -e -E -l -z -O -I -Q -U -R -X -Y -Z -ZZ' -- "$cur" ) ) + fi +} +complete -F _ldapsearch ldapsearch + +_ldapaddmodify() +{ + local cur prev options + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -h) + _known_hosts_real "$cur" + return 0 + ;; + -H) + _ldap_uris + return 0 + ;; + -@(S|f|y)) + _filedir + return 0 + ;; + -P) + _ldap_protocols + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + options='-c -S -n -v -M -MM -d -D -W -w -y -h -H -p -P -O -I \ + -Q -U -R -x -X -Y -Z -ZZ -f' + if [[ ${COMP_WORDS[0]} == ldapmodify ]]; then + options="$options -a" + fi + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) + fi +} +complete -F _ldapaddmodify ldapadd ldapmodify + +_ldapdelete() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -h) + _known_hosts_real "$cur" + return 0 + ;; + -H) + _ldap_uris + return 0 + ;; + -@(f|y)) + _filedir + return 0 + ;; + -P) + _ldap_protocols + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-n -v -c -M -MM -d -f -D -W -w -y \ + -H -h -P -p -O -U -R -r -x -I -Q -X -Y -Z -ZZ' -- "$cur" ) ) + fi +} +complete -F _ldapdelete ldapdelete + +_ldapcompare() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -h) + _known_hosts_real "$cur" + return 0 + ;; + -H) + _ldap_uris + return 0 + ;; + -y) + _filedir + return 0 + ;; + -P) + _ldap_protocols + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-n -v -z -M -MM -d -D -W -w -y \ + -H -h -P -p -O -I -Q -U -R -x -X -Y -Z -ZZ' -- "$cur" ) ) + fi +} +complete -F _ldapcompare ldapcompare + +_ldapmodrdn() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -h) + _known_hosts_real "$cur" + return 0 + ;; + -H) + _ldap_uris + return 0 + ;; + -@(f|y)) + _filedir + return 0 + ;; + -P) + _ldap_protocols + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-r -s -n -v -c -M -MM -d -D -W -w \ + -y -H -h -P -p -O -I -Q -U -R -x -X -Y -Z -ZZ -f' -- "$cur" ) ) + fi +} +complete -F _ldapmodrdn ldapmodrdn + +_ldapwhoami() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -h) + _known_hosts_real "$cur" + return 0 + ;; + -H) + _ldap_uris + return 0 + ;; + -@(f|y)) + _filedir + return 0 + ;; + -P) + _ldap_protocols + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-n -v -z -d -D -W -w -y -H -h -p -P \ + -O -I -Q -U -R -x -X -Y -Z -ZZ' -- "$cur" ) ) + fi +} +complete -F _ldapwhoami ldapwhoami + +_ldappasswd() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -h) + _known_hosts_real "$cur" + return 0 + ;; + -H) + _ldap_uris + return 0 + ;; + -@(t|T|y)) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-A -a -t -d -D -H -h -n -p -S -s -T \ + -v -W -w -y -O -I -Q -U -R -x -X -Y -Z -ZZ' -- "$cur" ) ) + fi +} +complete -F _ldappasswd ldappasswd +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/openssl b/contrib/openssl new file mode 100644 index 00000000..8fdbb87d --- /dev/null +++ b/contrib/openssl @@ -0,0 +1,251 @@ +# bash completion for openssl + +have openssl && { +_openssl_sections() +{ + local config f + + # check if a specific configuration file is used + for (( i=2; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == -config ]]; then + config=${COMP_WORDS[i+1]} + break + fi + done + + # if no config given, check some usual default locations + if [ -z "$config" ]; then + for f in /etc/ssl/openssl.cnf /etc/pki/tls/openssl.cnf \ + /usr/share/ssl/openssl.cnf; do + [ -f $f ] && config=$f && break + done + fi + + [ ! -f "$config" ] && return 0 + + COMPREPLY=( $( compgen -W "$( awk '/\[.*\]/ {print $2}' $config )" \ + -- "$cur" ) ) +} + +_openssl() +{ + local cur prev commands command options formats + + COMPREPLY=() + cur=`_get_cword` + + commands='asn1parse ca ciphers crl crl2pkcs7 dgst dh dhparam dsa \ + dsaparam ec ecparam enc engine errstr gendh gendsa genrsa \ + nseq ocsp passwd pkcs12 pkcs7 pkcs8 prime rand req rsa \ + rsautl s_client s_server s_time sess_id smime speed spkac \ + verify version x509 md2 md4 md5 rmd160 sha sha1 aes-128-cbc \ + aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb \ + base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc \ + camellia-128-ecb camellia-192-cbc camellia-192-ecb \ + camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc \ + cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb \ + des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 \ + des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx rc2 \ + rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 \ + rc4-40' + + if [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) ) + else + command=${COMP_WORDS[1]} + prev=${COMP_WORDS[COMP_CWORD-1]} + case $prev in + -@(CA|CAfile|CAkey|CAserial|cert|certfile|config|content|dcert|dkey|dhparam|extfile|in|inkey|kfile|key|keyout|out|oid|prvrify|rand|recip|revoke|sess_in|sess_out|spkac|sign|signkey|signer|signature|ss_cert|untrusted|verify)) + _filedir + return 0 + ;; + -@(outdir|CApath)) + _filedir -d + return 0 + ;; + -@(name|crlexts|extensions)) + _openssl_sections + return 0 + ;; + -@(in|out|key|cert|CA|CAkey|dkey|dcert)form) + formats='DER PEM' + case $command in + x509) + formats="$formats NET" + ;; + smime) + formats="$formats SMIME" + ;; + esac + COMPREPLY=( $( compgen -W "$formats" -- "$cur" ) ) + return 0 + ;; + -connect) + _known_hosts_real "$cur" + return 0 + ;; + -starttls) + COMPREPLY=( $( compgen -W 'smtp pop3 imap ftp' \ + -- "$cur" ) ) + return 0 + ;; + -cipher) + COMPREPLY=( $( compgen -W "$(openssl ciphers | \ + tr ':' '\n')" -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + # possible options for the command + case $command in + asn1parse) + options='-inform -in -out -noout -offset -length -i -oid \ + -strparse' + ;; + ca) + options='-verbose -config -name -gencrl -revoke \ + -crl_reason -crl_hold -crl_compromise \ + -crl_CA_compromise -crldays -crlhours -crlexts \ + -startdate -enddate -days -md -policy -keyfile -key \ + -passin -cert -selfsig -in -out -notext -outdir \ + -infiles -spkac -ss_cert -preserveDN -noemailDN \ + -batch -msie_hack -extensions -extfile -engine \ + -subj -utf8 -multivalue-rdn' + ;; + ciphers) + options='-v -ssl2 -ssl3 -tls1' + ;; + crl) + options='-inform -outform -text -in -out -noout -hash \ + -issuer -lastupdate -nextupdate -CAfile -CApath' + ;; + crl2pkcs7) + options='-inform -outform -in -out -print_certs' + ;; + dgst) + options='-md5 -md4 -md2 -sha1 -sha -mdc2 -ripemd160 -dss1 \ + -c -d -hex -binary -out -sign -verify -prverify \ + -signature' + ;; + dsa) + options='-inform -outform -in -passin -out -passout -des \ + -des3 -idea -text -noout -modulus -pubin -pubout' + ;; + dsaparam) + options='-inform -outform -in -out -noout -text -C -rand \ + -genkey' + ;; + enc) + options='-ciphername -in -out -pass -e -d -a -A -k -kfile \ + -S -K -iv -p -P -bufsize -debug' + ;; + dhparam) + options='-inform -outform -in -out -dsaparam -noout -text \ + -C -2 -5 -rand' + ;; + gendsa) + options='-out -des -des3 -idea -rand' + ;; + genrsa) + options='-out -passout -des -des3 -idea -f4 -3 -rand' + ;; + pkcs7) + options='-inform -outform -in -out -print_certs -text \ + -noout' + ;; + rand) + options='-out -rand -base64' + ;; + req) + options='-inform -outform -in -passin -out -passout -text \ + -noout -verify -modulus -new -rand -newkey -newkey \ + -nodes -key -keyform -keyout -md5 -sha1 -md2 -mdc2 \ + -config -x509 -days -asn1-kludge -newhdr -extensions \ + -reqexts section' + ;; + rsa) + options='-inform -outform -in -passin -out -passout \ + -sgckey -des -des3 -idea -text -noout -modulus -check \ + -pubin -pubout -engine' + ;; + rsautl) + options='-in -out -inkey -pubin -certin -sign -verify \ + -encrypt -decrypt -pkcs -ssl -raw -hexdump -asn1parse' + ;; + s_client) + options='-connect -verify -cert -certform -key -keyform \ + -pass -CApath -CAfile -reconnect -pause -showcerts \ + -debug -msg -nbio_test -state -nbio -crlf -ign_eof \ + -quiet -ssl2 -ssl3 -tls1 -no_ssl2 -no_ssl3 -no_tls1 \ + -bugs -cipher -starttls -engine -tlsextdebug \ + -no_ticket -sess_out -sess_in -rand' + ;; + s_server) + options='-accept -context -verify -Verify -crl_check \ + -crl_check_all -cert -certform -key -keyform -pass \ + -dcert -dcertform -dkey -dkeyform -dpass -dhparam \ + -nbio -nbio_test -crlf -debug -msg -state -CApath \ + -CAfile -nocert -cipher -quiet -no_tmp_rsa -ssl2 \ + -ssl3 -tls1 -no_ssl2 -no_ssl3 -no_tls1 -no_dhe \ + -bugs -hack -www -WWW -HTTP -engine -tlsextdebug \ + -no_ticket -id_prefix -rand' + ;; + s_time) + options='-connect -www -cert -key -CApath -CAfile -reuse \ + -new -verify -nbio -time -ssl2 -ssl3 -bugs -cipher' + ;; + sess_id) + options='-inform -outform -in -out -text -noout -context \ + ID' + ;; + smime) + options='-encrypt -decrypt -sign -verify -pk7out -des \ + -des3 -rc2-40 -rc2-64 -rc2-128 -aes128 -aes192 -aes256 \ + -in -certfile -signer -recip -inform -passin -inkey \ + -out -outform -content -to -from -subject -text -rand' + ;; + speed) + options='-engine' + ;; + verify) + options='-CApath -CAfile -purpose -untrusted -help \ + -issuer_checks -verbose -certificates' + ;; + x509) + options='-inform -outform -keyform -CAform -CAkeyform -in \ + -out -serial -hash -subject-hash -issuer_hash -subject \ + -issuer -nameopt -email -startdate -enddate -purpose \ + -dates -modulus -fingerprint -alias -noout -trustout \ + -clrtrust -clrreject -addtrust -addreject -setalias \ + -days -set_serial -signkey -x509toreq -req -CA -CAkey \ + -CAcreateserial -CAserial -text -C -md2 -md5 -sha1 \ + -mdc2 -clrext -extfile -extensions -engine' + ;; + @(md5|md4|md2|sha1|sha|mdc2|ripemd160)) + options='-c -d' + ;; + esac + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) + else + if [[ "$command" == speed ]]; then + COMPREPLY=( $( compgen -W 'md2 mdc2 md5 hmac sha1 rmd160 \ + idea-cbc rc2-cbc rc5-cbc bf-cbc des-cbc des-ede3 rc4 \ + rsa512 rsa1024 rsa2048 rsa4096 dsa512 dsa1024 dsa2048 idea \ + rc2 des rsa blowfish' -- "$cur" ) ) + else + _filedir + fi + fi + fi +} +complete -F _openssl $default openssl +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh @@ -1,55 +1,60 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # Perforce completion by Frank Cusack <frank@google.com> +have p4 && _p4() { - local cur prev prev2 p4commands p4filetypes + local cur prev prev2 p4commands p4filetypes - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - # rename isn't really a command - p4commands="$( p4 help commands | awk 'NF>3 {print $1}' )" - p4filetypes="ctext cxtext ktext kxtext ltext tempobj ubinary \ - uresource uxbinary xbinary xltext xtempobj xtext \ - text binary resource" + # rename isn't really a command + p4commands="$( p4 help commands | awk 'NF>3 {print $1}' )" + p4filetypes="ctext cxtext ktext kxtext ltext tempobj ubinary \ + uresource uxbinary xbinary xltext xtempobj xtext \ + text binary resource" - if [ $COMP_CWORD -eq 1 ]; then - COMPREPLY=( $( compgen -W "$p4commands" -- $cur ) ) - elif [ $COMP_CWORD -eq 2 ]; then - case "$prev" in - help) - COMPREPLY=( $( compgen -W "simple commands \ - environment filetypes jobview revisions \ - usage views $p4commands" -- $cur ) ) - ;; - admin) - COMPREPLY=( $( compgen -W "checkpoint stop" -- $cur ) ) - ;; - *) - ;; - esac - elif [ $COMP_CWORD -gt 2 ]; then - prev2=${COMP_WORDS[COMP_CWORD-2]} - case "$prev" in - -t) - case "$prev2" in - add|edit|reopen) - COMPREPLY=( $( compgen -W "$p4filetypes" \ - -- $cur) ) - ;; - *) - ;; - esac - ;; - *) - ;; - esac - fi + if [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -W "$p4commands" -- "$cur" ) ) + elif [ $COMP_CWORD -eq 2 ]; then + case "$prev" in + help) + COMPREPLY=( $( compgen -W "simple commands \ + environment filetypes jobview revisions \ + usage views $p4commands" -- "$cur" ) ) + ;; + admin) + COMPREPLY=( $( compgen -W "checkpoint stop" -- "$cur" ) ) + ;; + *) + ;; + esac + elif [ $COMP_CWORD -gt 2 ]; then + prev2=${COMP_WORDS[COMP_CWORD-2]} + case "$prev" in + -t) + case "$prev2" in + add|edit|reopen) + COMPREPLY=( $( compgen -W "$p4filetypes" -- "$cur") ) + ;; + *) + ;; + esac + ;; + *) + ;; + esac + fi - return 0 -} + return 0 +} && complete -F _p4 $default p4 g4 + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/perl b/contrib/perl new file mode 100644 index 00000000..77fac477 --- /dev/null +++ b/contrib/perl @@ -0,0 +1,127 @@ +# bash completion for perl + +have perl && +{ +_perlmodules() +{ + COMPREPLY=( $( compgen -P "$prefix" -W "$( perl -e 'sub mods { my ($base,$dir)=@_; return if $base !~ /^\Q$ENV{cur}/; chdir($dir) or return; for (glob(q[*.pm])) {s/\.pm$//; print qq[$base$_\n]}; mods(/^(?:[.\d]+|$Config{archname}-$Config{osname}|auto)$/ ? undef : qq[${base}${_}\\\\:\\\\:],qq[$dir/$_]) for grep {-d} glob(q[*]); } mods(undef,$_) for @INC;' )" -- "$cur" ) ) +} + +_perl() +{ + local cur prev prefix temp + local optPrefix optSuffix + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + prefix="" + + # If option not followed by whitespace, reassign prev and cur + if [[ "$cur" == -?* ]]; then + temp=$cur + prev=${temp:0:2} + cur=${temp:2} + optPrefix=-P$prev + optSuffix=-S/ + prefix=$prev + fi + + # only handle module completion for now + case "$prev" in + -I|-x) + local IFS=$'\t\n' + COMPREPLY=( $( compgen -d $optPrefix $optSuffix -- "$cur" ) ) + return 0 + ;; + -m|-M) + _perlmodules + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-C -s -T -u -U -W -X -h -v -V -c -w -d \ + -D -p -n -a -F -l -0 -I -m -M -P -S -x -i -e ' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _perl $nospace $filenames perl + +_perldoc() +{ + local cur prev prefix temp + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + prefix="" + + # completing an option (may or may not be separated by a space) + if [[ "$cur" == -?* ]]; then + temp=$cur + prev=${temp:0:2} + cur=${temp:2} + prefix=$prev + fi + + # complete builtin perl functions + case $prev in + -f) + COMPREPLY=( $( compgen -W 'chomp chop chr crypt hex index lc \ + lcfirst length oct ord pack q qq reverse rindex sprintf \ + substr tr uc ucfirst y m pos quotemeta s split study qr abs \ + atan2 cos exp hex int log oct rand sin sqrt srand pop push \ + shift splice unshift grep join map qw reverse sort unpack \ + delete each exists keys values binmode close closedir \ + dbmclose dbmopen die eof fileno flock format getc print \ + printf read readdir rewinddir seek seekdir select syscall \ + sysread sysseek syswrite tell telldir truncate warn write \ + pack read syscall sysread syswrite unpack vec -X chdir chmod \ + chown chroot fcntl glob ioctl link lstat mkdir open opendir \ + readlink rename rmdir stat symlink umask unlink utime caller \ + continue do dump eval exit goto last next redo return \ + sub wantarray caller import local my our package use defined \ + formline reset scalar undef \ + alarm exec fork getpgrp getppid getpriority kill pipe qx \ + setpgrp setpriority sleep system times wait waitpid \ + import no package require use bless dbmclose dbmopen package \ + ref tie tied untie use accept bind connect getpeername \ + getsockname getsockopt listen recv send setsockopt shutdown \ + socket socketpair msgctl msgget msgrcv msgsnd semctl semget \ + semop shmctl shmget shmread shmwrite endgrent endhostent \ + endnetent endpwent getgrent getgrgid getgrnam getlogin \ + getpwent getpwnam getpwuid setgrent setpwent endprotoent \ + endservent gethostbyaddr gethostbyname gethostent \ + getnetbyaddr getnetbyname getnetent getprotobyname \ + getprotobynumber getprotoent getservbyname getservbyport \ + getservent sethostent setnetent setprotoent setservent \ + gmtime localtime time times' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h -v -t -u -m -l -F -X -f -q' -- "$cur" )) + else + # return available modules (unless it is clearly a file) + if [[ "$cur" != */* ]]; then + _perlmodules + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W \ + '$( PAGER=/bin/cat man perl | \ + sed -ne "/perl.*Perl overview/,/perlwin32/p" | \ + awk "\$NF=2 { print \$1}" | grep perl )' -- "$cur" ) ) + fi + fi +} +complete -F _perldoc $default perldoc +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/pine b/contrib/pine new file mode 100644 index 00000000..0c96bedd --- /dev/null +++ b/contrib/pine @@ -0,0 +1,22 @@ +# PINE address-book completion + +have pine && +_pineaddr() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + COMPREPLY=( $( compgen -W '$( awk "{print \$1}" ~/.addressbook \ + 2>/dev/null)' -- "$cur" ) ) +} && +complete -F _pineaddr $default pine + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/pkg-config b/contrib/pkg-config new file mode 100644 index 00000000..1f8cc83f --- /dev/null +++ b/contrib/pkg-config @@ -0,0 +1,52 @@ +# bash completion for pkgconfig + +have pkg-config && +_pkg_config() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + --@(?(define-)variable|@(atleast?(-pkgconfig)|exact|max)-version)) + # argument required but no completions available + return 0 + ;; + -\?|--help|--version|--usage) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + # return list of available options + COMPREPLY=( $( compgen -W '--version --modversion \ + --atleast-pkgconfig-version --libs --static \ + --short-errors --libs-only-l --libs-only-other \ + --libs-only-L --cflags --cflags-only-I \ + --cflags-only-other --variable --define-variable \ + --exists --uninstalled --atleast-version \ + --exact-version --max-version --list-all --debug \ + --print-errors --silence-errors --errors-to-stdout \ + --print-provides --print-requires -? --help --usage' \ + -- "$cur") ) + else + COMPREPLY=( $( compgen -W "$( pkg-config --list-all \ + 2>/dev/null | awk '{print $1}' )" -- "$cur" ) ) + fi +} && +complete -F _pkg_config pkg-config + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/pkg_install b/contrib/pkg_install new file mode 100644 index 00000000..3bdf2b77 --- /dev/null +++ b/contrib/pkg_install @@ -0,0 +1,31 @@ +# bash completion for FreeBSD base package management tools + +[ $UNAME = FreeBSD ] && +{ + +_pkg_delete() +{ + local cur pkgdir prev + + pkgdir=${PKG_DBDIR:-/var/db/pkg}/ + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + [ "$prev" = "-o" -o "$prev" = "-p" -o "$prev" = "-W" ] && return 0 + + COMPREPLY=( $( compgen -d "$pkgdir$cur" ) ) + COMPREPLY=( ${COMPREPLY[@]#$pkgdir} ) + + return 0 +} +complete -F _pkg_delete $dirnames pkg_delete pkg_info + +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/pkgtools b/contrib/pkgtools new file mode 100644 index 00000000..c8092b7c --- /dev/null +++ b/contrib/pkgtools @@ -0,0 +1,22 @@ +# bash completion for Slackware Linux pkgtools + +have removepkg && [ -f /etc/slackware-version ] && +_removepkg() +{ + local packages cur + + COMPREPLY=() + cur=`_get_cword` + + COMPREPLY=( $( (cd /var/log/packages; compgen -f -- "$cur") ) ) +} && +complete -F _removepkg $filenames removepkg && + complete $dirnames -f -X '!*.tgz' installpkg upgradepkg explodepkg + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/portupgrade b/contrib/portupgrade new file mode 100644 index 00000000..b9914730 --- /dev/null +++ b/contrib/portupgrade @@ -0,0 +1,59 @@ +# bash completion for FreeBSD portupgrade package + +have portupgrade && +_portupgrade() +{ + local cur pkgdir prev + + pkgdir=${PKG_DBDIR:-/var/db/pkg}/ + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + [ "$prev" = "-l" -o "$prev" = "-L" -o "$prev" = "-o" ] && return 0 + + COMPREPLY=( $( compgen -d "$pkgdir$cur" ) ) + COMPREPLY=( ${COMPREPLY[@]#$pkgdir} ) + COMPREPLY=( ${COMPREPLY[@]%-*} ) + + return 0 +} && +complete -F _portupgrade $dirnames portupgrade + +have portinstall && +_portinstall() +{ + local cur portsdir prev indexfile + local -a COMPREPLY2 + + portsdir=${PORTSDIR:-/usr/ports}/ + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + # First try INDEX-5 + indexfile=$portsdir/INDEX-5 + # Then INDEX if INDEX-5 does not exist or system is not FreeBSD 5.x + [ "${OSTYPE%.*}" = "freebsd5" -a -f $indexfile ] || + indexfile=$portsdir/INDEX + + [ "$prev" = "-l" -o "$prev" = "-L" -o "$prev" = "-o" ] && return 0 + + COMPREPLY=( $( egrep "^$cur" < $indexfile | cut -d'|' -f1 ) ) + COMPREPLY2=( $( egrep "^[^\|]+\|$portsdir$cur" < $indexfile | \ + cut -d'|' -f2 ) ) + COMPREPLY2=( ${COMPREPLY2[@]#$portsdir} ) + COMPREPLY=( "${COMPREPLY[@]}" "${COMPREPLY2[@]}" ) + + return 0 +} && +complete -F _portinstall $dirnames portinstall + +# _pkg_delete is in pkg_install +type _pkg_delete &>/dev/null && have pkg_deinstall && \ +complete -F _pkg_delete $dirnames pkg_deinstall + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/postfix b/contrib/postfix new file mode 100644 index 00000000..dccdc1e5 --- /dev/null +++ b/contrib/postfix @@ -0,0 +1,236 @@ +# bash completion for postfix + +have postfix && { +# postfix(1) +# +_postfix() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -c) + _filedir -d + return 0 + ;; + -D) + COMPREPLY=( $( compgen -W 'start' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '-c -D -v' -- "$cur" ) ) + return 0 + fi + + COMPREPLY=( $( compgen -W 'check start stop abort flush reload status \ + set-permissions upgrade-configuration' -- "$cur" ) ) +} +complete -F _postfix $filenames postfix + +# postalias(1) and postmap(1) +# +_postmap() +{ + local cur prev len idx + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -c) + _filedir -d + return 0 + ;; + -[dq]) + return 0 + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '-N -f -i -n -o -p -r -v -w -c -d -q'\ + -- "$cur" ) ) + return 0 + fi + + if [[ "$cur" == *:* ]]; then + COMPREPLY=( $( compgen -f -- "${cur#*:}" ) ) + else + len=${#cur} + idx=0 + for pval in $( /usr/sbin/postconf -m ); do + if [[ "$cur" == "${pval:0:$len}" ]]; then + COMPREPLY[$idx]="$pval:" + idx=$(($idx+1)) + fi + done + if [[ $idx -eq 0 ]]; then + COMPREPLY=( $( compgen -f -- "$cur" ) ) + fi + fi + return 0 +} +complete -F _postmap $filenames postmap postalias + +# postcat(1) +# +_postcat() +{ + local cur prev pval len idx qfile + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -c) + _filedir -d + return 0 + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '-c -q -v' -- "$cur" ) ) + return 0 + fi + + qfile=0 + for idx in "${COMP_WORDS[@]}"; do + [[ "$idx" = -q ]] && qfile=1 && break + done + if [[ $qfile == 1 ]]; then + len=${#cur} + idx=0 + for pval in $( mailq 2>/dev/null | \ + sed -e '1d; $d; /^[^0-9A-Z]\|^$/d; s/[* !].*$//' ); do + if [[ "$cur" == "${pval:0:$len}" ]]; then + COMPREPLY[$idx]=$pval + idx=$(($idx+1)) + fi + done + return 0 + else + _filedir + return 0 + fi +} +complete -F _postcat $filenames postcat + +# postconf(1) +# +_postconf() +{ + local cur prev pval len idx eqext + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -b|-t) + _filedir + return 0 + ;; + -c) + _filedir -d + return 0 + ;; + -e) + cur=${cur#[\"\']} + eqext='=' + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '-A -a -b -c -d -e -h -m -l -n -t -v'\ + -- "$cur" ) ) + return 0 + fi + + len=${#cur} + idx=0 + for pval in $( /usr/sbin/postconf 2>/dev/null | cut -d ' ' -f 1 ); do + if [[ "$cur" == "${pval:0:$len}" ]]; then + COMPREPLY[$idx]="$pval$eqext" + idx=$(($idx+1)) + fi + done + return 0 +} +complete -F _postconf $filenames postconf + +# postsuper(1) +# +_postsuper() +{ + local cur prev pval len idx + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -c) + _filedir -d + return 0 + ;; + -[dr]) + len=${#cur} + idx=0 + for pval in $( echo ALL; mailq 2>/dev/null | \ + sed -e '1d; $d; /^[^0-9A-Z]\|^$/d; s/[* !].*$//' ); do + if [[ "$cur" == "${pval:0:$len}" ]]; then + COMPREPLY[$idx]=$pval + idx=$(($idx+1)) + fi + done + return 0 + ;; + -h) + len=${#cur} + idx=0 + for pval in $( echo ALL; mailq 2>/dev/null | \ + sed -e '1d; $d; /^[^0-9A-Z]\|^$/d; s/[* ].*$//; /!$/d' ); do + if [[ "$cur" == "${pval:0:$len}" ]]; then + COMPREPLY[$idx]=$pval + idx=$(($idx+1)) + fi + done + return 0 + ;; + -H) + len=${#cur} + idx=0 + for pval in $( echo ALL; mailq 2>/dev/null | \ + sed -e '1d; $d; /^[^0-9A-Z]\|^$/d; /^[0-9A-Z]*[* ]/d; s/!.*$//' ); do + if [[ "$cur" == "${pval:0:$len}" ]]; then + COMPREPLY[$idx]=$pval + idx=$(($idx+1)) + fi + done + return 0 + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '-c -d -h -H -p -r -s -v' -- "$cur" ) ) + return 0 + fi + + COMPREPLY=( $( compgen -W 'hold incoming active deferred' -- "$cur" ) ) +} +complete -F _postsuper $filenames postsuper +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/postgresql b/contrib/postgresql new file mode 100644 index 00000000..125b6f64 --- /dev/null +++ b/contrib/postgresql @@ -0,0 +1,171 @@ +# bash completion for Postgresql + +have psql && { +_pg_databases() +{ + return # See https://launchpad.net/bugs/164772 + COMPREPLY=( $( compgen -W "$( psql -l 2>/dev/null | \ + sed -e '1,/^-/d' -e '/^(/,$d' | \ + awk '{print $1}' )" -- "$cur" ) ) +} + +_pg_users() +{ + # See https://launchpad.net/bugs/164772 + #COMPREPLY=( $( psql -qtc 'select usename from pg_user' template1 2>/dev/null | \ + # grep "^ $cur" ) ) + #[ ${#COMPREPLY[@]} -eq 0 ] && COMPREPLY=( $( compgen -u -- $cur ) ) + COMPREPLY=( $( compgen -u -- "$cur" ) ) +} + +# createdb(1) completion +# +_createdb() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -h|--host) + _known_hosts_real "$cur" + return 0 + ;; + -U|--username|-O|--owner) + _pg_users + return 0 + ;; + -p|--port|-D|--tablespace|-E|--encoding|-T|--template) + # argument required but no completions available + return 0 + ;; + --help|--version) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-D -T -E -h -p -U -W -e -q \ + --tablespace --template --encoding --host --port \ + --username --password --echo --quiet --help --version' -- "$cur" )) + else + _pg_databases + fi +} +complete -F _createdb $default createdb + +# dropdb(1) completion +# +_dropdb() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -h|--host) + _known_hosts_real "$cur" + return 0 + ;; + -U|--username) + _pg_users + return 0 + ;; + --help|--version) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h -p -U -W -i -e -q \ + --host --port --username --password --interactive \ + --echo --quiet --help --version' -- "$cur" ) ) + else + _pg_databases + fi +} +complete -F _dropdb $default dropdb + +# psql(1) completion +# +_psql() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -h|--host) + _known_hosts_real "$cur" + return 0 + ;; + -U|--username) + _pg_users + return 0 + ;; + -d|--dbname) + _pg_databases + return 0 + ;; + -o|--output|-f|--file|-L|--log-file) + _filedir + return 0 + ;; + -c|--command|-F|--field-separator|-p|--port|-P|--pset|\ + -R|--record-separator|-T|--table-attr|-v|--set|--variable) + # argument required but no completions available + return 0 + ;; + -\?|--help|-V|--version) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + # return list of available options + COMPREPLY=( $( compgen -W '-a --echo-all -A --no-align \ + -c --command -d --dbname -e --echo-queries \ + -E --echo-hidden -f --file -F --field-separator \ + -h --host -H --html -l --list -L --log-file -n \ + -o --output -p --port -P --pset -q --quiet \ + -R --record-separator -s --single-step \ + -S --single-line -t --tuples-only -T --table-attr \ + -U --username -v --set --variable -V --version \ + -W --password -x --expanded -X --no-psqlrc \ + -1 --single-transaction -? --help' -- "$cur" ) ) + else + # return list of available databases + _pg_databases + fi +} +complete -F _psql $filenames psql +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/povray b/contrib/povray index c69b0db4..4a4df011 100644 --- a/contrib/povray +++ b/contrib/povray @@ -1,59 +1,66 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # povray completion by "David Necas (Yeti)" <yeti@physics.muni.cz> +have povray || have xpovray || have spovray && _povray() { - local cur prev povcur pfx oext defoext - defoext=png # default output extension, if cannot be determined FIXME + local cur prev povcur pfx oext defoext + defoext=png # default output extension, if cannot be determined FIXME - COMPREPLY=() - povcur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + povcur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - _expand || return 0 + _expand || return 0 - case $povcur in - [-+]I*) - cur="${povcur#[-+]I}" # to confuse _filedir - pfx="${povcur%"$cur"}" - _filedir pov - COMPREPLY=( ${COMPREPLY[@]/#/$pfx} ) - return 0 - ;; - [-+]O*) - # guess what output file type user may want - case $( ( IFS=$'\n'; echo "${COMP_WORDS[*]}" | grep '^[-+]F' ) ) in - [-+]FN) oext=png ;; - [-+]FP) oext=ppm ;; - [-+]F[CT]) oext=tga ;; - *) oext=$defoext ;; + case $povcur in + [-+]I*) + cur="${povcur#[-+]I}" # to confuse _filedir + pfx="${povcur%"$cur"}" + _filedir pov + COMPREPLY=( ${COMPREPLY[@]/#/$pfx} ) + return 0 + ;; + [-+]O*) + # guess what output file type user may want + case $( ( IFS=$'\n'; echo "${COMP_WORDS[*]}" | grep '^[-+]F' ) ) in + [-+]FN) oext=png ;; + [-+]FP) oext=ppm ;; + [-+]F[CT]) oext=tga ;; + *) oext=$defoext ;; + esac + # complete filename corresponding to previously specified +I + COMPREPLY=( $( ( IFS=$'\n'; echo "${COMP_WORDS[*]}" | grep '^[-+]I' ) ) ) + COMPREPLY=( ${COMPREPLY[@]#[-+]I} ) + COMPREPLY=( ${COMPREPLY[@]/%.pov/.$oext} ) + cur="${povcur#[-+]O}" # to confuse _filedir + pfx="${povcur%"$cur"}" + _filedir $oext + COMPREPLY=( ${COMPREPLY[@]/#/$pfx} ) + return 0 + ;; + *.ini\[|*.ini\[*[^]]) # sections in .ini files + cur="${povcur#*\[}" + pfx="${povcur%\["$cur"}" # prefix == filename + [ -r "$pfx" ] || return 0 + COMPREPLY=( $(sed -e 's/^[[:space:]]*\[\('"$cur"'[^]]*\]\).*$/\1/' \ + -e 't' -e 'd' -- "$pfx") ) + # to prevent [bar] expand to nothing. can be done more easily? + COMPREPLY=( "${COMPREPLY[@]/#/$pfx[}" ) + return 0 + ;; + *) + cur="$povcur" + _filedir '?(ini|pov)' + return 0 + ;; esac - # complete filename corresponding to previously specified +I - COMPREPLY=( $( ( IFS=$'\n'; echo "${COMP_WORDS[*]}" | grep '^[-+]I' ) ) ) - COMPREPLY=( ${COMPREPLY[@]#[-+]I} ) - COMPREPLY=( ${COMPREPLY[@]/%.pov/.$oext} ) - cur="${povcur#[-+]O}" # to confuse _filedir - pfx="${povcur%"$cur"}" - _filedir $oext - COMPREPLY=( ${COMPREPLY[@]/#/$pfx} ) - return 0 - ;; - *.ini\[|*.ini\[*[^]]) # sections in .ini files - cur="${povcur#*\[}" - pfx="${povcur%\["$cur"}" # prefix == filename - [ -r "$pfx" ] || return 0 - COMPREPLY=( $(sed -e 's/^[[:space:]]*\[\('"$cur"'[^]]*\]\).*$/\1/' -e 't' -e 'd' -- "$pfx") ) - # to prevent [bar] expand to nothing. can be done more easily? - COMPREPLY=( "${COMPREPLY[@]/#/$pfx[}" ) - return 0 - ;; - *) - cur="$povcur" - _filedir '?(ini|pov)' - return 0 - ;; - esac -} +} && complete -F _povray $filenames povray xpovray spovray + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/python b/contrib/python new file mode 100644 index 00000000..6bd4e0ce --- /dev/null +++ b/contrib/python @@ -0,0 +1,59 @@ +# bash completion for python + +have python && +_python() +{ + local prev cur i + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]##*/} + + case "$prev" in + -Q) + COMPREPLY=( $( compgen -W "old new warn warnall" -- "$cur" ) ) + return 0 + ;; + -W) + COMPREPLY=( $( compgen -W "ignore default all module once error" \ + -- "$cur" ) ) + return 0 + ;; + -c) + _filedir '@(py|pyc|pyo)' + return 0 + ;; + !(python|-?)) + [[ ${COMP_WORDS[COMP_CWORD-2]} != -@(Q|W) ]] && _filedir + ;; + esac + + + # if '-c' is already given, complete all kind of files. + for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do + if [[ ${COMP_WORDS[i]} == -c ]]; then + _filedir + fi + done + + + if [[ "$cur" != -* ]]; then + _filedir '@(py|pyc|pyo)' + else + COMPREPLY=( $( compgen -W "- -d -E -h -i -O -Q -S -t -u \ + -U -v -V -W -x -c" -- "$cur" ) ) + fi + + + + return 0 +} && +complete -F _python $filenames python + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/qdbus b/contrib/qdbus index ba749c6a..1e70c708 100644 --- a/contrib/qdbus +++ b/contrib/qdbus @@ -1,20 +1,26 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # Qt qdbus completion -# + have qdbus && _qdbus() { - local cur compstr - - COMPREPLY=() - cur=`_get_cword` - if [ -z "$cur" ]; then - compstr=${COMP_WORDS[*]} - else - compstr=$( command echo ${COMP_WORDS[*]} | sed "s/ ${cur/\//\\/}$//" ) - fi - COMPREPLY=( $( compgen -W '$( command $compstr | sed s/\(.*\)// )' -- "$cur" ) ) + local cur compstr + + COMPREPLY=() + cur=`_get_cword` + if [ -z "$cur" ]; then + compstr=${COMP_WORDS[*]} + else + compstr=$( command echo ${COMP_WORDS[*]} | sed "s/ ${cur/\//\\/}$//" ) + fi + COMPREPLY=( $( compgen -W '$( command $compstr | sed s/\(.*\)// )' \ + -- "$cur" ) ) } && complete -F _qdbus qdbus + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/qemu b/contrib/qemu index 7baeddf3..c129f0c3 100644 --- a/contrib/qemu +++ b/contrib/qemu @@ -1,100 +1,132 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash completion for qemu have qemu && _qemu() { - local cur prev + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case $prev in - -@(fd[ab]|hd[abcd]|cdrom|option-rom|kernel|initrd|bootp|pidfile|loadvm)) - _filedir - return 0 - ;; - -@(tftp|smb|L)) - _filedir -d - return 0 - ;; - -boot) - COMPREPLY=( $( compgen -W 'a c d n' -- $cur ) ) - return 0 - ;; - -k) - COMPREPLY=( $( compgen -W 'ar de-ch es fo fr-ca hu ja \ - mk no pt-br sv da en-gb et fr fr-ch is lt nl pl\ - ru th de en-us fi fr-be hr it lv nl-be pt sl \ - tr' -- $cur ) ) - return 0 - ;; - -soundhw) - COMPREPLY=( $( compgen -W "$( qemu -soundhw ? | awk \ - '/^[[:lower:]]/ {print $1}' ) all" -- $cur ) ) - return 0 - ;; - -M) - COMPREPLY=( $( compgen -W "$( qemu -M ? | awk \ - '/^[[:lower:]]/ {print $1}' )" -- $cur ) ) - return 0 - ;; - -cpu) - COMPREPLY=( $( compgen -W "$( qemu -cpu ? | awk \ - '{print $2}' )" -- $cur ) ) - return 0 - ;; - -usbdevice) - COMPREPLY=( $( compgen -W 'mouse tablet disk: host: \ - serial: braille net' -- $cur ) ) - return 0 - ;; - -net) - COMPREPLY=( $( compgen -W 'nic user tap socket vde none' \ - -- $cur ) ) - return 0 - ;; - -@(serial|parallel|monitor)) - COMPREPLY=( $( compgen -W 'vc pty none null /dev/ \ - file: stdio pipe: COM udp: tcp: telnet: unix: \ - mon: braille' -- $cur ) ) - return 0 - ;; - -redir) - COMPREPLY=( $( compgen -S":" -W 'tcp udp' -- $cur ) ) - return 0 - ;; - -bt) - COMPREPLY=( $( compgen -W 'hci vhci device' -- $cur ) ) - return 0 - ;; - -vga) - COMPREPLY=( $( compgen -W 'cirrus std vmware' -- $cur ) ) - return 0 - ;; - -drive) - COMPREPLY=( $( compgen -S"=" -W 'file if bus index media \ - cyls snapshot cache format' -- $cur ) ) - return 0 - ;; - esac + case $prev in + -@(fd[ab]|hd[abcd]|cdrom|option-rom|kernel|initrd|bootp|pidfile|loadvm|mtdblock|sd|pflash|bios)) + _filedir + return 0 + ;; + -@(tftp|smb|L|chroot)) + _filedir -d + return 0 + ;; + -boot) + COMPREPLY=( $( compgen -W 'a c d n' -- "$cur" ) ) + return 0 + ;; + -k) + COMPREPLY=( $( compgen -W 'ar de-ch es fo fr-ca hu ja \ + mk no pt-br sv da en-gb et fr fr-ch is lt nl pl\ + ru th de en-us fi fr-be hr it lv nl-be pt sl tr' -- "$cur" ) ) + return 0 + ;; + -soundhw) + COMPREPLY=( $( compgen -W "$( qemu -soundhw ? | awk \ + '/^[[:lower:]]/ {print $1}' ) all" -- "$cur" ) ) + return 0 + ;; + -M) + COMPREPLY=( $( compgen -W "$( qemu -M ? | awk \ + '/^[[:lower:]]/ {print $1}' )" -- "$cur" ) ) + return 0 + ;; + -cpu) + COMPREPLY=( $( compgen -W "$( qemu -cpu ? | awk \ + '{print $2}' )" -- "$cur" ) ) + return 0 + ;; + -usbdevice) + COMPREPLY=( $( compgen -W 'mouse tablet disk: host: \ + serial: braille net' -- "$cur" ) ) + return 0 + ;; + -net) + COMPREPLY=( $( compgen -W 'nic user tap socket vde none dump' \ + -- "$cur" ) ) + return 0 + ;; + -@(serial|parallel|monitor)) + COMPREPLY=( $( compgen -W 'vc pty none null /dev/ \ + file: stdio pipe: COM udp: tcp: telnet: unix: \ + mon: braille' -- "$cur" ) ) + return 0 + ;; + -redir) + COMPREPLY=( $( compgen -S":" -W 'tcp udp' -- "$cur" ) ) + return 0 + ;; + -bt) + COMPREPLY=( $( compgen -W 'hci vhci device' -- "$cur" ) ) + return 0 + ;; + -vga) + COMPREPLY=( $( compgen -W 'cirrus std vmware xenfb none' \ + -- "$cur" ) ) + return 0 + ;; + -drive) + COMPREPLY=( $( compgen -S"=" -W 'file if bus unit index media \ + cyls snapshot cache format serial addr' -- "$cur" ) ) + return 0 + ;; + -ballon) + COMPREPLY=( $( compgen -W 'none virtio' -- "$cur" ) ) + return 0 + ;; + -smbios) + COMPREPLY=( $( compgen -W 'file type' -- "$cur" ) ) + return 0 + ;; + -watchdog) + COMPREPLY=( $( compgen -W "$( qemu -watchdog ? 2>&1 | \ + awk '{print $1}' )" -- "$cur" ) ) + return 0 + ;; + -watchdog-action) + COMPREPLY=( $( compgen -W 'reset shutdown poweroff pause debug \ + none' -- "$cur" ) ) + return 0 + ;; + -runas) + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-M -fda -fdb -hda -hdb -hdc -hdd \ - -cdrom -boot -snapshot -no-fd-bootchk -m -smp -nographic -vnc \ - -k -audio-help -soundhw -localtime -full-screen -pidfile \ - -daemonize -win2k-hacks -option-rom -usb -usbdevice -net -tftp \ - -smb -redir -kernel -append -initrd -serial -parallel -monitor \ - -s -p -S -d -hdachs -L -std-vga -no-acpi -no-reboot -loadvm \ - -semihosting -cpu -bt -vga -drive -startdate -name -curses \ - -no-frame -no-quit -bootp -echr -no-shutdown -icount -g \ - -prom-env' -- $cur ) ) - else - _filedir - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-M -fda -fdb -hda -hdb -hdc -hdd \ + -cdrom -boot -snapshot -no-fd-bootchk -m -smp -nographic -vnc \ + -k -audio-help -soundhw -localtime -full-screen -pidfile \ + -daemonize -win2k-hack -option-rom -usb -usbdevice -net -tftp \ + -smb -redir -kernel -append -initrd -serial -parallel -monitor \ + -s -p -S -d -hdachs -L -std-vga -no-acpi -no-reboot -loadvm \ + -semihosting -cpu -bt -vga -drive -startdate -name -curses \ + -no-frame -no-quit -bootp -echr -no-shutdown -icount -g \ + -prom-env -h -help -version -numa -mtdblock -sd -pflash \ + -device -uuid -alt-grab -sdl -portrait -rtc-td-hack -no-hpet \ + -balloon -acpitable -smbios -singlestep -gdb -hdachs -bios \ + -kernel-kqemu -enable-kqemu -enable-kvm -clock -watchdog \ + -watchdog-action -virtioconsole -show-cursor -tb-size -incoming \ + -chroot -runas' -- "$cur" ) ) + else + _filedir + fi } && complete -F _qemu $filenames qemu + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/quota-tools b/contrib/quota-tools index f77d1c35..bc5346c3 100644 --- a/contrib/quota-tools +++ b/contrib/quota-tools @@ -1,309 +1,264 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash completion for quota-tools have quota && { _user_or_group() { - local i - - # complete on groups if -g was given - for (( i=1; i < COMP_CWORD; i++ )); do - if [[ "${COMP_WORDS[i]}" == -g ]]; then - COMPREPLY=( $( compgen -g -- $cur ) ) - return 0 - fi - done - - # otherwise complete on users - COMPREPLY=( $( compgen -u -- $cur ) ) + local i + + # complete on groups if -g was given + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == -g ]]; then + COMPREPLY=( $( compgen -g -- "$cur" ) ) + return 0 + fi + done + + # otherwise complete on users + COMPREPLY=( $( compgen -u -- "$cur" ) ) } _quota_formats() { - COMPREPLY=( $( compgen -W 'vfsold vfsv0 rpc xfs' -- $cur ) ) + COMPREPLY=( $( compgen -W 'vfsold vfsv0 rpc xfs' -- "$cur" ) ) } _filesystems() { - # Only list filesystems starting with "/", otherwise we also get - #+ "binfmt_misc", "proc", "tmpfs", ... - COMPREPLY=( $( compgen -W "$(awk '/^\// {print $1}' /etc/mtab)" \ - -- $cur ) ) + # Only list filesystems starting with "/", otherwise we also get + #+ "binfmt_misc", "proc", "tmpfs", ... + COMPREPLY=( $( compgen -W "$(awk '/^\// {print $1}' /etc/mtab)" \ + -- "$cur" ) ) } _quota() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case $prev in - -F) - _quota_formats - return 0 - ;; - esac - - if [[ "$cur" == *=* ]]; then - prev=${cur/=*/} - cur=${cur/*=/} - case $prev in - --format) - _quota_formats - return 0 - ;; - esac - fi - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-F --format= -g --group -u --user -v --verbose \ - -s --human-readable -p --raw-grace -i --no-autofs -l --local-only \ - -A --all-nfs -m --no-mixed-pathnames -q --quiet -Q --quiet-refuse \ - -w --no-wrap' -- $cur ) ) - else - _user_or_group - fi + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -F|--format) + _quota_formats + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-F --format -g --group -u --user -v \ + --verbose -s --human-readable -p --raw-grace -i --no-autofs -l \ + --local-only -A --all-nfs -m --no-mixed-pathnames -q --quiet -Q \ + --quiet-refuse -w --no-wrap' -- "$cur" ) ) + else + _user_or_group + fi } complete -F _quota $default quota _setquota() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case $prev in - -F) - _quota_formats - return 0 - ;; - esac - - if [[ "$cur" == *=* ]]; then - prev=${cur/=*/} - cur=${cur/*=/} - case $prev in - --format) - _quota_formats - return 0 - ;; - esac - fi - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-r --remote -m --no-mixed-pathnames \ - -F --format= -g --group -u --user -p --prototype= -b --batch \ - -c --continue-batch -t --edit-period -T --edit-times -a --all' -- $cur ) ) - else - _count_args - - case $args in - 1) - _user_or_group - ;; - 2) - _filesystems - ;; - esac - - fi + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -F|--format) + _quota_formats + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-r --remote -m --no-mixed-pathnames \ + -F --format -g --group -u --user -p --prototype -b --batch \ + -c --continue-batch -t --edit-period -T --edit-times -a --all' \ + -- "$cur" ) ) + else + _count_args + + case $args in + 1) + _user_or_group + ;; + 2) + _filesystems + ;; + esac + + fi } complete -F _setquota $default setquota _edquota() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case $prev in - -F) - _quota_formats - return 0 - ;; - -@(f|-filesystem)) - _filesystems - return 0 - ;; - esac - - if [[ "$cur" == *=* ]]; then - prev=${cur/=*/} - cur=${cur/*=/} - case $prev in - --format) - _quota_formats - return 0 - ;; - esac - fi - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-r --remote -m --no-mixed-pathnames \ - -g --group -u --user -p --prototype= -F --format= -f --filesystem \ - -t --edit-period -T --edit-times' -- $cur ) ) - else - _user_or_group - fi + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -F|--format) + _quota_formats + return 0 + ;; + -@(f|-filesystem)) + _filesystems + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-r --remote -m --no-mixed-pathnames \ + -g --group -u --user -p --prototype -F --format -f --filesystem \ + -t --edit-period -T --edit-times' -- "$cur" ) ) + else + _user_or_group + fi } complete -F _edquota $default edquota _quotacheck() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case $prev in - -F) - _quota_formats - return 0 - ;; - esac - - if [[ "$cur" == *=* ]]; then - prev=${cur/=*/} - cur=${cur/*=/} - case $prev in - --format) - _quota_formats - return 0 - ;; - esac - fi - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-b --backup -v --verbose -d --debug \ - -g --group -u --user -c --create-files -f --force -i \ - --interactive -n --use-first-dquot -M --try-remount -m \ - --no-remount -R --exclude-root -F --format= -a --all' \ - -- $cur ) ) - else - _filesystems - fi + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -F|--format) + _quota_formats + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-b --backup -v --verbose -d --debug \ + -g --group -u --user -c --create-files -f --force -i \ + --interactive -n --use-first-dquot -M --try-remount -m \ + --no-remount -R --exclude-root -F --format -a --all' -- "$cur" ) ) + else + _filesystems + fi } complete -F _quotacheck $default quotacheck _repquota() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case $prev in - -F) - _quota_formats - return 0 - ;; - esac - - if [[ "$cur" == *=* ]]; then - prev=${cur/=*/} - cur=${cur/*=/} - case $prev in - --format) - _quota_formats - return 0 - ;; - esac - fi - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-a --all -v --verbose -s --human-readable \ - -c --batch-translation -C --no-batch-translation -t \ - --truncate-names -n --no-names -p --raw-grace -i --no-autofs \ - -u --user -g --group -F --format=' -- $cur ) ) - else - _filesystems - fi + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -F|--format) + _quota_formats + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --all -v --verbose -s --human-readable \ + -c --batch-translation -C --no-batch-translation -t \ + --truncate-names -n --no-names -p --raw-grace -i --no-autofs \ + -u --user -g --group -F --format' -- "$cur" ) ) + else + _filesystems + fi } complete -F _repquota $default repquota _quotaon() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - echo --$cmd-- - case $prev in - -F) - _quota_formats - return 0 - ;; - esac - - if [[ "$cur" == *=* ]]; then - prev=${cur/=*/} - cur=${cur/*=/} - case $prev in - --format) - _quota_formats - return 0 - ;; - esac - fi - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-a --all -v --verbose -u --user \ - -g --group -f --off -p --print-state -F --format=' -- $cur ) ) - else - _filesystems - fi + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -F|--format) + _quota_formats + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --all -v --verbose -u --user \ + -g --group -f --off -p --print-state -F --format' -- "$cur" ) ) + else + _filesystems + fi } complete -F _quotaon $default quotaon _quotaoff() { - local cur prev - - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} - - case $prev in - -F) - _quota_formats - return 0 - ;; - -@(x|-xfs-command)) - COMPREPLY=( $( compgen -W 'delete enforce' -- $cur ) ) - return 0 - ;; - esac - - if [[ "$cur" == *=* ]]; then - prev=${cur/=*/} - cur=${cur/*=/} - case $prev in - --format) - _quota_formats - return 0 - ;; - esac - fi - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-a --all -v --verbose -u --user \ - -g --group -p --print-state -x --xfs-command -F --format=' \ - -- $cur ) ) - else - _filesystems - fi + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -F|--format) + _quota_formats + return 0 + ;; + -@(x|-xfs-command)) + COMPREPLY=( $( compgen -W 'delete enforce' -- "$cur" ) ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --all -v --verbose -u --user \ + -g --group -p --print-state -x --xfs-command -F --format' \ + -- "$cur" ) ) + else + _filesystems + fi } complete -F _quotaoff $default quotaoff } + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/rcs b/contrib/rcs new file mode 100644 index 00000000..a6505deb --- /dev/null +++ b/contrib/rcs @@ -0,0 +1,44 @@ +# bash completion for rcs + +have rcs && +_rcs() +{ + local cur prev file dir i + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + file=${cur##*/} + dir=${cur%/*} + + # deal with relative directory + [ "$file" = "$dir" ] && dir=. + + COMPREPLY=( $( compgen -f "$dir/RCS/$file" ) ) + + for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do + file=${COMPREPLY[$i]##*/} + dir=${COMPREPLY[$i]%RCS/*} + COMPREPLY[$i]=$dir$file + done + + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -G "$dir/$file*,v" ) ) + + for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do + COMPREPLY[$i]=${COMPREPLY[$i]%,v} + done + + # default to files if nothing returned and we're checking in. + # otherwise, default to directories + [ ${#COMPREPLY[@]} -eq 0 -a $1 = ci ] && _filedir || _filedir -d +} && +complete -F _rcs $filenames ci co rlog rcs rcsdiff + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/rdesktop b/contrib/rdesktop index ba941eec..79514e7a 100644 --- a/contrib/rdesktop +++ b/contrib/rdesktop @@ -1,53 +1,58 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash completion for rdesktop have rdesktop && _rdesktop() { - local cur prev + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case $prev in - -k) - COMPREPLY=( $( command ls \ - /usr/share/rdesktop/keymaps 2>/dev/null | \ - egrep -v '(common|modifiers)' ) ) - COMPREPLY=( ${COMPREPLY[@]:-} $( command ls \ - $HOME/.rdesktop/keymaps 2>/dev/null ) ) - COMPREPLY=( ${COMPREPLY[@]:-} $( command ls \ - ./keymaps 2>/dev/null ) ) - COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) ) - return 0 - ;; - -a) - COMPREPLY=( $( compgen -W '8 15 16 24' -- $cur ) ) - return 0 - ;; - -x) - COMPREPLY=( $( compgen -W 'b broadband m modem l lan' \ - -- $cur ) ) - return 0 - ;; - -r) - # FIXME: should do $nospace for the colon options - COMPREPLY=( $( compgen -W 'comport: disk: lptport: \ - printer: sound: lspci scard' -- $cur ) ) - return 0 - ;; - esac + case $prev in + -k) + COMPREPLY=( $( command ls \ + /usr/share/rdesktop/keymaps 2>/dev/null | \ + egrep -v '(common|modifiers)' ) ) + COMPREPLY=( ${COMPREPLY[@]:-} $( command ls \ + $HOME/.rdesktop/keymaps 2>/dev/null ) ) + COMPREPLY=( ${COMPREPLY[@]:-} $( command ls \ + ./keymaps 2>/dev/null ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- "$cur" ) ) + return 0 + ;; + -a) + COMPREPLY=( $( compgen -W '8 15 16 24' -- "$cur" ) ) + return 0 + ;; + -x) + COMPREPLY=( $( compgen -W 'b broadband m modem l lan' \ + -- $cur ) ) + return 0 + ;; + -r) + # FIXME: should do $nospace for the colon options + COMPREPLY=( $( compgen -W 'comport: disk: lptport: \ + printer: sound: lspci scard' -- "$cur" ) ) + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-u -d -s -c -p -n -k -g -f -b -L \ - -A -B -e -E -m -C -D -K -S -T -N -X -a -z -x -P -r \ - -0 -4 -5' -- $cur ) ) - else - _known_hosts - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-u -d -s -c -p -n -k -g -f -b -L \ + -A -B -e -E -m -C -D -K -S -T -N -X -a -z -x -P -r \ + -0 -4 -5' -- "$cur" ) ) + else + _known_hosts_real "$cur" + fi } && complete -F _rdesktop rdesktop + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/repomanage b/contrib/repomanage new file mode 100644 index 00000000..8cb50206 --- /dev/null +++ b/contrib/repomanage @@ -0,0 +1,29 @@ +# bash completion for repomanage + +have repomanage && +_repomanage() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + [[ "$prev" == -@(h|-help|k|-keep) ]] && return 0 + + if [[ "$cur" == -* ]] ; then + COMPREPLY=( $( compgen -W '-o --old -n --new -s --space -k \ + --keep -c --nocheck -h --help' -- "$cur" ) ) + else + _filedir -d + fi +} && +complete -F _repomanage $filenames repomanage + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/reportbug b/contrib/reportbug new file mode 100644 index 00000000..b6cb5e26 --- /dev/null +++ b/contrib/reportbug @@ -0,0 +1,127 @@ +# bash completion for (Debian) reportbug package + +have reportbug && +_reportbug() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -f|--filename|-i|--include|--mta|-o|--output) + _filedir + return 0 + ;; + -B|--bts) + COMPREPLY=( $( compgen -W "debian guug kde mandrake help" -- \ + "$cur" )) + return 0 + ;; + -e|--editor|--mua) + COMP_WORDS=(COMP_WORDS[0] "$cur") + COMP_CWORD=1 + _command + return 0 + ;; + --mode) + COMPREPLY=( $( compgen -W "novice standard expert" -- "$cur" ) ) + return 0 + ;; + -S|--severity) + COMPREPLY=( $( compgen -W "grave serious important normal \ + minor wishlist" -- "$cur" ) ) + return 0 + ;; + -u|--ui|--interface) + COMPREPLY=( $( compgen -W "newt text gnome" -- "$cur" ) ) + return 0 + ;; + -t|--type) + COMPREPLY=( $( compgen -W "gnats debbugs" -- "$cur" ) ) + return 0 + ;; + -T|--tags) + COMPREPLY=( $( compgen -W "none \ + woody potato sarge sarge-ignore etch etch-ignore \ + lenny lenny-ignore sid experimental confirmed \ + d-i fixed fixed-in-experimental fixed-upstream \ + help l10n moreinfo patch pending security \ + unreproducible upstream wontfix ipv6 lfs" -- "$cur" )) + return 0 + ;; + *) + ;; + esac + + COMPREPLY=($( compgen -W '-h --help -v --version -a --af -b \ + --no-query-bts --query-bts -B --bts -c --configure \ + --no-config-files --check-available -d --debug \ + --no-check-available -e --editor --email -f \ + --filename -g --gnupg -H --header -i --include -j \ + --justification -l --ldap --no-ldap -L --list-cc -m \ + --maintonly --mode --mua --mta --mutt -n --mh --nmh \ + -o --output -p --print -P --pgp --proxy --http_proxy\ + -q --quiet -Q --query-only --realname --report-quiet \ + --reply-to --replyto -s --subject -S --severity \ + --smtphost -t --type -T --tags --template -V -x \ + --no-cc --package-version -z --no-compress \ + --ui --interface -u \ + wnpp boot-floppies kernel bugs.debian.org \ + cdimage.debian.org general installation-reports \ + listarchives lists.debian.org mirrors nm.debian.org \ + press project qa.debian.org release-notes \ + security.debian.org tech-ctte upgrade-reports \ + www.debian.org' -- "$cur" ) \ + $( apt-cache pkgnames -- "$cur" 2> /dev/null) ) + _filedir + return 0 +} && +complete -F _reportbug $filenames reportbug + +have querybts && +_querybts() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -B|--bts) + COMPREPLY=( $( compgen -W "debian guug kde mandrake help" \ + -- "$cur" )) + return 0 + ;; + -u|--ui|--interface) + COMPREPLY=($( compgen -W "newt text gnome" -- "$cur" )) + return 0 + ;; + esac + + $split && return 0 + + COMPREPLY=($( compgen -W '-h --help -v --version -A --archive \ + -B --bts -l --ldap --no-ldap --proxy --http_proxy \ + -s --source -w --web -u --ui --interface \ + wnpp boot-floppies kernel bugs.debian.org \ + cdimage.debian.org general installation-reports \ + listarchives lists.debian.org mirrors nm.debian.org \ + press project qa.debian.org release-notes \ + security.debian.org tech-ctte upgrade-reports \ + www.debian.org' -- "$cur" ) \ + $( apt-cache pkgnames -- "$cur" 2> /dev/null) ) +} && +complete -F _querybts $filenames querybts + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/resolvconf b/contrib/resolvconf new file mode 100644 index 00000000..70fedb0e --- /dev/null +++ b/contrib/resolvconf @@ -0,0 +1,31 @@ +# bash completion for resolvconf + +have resolvconf && +_resolvconf() +{ + local cur command + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -@(a|d)) + _available_interfaces + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -d -u' -- "$cur" ) ) + fi +} && +complete -F _resolvconf resolvconf + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/rfkill b/contrib/rfkill new file mode 100644 index 00000000..df3dde69 --- /dev/null +++ b/contrib/rfkill @@ -0,0 +1,38 @@ +# bash completion for rfkill + +have rfkill && +_rfkill() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--version' -- "$cur" ) ) + else + case $COMP_CWORD in + 1) + COMPREPLY=( $( compgen -W "help event list block unblock" \ + -- "$cur" ) ) + ;; + 2) + prev=${COMP_WORDS[COMP_CWORD-1]} + if [ $prev == block -o $prev == unblock ]; then + COMPREPLY=( $( compgen -W "$(rfkill list | awk -F: \ + '/^[0-9]/ {print $1}') all wifi bluetooth uwb wimax \ + wwan gps" -- "$cur" ) ) + fi + ;; + esac + fi +} && +complete -F _rfkill rfkill + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh @@ -1,89 +1,96 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # ri completion for Ruby documentation by Ian Macdonald <ian@caliban.org> +have ri && { ri_get_methods() { - local regex + local regex - if [ "$ri_version" = integrated ]; then - if [ -z "$separator" ]; then - regex="(Instance|Class)" - elif [ "$separator" = "#" ]; then - regex=Instance - else - regex=Class - fi + if [ "$ri_version" = integrated ]; then + if [ -z "$separator" ]; then + regex="(Instance|Class)" + elif [ "$separator" = "#" ]; then + regex=Instance + else + regex=Class + fi - COMPREPLY=( ${COMPREPLY[@]} \ - "$( ri ${classes[@]} 2>/dev/null | \ - ruby -ane 'if /^'"$regex"' methods:/.../^------------------|^$/ and \ - /^ / then print $_.split(/, |,$/).grep(/^[^\[]*$/).join("\n"); \ - end' | sort -u )" ) - else - # older versions of ri didn't distinguish between class/module and - # instance methods - COMPREPLY=( ${COMPREPLY[@]} \ - "$( ruby -W0 $ri_path ${classes[@]} | ruby -ane 'if /^-/.../^-/ and \ - ! /^-/ and ! /^ +(class|module): / then \ - print $_.split(/, |,$| +/).grep(/^[^\[]*$/).join("\n"); \ - end' | sort -u )" ) - fi - COMPREPLY=( $( compgen $prefix -W '${COMPREPLY[@]}' -- $method ) ) + COMPREPLY=( ${COMPREPLY[@]} \ + "$( ri ${classes[@]} 2>/dev/null | ruby -ane \ + 'if /^'"$regex"' methods:/.../^------------------|^$/ and \ + /^ / then print $_.split(/, |,$/).grep(/^[^\[]*$/).join("\n"); \ + end' | sort -u )" ) + else + # older versions of ri didn't distinguish between class/module and + # instance methods + COMPREPLY=( ${COMPREPLY[@]} \ + "$( ruby -W0 $ri_path ${classes[@]} | ruby -ane \ + 'if /^-/.../^-/ and ! /^-/ and ! /^ +(class|module): / then \ + print $_.split(/, |,$| +/).grep(/^[^\[]*$/).join("\n"); \ + end' | sort -u )" ) + fi + COMPREPLY=( $( compgen $prefix -W '${COMPREPLY[@]}' -- $method ) ) } # needs at least Ruby 1.8.0 in order to use -W0 _ri() { - local cur class method prefix ri_path ri_version separator IFS - local -a classes + local cur class method prefix ri_path ri_version separator IFS + local -a classes - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - ri_path=$(type -p ri) - # which version of ri are we using? - # -W0 is required here to stop warnings from older versions of ri - # from being captured when used with Ruby 1.8.1 and later - ri_version="$(ruby -W0 $ri_path -v 2>&1)" || ri_version=integrated - [ "$ri_version" != "${ri_version%200*}" ] && ri_version=integrated + ri_path=$(type -p ri) + # which version of ri are we using? + # -W0 is required here to stop warnings from older versions of ri + # from being captured when used with Ruby 1.8.1 and later + ri_version="$(ruby -W0 $ri_path -v 2>&1)" || ri_version=integrated + [ "$ri_version" != "${ri_version%200*}" ] && ri_version=integrated - # need to also split on commas - IFS=$', \n\t' - if [[ "$cur" == [A-Z]*[#.]* ]]; then - [[ "$cur" == *#* ]] && separator=# || separator=. - # we're completing on class and method - class=${cur%$separator*} - method=${cur#*$separator} - classes=( $class ) - prefix="-P $class$separator" - ri_get_methods - return 0 - fi + # need to also split on commas + IFS=$', \n\t' + if [[ "$cur" == [A-Z]*[#.]* ]]; then + [[ "$cur" == *#* ]] && separator=# || separator=. + # we're completing on class and method + class=${cur%$separator*} + method=${cur#*$separator} + classes=( $class ) + prefix="-P $class$separator" + ri_get_methods + return 0 + fi - if [ "$ri_version" = integrated ]; then - # integrated ri from Ruby 1.9 - classes=( $( ri -c | ruby -ne 'if /^\s*$/..$stdin.eof then \ - if /, [A-Z]+/ then print; end; end' ) ) - elif [ "$ri_version" = "ri 1.8a" ]; then - classes=( $( ruby -W0 $ri_path | \ - ruby -ne 'if /^'"'"'ri'"'"' has/..$stdin.eof then \ - if /^ .*[A-Z]/ then print; end; end' )) - else - classes=( $( ruby -W0 $ri_path | \ - ruby -ne 'if /^I have/..$stdin.eof then \ - if /^ .*[A-Z]/ then print; end; end' )) - fi + if [ "$ri_version" = integrated ]; then + # integrated ri from Ruby 1.9 + classes=( $( ri -c | ruby -ne 'if /^\s*$/..$stdin.eof then \ + if /, [A-Z]+/ then print; end; end' ) ) + elif [ "$ri_version" = "ri 1.8a" ]; then + classes=( $( ruby -W0 $ri_path | \ + ruby -ne 'if /^'"'"'ri'"'"' has/..$stdin.eof then \ + if /^ .*[A-Z]/ then print; end; end' )) + else + classes=( $( ruby -W0 $ri_path | \ + ruby -ne 'if /^I have/..$stdin.eof then \ + if /^ .*[A-Z]/ then print; end; end' )) + fi - COMPREPLY=( $( compgen -W '${classes[@]}' -- $cur ) ) - if [[ "$cur" == [A-Z]* ]]; then - # we're completing on class or module alone - return 0 - fi + COMPREPLY=( $( compgen -W '${classes[@]}' -- "$cur" ) ) + if [[ "$cur" == [A-Z]* ]]; then + # we're completing on class or module alone + return 0 + fi - # we're completing on methods - method=$cur - ri_get_methods -} -complete -F _ri ri + # we're completing on methods + method=$cur + ri_get_methods + } + complete -F _ri ri + } + + # Local variables: + # mode: shell-script + # sh-basic-offset: 4 + # sh-indent-comment: t + # indent-tabs-mode: nil + # End: + # ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/rpcdebug b/contrib/rpcdebug new file mode 100644 index 00000000..196d1872 --- /dev/null +++ b/contrib/rpcdebug @@ -0,0 +1,58 @@ +# bash completion for rpcdebug + +have rpcdebug && { +_rpcdebug_flags() +{ + + local i module + + for (( i=0; i < ${#COMP_WORDS[@]}; i++ )); do + if [[ ${COMP_WORDS[i]} == -m ]]; then + module=${COMP_WORDS[i+1]} + fi + done + + if [ -n "$module" ]; then + COMPREPLY=( $( compgen -W "$(rpcdebug -vh 2>&1 \ + | grep '^'$module' '\ + | awk '{$1 = ""; print $0}')" -- "$cur" ) ) + fi +} + +_rpcdebug() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -s) + _rpcdebug_flags + return 0 + ;; + -c) + _rpcdebug_flags + return 0 + ;; + -m) + COMPREPLY=( $( compgen -W 'rpc nfs nfsd nlm' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-v -h -m -s -c' -- "$cur" ) ) + fi +} +complete -F _rpcdebug rpcdebug +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/rpm b/contrib/rpm new file mode 100644 index 00000000..dbfcc8f9 --- /dev/null +++ b/contrib/rpm @@ -0,0 +1,297 @@ +# bash completion for rpm + +have rpm && { +# helper functions + +_rpm_installed_packages() +{ + local nodig="$1" nosig="$2" + + if [ -r /var/log/rpmpkgs -a \ + /var/log/rpmpkgs -nt /var/lib/rpm/Packages ]; then + # using RHL 7.2 or later - this is quicker than querying the DB + COMPREPLY=( $( sed -ne \ + 's|^\('$cur'[^[:space:]]*\)-[^[:space:]-]\+-[^[:space:]-]\+\.rpm$|\1|p' \ + /var/log/rpmpkgs ) ) + else + _rpm_nodigsig + COMPREPLY=( $( rpm -qa $nodig $nosig --qf='%{NAME} ' "$cur*" ) ) + fi +} + +_rpm_groups() +{ + # TODO: shown completions are wrong but real ones work nevertheless + # http://lists.alioth.debian.org/pipermail/bash-completion-devel/2009-May/001486.html + local IFS=$'\n' + COMPREPLY=( $( compgen -W "$( rpm -qa $nodig $nosig --queryformat \ + '%{group}\n' )" -- "$cur" ) ) +} + +_rpm_nodigsig() +{ + if [ -z "$nodig" -a -z "$nosig" ]; then + local rpmver + + rpmver=$(rpm --version) + rpmver=${rpmver##* } + + if [[ "$rpmver" > "4.0.4" ]]; then + nodig="--nodigest" + fi + if [[ "$rpmver" > "4.0.99" ]]; then + nosig="--nosignature" + fi + fi +} + +# rpm(8) completion +# +_rpm() +{ + local cur prev opts nodig nosig + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + nodig="" + nosig="" + _rpm_nodigsig + + if [ $COMP_CWORD -eq 1 ]; then + # first parameter on line + case "$cur" in + -b*) + COMPREPLY=( $( compgen -W '-ba -bb -bc -bi -bl -bp -bs' \ + -- "$cur" ) ) + ;; + -t*) + COMPREPLY=( $( compgen -W '-ta -tb -tc -ti -tl -tp -ts' \ + -- "$cur" ) ) + ;; + --*) + COMPREPLY=( $( compgen -W '--help --version --initdb \ + --checksig --recompile --rebuild --resign --addsign \ + --rebuilddb --showrc --setperms --setugids --tarbuild \ + --eval --install --upgrade --query --freshen --erase \ + --verify --querytags --rmsource --rmspec --clean \ + --import' -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W '-b -e -E -F -i -q -t -U -V' \ + -- "$cur" ) ) + ;; + esac + + return 0 + fi + + case "$prev" in + --@(@(db|exclude)path|prefix|relocate|root)) + _filedir -d + return 0 + ;; + --eval|-E) + # get a list of macros + COMPREPLY=( $( rpm --showrc | sed -ne \ + 's/^-\?[0-9]\+[:=][[:space:]]\+\('${cur#%}'[^[:space:](]*\).*/\1/p' ) ) + COMPREPLY=( "${COMPREPLY[@]/#/%}" ) + return 0 + ;; + --pipe) + COMPREPLY=( $( compgen -c -- "$cur" ) ) + return 0 + ;; + --rcfile) + _filedir + return 0 + ;; + --specfile) + # complete on .spec files + _filedir spec + return 0 + ;; + --whatprovides) + if [[ "$cur" == */* ]]; then + _filedir + else + # complete on capabilities + local IFS=$'\n' + COMPREPLY=( $( compgen -W "$( rpm -qa $nodig $nosig \ + --queryformat='%{providename}\n' )" -- "$cur" ) ) + fi + return 0 + ;; + --whatrequires) + if [[ "$cur" == */* ]]; then + _filedir + else + # complete on capabilities + local IFS=$'\n' + COMPREPLY=( $( compgen -W "$( rpm -qa $nodig $nosig \ + --queryformat='%{requirename}\n' )" \ + -- "$cur" ) ) + fi + return 0 + ;; + --target) + COMPREPLY=( $( compgen -W "$( command rpm --showrc | sed -ne \ + 's/^\s*compatible\s\+build\s\+archs\s*:\s*\(.*\)/\1/ p' )" \ + -- "$cur" ) ) + return 0 + ;; + --define|-D) + # argument required but no completions available + return 0 + ;; + esac + + # options common to all modes + opts="--define --eval --macros --nodigest --nosignature --rcfile \ + --quiet --pipe --verbose" + + case "${COMP_WORDS[1]}" in + -@([iFU]*|-install|-freshen|-upgrade)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$opts --percent --force \ + --test --replacepkgs --replacefiles --root \ + --excludedocs --includedocs --noscripts --ignorearch \ + --dbpath --prefix --ignoreos --nodeps --allfiles \ + --ftpproxy --ftpport --justdb --httpproxy --httpport \ + --noorder --relocate --badreloc --notriggers \ + --excludepath --ignoresize --oldpackage \ + --queryformat --repackage --nosuggests" -- "$cur" ) ) + else + _filedir 'rpm' + fi + ;; + -@(e|-erase)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$opts --allmatches \ + --noscripts --notriggers --nodeps --test --repackage" \ + -- "$cur" ) ) + else + _rpm_installed_packages "$nodig" "$nosig" + fi + ;; + -@(q*|-query)) + # options common to all query types + opts="$opts --changelog --configfiles --conflicts --docfiles + --dump --enhances --filesbypkg --filecaps --fileclass + --filecolor --fileprovide --filerequire --filesbypkg + --info --list --obsoletes --pipe --provides + --queryformat --rcfile --requires --scripts --suggests + --triggeredby --triggers --whatprovides --whatrequires --xml" + + if [ "${COMP_LINE#* -*([^ -])f}" != "$COMP_LINE" ]; then + # -qf completion + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$opts --dbpath --fscontext \ + --last --root --state" -- "$cur" ) ) + else + _filedir + fi + elif [ "${COMP_LINE#* -*([^ -])g}" != "$COMP_LINE" ]; then + # -qg completion + _rpm_groups + elif [ "${COMP_LINE#* -*([^ -])p}" != "$COMP_LINE" ]; then + # -qp; uninstalled package completion + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$opts --ftpport --ftpproxy \ + --httpport --httpproxy" -- "$cur" ) ) + else + _filedir 'rpm' + fi + else + # -q; installed package completion + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$opts --dbpath --fscontext \ + --last --root --state" -- "$cur" ) ) + elif [ "${COMP_LINE#* -*([^ -])a}" == "$COMP_LINE" ]; then + _rpm_installed_packages "$nodig" "$nosig" + fi + fi + ;; + -@(K*|-checksig)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$opts --nopgp --nogpg --nomd5" \ + -- "$cur" ) ) + else + _filedir 'rpm' + fi + ;; + -@([Vy]*|-verify)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$opts --root --dbpath --nodeps \ + --nogroup --nolinkto --nomode --nomtime --nordev --nouser \ + --nofiles --noscripts --nomd5 --querytags --specfile \ + --whatrequires --whatprovides" -- "$cur" ) ) + # check whether we're doing file completion + elif [ "${COMP_LINE#* -*([^ -])f}" != "$COMP_LINE" ]; then + _filedir + elif [ "${COMP_LINE#* -*([^ -])g}" != "$COMP_LINE" ]; then + _rpm_groups + elif [ "${COMP_LINE#* -*([^ -])p}" != "$COMP_LINE" ]; then + _filedir 'rpm' + else + _rpm_installed_packages "$nodig" "$nosig" + fi + ;; + -[bt]*) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$opts --short-circuit --timecheck \ + --clean --rmsource --rmspec --test --sign --buildroot \ + --target --nobuild --nodeps --nodirtokens" -- "$cur" ) ) + elif [[ ${COMP_WORDS[1]} == -b* ]]; then + _filedir 'spec' + else + _filedir '@(t?(ar.)@([gx]z|bz?(2))|tar.@(lzma|Z))' + fi + ;; + --re@(build|compile)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$opts --nodeps --rmsource \ + --rmspec --sign --nodirtokens --target" -- "$cur" ) ) + else + _filedir '?(no)src.rpm' + fi + ;; + --tarbuild) + _filedir '@(t?(ar.)@([gx]z|bz?(2))|tar.@(lzma|Z))' + ;; + --@(re|add)sign) + _filedir 'rpm' + ;; + --set@(perms|gids)) + _rpm_installed_packages "$nodig" "$nosig" + ;; + --@(clean|rms@(ource|pec))) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--clean --rmsource --rmspec' \ + -- "$cur" ) ) + else + _filedir 'spec' + fi + ;; + --@(import|dbpath|root)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--import --dbpath --root' \ + -- "$cur" ) ) + else + _filedir + fi + ;; + esac + + return 0 +} +complete -F _rpm $filenames rpm rpmbuild +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/rpmcheck b/contrib/rpmcheck new file mode 100644 index 00000000..49240fd1 --- /dev/null +++ b/contrib/rpmcheck @@ -0,0 +1,34 @@ +# bash completion for rpmcheck + +have rpmcheck && +_rpmcheck() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -base) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-explain -failures -successes \ + -dump -dump-all -base -help -compressed-input' -- "$cur" ) ) + else + _filedir + fi +} && +complete -F _rpmcheck rpmcheck $files + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/rrdtool b/contrib/rrdtool new file mode 100644 index 00000000..891df683 --- /dev/null +++ b/contrib/rrdtool @@ -0,0 +1,18 @@ +# bash completion for rrdtool + +have rrdtool && +_rrdtool () +{ + cur=`_get_cword` + COMPREPLY=( $( compgen -W 'create update updatev graph dump restore last \ + lastupdate first info fetch tune resize xport' -- "$cur" ) ) +} && +complete -F _rrdtool rrdtool + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/rsync b/contrib/rsync new file mode 100644 index 00000000..c8dc6cf2 --- /dev/null +++ b/contrib/rsync @@ -0,0 +1,101 @@ +# bash completion for rsync + +have rsync && +_rsync() +{ + # TODO: _split_longopt + + local cur prev shell i userhost path + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _expand || return 0 + + case "$prev" in + --@(config|password-file|include-from|exclude-from)) + _filedir + return 0 + ;; + -@(T|-temp-dir|-compare-dest)) + _filedir -d + return 0 + ;; + -@(e|-rsh)) + COMPREPLY=( $( compgen -W 'rsh ssh' -- "$cur" ) ) + return 0 + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W '-v -q -c -a -r -R -b -u -l -L -H \ + -p -o -g -D -t -S -n -W -x -B -e -C -I -T -P \ + -z -h -4 -6 --verbose --quiet --checksum \ + --archive --recursive --relative --backup \ + --backup-dir --suffix= --update --links \ + --copy-links --copy-unsafe-links --safe-links \ + --hard-links --perms --owner --group --devices\ + --times --sparse --dry-run --whole-file \ + --no-whole-file --one-file-system \ + --block-size= --rsh= --rsync-path= \ + --cvs-exclude --existing --ignore-existing \ + --delete --delete-excluded --delete-after \ + --ignore-errors --max-delete= --partial \ + --force --numeric-ids --timeout= \ + --ignore-times --size-only --modify-window= \ + --temp-dir= --compare-dest= --compress \ + --exclude= --exclude-from= --include= \ + --include-from= --version --daemon --no-detach\ + --address= --config= --port= --blocking-io \ + --no-blocking-io --stats --progress \ + --log-format= --password-file= --bwlimit= \ + --write-batch= --read-batch= --help' -- "$cur" )) + ;; + *:*) + # find which remote shell is used + shell=ssh + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == -@(e|-rsh) ]]; then + shell=${COMP_WORDS[i+1]} + break + fi + done + if [[ "$shell" == ssh ]]; then + # remove backslash escape from : + cur=${cur/\\:/:} + userhost=${cur%%?(\\):*} + path=${cur#*:} + # unescape spaces + path=${path//\\\\\\\\ / } + if [ -z "$path" ]; then + # default to home dir of specified + # user on remote host + path=$(ssh -o 'Batchmode yes' $userhost pwd 2>/dev/null) + fi + # escape spaces; remove executables, aliases, pipes + # and sockets; add space at end of file names + COMPREPLY=( $( ssh -o 'Batchmode yes' $userhost \ + command ls -aF1d "$path*" 2>/dev/null | \ + sed -e 's/ /\\\\\\\ /g' -e 's/[*@|=]$//g' \ + -e 's/[^\/]$/& /g' ) ) + fi + ;; + *) + _known_hosts_real -c -a "$cur" + _filedir + ;; + esac + + return 0 +} && +complete -F _rsync $nospace $filenames rsync + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/samba b/contrib/samba new file mode 100644 index 00000000..7256906e --- /dev/null +++ b/contrib/samba @@ -0,0 +1,305 @@ +# bash completion for samba + +have smbclient && { +_samba_resolve_order() +{ + COMPREPLY=( $( compgen -W 'lmhosts host wins bcast' -- "$cur" ) ) +} + +_samba_domains() +{ + if [ -n "${COMP_SAMBA_SCAN:-}" ]; then + COMPREPLY=( $( compgen -W '$( smbtree -N -D )' -- "$cur" ) ) + fi +} + +_samba_hosts() +{ + if [ -n "${COMP_SAMBA_SCAN:-}" ]; then + COMPREPLY=( $( compgen -W "$( smbtree -N -S | \ + sed -ne 's/^[[:space:]]*\\\\*\([^[:space:]]*\).*/\1/p' \ + )" -- $cur ) ) + fi +} + +_samba_debuglevel() +{ + COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9 10' -- "$cur" ) ) +} + +_smbclient() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -R) + _samba_resolve_order + return 0; + ;; + -t) + COMPREPLY=( $( compgen -W 'SJIS EUC JIS7 JIS8 JUNET HEX CAP' \ + -- "$cur" ) ) + return 0; + ;; + -s|-A|--authentication-file) + _filedir + return 0; + ;; + -l|--log-basename|-D) + _filedir -d + return 0; + ;; + -O) + COMPREPLY=( $( compgen -W 'SO_KEEPALIVE SO_REUSEADDR \ + SO_BROADCAST TCP_NODELAY IPTOS_LOWDELAY \ + IPTOS_THROUGHPUT SO_SNDBUF SO_RCVBUF \ + SO_SNDLOWAT SO_RCVLOWAT' -- "$cur" ) ) + return 0; + ;; + -T) + COMPREPLY=( $( compgen -W 'c x I X F b g q r N a' -- "$cur" ) ) + return 0; + ;; + -W|--workgroup) + _samba_domains + return 0; + ;; + -d|--debuglevel) + _samba_debuglevel + return 0 + ;; + -p|--port|-M|-I|-b|-U|--user|-n|-i|-T|-c) + # argument required but no completions available + return 0 + ;; + -\?|--help|-V|--version) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-b -d -L -U -I -M -m -A -N -i -O \ + -p -R -s -k -P -c -D -W -l -E --debuglevel \ + --log-basename --workgroup' -- "$cur" ) ) + fi +} +complete -F _smbclient smbclient + +_smbget() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -@(o|f|-outputfile|-rcfile)) + _filedir + return 0; + ;; + -d|--debuglevel) + _samba_debuglevel + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --guest -r --resume -R --recursive -u \ + --username -p --password -w --workgroup -n --nonprompt -d \ + --debuglevel -D --dots -P --keep-permissions -o --outputfile -f \ + --rcfile -q --quiet -v --verbose -b --blocksize -? --help --usage' \ + -- "$cur" ) ) + fi +} +complete -F _smbget smbget + +_smbcacls() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -s) + _filedir + return 0; + ;; + -l|--log-basename) + _filedir -d + return 0; + ;; + -d|--debuglevel) + _samba_debuglevel + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -M -D -S -U -C -G --numeric -t \ + -h --help -V -s -d --debuglevel -l --log-basename' -- "$cur" ) ) + fi +} +complete -F _smbcacls smbcacls + +_smbcquotas() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -s|-A|--authentication-file) + _filedir + return 0; + ;; + -l|--log-basename) + _filedir -d + return 0; + ;; + -d|--debuglevel) + _samba_debuglevel + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-u -L -F -S -n -t -v -h --help -V \ + -s -d --debuglevel -l --log-basename -N -k -A \ + --authentication-file -U --user' -- "$cur" ) ) + fi +} +complete -F _smbcquotas smbcquotas + +_smbpasswd() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -r) + _samba_hosts + return 0; + ;; + -R) + _samba_resolve_order + return 0; + ;; + -c) + _filedir + return 0; + ;; + -D) + _samba_debuglevel + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -c -x -d -e -D -n -r -R -m -U -h \ + -s -w -W -i -L' -- "$cur" ) ) + fi +} +complete -F _smbpasswd smbpasswd + +_smbtar() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -@(r|t)) + _filedir tar + return 0; + ;; + -s) + _samba_hosts + return 0; + ;; + -l) + _samba_debuglevel + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-r -i -a -v -s -p -x -X -N -b -d -l -u -t' \ + -- "$cur" ) ) + fi +} +complete -F _smbtar smbtar + +_smbtree() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case $prev in + -s|-A|--authentication-file) + _filedir + return 0; + ;; + -l|--log-basename) + _filedir -d + return 0; + ;; + -d|--debuglevel) + _samba_debuglevel + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-b -D -S -V -s -d --debuglevel -l \ + --log-basename -N -k -A --authentication-file -U --user\ + -h --help' -- "$cur" ) ) + fi +} +complete -F _smbtree smbtree +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/sbcl b/contrib/sbcl index 1b14eea3..7a12f89d 100644 --- a/contrib/sbcl +++ b/contrib/sbcl @@ -1,9 +1,7 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash programmable completion for various Common Lisp implementations by # Nikodemus Siivola <nikodemus@random-state.net> +have sbcl || have sbcl-mt && _sbcl() { local cur @@ -13,13 +11,21 @@ _sbcl() # completing an option (may or may not be separated by a space) if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--core --noinform --help --version \ - --sysinit --userinit --eval --noprint --disable-debugger \ - --end-runtime-options --end-toplevel-options ' -- $cur ) ) + COMPREPLY=( $( compgen -W '--core --noinform --help --version \ + --sysinit --userinit --eval --noprint --disable-debugger \ + --end-runtime-options --end-toplevel-options ' -- "$cur" ) ) else - _filedir + _filedir fi return 0 -} -complete -F _sbcl $default sbcl sbcl-mt +} && +complete -F _sbcl $filenames sbcl sbcl-mt + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/screen b/contrib/screen new file mode 100644 index 00000000..cd6baea2 --- /dev/null +++ b/contrib/screen @@ -0,0 +1,69 @@ +# bash completion for screen + +have screen && +_screen_sessions() +{ + local pattern + + if [ -n "$1" ]; then + pattern=".*$1.*" + else + pattern=".*" + fi + + COMPREPLY=( $( command screen -ls | sed -ne \ + 's|^['$'\t'']\+\('"$cur"'[0-9]\+\.[^'$'\t'']\+\)'"$pattern"'$|\1|p' ) ) +} && +_screen() +{ + local cur prev preprev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + [ "$COMP_CWORD" -ge 2 ] && preprev=${COMP_WORDS[COMP_CWORD-2]} + + case "$preprev" in + -[dD]) + _screen_sessions + return 0 + ;; + esac + + case "$prev" in + -[rR]) + # list detached + _screen_sessions 'Detached' + return 0 + ;; + -[dDx]) + # list attached + _screen_sessions 'Attached' + return 0 + ;; + -s) + # shells + COMPREPLY=( $( grep ^${cur:-[^#]} /etc/shells ) ) + ;; + -c) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -A -c -d -D -e -f -fn -fa -h -i \ + -l -ln -ls -list -L -m -O -p -q -r -R -s -S -t -U -v \ + -wipe -x -X' -- "$cur" ) ) + fi +} && +complete -F _screen $default screen + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/shadow b/contrib/shadow new file mode 100644 index 00000000..c72718d0 --- /dev/null +++ b/contrib/shadow @@ -0,0 +1,501 @@ +# bash completion for shadow utils + +have useradd && +_useradd() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + # TODO: if -o/--non-unique is given, could complete on existing uids + # with -u/--uid + + case "$prev" in + -c|--comment|-h|--help|-e|--expiredate|-f|--inactive|-k|--key|-p|--password|-u|--uid|-Z|--selinux-user) + return 0 + ;; + -b|--base-dir|-d|--home|-k|--skel) + _filedir -d + return 0 + ;; + -g|--gid) + _gids + [ -n "$bash205" ] && \ + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -g ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- "$cur" ) ) + return 0 + ;; + -G|--groups) + [ -n "$bash205" ] && \ + COMPREPLY=( $( compgen -g -- "$cur" ) ) + return 0 + ;; + -s|--shell) + _shells + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-b --base-dir -c --comment -d --home\ + -D --defaults -e --expiredate -f --inactive -g --gid \ + -G --groups -h --help -k --skel -K --key -l -M \ + -m --create-home -N --no-user-group -o --non-unique \ + -p --password -r --system -s --shell -u --uid \ + -U --user-group -Z --selinux-user' -- "$cur" ) ) + return 0 + fi +} && +complete -F _useradd useradd + +have usermod && +_usermod() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + # TODO: if -o/--non-unique is given, could complete on existing uids + # with -u/--uid + + case "$prev" in + -c|--comment|-d|--home|-e|--expiredate|-f|--inactive|-h|--help|-l|--login|-p|--password|-u|--uid|-Z|--selinux-user) + return 0 + ;; + -g|--gid) + _gids + [ -n "$bash205" ] && \ + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -g ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- "$cur" ) ) + return 0 + ;; + -G|--groups) + [ -n "$bash205" ] && \ + COMPREPLY=( $( compgen -g -- "$cur" ) ) + return 0 + ;; + -s|--shell) + _shells + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + # TODO: -U/--unlock, -p/--password, -L/--lock mutually exclusive + COMPREPLY=( $( compgen -W '-a --append -c --comment -d --home \ + -e --expiredate -f --inactive -g --gid -G --groups \ + -h --help -l --login -L --lock -o --non-unique \ + -p --password -s --shell -u --uid -U --unlock \ + -Z --selinux-user' -- "$cur" ) ) + return 0 + fi + + COMPREPLY=( $( compgen -u -- "$cur" ) ) +} && +complete -F _usermod usermod + +have userdel && +_userdel() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-f --force -h --help -r --remove' \ + -- "$cur" ) ) + return 0 + fi + + COMPREPLY=( $( compgen -u -- "$cur" ) ) +} && +complete -F _userdel userdel + +have chage && +_chage() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -d|--lastday|-E|--expiredate|-h|--help|-I|--inactive|-m|--mindays|-M|--maxdays|-W|--warndays) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-d --lastday -E --expiredate \ + -h --help -I --inactive -l --list -m --mindays \ + -M --maxdays -W --warndays' -- "$cur" ) ) + return 0 + fi + + COMPREPLY=( $( compgen -u -- "$cur" ) ) +} && +complete -F _chage chage + +have passwd && +_passwd() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -n|-x|-w|-i|-\?|--help|--usage) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-k -l --stdin -u -d -n -x -w -i -S \ + -? --help --usage' -- "$cur" ) ) + return 0 + fi + + COMPREPLY=( $( compgen -u -- "$cur" ) ) +} && +complete -F _passwd passwd + +have chpasswd && +_chpasswd() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -c|--crypt) + COMPREPLY=( $( compgen -W 'DES MD5 NONE SHA256 SHA512' \ + -- "$cur" ) ) + return 0 + ;; + -s|--sha-rounds) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c --crypt-method -e --encrypted \ + -h --help -m --md5 -s --sha-rounds' -- "$cur" ) ) + return 0 + fi +} && +complete -F _chpasswd chpasswd + +have newusers && +_newusers() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -c|--crypt) + COMPREPLY=( $( compgen -W 'DES MD5 NONE SHA256 SHA512' \ + -- "$cur" ) ) + return 0 + ;; + -s|--sha-rounds) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c --crypt-method --r --system \ + -s --sha-rounds' -- "$cur" ) ) + return 0 + fi + + _filedir +} && +complete -F _newusers $filenames newusers + +have pwck && +_pwck() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-q -r -s' -- "$cur" ) ) + return 0 + fi + + _filedir +} && +complete -F _pwck $filenames pwck + +have groupadd && +_groupadd() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + # TODO: if -o/--non-unique is given, could complete on existing gids + # with -g/--gid + + case "$prev" in + -g|--gid|-K|--key|-p|--password) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-f --force -g --gid -h --help \ + -K --key -o --non-unique -p --password -r --system' \ + -- "$cur" ) ) + return 0 + fi +} && +complete -F _groupadd groupadd + +have groupmod && +_groupmod() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + # TODO: if -o/--non-unique is given, could complete on existing gids + # with -g/--gid + + case "$prev" in + -g|--gid|-h|--help|-n|--new-name|-p|--password) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-g --gid -h --help -n --new-name \ + -o --non-unique -p --password' -- "$cur" ) ) + return 0 + fi + + [ -n "$bash205" ] && COMPREPLY=( $( compgen -g -- "$cur" ) ) +} && +complete -F _groupmod groupmod + +[ -n "$bash205" ] && complete -g groupdel + +have newgrp && +_newgrp() +{ + COMPREPLY=() + if [[ "`_get_cword`" == "-" ]]; then + COMPREPLY=( - ) + fi +} && +complete ${bash205:+-g} -F _newgrp newgrp + +have gpasswd && +_gpasswd() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -a|-d|-A|-M) + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -d -r -R -A -M' -- "$cur" ) ) + return 0 + fi + + [ -n "$bash205" ] && COMPREPLY=( $( compgen -g -- "$cur" ) ) +} && +complete -F _gpasswd gpasswd + +have groupmems && +_groupmems() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -a|-d) + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + -g) + [ -n "$bash205" ] && \ + COMPREPLY=( $( compgen -g -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -d -p -g -l' -- "$cur" ) ) + return 0 + fi +} && +complete -F _groupmems groupmems + +have grpck && +_grpck() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-r -s' -- "$cur" ) ) + return 0 + fi + + _filedir +} && +complete -F _grpck $filenames grpck + +have vipw || have vigr && +_vipw() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -h|--help) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-g --group -h --help -p --passwd \ + -q --quiet -s --shadow' -- "$cur" ) ) + return 0 + fi +} && +complete -F _vipw vipw vigr + +have faillog && +_faillog() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -h|--help|-l|--lock-time|-m|--maximum|-t|--time) + return 0 + ;; + -u|--user) + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a --all -h --help -l --lock-time \ + -m --maximum -r --reset -t --time -u --user' -- "$cur" ) ) + return 0 + fi +} && +complete -F _faillog faillog + +have lastlog && +_lastlog() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -b|--before|-h|--help|-t|--time) + return 0 + ;; + -u|--user) + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-b --before -h --help -t --time \ + -u --user' -- "$cur" ) ) + return 0 + fi +} && +complete -F _lastlog lastlog + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/sitecopy b/contrib/sitecopy index 088951cd..abf3d928 100644 --- a/contrib/sitecopy +++ b/contrib/sitecopy @@ -1,31 +1,40 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # sitecopy(1) completion # Copyright 2003 Eelco Lempsink <eelcolempsink@gmx.net> # License: GNU GPL v2 or later +have sitecopy && _sitecopy() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - case "$cur" in - --*) - COMPREPLY=( $( compgen -W "$(sitecopy -h | grep -e '--\w' | awk '{sub (/=(FILE|PATH)/, "", $2); print $2}')" -- $cur ) ) - ;; - -*) - COMPREPLY=( $( compgen -W "$(sitecopy -h | grep -e '-\w' | awk '{sub (",", "", $1); print $1}')" -- $cur ) ) - ;; - *) - if [ -r ~/.sitecopyrc ]; then - COMPREPLY=( $( compgen -W "$(grep '^["$'\t '"]*site' ~/.sitecopyrc | awk '{print $2}')" -- $cur ) ) - fi - ;; - esac + case "$cur" in + --*) + COMPREPLY=( $( compgen -W "$(sitecopy -h | grep -e '--\w' | \ + awk '{sub (/=(FILE|PATH)/, "", $2); print $2}')" -- "$cur" ) ) + ;; + -*) + COMPREPLY=( $( compgen -W "$(sitecopy -h | grep -e '-\w' | \ + awk '{sub (",", "", $1); print $1}')" -- "$cur" ) ) + ;; + *) + if [ -r ~/.sitecopyrc ]; then + COMPREPLY=( $( compgen -W "$(grep '^["$'\t '"]*site' \ + ~/.sitecopyrc | awk '{print $2}')" -- "$cur" ) ) + fi + ;; + esac - return 0 -} + return 0 +} && complete -F _sitecopy $default sitecopy + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/smartctl b/contrib/smartctl new file mode 100644 index 00000000..5108269f --- /dev/null +++ b/contrib/smartctl @@ -0,0 +1,149 @@ +# bash completion for smartctl(8) + +have smartctl && { +_smartctl_quietmode() +{ + COMPREPLY=( $( compgen -W 'errorsonly silent noserial' -- "$cur" ) ) +} +_smartctl_device() +{ + local i opts='ata scsi sat marvell hpt cciss' + for (( i=0; i <= 31; i++ )) ; do + opts="$opts 3ware,$i" + done + COMPREPLY=( $( compgen -W "$opts" -- "$cur" ) ) +} +_smartctl_tolerance() +{ + COMPREPLY=( $( compgen -W 'normal conservative permissive \ + verypermissive' -- "$cur" ) ) +} +_smartctl_badsum() +{ + COMPREPLY=( $( compgen -W 'warn exit ignore' -- "$cur" ) ) +} +_smartctl_report() +{ + COMPREPLY=( $( compgen -W 'ioctl ataioctl scsiioctl' -- "$cur" ) ) +} +_smartctl_powermode() +{ + COMPREPLY=( $( compgen -W 'never sleep standby idle' -- "$cur" ) ) +} +_smartctl_feature() +{ + COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) +} +_smartctl_log() +{ + COMPREPLY=( $( compgen -W 'error selftest selective directory' -- "$cur" ) ) +} +_smartctl_vendorattribute() +{ + COMPREPLY=( $( compgen -W 'help 9,minutes 9,seconds 9,halfminutes \ + 9,temp 192,emergencyretractcyclect 193,loadunload \ + 194,10xCelsius 194,unknown 198,offlinescanuncsectorct \ + 200,writeerrorcount 201,detectedtacount 220,temp' -- "$cur" ) ) +} +_smartctl_firmwarebug() +{ + COMPREPLY=( $( compgen -W 'none samsung samsung2 samsung3 swapid' \ + -- "$cur" ) ) +} +_smartctl_presets() +{ + COMPREPLY=( $( compgen -W 'use ignore show showall' -- "$cur" ) ) +} +_smartctl_test() +{ + COMPREPLY=( $( compgen -W 'offline short long conveyance select \ + afterselect,on afterselect,off pending scttempint' -- "$cur" ) ) +} + + +_smartctl() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -q|--quietmode) + _smartctl_quietmode + ;; + -d|--device) + _smartctl_device + return 0 + ;; + -t|--tolerance) + _smartctl_tolerance + return 0 + ;; + -b|--badsum) + _smartctl_badsum + return 0 + ;; + -r|--report) + _smartctl_report + return 0 + ;; + -n|--nocheck) + _smartctl_powermode + return 0 + ;; + -s|--smart|-o|--offlineauto|-S|--saveauto) + _smartctl_feature + return 0 + ;; + -l|--log) + _smartctl_log + return 0 + ;; + -v|--vendorattribute) + _smartctl_vendorattribute + return 0 + ;; + -F|--firmwarebug) + _smartctl_firmwarebug + return 0 + ;; + -P|--presets) + _smartctl_presets + return 0 + ;; + -t|--test) + _smartctl_test + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h --help --usage -V --version \ + --copyright --license-i --info -a --all -q \ + --quietmode -d --device -T --tolerance -b --badsum \ + -r --report -n --nocheck -s --smart -o --offlineauto \ + -S --saveauto -H --health -c --capabilities -A \ + --attributes -l --log -v --vendorattribute -F \ + --firmwarebug -P --presets -t --test -C \ + --captive -X --abort' -- "$cur" ) ) + else + cur=${cur:=/dev/} + _filedir + fi +} +complete -F _smartctl smartctl +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/snownews b/contrib/snownews index 89007678..8d89b78c 100644 --- a/contrib/snownews +++ b/contrib/snownews @@ -1,19 +1,25 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # snownews completion by Guillaume Rousse <rousse@ccr.jussieu.fr> +have snownews && _snownews() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - if [[ "$cur" == -* ]]; then - # return list of available options - COMPREPLY=( $( compgen -W '--update --help --version \ - --disable-versioncheck -u -h -V' -- $cur)) - fi -} + if [[ "$cur" == -* ]]; then + # return list of available options + COMPREPLY=( $( compgen -W '--update --help --version \ + --disable-versioncheck -u -h -V' -- "$cur")) + fi +} && complete -F _snownews snownews + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/ssh b/contrib/ssh index 85325aa2..0215ffd7 100644 --- a/contrib/ssh +++ b/contrib/ssh @@ -1,13 +1,32 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # ssh(1) completion -# + have ssh && { + +_ssh_options() { + COMPREPLY=( $( compgen -W 'AddressFamily BatchMode BindAddress \ + ChallengeResponseAuthentication CheckHostIP Cipher Ciphers \ + ClearAllForwardings Compression CompressionLevel \ + ConnectionAttempts ConnectTimeout ControlMaster ControlPath \ + DynamicForward EscapeChar ExitOnForwardFailure ForwardAgent \ + ForwardX11 ForwardX11Trusted GatewayPorts GlobalKnownHostsFile \ + GSSAPIAuthentication GSSAPIDelegateCredentials HashKnownHosts \ + Host HostbasedAuthentication HostKeyAlgorithms HostKeyAlias \ + HostName IdentityFile IdentitiesOnly KbdInteractiveDevices \ + LocalCommand LocalForward LogLevel MACs \ + NoHostAuthenticationForLocalhost NumberOfPasswordPrompts \ + PasswordAuthentication PermitLocalCommand Port \ + PreferredAuthentications Protocol ProxyCommand \ + PubkeyAuthentication RekeyLimit RemoteForward \ + RhostsRSAAuthentication RSAAuthentication SendEnv \ + ServerAliveInterval ServerAliveCountMax SmartcardDevice \ + StrictHostKeyChecking TCPKeepAlive Tunnel TunnelDevice \ + UsePrivilegedPort User UserKnownHostsFile VerifyHostKeyDNS \ + VisualHostKey XAuthLocation' -- "$cur" ) ) +} + _ssh() { - local cur prev - local optconfigfile + local cur prev configfile local -a config COMPREPLY=() @@ -15,51 +34,136 @@ _ssh() prev=${COMP_WORDS[COMP_CWORD-1]} case "$prev" in - -F) + -@(F|i|S)) + _filedir + return 0 + ;; + -c) + COMPREPLY=( $( compgen -W '3des-cbc aes128-cbc \ + aes192-cbc aes256-cbc aes128-ctr aes192-ctr \ + aes256-ctr arcfour128 arcfour256 arcfour \ + blowfish-cbc cast128-cbc' -- "$cur" ) ) + return 0 + ;; + -c) + COMPREPLY=( $( compgen -W 'hmac-md5 hmac-sha1 \ + umac-64@openssh.com hmac-ripemd160 \ + hmac-sha1-96 hmac-md5-96' -- "$cur" ) ) + return 0 + ;; + -l) + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + -o) + _ssh_options + return 0 + ;; + -w) + _available_interfaces + return 0 + ;; + -b) + COMPREPLY=( $( compgen -W "$(/sbin/ifconfig | \ + awk '/adr:/ {print $2}' | \ + awk -F: '{print $2}' )" -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -F* ]]; then + cur=${cur#-F} _filedir - ;; - -*c) - COMPREPLY=( $( compgen -W 'blowfish 3des 3des-cbc blowfish-cbc \ - arcfour cast128-cbc' -- $cur ) ) - ;; - -*i) - _filedir - ;; - -*l) - COMPREPLY=( $( compgen -u -- $cur ) ) - ;; - *) - # Search COMP_WORDS for '-F configfile' argument + # Prefix completions with '-F' + COMPREPLY=( "${COMPREPLY[@]/#/-F}" ) + cur=-F$cur # Restore cur + elif [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-1 -2 -4 -6 -A -a -C -f -g -K -k -M \ + -N -n -q -s -T -t -V -v -X -v -Y -y -b -b -c -D -e -F \ + -i -L -l -m -O -o -p -R -S -w' -- "$cur" ) ) + else + # Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument set -- "${COMP_WORDS[@]}" while [ $# -gt 0 ]; do if [ "${1:0:2}" = -F ]; then if [ ${#1} -gt 2 ]; then - optconfigfile="$(dequote "$1")" + configfile="$(dequote "${1:2}")" else shift - [ "$1" ] && optconfigfile="$(dequote "-F$1")" + [ "$1" ] && configfile="$(dequote "$1")" fi break fi shift done + _known_hosts_real -a -F "$configfile" "$cur" + if [ $COMP_CWORD -ne 1 ]; then + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -c -- "$cur" ) ) + fi + fi - _known_hosts -a "$optconfigfile" + return 0 +} +shopt -u hostcomplete && complete -F _ssh ssh slogin autossh - [ $COMP_CWORD -eq 1 -o -n "$optconfigfile" ] || \ - COMPREPLY=( "${COMPREPLY[@]}" $( compgen -c -- $cur ) ) +# sftp(1) completion +# +_sftp() +{ + local cur prev configfile + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(b|F|P)) + _filedir + return 0 + ;; + -o) + _ssh_options + return 0 + ;; esac + if [[ "$cur" == -F* ]]; then + cur=${cur#-F} + _filedir + # Prefix completions with '-F' + COMPREPLY=( "${COMPREPLY[@]/#/-F}" ) + cur=-F$cur # Restore cur + elif [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-1 -C -v -B -b -F -o -P -R -S -s' \ + -- "$cur" ) ) + else + # Search COMP_WORDS for '-F configfile' argument + set -- "${COMP_WORDS[@]}" + while [ $# -gt 0 ]; do + if [ "${1:0:2}" = -F ]; then + if [ ${#1} -gt 2 ]; then + configfile="$(dequote "${1:2}")" + else + shift + [ "$1" ] && configfile="$(dequote "$1")" + fi + break + fi + shift + done + _known_hosts_real -a -F "$configfile" "$cur" + fi + return 0 } -shopt -u hostcomplete && complete -F _ssh ssh slogin sftp xhost autossh +shopt -u hostcomplete && complete -F _sftp sftp + # scp(1) completion # _scp() { - local cur userhost path - local optconfigfile + local configfile cur userhost path prefix COMPREPLY=() cur=`_get_cword ":"` @@ -81,40 +185,43 @@ _scp() # escape spaces; remove executables, aliases, pipes and sockets; # add space at end of file names COMPREPLY=( $( ssh -o 'Batchmode yes' $userhost \ - command ls -aF1d "$path*" 2>/dev/null | \ - sed -e "s/[][(){}<>\",:;^&\!$=?\`|\\ ']/\\\\\\\\\\\\&/g" \ - -e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' ) ) + command ls -aF1d "$path*" 2>/dev/null | \ + sed -e "s/[][(){}<>\",:;^&\!$=?\`|\\ ']/\\\\\\\\\\\\&/g" \ + -e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' ) ) return 0 fi - # Search COMP_WORDS for '-F configfile' argument - set -- "${COMP_WORDS[@]}" - while [ $# -gt 0 ]; do - if [ "${1:0:2}" = -F ]; then - if [ ${#1} -gt 2 ]; then - optconfigfile="$(dequote "$1")" - else - shift - [ "$1" ] && optconfigfile="$(dequote "-F$1")" + if [[ "$cur" = -F* ]]; then + cur=${cur#-F} + prefix=-F + else + # Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument + set -- "${COMP_WORDS[@]}" + while [ $# -gt 0 ]; do + if [ "${1:0:2}" = -F ]; then + if [ ${#1} -gt 2 ]; then + configfile="$(dequote "${1:2}")" + else + shift + [ "$1" ] && configfile="$(dequote "$1")" + fi + break fi - break - fi - shift - done - - [[ "$cur" == */* ]] || _known_hosts -c -a "$optconfigfile" + shift + done + [[ "$cur" == */* ]] || _known_hosts_real -c -a -F "$configfile" "$cur" + fi # This approach is used instead of _filedir to get a space appended # after local file/dir completions, and $nospace retained for others. local IFS=$'\t\n' - COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* \ - 2>/dev/null | sed \ - -e "s/[][(){}<>\",:;^&\!$=?\`|\\ ']/\\\\&/g" \ - -e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' ) ) + COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* 2>/dev/null | sed \ + -e "s/[][(){}<>\",:;^&\!$=?\`|\\ ']/\\\\&/g" \ + -e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' -e "s/^/$prefix/") ) return 0 } -complete -F _scp $nospace scp +complete -F _scp $nospace scp sshfs # ssh-copy-id(1) completion # @@ -126,17 +233,27 @@ _ssh_copy_id() { prev=${COMP_WORDS[COMP_CWORD-1]} case "$prev" in - -*i) - _filedir - ;; - *) - _known_hosts -a - - [ $COMP_CWORD -eq 1 ] || \ - COMPREPLY=( "${COMPREPLY[@]}" $( compgen -- $cur ) ) + -i) + _filedir + return 0 + ;; esac + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-i' -- "$cur" ) ) + else + _known_hosts_real -a "$cur" + fi + return 0 } complete -F _ssh_copy_id $filenames ssh-copy-id } + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/strace b/contrib/strace new file mode 100644 index 00000000..7925890a --- /dev/null +++ b/contrib/strace @@ -0,0 +1,103 @@ +# bash completion for strace + +have strace && +_strace() +{ + local cur prev offset i syscalls arch unistd + + # check if we're still completing strace + offset=0 + for (( i=1; i <= COMP_CWORD; i++ )); do + case ${COMP_WORDS[$i]} in + -@(o|e|p)) + i=$((i+1)) + continue + ;; + -*) + continue + ;; + esac + offset=$i + break + done + + if [ $offset -gt 0 ]; then + # FAIL: _command_offset is not defined anywhere. Guillame? + _command_offset $offset + else + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + -e) + if [[ "$cur" == *=* ]]; then + prev=${cur/=*/} + cur=${cur/*=/} + + # Import arch-specific syscalls -- not foolproof IMHO + #+ --David Paleino + arch=$(command uname -m) + syscalls=$(awk '/^#define __NR/ {print $2}' \ + /usr/include/asm/unistd.h | sed -e \ + 's/__NR_//') + if [ -z "$syscalls" ]; then + if [[ "$arch" =~ 86$ ]]; then + unistd=/usr/include/asm/unistd_32.h + else + unistd=/usr/include/asm/unistd_64.h + fi + syscalls=$(awk '/^#define __NR/ {print $2}' \ + $unistd | sed -e 's/__NR_//') + fi + + case $prev in + trace) + COMPREPLY=( $( compgen -W "$syscalls file process \ + network signal ipc desc all none" -- "$cur") ) + return 0 + ;; + esac + else + COMPREPLY=( $( compgen -S"=" -W 'trace abbrev \ + verbose raw signal read write' -- "$cur" ) ) + fi + return 0 + ;; + -o) + _filedir + return 0 + ;; + -p) + _pids + return 0 + ;; + -S) + COMPREPLY=( $( compgen -W 'time calls name nothing' -- "$cur" ) ) + return 0 + ;; + -u) + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c -d -f -ff -F -h --help -i -q \ + -r -t -tt -ttt -T -v -V -x -xx -a -e -o -O -p \ + -s -S -u -E' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -c -- "$cur" ) ) + fi + fi +} && +complete -F _strace $default strace + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/svk b/contrib/svk index e2d0fac7..1b6f70fd 100644 --- a/contrib/svk +++ b/contrib/svk @@ -1,263 +1,227 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # svk completion by Guillaume Rousse <guillomovitch@zarb.org> +have svk && _svk() { - local cur prev commands options command + local cur prev commands options command - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - commands='add admin annotate ann blame praise cat checkout co cleanup \ - cmerge cm commit ci copy cp delete del remove rm depotmap \ - depot describe desc diff di help h ? import info list ls log \ - merge mirror mi mkdir move mv ren rename patch propdel pd pdel \ - propedit pe pedit propget pg pget proplist pl plist propset ps \ - pset pull push resolved revert smerge sm status st stat switch \ - sw sync sy update up verify' + commands='add admin annotate ann blame praise cat checkout co cleanup \ + cmerge cm commit ci copy cp delete del remove rm depotmap \ + depot describe desc diff di help h ? import info list ls log \ + merge mirror mi mkdir move mv ren rename patch propdel pd pdel \ + propedit pe pedit propget pg pget proplist pl plist propset ps \ + pset pull push resolved revert smerge sm status st stat switch \ + sw sync sy update up verify' - if [[ $COMP_CWORD -eq 1 ]] ; then - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--version' -- $cur ) ) - else - COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) - fi - else + if [[ $COMP_CWORD -eq 1 ]] ; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--version' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) ) + fi + else - prev=${COMP_WORDS[COMP_CWORD-1]} - case $prev in - -@(F|-file|-targets)) - _filedir - return 0; - ;; - --encoding) - COMPREPLY=( $( compgen -W \ - '$( iconv --list | sed -e "s@//@@;" )' \ - -- "$cur" ) ) - return 0; - ;; - esac + prev=${COMP_WORDS[COMP_CWORD-1]} + case $prev in + -@(F|-file|-targets)) + _filedir + return 0; + ;; + --encoding) + COMPREPLY=( $( compgen -W \ + '$( iconv --list | sed -e "s@//@@;" )' -- "$cur" ) ) + return 0; + ;; + esac - command=${COMP_WORDS[1]} + command=${COMP_WORDS[1]} - if [[ "$cur" == -* ]]; then - # possible options for the command - case $command in - add) - options=' --non-recursive -N -q --quiet' - ;; - @(blame|annotate|ann|praise)) - options='-r --revisions -x --cross' - ;; - cat) - options='-r --revision' - ;; - @(checkout|co)) - options='-r --revision -q --quiet -N \ - --non-recursive -l --list -d \ - --detach --export --relocate \ - --purge' - ;; - cleanup) - options='-a --all' - ;; - @(cmerge|cm)) - options='-c --change -l --log -r \ - --revision -a --auto \ - --verbatim --no-ticket -m \ - --message -F --file --template \ --encoding -P --patch -S \ - --sign -C --check-only --direct' - ;; - @(commit|ci)) - options='--import -m --message -F \ - --file --encoding --template \ - -P --patch -S --sign -C \ - --check-only -N \ - --non-recursive --direct' - ;; - @(copy|cp)) - options='-r --revision -p --parent -q \ - --quiet -m --message -F --file \ - --template --encoding -P \ - --patch -S --sign -C \ - --check-only --direct' - ;; - @(delete|del|remove|rm)) - options='-k --keep-local -m --message \ - -F --file --encoding \ - --template -P --patch -S \ - --sign -C --check-only --direct' - ;; - @(depotmap|depot)) - options='-i --init -l --list -d \ - --detach --relocate' - ;; - @(diff|di)) - options='-r --revision -s --summarize \ - -b --verbose -N --non-recursive' - ;; - import) - options='-f --from-checkout -t \ - --to-checkout -m --message -F \ - --file --template --encoding \ - -P --patch -S --sign -C \ - --check-only -N \ - --non-recursive --direct' - ;; - @(list|ls)) - options='-r --revision -v --verbose -R \ - --recursive -d --depth -f \ - --full-path' - ;; - log) - options='-r --revision -l --limit -q \ - --quiet -x --cross -v --verbose' - ;; - merge) - options='-r --revision -c --change -I \ - --incremental -a --auto -l \ - --log -s --sync -t --to -f \ - --from --verbatim --no-ticket \ - --track-rename -m --message \ - -F --file --template \ - --encoding -P --patch -S \ - --sign -C --check-only --direct' - ;; - @(mirror|mi)) - options='-l --list -d --detach \ - --relocate --recover --unlock \ - --upgrade' - ;; - mkdir) - options='-p --parent -m --message -F \ - --file --template --encoding \ - -P --patch -S --sign -C \ - --check-only --direct' - ;; - @(move|mv|rename|ren)) - options='-r --revision -p --parent -q \ - --quiet -m --message -F --file \ - --encoding --template -P \ - --patch -S --sign -C \ - --check-only --direct' - ;; - patch) - options='--depot' - ;; - @(propdel|propset|pdel|pset|pd|ps)) - options='-R --recursive -r --revision \ - --revprop -m --message -F \ - --file --template --encoding \ - -P --patch -S --sign -C \ - --check-only -q --quiet \ - --direct' - ;; - @(propedit|pedit|pe)) - options='-R --recursive -r --revision \ - --revprop -m --message -F \ - --file --template --encoding \ - -P --patch -S --sign -C \ - --check-only --direct' - ;; - @(propget|pget|pg)) - options='-R --recursive -r --revision \ - --revprop --strict' - ;; - @(proplist|plist|pl)) - options='-R --recursive -v --verbose \ - -r --revision --revprop' - ;; - pull) - options='-a --all -l --lump' - ;; - push) - options='-f --from -l --lump -C \ - --check -P --patch -S --sign \ - --verbatim' - ;; - resolved) - options='-R --recursive' - ;; - revert) - options='-R --recursive -q --quiet' - ;; - @(smerge|sm)) - options='-I --incremental -l --log -B \ - --baseless -b --base -s --sync \ - -t --to -f --from --verbatim \ - --no-ticket --track-rename \ - --host --remoterev -m \ - --message -F --file --template \ - --encoding -P --patch -S \ - --sign -C --check-only --direct' - ;; - @(status|stat|st)) - options='-q --quiet --no-ignore -N \ - --non-recursive -v --verbose' - ;; - @(switch|sw)) - options='-r --revision -d --detach -q \ - --quiet' - ;; - @(sync|sy)) - options='-a --all -s --skipto -t \ - --torev' - ;; - @(update|up)) - options='-r --revision -N \ - --non-recursive -C \ - --check-only -s --sync -m \ - --merge -q --quiet' - ;; - esac - options="$options --help -h" + if [[ "$cur" == -* ]]; then + # possible options for the command + case $command in + add) + options=' --non-recursive -N -q --quiet' + ;; + @(blame|annotate|ann|praise)) + options='-r --revisions -x --cross' + ;; + cat) + options='-r --revision' + ;; + @(checkout|co)) + options='-r --revision -q --quiet -N --non-recursive -l \ + --list -d --detach --export --relocate --purge' + ;; + cleanup) + options='-a --all' + ;; + @(cmerge|cm)) + options='-c --change -l --log -r --revision -a --auto \ + --verbatim --no-ticket -m --message -F --file \ + --template --encoding -P --patch -S --sign -C \ + --check-only --direct' + ;; + @(commit|ci)) + options='--import -m --message -F --file --encoding \ + --template -P --patch -S --sign -C --check-only -N \ + --non-recursive --direct' + ;; + @(copy|cp)) + options='-r --revision -p --parent -q --quiet -m --message \ + -F --file --template --encoding -P --patch -S --sign \ + -C --check-only --direct' + ;; + @(delete|del|remove|rm)) + options='-k --keep-local -m --message -F --file --encoding \ + --template -P --patch -S --sign -C --check-only \ + --direct' + ;; + @(depotmap|depot)) + options='-i --init -l --list -d --detach --relocate' + ;; + @(diff|di)) + options='-r --revision -s --summarize -b --verbose -N \ + --non-recursive' + ;; + import) + options='-f --from-checkout -t --to-checkout -m --message \ + -F --file --template --encoding -P --patch -S --sign \ + -C --check-only -N --non-recursive --direct' + ;; + @(list|ls)) + options='-r --revision -v --verbose -R --recursive -d \ + --depth -f --full-path' + ;; + log) + options='-r --revision -l --limit -q --quiet -x --cross \ + -v --verbose' + ;; + merge) + options='-r --revision -c --change -I --incremental -a \ + --auto -l --log -s --sync -t --to -f --from \ + --verbatim --no-ticket --track-rename -m --message \ + -F --file --template --encoding -P --patch -S --sign \ + -C --check-only --direct' + ;; + @(mirror|mi)) + options='-l --list -d --detach --relocate --recover \ + --unlock --upgrade' + ;; + mkdir) + options='-p --parent -m --message -F --file --template \ + --encoding -P --patch -S --sign -C --check-only \ + --direct' + ;; + @(move|mv|rename|ren)) + options='-r --revision -p --parent -q --quiet -m \ + --message -F --file --encoding --template -P --patch \ + -S --sign -C --check-only --direct' + ;; + patch) + options='--depot' + ;; + @(propdel|propset|pdel|pset|pd|ps)) + options='-R --recursive -r --revision --revprop -m \ + --message -F --file --template --encoding -P --patch \ + -S --sign -C --check-only -q --quiet --direct' + ;; + @(propedit|pedit|pe)) + options='-R --recursive -r --revision --revprop -m \ + --message -F --file --template --encoding -P --patch \ + -S --sign -C --check-only --direct' + ;; + @(propget|pget|pg)) + options='-R --recursive -r --revision --revprop --strict' + ;; + @(proplist|plist|pl)) + options='-R --recursive -v --verbose \ + -r --revision --revprop' + ;; + pull) + options='-a --all -l --lump' + ;; + push) + options='-f --from -l --lump -C --check -P --patch -S \ + --sign --verbatim' + ;; + resolved) + options='-R --recursive' + ;; + revert) + options='-R --recursive -q --quiet' + ;; + @(smerge|sm)) + options='-I --incremental -l --log -B --baseless -b \ + --base -s --sync -t --to -f --from --verbatim \ + --no-ticket --track-rename --host --remoterev -m \ + --message -F --file --template --encoding -P --patch \ + -S --sign -C --check-only --direct' + ;; + @(status|stat|st)) + options='-q --quiet --no-ignore -N --non-recursive -v \ + --verbose' + ;; + @(switch|sw)) + options='-r --revision -d --detach -q --quiet' + ;; + @(sync|sy)) + options='-a --all -s --skipto -t --torev' + ;; + @(update|up)) + options='-r --revision -N --non-recursive -C --check-only \ + -s --sync -m --merge -q --quiet' + ;; + esac + options="$options --help -h" - COMPREPLY=( $( compgen -W "$options" -- $cur ) ) - else - case $command in - @(help|h|\?)) - COMPREPLY=( $( compgen -W "$commands \ - environment commands intro" -- $cur ) ) - ;; - admin) - COMPREPLY=( $( compgen -W 'help \ - deltify dump hotcopy \ - list-dblogs list-unused-dblogs \ - load lstxns recover rmtxns \ - setlog verify rmcache' \ - -- $cur ) ) - ;; - patch) - COMPREPLY=( $( compgen -W '--ls --list \ - --cat --view --regen \ - --regenerate --up --update \ - --apply --rm --delete' \ - -- $cur ) ) - ;; - sync) - COMPREPLY=( $( compgen -W "$( svk \ - mirror --list 2>/dev/null | \ - awk '/^\//{print $1}' )" \ - -- $cur ) ) - ;; - @(co|checkout|push|pull)) - if [[ "$cur" == //*/* ]]; then - path=${cur%/*}/ - else - path=// - fi - COMPREPLY=( $( compgen -W "$( svk \ - list $path 2>/dev/null | sed -e 's|\(.*\)|'$path'\1|')" -- $cur ) ) - ;; - *) - _filedir - ;; - esac - fi - fi + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) + else + case $command in + @(help|h|\?)) + COMPREPLY=( $( compgen -W "$commands \ + environment commands intro" -- "$cur" ) ) + ;; + admin) + COMPREPLY=( $( compgen -W 'help deltify dump hotcopy \ + list-dblogs list-unused-dblogs load lstxns recover \ + rmtxns setlog verify rmcache' -- "$cur" ) ) + ;; + patch) + COMPREPLY=( $( compgen -W '--ls --list --cat --view \ + --regen --regenerate --up --update --apply --rm \ + --delete' -- "$cur" ) ) + ;; + sync) + COMPREPLY=( $( compgen -W "$( svk mirror --list \ + 2>/dev/null | awk '/^\//{print $1}' )" -- "$cur" ) ) + ;; + @(co|checkout|push|pull)) + if [[ "$cur" == //*/* ]]; then + path=${cur%/*}/ + else + path=// + fi + COMPREPLY=( $( compgen -W "$( svk list $path 2>/dev/null | \ + sed -e 's|\(.*\)|'$path'\1|')" -- "$cur" ) ) + ;; + *) + _filedir + ;; + esac + fi + fi - return 0 -} -complete -F _svk $default svk + return 0 +} && +complete -F _svk $filenames svk + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/sysctl b/contrib/sysctl new file mode 100644 index 00000000..cd40c453 --- /dev/null +++ b/contrib/sysctl @@ -0,0 +1,23 @@ +# bash completion for sysctl + +have sysctl && +_sysctl() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + COMPREPLY=( $( compgen -W "$(sysctl -N -a 2>/dev/null)" -- "$cur" ) ) + + return 0 +} && +complete -F _sysctl sysctl + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/sysv-rc b/contrib/sysv-rc new file mode 100644 index 00000000..ac2062be --- /dev/null +++ b/contrib/sysv-rc @@ -0,0 +1,113 @@ +# update-rc.d(8) completion +# +# Copyright (C) 2004 Servilio Afre Puentes <servilio@gmail.com> + +have update-rc.d && +_update_rc_d() +{ + local cur prev sysvdir services options valid_options + + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + [ -d /etc/rc.d/init.d ] && sysvdir=/etc/rc.d/init.d \ + || sysvdir=/etc/init.d + + services=( $(echo $sysvdir/!(README*|*.sh|*.dpkg*|*.rpm@(orig|new|save))) ) + services=( ${services[@]#$sysvdir/} ) + options=( -f -n ) + + if [[ $COMP_CWORD -eq 1 || "$prev" == -* ]]; then + valid_options=( $( \ + echo "${COMP_WORDS[@]} ${options[@]}" \ + | tr " " "\n" \ + | sed -ne "/$( echo "${options[@]}" | sed "s/ /\\|/g" )/p" \ + | sort | uniq -u \ + ) ) + COMPREPLY=( $( compgen -W '${options[@]} ${services[@]}' \ + -X '$( echo ${COMP_WORDS[@]} | tr " " "|" )' -- "$cur" ) ) + elif [[ "$prev" == ?($( echo ${services[@]} | tr " " "|" )) ]]; then + COMPREPLY=( $( compgen -W 'remove defaults start stop' -- "$cur" ) ) + elif [[ "$prev" == defaults && "$cur" == [0-9] ]]; then + COMPREPLY=( 0 1 2 3 4 5 6 7 8 9 ) + elif [[ "$prev" == defaults && "$cur" == [sk]?([0-9]) ]]; then + COMPREPLY=( 0 1 2 3 4 5 6 7 8 9 ) + elif [[ "$prev" == defaults && -z "$cur" ]]; then + COMPREPLY=( 0 1 2 3 4 5 6 7 8 9 s k ) + elif [[ "$prev" == ?(start|stop) ]]; then + if [[ "$cur" == [0-9] || -z "$cur" ]]; then + COMPREPLY=( 0 1 2 3 4 5 6 7 8 9 ) + elif [[ "$cur" == [0-9][0-9] ]]; then + COMPREPLY=( $cur ) + else + COMPREPLY=() + fi + elif [[ "$prev" == ?([0-9][0-9]|[0-6S]) ]]; then + if [[ -z "$cur" ]]; then + if [[ $prev == [0-9][0-9] ]]; then + COMPREPLY=( 0 1 2 3 4 5 6 S ) + else + COMPREPLY=( 0 1 2 3 4 5 6 S . ) + fi + elif [[ "$cur" == [0-6S.] ]]; then + COMPREPLY=( $cur ) + else + COMPREPLY=() + fi + elif [[ "$prev" == "." ]]; then + COMPREPLY=( $(compgen -W "start stop" -- "$cur") ) + else + COMPREPLY=() + fi + + return 0 +} && +complete -F _update_rc_d update-rc.d + +# invoke-rc.d(8) completion +# +# Copyright (C) 2004 Servilio Afre Puentes <servilio@gmail.com> +# +have invoke-rc.d && +_invoke_rc_d() +{ + local cur prev sysvdir services options valid_options + + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + [ -d /etc/rc.d/init.d ] && sysvdir=/etc/rc.d/init.d \ + || sysvdir=/etc/init.d + + services=( $(echo $sysvdir/!(README*|*.sh|*.dpkg*|*.rpm@(orig|new|save))) ) + services=( ${services[@]#$sysvdir/} ) + options=( --help --quiet --force --try-anyway --disclose-deny --query \ + --no-fallback ) + + if [[ ($COMP_CWORD -eq 1) || ("$prev" == --* ) ]]; then + valid_options=( $( \ + echo ${COMP_WORDS[@]} ${options[@]} \ + | tr " " "\n" \ + | sed -ne "/$( echo ${options[@]} | sed "s/ /\\\\|/g" )/p" \ + | sort | uniq -u \ + ) ) + COMPREPLY=( $( compgen -W '${valid_options[@]} ${services[@]}' -- "$cur" ) ) + elif [ -x $sysvdir/$prev ]; then + COMPREPLY=( $( compgen -W '`sed -ne "y/|/ /; \ + s/^.*Usage:[ ]*[^ ]*[ ]*{*\([^}\"]*\).*$/\1/p" \ + $sysvdir/$prev`' -- "$cur" ) ) + else + COMPREPLY=() + fi + + return 0 +} && +complete -F _invoke_rc_d invoke-rc.d + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/tar b/contrib/tar new file mode 100644 index 00000000..0802c881 --- /dev/null +++ b/contrib/tar @@ -0,0 +1,72 @@ +# bash completion for GNU tar + +have tar && { +_tar() +{ + local cur ext regex tar untar + + COMPREPLY=() + cur=`_get_cword` + + if [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -W 'c t x u r d A' -- "$cur" ) ) + return 0 + fi + + case "${COMP_WORDS[1]}" in + ?(-)[cr]*f) + _filedir + return 0 + ;; + +([^IZzJjy])f) + ext='t@(ar?(.@(Z|gz|bz?(2)|lz?(ma)))|gz|bz?(2)|lz?(ma))' + regex='t\(ar\(\.\(Z\|gz\|bz2\?\|lzma\|xz\)\)\?\|gz\|bz2\?\|lzma\|xz\)' + ;; + *[Zz]*f) + ext='t?(ar.)@(gz|Z)' + regex='t\(ar\.\)\?\(gz\|Z\)' + ;; + *[Ijy]*f) + ext='t?(ar.)bz?(2)' + regex='t\(ar\.\)\?bz2\?' + ;; + *[J]*f) + ext='t?(ar.)@(lz?(ma)|xz)' + regex='t\(ar\.\)\?\(lzma\|xz\)\?' + ;; + *) + _filedir + return 0 + ;; + + esac + + if [[ "$COMP_LINE" == *$ext' ' ]]; then + # complete on files in tar file + # + # get name of tar file from command line + tar=$( echo "$COMP_LINE" | sed -e 's/^.* \([^ ]*'$regex'\) .*$/\1/' ) + # devise how to untar and list it + untar=t${COMP_WORDS[1]//[^Izjyf]/} + + COMPREPLY=( $( compgen -W "$( echo $( tar $untar $tar \ + 2>/dev/null ) )" -- "$cur" ) ) + return 0 + fi + + # file completion on relevant files + _filedir "$ext" + + return 0 +} +[ -n "${COMP_TAR_INTERNAL_PATHS:-}" ] && complete -F _tar $dirnames tar || + complete -F _tar $filenames tar +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/tcpdump b/contrib/tcpdump new file mode 100644 index 00000000..958ac8d7 --- /dev/null +++ b/contrib/tcpdump @@ -0,0 +1,38 @@ +# bash completion for tcpdump + +have tcpdump && +_tcpdump() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(r|w|F)) + _filedir + return 0 + ;; + -i) + _available_interfaces -a + return 0 + ;; + esac + + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -d -e -f -l -n -N -O -p \ + -q -R -S -t -u -v -x -C -F -i -m -r -s -T -w -E' -- "$cur" ) ) + fi + +} && +complete -F _tcpdump tcpdump + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/unace b/contrib/unace index c6376742..d006ffbd 100644 --- a/contrib/unace +++ b/contrib/unace @@ -1,29 +1,36 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # unace(1) completion by Guillaume Rousse <rousse@ccr.jussieu.fr> -_unace() +have unace && +_unace() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - case "$cur" in - -*) - COMPREPLY=( $( compgen -W '-c -c- -f -f- -o -o- -p -y -y-' -- $cur ) ) - ;; - *) - if [ $COMP_CWORD -eq 1 ]; then - COMPREPLY=( $( compgen -W 'e l t v x' -- $cur ) ) - else - _filedir '@(ace|ACE)' - fi - ;; - esac - - return 0 + case "$cur" in + -*) + COMPREPLY=( $( compgen -W '-c -c- -f -f- -o -o- -p -y -y-' \ + -- "$cur" ) ) + ;; + *) + if [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -W 'e l t v x' -- "$cur" ) ) + else + _filedir '@(ace|ACE)' + fi + ;; + esac -} + return 0 + +} && complete -F _unace $filenames unace + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/unrar b/contrib/unrar index 9dcd2065..a97fb0d1 100644 --- a/contrib/unrar +++ b/contrib/unrar @@ -1,30 +1,36 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # unrar(1) completion by Guillaume Rousse <rousse@ccr.jussieu.fr> -_unrar() +have unrar && +_unrar() { - local cur + local cur - COMPREPLY=() - cur=`_get_cword` + COMPREPLY=() + cur=`_get_cword` - case "$cur" in - -*) - COMPREPLY=( $( compgen -W '-ad -ap -av- -c- -cfg- -cl -cu \ - -dh -ep -f -idp -ierr -inul -kb -o+ -o- -ow -p -p- -r -ta \ - -tb -tn -to -u -v -ver -vp -x -x@ -y' -- $cur ) ) - ;; - *) - if [ $COMP_CWORD -eq 1 ]; then - COMPREPLY=( $( compgen -W 'e l lb lt p t v vb vt x' -- $cur ) ) - else - _filedir '@(rar|RAR)' - fi - ;; - esac - - return 0 -} + case "$cur" in + -*) + COMPREPLY=( $( compgen -W '-ad -ap -av- -c- -cfg- -cl -cu \ + -dh -ep -f -idp -ierr -inul -kb -o+ -o- -ow -p -p- -r -ta \ + -tb -tn -to -u -v -ver -vp -x -x@ -y' -- "$cur" ) ) + ;; + *) + if [ $COMP_CWORD -eq 1 ]; then + COMPREPLY=( $( compgen -W 'e l lb lt p t v vb vt x' -- "$cur" ) ) + else + _filedir '@(rar|RAR)' + fi + ;; + esac + + return 0 +} && complete -F _unrar $filenames unrar + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/update-alternatives b/contrib/update-alternatives new file mode 100644 index 00000000..7e12b96e --- /dev/null +++ b/contrib/update-alternatives @@ -0,0 +1,99 @@ +# bash completion for update-alternatives + +have update-alternatives && { +_installed_alternatives() +{ + local admindir + # find the admin dir + for i in alternatives dpkg/alternatives rpm/alternatives; do + [ -d /var/lib/$i ] && admindir=/var/lib/$i && break + done + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == --admindir ]]; then + admindir=${COMP_WORDS[i+1]} + break + fi + done + COMPREPLY=( $( compgen -W '$( command ls $admindir )' -- "$cur" ) ) +} + +_update_alternatives() +{ + local cur prev mode args i + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + --@(altdir|admindir)) + _filedir -d + return 0 + ;; + --@(help|version)) + return 0 + ;; + esac + + # find which mode to use and how many real args used so far + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == --@(install|remove|auto|display|config|remove-all) ]]; then + mode=${COMP_WORDS[i]} + args=$(($COMP_CWORD - i)) + break + fi + done + + case $mode in + --install) + case $args in + 1) + _filedir + ;; + 2) + _installed_alternatives + ;; + 3) + _filedir + ;; + esac + ;; + --remove) + case $args in + 1) + _installed_alternatives + ;; + 2) + _filedir + ;; + esac + ;; + --auto) + _installed_alternatives + ;; + --remove-all) + _installed_alternatives + ;; + --display) + _installed_alternatives + ;; + --config) + _installed_alternatives + ;; + *) + COMPREPLY=( $( compgen -W '--verbose --quiet --help --version \ + --altdir --admindir' -- "$cur" ) \ + $( compgen -W '--install --remove --auto --display \ + --config' -- "$cur" ) ) + esac +} +complete -F _update_alternatives update-alternatives alternatives +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/vncviewer b/contrib/vncviewer index 933783a4..7e9c00da 100644 --- a/contrib/vncviewer +++ b/contrib/vncviewer @@ -1,126 +1,132 @@ -# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- -# ex: ts=8 sw=8 noet filetype=sh -# # bash completion for vncviewer - +have vncviewer && _vncviewer_bootstrap() { - local fname - case "$(_realcommand vncviewer)" in - # If `vncviewer' not installed, default file-dir completion - '') _filedir `_get_cword` ;; - *xvnc4viewer) fname=_xvnc4viewer ;; - *tightvncviewer|*) fname=_tightvncviewer ;; - esac - if [ $fname ]; then - # Install real completion for subsequent completions - complete -F $fname vncviewer - $fname # Generate completions once for now - unset -f _vncviewer_bootstrap - fi + local fname + case "$(_realcommand vncviewer)" in + # If `vncviewer' not installed, default file-dir completion + '') _filedir `_get_cword` ;; + *xvnc4viewer) fname=_xvnc4viewer ;; + *tightvncviewer|*) fname=_tightvncviewer ;; + esac + if [ $fname ]; then + # Install real completion for subsequent completions + complete -F $fname vncviewer + $fname # Generate completions once for now + unset -f _vncviewer_bootstrap + fi } && complete -F _vncviewer_bootstrap vncviewer - +have tightvncviewer && _tightvncviewer() { - local cur prev + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - case $prev in - -passwd) - _filedir - return 0 - ;; - -encodings) - COMPREPLY=( $( compgen -W 'copyrect tight hextile zlib \ - corre rre raw' -- $cur ) ) - return 0 - ;; - -via) - _known_hosts - return 0 - ;; - esac + case $prev in + -passwd) + _filedir + return 0 + ;; + -encodings) + COMPREPLY=( $( compgen -W 'copyrect tight hextile zlib \ + corre rre raw' -- "$cur" ) ) + return 0 + ;; + -via) + _known_hosts_real "$cur" + return 0 + ;; + esac - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-help -listen -via -shared -noshared\ - -viewonly -fullscreen -noraiseonbeep -passwd -encodings\ - -bgr233 -owncmap -truecolour -truecolor -depth \ - -compresslevel -quality -nojpeg -nocursorshape \ - -x11cursor' -- $cur ) ) - else - _known_hosts - fi + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-help -listen -via -shared -noshared\ + -viewonly -fullscreen -noraiseonbeep -passwd -encodings\ + -bgr233 -owncmap -truecolour -truecolor -depth \ + -compresslevel -quality -nojpeg -nocursorshape \ + -x11cursor' -- $cur ) ) + else + _known_hosts_real "$cur" + fi } && complete -F _tightvncviewer tightvncviewer # NOTE: - VNC Viewer options are case-insensivite. Preferred case is taken from -help. # - Both single dash (-) and double dash (--) are allowed as option prefix +have xvnc4viewer && _xvnc4viewer() { - local cur prev + local cur prev - COMPREPLY=() - cur=`_get_cword` - prev=${COMP_WORDS[COMP_CWORD-1]} + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} - # Convert double dash to single dash - case ${prev/#--/-} in - # -passwd, -PasswordFile - -[pP][aA][sS][sS][wW][dD]|-[pP][aA][sS][sS][wW][oO][rR][dD][fF][iI][lL][eE]) - _filedir - return 0 - ;; - # -PreferredEncoding - -[pP][rR][eE][fF][eE][rR][rR][eE][dD][eE][nN][cC][oO][dD][iI][nN][gG]) - COMPREPLY=( $( compgen -W 'zrle hextile raw' -- $cur ) ) - return 0 - ;; - # -via - -[vV][iI][aA]) - _known_hosts - return 0 - ;; - esac + # Convert double dash to single dash + case ${prev/#--/-} in + # -passwd, -PasswordFile + -[pP][aA][sS][sS][wW][dD]|-[pP][aA][sS][sS][wW][oO][rR][dD][fF][iI][lL][eE]) + _filedir + return 0 + ;; + # -PreferredEncoding + -[pP][rR][eE][fF][eE][rR][rR][eE][dD][eE][nN][cC][oO][dD][iI][nN][gG]) + COMPREPLY=( $( compgen -W 'zrle hextile raw' -- $cur ) ) + return 0 + ;; + # -via + -[vV][iI][aA]) + _known_hosts_real "$cur" + return 0 + ;; + esac - if [[ "$cur" == -* || "$cur" == --* ]]; then - # Default to vncviewer camelcase options, see `vncviewer -help' - local dash options=( \ - AcceptClipboard AutoSelect DebugDelay display \ - DotWhenNoCursor FullColor FullColour FullScreen \ - geometry help listen Log \ - LowColourLevel MenuKey name Parent \ - passwd PasswordFile PointerEventInterval PreferredEncoding \ - SendClipboard SendPrimary Shared UseLocalCursor \ - via ViewOnly WMDecorationHeight WMDecorationWidth \ - ZlibLevel \ - ) - [[ "$cur" == --* ]] && dash=-- || dash=- - # Is a `nocasematch' variable available (bash > v3.1)? - if shopt nocasematch 2> /dev/null | grep -q ^nocasematch; then - # Variable `nocasematch' is available - # Use vncviewer camelcase options - local option oldNoCaseMatch=$(shopt -p nocasematch) - shopt -s nocasematch - COMPREPLY=( $( for option in "${options[@]}"; do - [[ $dash$option == "$cur"* ]] && echo $dash$option - done ) ) - eval "$oldNoCaseMatch" 2> /dev/null - else - # Variable 'nocasematch' isn't available; - # Convert completions to lowercase - COMPREPLY=( $( compgen -W "$( - echo ${options[@]/#/$dash} | tr [:upper:] [:lower:] - )" -- "$(echo "$cur" | tr [:upper:] [:lower:])" ) ) - fi - else - _known_hosts - fi + if [[ "$cur" == -* || "$cur" == --* ]]; then + # Default to vncviewer camelcase options, see `vncviewer -help' + local dash options=( \ + AcceptClipboard AutoSelect DebugDelay display \ + DotWhenNoCursor FullColor FullColour FullScreen \ + geometry help listen Log \ + LowColourLevel MenuKey name Parent \ + passwd PasswordFile PointerEventInterval PreferredEncoding \ + SendClipboard SendPrimary Shared UseLocalCursor \ + via ViewOnly WMDecorationHeight WMDecorationWidth \ + ZlibLevel \ + ) + [[ "$cur" == --* ]] && dash=-- || dash=- + # Is a `nocasematch' variable available (bash > v3.1)? + if shopt nocasematch 2> /dev/null | grep -q ^nocasematch; then + # Variable `nocasematch' is available + # Use vncviewer camelcase options + local option oldNoCaseMatch=$(shopt -p nocasematch) + shopt -s nocasematch + COMPREPLY=( $( for option in "${options[@]}"; do + [[ $dash$option == "$cur"* ]] && echo $dash$option + done ) ) + eval "$oldNoCaseMatch" 2> /dev/null + else + # Variable 'nocasematch' isn't available; + # Convert completions to lowercase + COMPREPLY=( $( compgen -W "$( + echo ${options[@]/#/$dash} | tr [:upper:] [:lower:] + )" -- "$(echo "$cur" | tr [:upper:] [:lower:])" ) ) + fi + else + _known_hosts_real "$cur" + fi } && complete -F _xvnc4viewer xvnc4viewer + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/vpnc b/contrib/vpnc new file mode 100644 index 00000000..aaf0300a --- /dev/null +++ b/contrib/vpnc @@ -0,0 +1,50 @@ +# bash completion for vpnc + +have vpnc && +_vpnc() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + --pfs) + COMPREPLY=( $( compgen -W 'nopfs dh1 dh2 dh5 server' -- "$cur" ) ) + return 0 + ;; + --pfs) + COMPREPLY=( $( compgen -W 'dh1 dh2 dh5' -- "$cur" ) ) + return 0 + ;; + --@(pid-file|script)) + _filedir + return 0 + ;; + --gateway) + _known_hosts_real "$cur" + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--version --print-config --help \ + --long-help --gateway --id --username --udp --domain \ + --xauth-inter --script --dh --pfs --enable-1des \ + --application-version --ifname --debug --no-detach \ + --pid-file --local-port --udp-port --disable-natt \ + --non-inter' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W '$( command ls /etc/vpnc )' -- "$cur" ) ) + fi +} && +complete -F _vpnc vpnc + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/wireless-tools b/contrib/wireless-tools new file mode 100644 index 00000000..22da1b2e --- /dev/null +++ b/contrib/wireless-tools @@ -0,0 +1,183 @@ +# bash completion for Linux wireless-tools + +[ $UNAME = Linux ] && +{ + +have iwconfig && +_iwconfig() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + mode) + COMPREPLY=( $( compgen -W 'managed ad-hoc master \ + repeater secondary monitor' -- "$cur" ) ) + return 0 + ;; + essid) + COMPREPLY=( $( compgen -W 'on off any' -- "$cur" ) ) + if [ -n "${COMP_IWLIST_SCAN:-}" ]; then + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W \ + "$( iwlist ${COMP_WORDS[1]} scan | \ + awk -F '\"' '/ESSID/ {print $2}' )" -- "$cur" ) ) + fi + return 0 + ;; + nwid) + COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) + return 0 + ;; + channel) + COMPREPLY=( $( compgen -W "$( iwlist ${COMP_WORDS[1]} channel | \ + awk '/^[[:space:]]*Channel/ {print $2}' )" -- "$cur" ) ) + return 0 + ;; + + freq) + COMPREPLY=( $( compgen -W "$( iwlist ${COMP_WORDS[1]} channel | \ + awk '/^[[:space:]]*Channel/ {print $4\"G\"}')" -- "$cur" ) ) + return 0 + ;; + ap) + COMPREPLY=( $( compgen -W 'on off any' -- "$cur" ) ) + if [ -n "${COMP_IWLIST_SCAN:-}" ]; then + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W \ + "$( iwlist ${COMP_WORDS[1]} scan | \ + awk -F ': ' '/Address/ {print $2}' )" -- "$cur" ) ) + fi + return 0 + ;; + rate) + COMPREPLY=( $( compgen -W 'auto fixed' -- "$cur" ) ) + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W \ + "$( iwlist ${COMP_WORDS[1]} rate | \ + awk '/^[[:space:]]*[0-9]/ {print $1\"M\"}' )" -- "$cur" ) ) + return 0 + ;; + rts|frag) + COMPREPLY=( $( compgen -W 'auto fixed off' -- "$cur" ) ) + return 0 + ;; + key|enc) + COMPREPLY=( $( compgen -W 'off on open restricted' -- "$cur" ) ) + return 0 + ;; + power) + COMPREPLY=( $( compgen -W 'period timeout off on' -- "$cur" ) ) + return 0 + ;; + txpower) + COMPREPLY=( $( compgen -W 'off on auto' -- "$cur" ) ) + return 0 + ;; + retry) + COMPREPLY=( $( compgen -W 'limit lifetime' -- "$cur" ) ) + return 0 + ;; + esac + + if [ $COMP_CWORD -eq 1 ]; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--help --version' -- "$cur" ) ) + else + _available_interfaces -w + fi + else + COMPREPLY=( $( compgen -W 'essid nwid mode freq channel sens mode \ + ap nick rate rts frag enc key power txpower commit' -- "$cur" ) ) + fi + +} && +complete -F _iwconfig iwconfig + + +have iwlist && +_iwlist() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + if [ $COMP_CWORD -eq 1 ]; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--help --version' -- "$cur" ) ) + else + _available_interfaces -w + fi + else + COMPREPLY=( $( compgen -W 'scan scanning freq frequency \ + channel rate bit bitrate key enc encryption power \ + txpower retry ap accesspoint peers event' -- "$cur" ) ) + fi +} && +complete -F _iwlist iwlist + + +have iwspy && +_iwspy() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [ $COMP_CWORD -eq 1 ]; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--help --version' -- "$cur" ) ) + else + _available_interfaces -w + fi + else + COMPREPLY=( $( compgen -W 'setthr getthr off' -- "$cur" ) ) + fi +} && +complete -F _iwspy iwspy + + +have iwpriv && +_iwpriv() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + roam) + COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) + return 0 + ;; + port) + COMPREPLY=( $( compgen -W 'ad-hoc managed' -- "$cur" ) ) + return 0 + ;; + esac + + if [ $COMP_CWORD -eq 1 ]; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--help --version' -- "$cur" ) ) + else + _available_interfaces -w + fi + else + COMPREPLY=( $( compgen -W '--all roam port' -- "$cur" ) ) + fi +} && +complete -F _iwpriv iwpriv + +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/wodim b/contrib/wodim new file mode 100644 index 00000000..6359ec59 --- /dev/null +++ b/contrib/wodim @@ -0,0 +1,85 @@ +# bash completion for cdrecord/wodim + +have cdrecord || have wodim && +_cdrecord() +{ + local cur prev i generic_options track_options track_mode + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + # foo=bar style option + if [[ "$cur" == *=* ]]; then + prev=${cur/=*/} + cur=${cur/*=/} + case "$prev" in + @(text|cue)file) + _filedir + return 0 + ;; + blank) + COMPREPLY=( $( compgen -W 'help all fast \ + track unreserve trtail unclose session' \ + -- "$cur" ) ) + return 0 + ;; + driveropts) + COMPREPLY=( $( compgen -W 'burnfree noburnfree\ + varirec= audiomaster forcespeed noforcespeed\ + speedread nospeedread singlesession \ + nosinglesession hidecdr nohidecdr tattooinfo\ + tattoofile=' -- "$cur" ) ) + return 0 + ;; + esac + fi + + generic_options=(-version -v -V -d -silent -s -force -immed -dummy \ + -dao -raw -raw96r -raw96p -raw16 -multi -msinfo -toc \ + -atip -fix -nofix -waiti -load -lock -eject -format \ + -setdropts -checkdrive -prcap -inq -scanbus -reset \ + -abort -overburn -ignsize -useinfo -packet -noclose \ + -text debug= kdebug= kd= minbuf= speed= blank= fs= \ + dev= gracetime= timeout= driver= driveropts= \ + defpregap= pktsize= mcn= textfile= cuefile=) + track_options=(-audio -swab -data -mode2 -xa -xa1 -xa2 -xamix -cdi \ + -isosize -pad padsize= -nopad -shorttrack -noshorttrack\ + pregap= -preemp -nopreemp -copy -nocopy -scms tcsize= \ + isrc= index=) + # look if previous was either a file or a track option + track_mode=0 + if [ $COMP_CWORD -gt 1 ]; then + if [ -f "$prev" ]; then + track_mode=1 + else + for (( i=0; i < ${#track_options[@]}; i++ )); do + if [[ "${track_options[i]}" == "$prev" ]]; then + track_mode=1 + break + fi + done + fi + fi + + # files are always eligible completion + _filedir + # track options are always available + COMPREPLY=( "${COMPREPLY[@]}" \ + $( compgen -W '${track_options[@]}' -- "$cur" ) ) + # general options are no more available after file or track option + if [ $track_mode -eq 0 ]; then + COMPREPLY=( "${COMPREPLY[@]}" \ + $( compgen -W '${generic_options[@]}' -- "$cur" ) ) + fi + +} && +complete -F _cdrecord $filenames cdrecord wodim + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/wvdial b/contrib/wvdial new file mode 100644 index 00000000..9081f6f8 --- /dev/null +++ b/contrib/wvdial @@ -0,0 +1,53 @@ +# bash completion for wvdial + +have wvdial && +_wvdial() +{ + local cur prev config i IFS=$'\t\n' + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case $prev in + --config) + _filedir + return 0 + ;; + esac + + case $cur in + -*) + COMPREPLY=( $( compgen -W '--config --chat \ + --remotename --help --version --no-syslog' \ + -- "$cur" ) ) + ;; + *) + # start with global and personal config files + config="/etc/wvdial.conf"$'\t'"$HOME/.wvdialrc" + # replace with command line config file if present + for (( i=1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == "--config" ]]; then + config=${COMP_WORDS[i+1]} + break + fi + done + # parse config files for sections and + # remove default section + COMPREPLY=( $( sed -ne "s|^\[Dialer \($cur.*\)\]$|\1|p" $config \ + 2>/dev/null |grep -v '^Defaults$')) + # escape spaces + COMPREPLY=${COMPREPLY// /\\ } + ;; + esac + +} && +complete -F _wvdial wvdial + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/xhost b/contrib/xhost new file mode 100644 index 00000000..006c961e --- /dev/null +++ b/contrib/xhost @@ -0,0 +1,24 @@ +# xhost(1) completion + +have xhost && +_xhost () +{ + local cur=`_get_cword` + + case "$cur" in + +*) _known_hosts_real -p+ "${cur:1}" ;; + -*) _known_hosts_real -p- "${cur:1}" ;; + *) _known_hosts_real "$cur" ;; + esac + + return 0 +} +complete -F _xhost xhost + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/xm b/contrib/xm new file mode 100644 index 00000000..b8337e5a --- /dev/null +++ b/contrib/xm @@ -0,0 +1,231 @@ +# bash completion for xm + +have xm && { +_xen_domain_names() +{ + COMPREPLY=( $(compgen -W "$( xm list 2>/dev/null | \ + awk '!/Name|Domain-0/ { print $1 }' )" -- "$cur") ) +} + +_xen_domain_ids() +{ + COMPREPLY=( $(compgen -W "$( xm list 2>/dev/null | \ + awk '!/Name|Domain-0/ { print $2 }' )" -- "$cur") ) +} + +_xm() +{ + # TODO: _split_longopt + + local cur prev command options + + COMPREPLY=() + cur=`_get_cword` + + commands='console create new delete destroy domid domname dump-core \ + list mem-max mem-set migrate pause reboot rename restore \ + resume save shutdown start suspend sysrq trigger top unpause \ + uptime vcpu-list vcpu-pin vcpu-set debug-keys dmesg info log \ + serve sched-credit sched-sedf block-attach block-detach \ + block-list network-attach network-detach network-list \ + vtpm-list vnet-list vnet-create vnet-delete labels addlabel \ + rmlabel getlabel dry-run resources makepolicy loadpolicy \ + cfgbootpolicy dumppolicy help' + + if [[ $COMP_CWORD -eq 1 ]] ; then + COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) ) + else + prev=${COMP_WORDS[COMP_CWORD-1]} + if [[ "$cur" == *=* ]]; then + prev=${cur/=*/} + cur=${cur/*=/} + fi + + command=${COMP_WORDS[1]} + if [[ "$cur" == -* ]]; then + # possible options for the command + case $command in + create) + options='-c' + ;; + dmesg) + options='--clear' + ;; + list) + options='--long' + ;; + reboot) + options='-w -a' + ;; + shutdown) + options='-w -a -R -H' + ;; + sched-credit) + options='-d -w -c' + ;; + @(block|network|vtpm|vnet)-list) + options='-l --long' + ;; + getpolicy) + options='--dumpxml' + ;; + new) + options='-h --help --help_config -q \ + --quiet --path= -f= \ + --defconfig= -F= --config= \ + -b --dryrun -x --xmldryrun \ + -s --skipdtd -p --paused -c \ + --console_autoconnect' + ;; + esac + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) + else + case $command in + @(console|destroy|domname|domid|list|mem-@(set|max)|pause|reboot|rename|shutdown|unpause|vcpu-@(list|pin|set)|block-list|network-list|vtpm-list)) + _count_args + case $args in + 2) + _xen_domain_names + ;; + esac + ;; + migrate) + _count_args + case $args in + 2) + _xen_domain_names + ;; + 3) + _known_hosts_real "$cur" + ;; + esac + ;; + @(restore|dry-run|vnet-create)) + _filedir + ;; + save) + _count_args + case $args in + 2) + _xen_domain_names + ;; + 3) + _filedir + ;; + esac + ;; + sysrq) + _count_args + case $args in + 2) + _xen_domain_names + ;; + 3) + COMPREPLY=( $(compgen -W "r s e i u b" -- "$cur") ) + ;; + esac + ;; + block-attach) + _count_args + case $args in + 2) + _xen_domain_names + ;; + 3) + COMPREPLY=( $(compgen -W "phy: file:" -- "$cur") ) + ;; + 5) + COMPREPLY=( $(compgen -W "w r" -- "$cur") ) + ;; + 6) + _xen_domain_names + ;; + esac + ;; + block-detach) + _count_args + case $args in + 2) + _xen_domain_names + ;; + 3) + COMPREPLY=( $(compgen -W "$( xm block-list $prev \ + 2>/dev/null | awk '!/Vdev/ { print $1 }' )" \ + -- "$cur") ) + ;; + esac + ;; + network-attach) + _count_args + case $args in + 2) + _xen_domain_names + ;; + *) + COMPREPLY=( $(compgen -W "script= ip= mac= \ + bridge= backend=" -- "$cur") ) + ;; + esac + ;; + network-detach) + _count_args + case $args in + 2) + _xen_domain_names + ;; + 3) + COMPREPLY=( $(compgen -W "$( xm network-list $prev \ + 2>/dev/null | awk '!/Idx/ { print $1 }' )" \ + -- "$cur") ) + ;; + esac + ;; + sched-credit) + case $prev in + -d) + _xen_domain_names + return 0 + ;; + esac + ;; + create) + _filedir + COMPREPLY=( ${COMPREPLY[@]:-} \ + $( compgen -W '$( command ls /etc/xen 2>/dev/null )' \ + -- "$cur" ) ) + ;; + new) + case $prev in + -@(f|F|-defconfig|-config)) + _filedir + return 0 + ;; + --path) + _filedir -d + return 0 + ;; + esac + + _count_args + case $args in + 2) + _xen_domain_names + ;; + esac + ;; + esac + fi + fi + + return 0 +} +complete -F _xm xm +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/xmllint b/contrib/xmllint new file mode 100644 index 00000000..ff201ec1 --- /dev/null +++ b/contrib/xmllint @@ -0,0 +1,56 @@ +# bash completion for xmllint(1) + +have xmllint && +_xmllint() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -o|--output) + _filedir + return 0 + ;; + --path|--dtdvalidfpi|--maxmem|--encode|--pattern) + # argument required but no completions available + return 0 + ;; + --dtdvalid) + _filedir dtd + return 0 + ;; + --relaxng) + _filedir rng + return 0 + ;; + --schema) + _filedir xsd + return 0 + ;; + --schematron) + _filedir sch + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '$( xmllint --help 2>&1 | \ + sed -ne "s/^[[:space:]]*\(--[^[:space:]:]*\).*/\1/p" ) \ + -o' -- "$cur" ) ) + return 0 + fi + + _filedir '@(*ml|htm|svg)' +} && +complete -F _xmllint $filenames xmllint + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/xmlwf b/contrib/xmlwf new file mode 100644 index 00000000..de8b7250 --- /dev/null +++ b/contrib/xmlwf @@ -0,0 +1,40 @@ +# bash completion for xmlwf(1) + +have xmlwf && +_xmlwf() +{ + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -d) + _filedir -d + return 0 + ;; + -e) + COMPREPLY=( $( compgen -W 'US-ASCII UTF-8 UTF-16 \ + ISO-8859-1' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c -d -e -m -n -p -r -s -t -v -w \ + -x' -- "$cur" ) ) + return 0 + fi + + _filedir '@(*ml|htm|svg)' +} && +complete -F _xmlwf $filenames xmlwf + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/xmms b/contrib/xmms new file mode 100644 index 00000000..ca49545b --- /dev/null +++ b/contrib/xmms @@ -0,0 +1,30 @@ +# bash completion for xmms + +have xmms && +_xmms() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h --help -r --rew -p --play \ + -u --pause -s --stop -t --play-pause -f --fwd -e \ + --enqueue -m --show-main-window -i --sm-client-id \ + -v --version' -- "$cur" ) ) + else + _filedir '@(mp[23]|MP[23]|ogg|OGG|wav|WAV|pls|m3u|xm|mod|s[3t]m|it|mtm|ult|flac)' + + fi + +} && +complete -F _xmms $filenames xmms + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/xrandr b/contrib/xrandr new file mode 100644 index 00000000..cd5c05b8 --- /dev/null +++ b/contrib/xrandr @@ -0,0 +1,56 @@ +# bash completion for xrandr + +have xrandr && +_xrandr() +{ + local cur prev output modes + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + --output) + local outputs=$(xrandr|grep 'connected'|awk '{print $1}') + COMPREPLY=( $(compgen -W "$outputs" -- "$cur")) + return 0 + ;; + --mode) + for(( i = 1; i < COMP_CWORD; i++ )); do + if [[ "${COMP_WORDS[i]}" == "--output" ]]; then + output=${COMP_WORDS[i+1]} + break + fi + done + modes=$(xrandr|sed -e "1,/$output/ d" \ + -e "/connected/,$ d"|awk '{print $1}') + COMPREPLY=( $( compgen -W "$modes" -- "$cur")) + return 0 + ;; + esac + + case "$cur" in + *) + COMPREPLY=( $(compgen -W '-d -display -help -o \ + --orientation -q --query -s --size\ + -r --rate -v --version -x -y --screen \ + --verbose --dryrun --prop --fb \ + --fbmm --dpi --output --auto --mode \ + --preferred --pos --reflect --rotate \ + --left-of --right-of --above --below \ + --same-as --set --off --crtc --newmode \ + --rmmode --addmode --delmode' -- "$cur")) + return 0 + ;; + esac + + return 0 +} && +complete -F _xrandr xrandr + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/xz b/contrib/xz new file mode 100644 index 00000000..f2719861 --- /dev/null +++ b/contrib/xz @@ -0,0 +1,103 @@ +# xz(1) completion + +have xz && +_xz() +{ + COMPREPLY=() + local cur=`_get_cword` + local prev=${COMP_WORDS[COMP_CWORD-1]} + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-z --compress -d --decompress \ + -t --test -l --list -k --keep -f --force -c --stdout \ + -S --suffix --files --files0 -F --format -C --check \ + -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -M --memory --lzma1 \ + --lzma2 --x86 --powerpc --ia64 --arm --armthumb \ + --sparc --delta -q --quiet -v --verbose -h --help \ + -H --long-help -V --version' -- "$cur" ) ) + return 0 + fi + + local split=false + _split_longopt && split=true + + local xspec="*.@(xz|lzma)" + + case "$prev" in + -@(!(-*)[dlt]*|-decompress|-list|-test)) + xspec="!"$xspec + ;; + --files|--files0) + _filedir + return 0 + ;; + -C|--check) + COMPREPLY=( $( compgen -W 'crc32 crc64 sha256' -- "$cur" ) ) + return 0 + ;; + -F|--format) + COMPREPLY=( $( compgen -W 'auto xz lzma raw' -- "$cur" ) ) + return 0 + ;; + -M|--memory|-S|--suffix|--delta|--lzma1|--lzma2) + # argument required but no completions available + return 0 + ;; + -h|--help|-H|--long-help|-V|--version) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + _expand || return 0 + + local IFS=$'\t\n' + COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ + $( compgen -d -- "$cur" ) ) +} && +complete -F _xz $filenames xz + +# xzdec(1) completion +# +have xzdec && +_xzdec() +{ + COMPREPLY=() + local cur=`_get_cword` + local prev=${COMP_WORDS[COMP_CWORD-1]} + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-M --memory -h --help -V --version' \ + -- "$cur" ) ) + return 0 + fi + + local split=false + _split_longopt && split=true + + case "$prev" in + -M|--memory) + # argument required but no completions available + return 0 + ;; + -h|--help|-V|--version) + # all other arguments are noop with these + return 0 + ;; + esac + + $split && return 0 + + _filedir xz # no lzma support here as of xz 4.999.8beta +} && +complete -F _xzdec $filenames xzdec + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/yp-tools b/contrib/yp-tools new file mode 100644 index 00000000..60155279 --- /dev/null +++ b/contrib/yp-tools @@ -0,0 +1,35 @@ +# bash completion for yp-tools + +have ypmatch && +_ypmatch() +{ + local cur map + + COMPREPLY=() + cur=`_get_cword` + + [ $1 = ypcat ] && [ $COMP_CWORD -gt 1 ] && return 0 + [ $1 = ypmatch ] && [ $COMP_CWORD -gt 2 ] && return 0 + + if [ $1 = ypmatch ] && [ $COMP_CWORD -eq 1 ] && \ + [ ${#COMP_WORDS[@]} -eq 3 ]; then + map=${COMP_WORDS[2]} + COMPREPLY=( $( compgen -W '$( ypcat $map | \ + cut -d':' -f 1 )' -- "$cur") ) + else + [ $1 = ypmatch ] && [ $COMP_CWORD -ne 2 ] && return 0 + COMPREPLY=( $( compgen -W \ + '$( echo $(ypcat -x | cut -d"\"" -f 2))' -- "$cur")) + fi + + return 0 +} && +complete -F _ypmatch ypmatch ypcat + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/yum-arch b/contrib/yum-arch new file mode 100644 index 00000000..1cc8320c --- /dev/null +++ b/contrib/yum-arch @@ -0,0 +1,30 @@ +# yum-arch(8) completion + +have yum-arch && +_yum_arch() +{ + local cur + COMPREPLY=() + cur=`_get_cword` + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W '-d -v -vv -n -c -z -s -l \ + -q' -- "$cur" ) ) + ;; + *) + _filedir -d + ;; + esac + + return 0 +} && +complete -F _yum_arch $filenames yum-arch + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh |