summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorDavid Paleino <d.paleino@gmail.com>2009-04-03 13:07:16 +0200
committerDavid Paleino <d.paleino@gmail.com>2009-04-03 13:07:16 +0200
commit96d00c3d7f1912d4f3f76f8ea21ef68d179b8b30 (patch)
tree1e956dc3b947bf1c80f661b27731775a5f7932ba /contrib
downloadbash-completion-96d00c3d7f1912d4f3f76f8ea21ef68d179b8b30.tar.gz
Imported Upstream version 1.0upstream/1.0
Diffstat (limited to 'contrib')
-rw-r--r--contrib/_subversion426
-rw-r--r--contrib/apache2ctl18
-rw-r--r--contrib/bitkeeper20
-rw-r--r--contrib/bittorrent38
-rw-r--r--contrib/brctl44
-rw-r--r--contrib/cksfv30
-rw-r--r--contrib/clisp26
-rw-r--r--contrib/cowsay26
-rw-r--r--contrib/cpan2dist45
-rw-r--r--contrib/dsniff272
-rw-r--r--contrib/freeciv64
-rw-r--r--contrib/gcl25
-rw-r--r--contrib/gkrellm37
-rw-r--r--contrib/gnatmake32
-rw-r--r--contrib/gpg244
-rw-r--r--contrib/harbour8
-rw-r--r--contrib/isql13
-rw-r--r--contrib/larch39
-rw-r--r--contrib/lilypond6
-rw-r--r--contrib/lisp26
-rw-r--r--contrib/lzma42
-rw-r--r--contrib/lzop53
-rw-r--r--contrib/mailman533
-rw-r--r--contrib/mcrypt80
-rw-r--r--contrib/minicom46
-rw-r--r--contrib/modules84
-rw-r--r--contrib/monodevelop97
-rw-r--r--contrib/mtx46
-rw-r--r--contrib/net-tools89
-rw-r--r--contrib/p455
-rw-r--r--contrib/povray59
-rw-r--r--contrib/qdbus20
-rw-r--r--contrib/qemu100
-rw-r--r--contrib/quota-tools309
-rw-r--r--contrib/rdesktop53
-rw-r--r--contrib/ri89
-rw-r--r--contrib/sbcl25
-rw-r--r--contrib/sitecopy31
-rw-r--r--contrib/snownews19
-rw-r--r--contrib/ssh142
-rw-r--r--contrib/svk263
-rw-r--r--contrib/unace29
-rw-r--r--contrib/unrar30
-rw-r--r--contrib/vncviewer126
44 files changed, 3659 insertions, 0 deletions
diff --git a/contrib/_subversion b/contrib/_subversion
new file mode 100644
index 00000000..5489f8a3
--- /dev/null
+++ b/contrib/_subversion
@@ -0,0 +1,426 @@
+# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
+# ex: ts=8 sw=8 noet filetype=sh
+#
+# svn completion
+#
+have svn &&
+{
+_svn()
+{
+ local cur prev commands options command
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ commands='add blame praise annotate ann cat checkout co cleanup commit \
+ ci copy cp delete del remove rm diff di export help ? h import \
+ info list ls lock log merge mkdir move mv rename ren \
+ propdel pdel pd propedit pedit pe propget pget pg \
+ proplist plist pl propset pset ps resolved revert \
+ status stat st switch sw unlock update up'
+
+ 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
+ --config-dir)
+ _filedir -d
+ return 0;
+ ;;
+ -@(F|-file|-targets))
+ _filedir
+ return 0;
+ ;;
+ --encoding)
+ COMPREPLY=( $( compgen -W \
+ '$( iconv --list | sed -e "s@//@@;" )' \
+ -- "$cur" ) )
+ return 0;
+ ;;
+ --@(editor|diff|diff3)-cmd)
+ COMP_WORDS=(COMP_WORDS[0] $cur)
+ COMP_CWORD=1
+ _command
+ return 0;
+ ;;
+ esac
+
+ command=${COMP_WORDS[1]}
+
+ if [[ "$cur" == -* ]]; then
+ # possible options for the command
+ case $command in
+ add)
+ options='--auto-props --no-auto-props \
+ --force --targets --no-ignore \
+ --non-recursive -N -q --quiet'
+ ;;
+ @(blame|annotate|ann|praise))
+ options='-r --revisions --username \
+ --password --no-auth-cache \
+ --non-interactive -v \
+ --verbose --incremental --xml'
+ ;;
+ cat)
+ options='-r --revision --username \
+ --password --no-auth-cache \
+ --non-interactive'
+ ;;
+ @(checkout|co))
+ options='-r --revision -q --quiet -N \
+ --non-recursive --username \
+ --password --no-auth-cache \
+ --non-interactive \
+ --ignore-externals'
+ ;;
+ cleanup)
+ options='--diff3-cmd'
+ ;;
+ @(commit|ci))
+ options='-m --message -F --file \
+ --encoding --force-log -q \
+ --quiet --non-recursive -N \
+ --targets --editor-cmd \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive --no-unlock'
+ ;;
+ @(copy|cp))
+ options='-m --message -F --file \
+ --encoding --force-log -r \
+ --revision -q --quiet \
+ --editor-cmd -username \
+ --password --no-auth-cache \
+ --non-interactive'
+ ;;
+ @(delete|del|remove|rm))
+ options='--force -m --message -F \
+ --file --encoding --force-log \
+ -q --quiet --targets \
+ --editor-cmd -username \
+ --password --no-auth-cache \
+ --non-interactive'
+ ;;
+ @(diff|di))
+ options='-r --revision -x --extensions \
+ --diff-cmd --no-diff-deleted \
+ -N --non-recursive --username \
+ --password --no-auth-cache \
+ --non-interactive --force \
+ --old --new --notice-ancestry'
+ ;;
+ export)
+ options='-r --revision -q --quiet \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive -N \
+ --non-recursive --force \
+ --native-eol --ignore-externals'
+ ;;
+ import)
+ options='--auto-props --no-auto-props \
+ -m --message -F --file \
+ --encoding --force-log -q \
+ --quiet --non-recursive \
+ --no-ignore --editor-cmd \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive'
+ ;;
+ info)
+ options='--username --password \
+ --no-auth-cache \
+ --non-interactive -r \
+ --revision --xml --targets \
+ -R --recursive --incremental'
+ ;;
+ @(list|ls))
+ options='-r --revision -v --verbose -R \
+ --recursive --username \
+ --password --no-auth-cache \
+ --non-interactive \
+ --incremental --xml'
+ ;;
+ lock)
+ options='-m --message -F --file \
+ --encoding --force-log \
+ --targets --force --username \
+ --password --no-auth-cache \
+ --non-interactive'
+ ;;
+ log)
+ options='-r --revision -v --verbose \
+ --targets --username \
+ --password --no-auth-cache \
+ --non-interactive \
+ --stop-on-copy --incremental \
+ --xml -q --quiet --limit'
+ ;;
+ merge)
+ options='-r --revision -N \
+ --non-recursive -q --quiet \
+ --force --dry-run --diff3-cmd \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive \
+ --ignore-ancestry'
+ ;;
+ mkdir)
+ options='-m --message -F --file \
+ --encoding --force-log -q \
+ --quiet --editor-cmd \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive'
+ ;;
+ @(move|mv|rename|ren))
+ options='-m --message -F --file \
+ --encoding --force-log -r \
+ --revision -q --quiet \
+ --force --editor-cmd \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive'
+ ;;
+ @(propdel|pdel|pd))
+ options='-q --quiet -R --recursive -r \
+ --revision --revprop \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive'
+ ;;
+ @(propedit|pedit|pe))
+ options='-r --revision --revprop \
+ --encoding --editor-cmd \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive --force'
+ ;;
+ @(propget|pget|pg))
+ options='-R --recursive -r --revision \
+ --revprop --strict --username \
+ --password --no-auth-cache \
+ --non-interactive'
+ ;;
+ @(proplist|plist|pl))
+ options='-v --verbose -R --recursive \
+ -r --revision --revprop -q \
+ --quiet --username --password \
+ --no-auth-cache \
+ --non-interactive'
+ ;;
+ @(propset|pset|ps))
+ options='-F --file -q --quiet \
+ --targets -R --recursive \
+ --revprop --encoding \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive -r \
+ --revision --force'
+ ;;
+ resolved)
+ options='--targets -R --recursive -q \
+ --quiet'
+ ;;
+ revert)
+ options='--targets -R --recursive -q \
+ --quiet'
+ ;;
+ @(status|stat|st))
+ options='-u --show-updates -v \
+ --verbose -N --non-recursive \
+ -q --quiet --username \
+ --password --no-auth-cache \
+ --non-interactive --no-ignore \
+ --ignore-externals \
+ --incremental --xml'
+ ;;
+ @(switch|sw))
+ options='--relocate -r --revision -N \
+ --non-recursive -q --quiet \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive --diff3-cmd'
+ ;;
+ unlock)
+ options='--targets --force --username \
+ --password --no-auth-cache \
+ --non-interactive'
+ ;;
+ @(update|up))
+ options='-r --revision -N \
+ --non-recursive -q --quiet \
+ --username --password \
+ --no-auth-cache \
+ --non-interactive \
+ --diff3-cmd --ignore-externals'
+ ;;
+ esac
+ options="$options --help -h --config-dir"
+
+ COMPREPLY=( $( compgen -W "$options" -- $cur ) )
+ else
+ if [[ "$command" == @(help|h|\?) ]]; then
+ COMPREPLY=( $( compgen -W "$commands" -- $cur ) )
+ else
+ _filedir
+ fi
+ fi
+ fi
+
+ return 0
+}
+complete -F _svn $filenames svn
+
+_svnadmin()
+{
+ local cur prev commands options mode
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ commands='create deltify dump help ? hotcopy list-dblogs \
+ list-unused-dblogs load lslocks lstxns recover rmlocks \
+ rmtxns setlog verify'
+
+ 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
+ --config-dir)
+ _filedir -d
+ return 0;
+ ;;
+ --fs-type)
+ COMPREPLY=( $( compgen -W 'fsfs bdb' -- $cur ) )
+ return 0;
+ ;;
+ esac
+
+ command=${COMP_WORDS[1]}
+
+ if [[ "$cur" == -* ]]; then
+ # possible options for the command
+ case $command in
+ create)
+ options='--bdb-txn-nosync \
+ --bdb-log-keep --config-dir \
+ --fs-type'
+ ;;
+ deltify)
+ options='-r --revision -q --quiet'
+ ;;
+ dump)
+ options='-r --revision --incremental \
+ -q --quiet --deltas'
+ ;;
+ hotcopy)
+ options='--clean-logs'
+ ;;
+ load)
+ options='--ignore-uuid --force-uuid \
+ --parent-dir -q --quiet \
+ --use-pre-commit-hook \
+ --use-post-commit-hook'
+ ;;
+ rmtxns)
+ options='-q --quiet'
+ ;;
+ setlog)
+ options='-r --revision --bypass-hooks'
+ ;;
+ esac
+
+ options="$options --help -h"
+ COMPREPLY=( $( compgen -W "$options" -- $cur ) )
+ else
+ if [[ "$command" == @(help|h|\?) ]]; then
+ COMPREPLY=( $( compgen -W "$commands" -- $cur ) )
+ else
+ _filedir
+ fi
+ fi
+ fi
+
+ return 0
+}
+complete -F _svnadmin $default svnadmin
+
+_svnlook()
+{
+ local cur prev commands options mode
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ commands='author cat changed date diff dirs-changed help ? h history \
+ info lock log propget pget pg proplist plist pl tree uuid \
+ youngest'
+
+ if [[ $COMP_CWORD -eq 1 ]] ; then
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '--version' -- $cur ) )
+ else
+ COMPREPLY=( $( compgen -W "$commands" -- $cur ) )
+ fi
+ else
+ command=${COMP_WORDS[1]}
+
+ if [[ "$cur" == -* ]]; then
+ # possible options for the command
+ case $command in
+ @(author|cat|date|dirs-changed|info|log))
+ options='-r --revision -t \
+ --transaction'
+ ;;
+ changed)
+ options='-r --revision -t \
+ --transaction --copy-info'
+ ;;
+ diff)
+ options='-r --revision -t \
+ --transaction \
+ --no-diff-deleted \
+ --no-diff-added \
+ --diff-copy-from'
+ ;;
+ history)
+ options='-r --revision --show-ids'
+ ;;
+ prop@(get|list))
+ options='-r --revision -t \
+ --transaction --revprop'
+ ;;
+ tree)
+ options='-r --revision -t \
+ --transaction --show-ids \
+ --full-paths'
+ ;;
+ esac
+
+ options="$options --help -h"
+ COMPREPLY=( $( compgen -W "$options" -- $cur ) )
+ else
+ if [[ "$command" == @(help|h|\?) ]]; then
+ COMPREPLY=( $( compgen -W "$commands" -- $cur ) )
+ else
+ _filedir
+ fi
+ fi
+ fi
+
+ return 0
+}
+complete -F _svnlook $default svnlook
+}
diff --git a/contrib/apache2ctl b/contrib/apache2ctl
new file mode 100644
index 00000000..8794b4a9
--- /dev/null
+++ b/contrib/apache2ctl
@@ -0,0 +1,18 @@
+# -*- 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" ) )
+}
+complete -F _apache2ctl apache2ctl
+}
diff --git a/contrib/bitkeeper b/contrib/bitkeeper
new file mode 100644
index 00000000..8e1cc3cd
--- /dev/null
+++ b/contrib/bitkeeper
@@ -0,0 +1,20 @@
+# -*- 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>
+
+_bk() {
+ local BKCMDS
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ BKCMDS="$( bk help topics | grep '^ bk' | cut -d ' ' -f 4 | \
+ xargs echo )"
+
+ COMPREPLY=( $( compgen -W "$BKCMDS" -- "$cur" ) )
+ _filedir
+
+ return 0
+}
+complete -F _bk bk
diff --git a/contrib/bittorrent b/contrib/bittorrent
new file mode 100644
index 00000000..a240d47c
--- /dev/null
+++ b/contrib/bittorrent
@@ -0,0 +1,38 @@
+# -*- 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>
+
+_btdownload()
+{
+ local cur prev
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ 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
+}
+complete -F _btdownload btdownloadheadless.py btdownloadcurses.py btdownloadgui.py
diff --git a/contrib/brctl b/contrib/brctl
new file mode 100644
index 00000000..1ecdc127
--- /dev/null
+++ b/contrib/brctl
@@ -0,0 +1,44 @@
+# -*- 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
+
+ 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
+} &&
+complete -F _brctl $default brctl
diff --git a/contrib/cksfv b/contrib/cksfv
new file mode 100644
index 00000000..f759e9ee
--- /dev/null
+++ b/contrib/cksfv
@@ -0,0 +1,30 @@
+# -*- 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>
+
+_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
+}
+complete -F _cksfv cksfv
diff --git a/contrib/clisp b/contrib/clisp
new file mode 100644
index 00000000..6c6d9b63
--- /dev/null
+++ b/contrib/clisp
@@ -0,0 +1,26 @@
+# -*- 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>
+
+_clisp()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ # 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 ) )
+ else
+ _filedir
+ fi
+
+ return 0
+}
+complete -F _clisp $default clisp
diff --git a/contrib/cowsay b/contrib/cowsay
new file mode 100644
index 00000000..d9f8bc46
--- /dev/null
+++ b/contrib/cowsay
@@ -0,0 +1,26 @@
+# -*- 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
+
+ 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
+
+ # 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
diff --git a/contrib/cpan2dist b/contrib/cpan2dist
new file mode 100644
index 00000000..caec18fa
--- /dev/null
+++ b/contrib/cpan2dist
@@ -0,0 +1,45 @@
+# -*- 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
+
+ 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
+
+ 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
diff --git a/contrib/dsniff b/contrib/dsniff
new file mode 100644
index 00000000..614005a2
--- /dev/null
+++ b/contrib/dsniff
@@ -0,0 +1,272 @@
+# -*- 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
+#
+_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
+
+}
+complete -F _arpspoof arpspoof
+
+# dnsspoof(8) completion
+#
+_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
+
+}
+complete -F _dnsspoof dnsspoof
+
+# dsniff(8) completion
+#
+_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
+
+}
+complete -F _dsniff dsniff
+
+# filesnarf(8), mailsnarf(8) and msgsnarf (8) completion
+#
+_snarf()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ case "$prev" in
+ -i)
+ _interfaces
+ return 0
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-i -v' -- $cur ) )
+ fi
+
+}
+complete -F _snarf filesnarf mailsnarf msgsnarf
+
+# macof(8) completion
+#
+_macof()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ case "$prev" in
+ -i)
+ _interfaces
+ return 0
+ ;;
+ esac
+
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-i -s -d -e -x -y -n' -- $cur ) )
+ fi
+
+}
+complete -F _macof macof
+
+# sshmitm(8) completion
+#
+_sshmitm()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-d -I -p' -- $cur ) )
+ else
+ _known_hosts
+ fi
+
+}
+complete -F _sshmitm sshmitm
+
+# sshow(8) completion
+#
+_sshow()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ case "$prev" in
+ -i)
+ _interfaces
+ return 0
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-d -i' -- $cur ) )
+ fi
+
+}
+complete -F _sshow sshow
+
+# tcpkill(8) completion
+#
+_tcpkill()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ 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
+
+}
+complete -F _tcpkill tcpkill
+
+# tcpnice(8) completion
+#
+_tcpnice()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ case "$prev" in
+ -i)
+ _interfaces
+ return 0
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-A -I -M -i' -- $cur ) )
+ fi
+
+}
+complete -F _tcpnice tcpnice
+
+# urlsnarf(8) completion
+#
+_urlsnarf()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ case "$prev" in
+ -i)
+ _interfaces
+ return 0
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-n -i -v' -- $cur ) )
+ fi
+
+}
+complete -F _urlsnarf urlsnarf
+
+# webmitm(8) completion
+#
+_webmitm()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-d' -- $cur ) )
+ else
+ _known_hosts
+ fi
+
+}
+complete -F _webmitm webmitm
diff --git a/contrib/freeciv b/contrib/freeciv
new file mode 100644
index 00000000..0a5cf359
--- /dev/null
+++ b/contrib/freeciv
@@ -0,0 +1,64 @@
+# -*- 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>
+
+_civserver()
+{
+ local cur
+
+ 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
+
+ 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>
+#
+_civclient()
+{
+ local cur
+
+ 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
+
+ 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
diff --git a/contrib/gcl b/contrib/gcl
new file mode 100644
index 00000000..dd4f25e0
--- /dev/null
+++ b/contrib/gcl
@@ -0,0 +1,25 @@
+# -*- 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>
+
+_gcl()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ # 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 ) )
+ else
+ _filedir
+ fi
+
+ return 0
+}
+complete -F _gcl -o default gcl
diff --git a/contrib/gkrellm b/contrib/gkrellm
new file mode 100644
index 00000000..43603b10
--- /dev/null
+++ b/contrib/gkrellm
@@ -0,0 +1,37 @@
+# -*- 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>
+
+_gkrellm()
+{
+ local cur
+
+ 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
+
+ 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
diff --git a/contrib/gnatmake b/contrib/gnatmake
new file mode 100644
index 00000000..e4d4e41f
--- /dev/null
+++ b/contrib/gnatmake
@@ -0,0 +1,32 @@
+# -*- 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)
+
+_gnatmake()
+{
+ local cur
+
+ 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
diff --git a/contrib/gpg2 b/contrib/gpg2
new file mode 100644
index 00000000..c41aa0af
--- /dev/null
+++ b/contrib/gpg2
@@ -0,0 +1,44 @@
+# -*- 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
+} &&
+complete -F _gpg2 $default gpg2
+}
diff --git a/contrib/harbour b/contrib/harbour
new file mode 100644
index 00000000..0d111bd1
--- /dev/null
+++ b/contrib/harbour
@@ -0,0 +1,8 @@
+# -*- 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/isql b/contrib/isql
new file mode 100644
index 00000000..fd66af58
--- /dev/null
+++ b/contrib/isql
@@ -0,0 +1,13 @@
+# -*- 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>
+
+_isql()
+{
+ local cur
+ cur=`_get_cword`
+
+ [ -f "$ODBCINI" ] && COMPREPLY=( $( grep \\[$cur "$ODBCINI" | tr -d \\[\\] ) )
+}
+complete -F _isql isql
diff --git a/contrib/larch b/contrib/larch
new file mode 100644
index 00000000..3ec04014
--- /dev/null
+++ b/contrib/larch
@@ -0,0 +1,39 @@
+# -*- 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>
+
+_larch()
+{
+ local cur prev
+
+ 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
+
+ return 0
+}
+complete -F _larch -o default larch
diff --git a/contrib/lilypond b/contrib/lilypond
new file mode 100644
index 00000000..9c523efd
--- /dev/null
+++ b/contrib/lilypond
@@ -0,0 +1,6 @@
+# -*- 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/lisp b/contrib/lisp
new file mode 100644
index 00000000..be8e1f92
--- /dev/null
+++ b/contrib/lisp
@@ -0,0 +1,26 @@
+# -*- 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>
+
+_lisp()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ # 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 ) )
+ else
+ _filedir
+ fi
+
+ return 0
+}
+complete -F _lisp -o default lisp
diff --git a/contrib/lzma b/contrib/lzma
new file mode 100644
index 00000000..99005bc8
--- /dev/null
+++ b/contrib/lzma
@@ -0,0 +1,42 @@
+# -*- 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 ) )
+} &&
+complete -F _lzma $filenames lzma
diff --git a/contrib/lzop b/contrib/lzop
new file mode 100644
index 00000000..59a7a429
--- /dev/null
+++ b/contrib/lzop
@@ -0,0 +1,53 @@
+# -*- 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 ) )
+} &&
+complete -F _lzop $filenames lzop
diff --git a/contrib/mailman b/contrib/mailman
new file mode 100644
index 00000000..45b7db36
--- /dev/null
+++ b/contrib/mailman
@@ -0,0 +1,533 @@
+# -*- 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>
+
+_mailman_lists()
+{
+ COMPREPLY=( $( list_lists -b | grep "^$cur") )
+}
+
+_add_members()
+{
+ 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
+
+}
+complete -F _add_members add_members
+
+_remove_members()
+{
+
+ 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 '--file= -f --all -a \
+ --fromall --nouserack -n --noadminack -N \
+ --help -h' -- $cur ) )
+ else
+ _mailman_lists
+ fi
+
+}
+complete -F _remove_members remove_members
+
+_find_member()
+{
+
+ local cur prev
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ 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
+
+}
+complete -F _find_member find_member
+
+_clone_member()
+{
+
+ 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= --remove -r \
+ --admin -a --quiet -q --nomodify -n --help -h' -- $cur ) )
+ fi
+
+}
+complete -F _clone_member clone_member
+
+_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
+
+}
+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
+
+_unshunt()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-h --help' -- $cur ) )
+ else
+ _filedir -d
+ fi
+
+}
+complete -F _unshunt unshunt
+
+_list_admins()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '--all-vhost= -v \
+ --all -a -h --help' -- $cur ) )
+ else
+ _mailman_lists
+ fi
+
+}
+complete -F _list_admins list_admins
+
+_list_owners()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-w --with-listnames \
+ -m --moderators -h --help' -- $cur ) )
+ else
+ _mailman_lists
+ fi
+
+}
+complete -F _list_owners list_owners
+
+_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
+
+}
+complete -F _list_members list_members
+
+_change_pw()
+{
+ 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 '-a --all --domain= -d --listname= -l \
+ --password= -p --quiet -q -h --help' -- $cur ) )
+ fi
+
+}
+complete -F _change_pw change_pw
+
+_withlist()
+{
+ local cur
+
+ 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
+
+}
+complete -F _withlist withlist
+
+_newlist()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-l --language -q --quiet -h --help' -- $cur ) )
+ else
+ _mailman_lists
+ fi
+
+}
+complete -F _newlist newlist
+
+_rmlist()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '--archives -a \
+ -h --help' -- $cur ) )
+ else
+ _mailman_lists
+ fi
+
+}
+complete -F _rmlist rmlist
+
+_config_list()
+{
+ local cur prev
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ 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
+
+}
+complete -F _config_list $filenames config_list
+
+_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
+
+}
+complete -F _arch $filenames arch
+
+_cleanarch()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-s --status -n --dry-run \
+ -q --quiet -h --help' -- $cur ) )
+ fi
+
+}
+complete -F _cleanarch cleanarch
+
+_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
+
+}
+complete -F _inject $filenames inject
+
+_dumpdb()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '--marshal -m --pickle -p --noprint -n -h --help' -- $cur ) )
+ else
+ _filedir
+ fi
+
+}
+complete -F _dumpdb $filenames dumpdb
+
+_check_db()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '--all -a --verbose -v \
+ -h --help' -- $cur ) )
+ else
+ _mailman_lists
+ fi
+
+}
+complete -F _check_db check_db
+
+_check_perms()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-f -v -h' -- $cur ) )
+ fi
+
+}
+complete -F _check_perms check_perms
+
+_genaliases()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-q --quiet -h --help' -- $cur ) )
+ fi
+
+}
+complete -F _genaliases genaliases
+
+_mmsitepass()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-c --listcreator -h --help' -- $cur ) )
+ fi
+
+}
+complete -F _mmsitepass mmsitepass
+
+_qrunner()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-r --runner= --once -o \
+ -l --list -v --verbose -s --subproc -h --help' -- $cur ) )
+ fi
+
+}
+complete -F _qrunner qrunner
+
+_mailmanctl()
+{
+ local cur
+
+ 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
+
+}
+complete -F _mailmanctl mailmanctl
diff --git a/contrib/mcrypt b/contrib/mcrypt
new file mode 100644
index 00000000..81f5d8b3
--- /dev/null
+++ b/contrib/mcrypt
@@ -0,0 +1,80 @@
+# -*- 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>
+
+_mcrypt()
+{
+ local cur prev i decrypt
+
+ 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
+
+ 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
diff --git a/contrib/minicom b/contrib/minicom
new file mode 100644
index 00000000..dcc4b5f2
--- /dev/null
+++ b/contrib/minicom
@@ -0,0 +1,46 @@
+# -*- 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
+
+ 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
+
+
+ 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
diff --git a/contrib/modules b/contrib/modules
new file mode 100644
index 00000000..9218d0b8
--- /dev/null
+++ b/contrib/modules
@@ -0,0 +1,84 @@
+# -*- 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.
+#
+# See http://sourceforge.net/projects/modules/
+# http://modules.sourceforge.net/
+#
+# There are several versions of modules that are commonly used. Older
+# Cray UNICOS systems and many other sites use 2.2.2b. The latest GPL'd
+# version is 3.1.6. But the module alias is somewhat self-documenting
+# via the `module help' command, so use that to print the options.
+#
+# Programmable completion might be more difficult under tcsh since the
+# module command is an alias, and the `module avail' command returns
+# its output as stderr.
+
+type module &>/dev/null && {
+
+_module_list ()
+{
+ local modules="$( echo $LOADEDMODULES | sed 's/:/ /g' | sort )"
+ compgen -W "$modules" -- $1
+}
+
+_module_path ()
+{
+ local modules="$( echo $MODULEPATH | sed 's/:/ /g' | sort )"
+ compgen -W "$modules" -- $1
+}
+
+_module_avail ()
+{
+ local modules="$( \
+ module avail 2>&1 | \
+ egrep -v '^(-|$)' | \
+ xargs printf '%s\n' | sort )"
+
+ compgen -W "$modules" -- $1
+}
+
+# A completion function for the module alias
+_module () {
+ local cur prev options
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ if [ $COMP_CWORD -eq 1 ] ; then
+ # First parameter on line -- we expect it to be a mode selection
+
+ 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
+
+ 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
+}
diff --git a/contrib/monodevelop b/contrib/monodevelop
new file mode 100644
index 00000000..3d8430cb
--- /dev/null
+++ b/contrib/monodevelop
@@ -0,0 +1,97 @@
+# -*- 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
+} &&
+complete -F _monodevelop monodevelop
+
+have mdtool &&
+_mdtool()
+{
+ local cur prev command i
+
+ COMPREPLY=()
+
+ 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
+
+ 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
diff --git a/contrib/mtx b/contrib/mtx
new file mode 100644
index 00000000..82652054
--- /dev/null
+++ b/contrib/mtx
@@ -0,0 +1,46 @@
+# -*- 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>
+
+_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"
+
+ tapes=$(mtx status | \
+ 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 }')
+ 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
+ else
+ COMPREPLY=( $( compgen -W "$options" -- $cur ) )
+ fi
+ return 0
+}
+complete -F _mtx mtx
diff --git a/contrib/net-tools b/contrib/net-tools
new file mode 100644
index 00000000..d926e084
--- /dev/null
+++ b/contrib/net-tools
@@ -0,0 +1,89 @@
+# -*- 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
+} &&
+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
+} &&
+complete -F _mii_diag $default mii-diag
diff --git a/contrib/p4 b/contrib/p4
new file mode 100644
index 00000000..ada8a57f
--- /dev/null
+++ b/contrib/p4
@@ -0,0 +1,55 @@
+# -*- 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>
+
+_p4()
+{
+ local cur prev prev2 p4commands p4filetypes
+
+ 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"
+
+ 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
+}
+complete -F _p4 $default p4 g4
diff --git a/contrib/povray b/contrib/povray
new file mode 100644
index 00000000..c69b0db4
--- /dev/null
+++ b/contrib/povray
@@ -0,0 +1,59 @@
+# -*- 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>
+
+_povray()
+{
+ 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]}
+
+ _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 ;;
+ 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
diff --git a/contrib/qdbus b/contrib/qdbus
new file mode 100644
index 00000000..ba749c6a
--- /dev/null
+++ b/contrib/qdbus
@@ -0,0 +1,20 @@
+# -*- 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" ) )
+} &&
+complete -F _qdbus qdbus
diff --git a/contrib/qemu b/contrib/qemu
new file mode 100644
index 00000000..7baeddf3
--- /dev/null
+++ b/contrib/qemu
@@ -0,0 +1,100 @@
+# -*- 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
+
+ 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
+
+
+ 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
+} &&
+complete -F _qemu $filenames qemu
diff --git a/contrib/quota-tools b/contrib/quota-tools
new file mode 100644
index 00000000..f77d1c35
--- /dev/null
+++ b/contrib/quota-tools
@@ -0,0 +1,309 @@
+# -*- 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 ) )
+}
+
+_quota_formats()
+{
+ 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 ) )
+}
+
+_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
+}
+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
+}
+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
+}
+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
+}
+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
+}
+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
+}
+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
+}
+complete -F _quotaoff $default quotaoff
+}
diff --git a/contrib/rdesktop b/contrib/rdesktop
new file mode 100644
index 00000000..ba941eec
--- /dev/null
+++ b/contrib/rdesktop
@@ -0,0 +1,53 @@
+# -*- 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
+
+ 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
+
+ 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
+
+} &&
+complete -F _rdesktop rdesktop
diff --git a/contrib/ri b/contrib/ri
new file mode 100644
index 00000000..9ec520c0
--- /dev/null
+++ b/contrib/ri
@@ -0,0 +1,89 @@
+# -*- 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>
+
+ri_get_methods()
+{
+ local regex
+
+ 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 ) )
+}
+
+# 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
+
+ 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
+
+ # 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
+
+ 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
diff --git a/contrib/sbcl b/contrib/sbcl
new file mode 100644
index 00000000..1b14eea3
--- /dev/null
+++ b/contrib/sbcl
@@ -0,0 +1,25 @@
+# -*- 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>
+
+_sbcl()
+{
+ local cur
+
+ COMPREPLY=()
+ cur=`_get_cword`
+
+ # 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 ) )
+ else
+ _filedir
+ fi
+
+ return 0
+}
+complete -F _sbcl $default sbcl sbcl-mt
diff --git a/contrib/sitecopy b/contrib/sitecopy
new file mode 100644
index 00000000..088951cd
--- /dev/null
+++ b/contrib/sitecopy
@@ -0,0 +1,31 @@
+# -*- 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
+
+_sitecopy()
+{
+ local cur
+
+ 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
+
+ return 0
+}
+complete -F _sitecopy $default sitecopy
diff --git a/contrib/snownews b/contrib/snownews
new file mode 100644
index 00000000..89007678
--- /dev/null
+++ b/contrib/snownews
@@ -0,0 +1,19 @@
+# -*- 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>
+
+_snownews()
+{
+ local cur
+
+ 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
+}
+complete -F _snownews snownews
diff --git a/contrib/ssh b/contrib/ssh
new file mode 100644
index 00000000..85325aa2
--- /dev/null
+++ b/contrib/ssh
@@ -0,0 +1,142 @@
+# -*- 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()
+{
+ local cur prev
+ local optconfigfile
+ local -a config
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ case "$prev" in
+ -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
+ 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")"
+ fi
+ break
+ fi
+ shift
+ done
+
+ _known_hosts -a "$optconfigfile"
+
+ [ $COMP_CWORD -eq 1 -o -n "$optconfigfile" ] || \
+ COMPREPLY=( "${COMPREPLY[@]}" $( compgen -c -- $cur ) )
+ esac
+
+ return 0
+}
+shopt -u hostcomplete && complete -F _ssh ssh slogin sftp xhost autossh
+
+# scp(1) completion
+#
+_scp()
+{
+ local cur userhost path
+ local optconfigfile
+
+ COMPREPLY=()
+ cur=`_get_cword ":"`
+
+ _expand || return 0
+
+ if [[ "$cur" == *:* ]]; then
+ local IFS=$'\t\n'
+ # 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' ) )
+ 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")"
+ fi
+ break
+ fi
+ shift
+ done
+
+ [[ "$cur" == */* ]] || _known_hosts -c -a "$optconfigfile"
+
+ # 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' ) )
+
+ return 0
+}
+complete -F _scp $nospace scp
+
+# ssh-copy-id(1) completion
+#
+_ssh_copy_id() {
+ local cur prev
+
+ COMPREPLY=()
+ cur=`_get_cword`
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ case "$prev" in
+ -*i)
+ _filedir
+ ;;
+ *)
+ _known_hosts -a
+
+ [ $COMP_CWORD -eq 1 ] || \
+ COMPREPLY=( "${COMPREPLY[@]}" $( compgen -- $cur ) )
+ esac
+
+ return 0
+}
+complete -F _ssh_copy_id $filenames ssh-copy-id
+}
diff --git a/contrib/svk b/contrib/svk
new file mode 100644
index 00000000..e2d0fac7
--- /dev/null
+++ b/contrib/svk
@@ -0,0 +1,263 @@
+# -*- 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>
+
+_svk()
+{
+ local cur prev commands options command
+
+ 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'
+
+ 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
+
+ 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"
+
+ 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
diff --git a/contrib/unace b/contrib/unace
new file mode 100644
index 00000000..c6376742
--- /dev/null
+++ b/contrib/unace
@@ -0,0 +1,29 @@
+# -*- 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()
+{
+ local cur
+
+ 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
+
+}
+complete -F _unace $filenames unace
diff --git a/contrib/unrar b/contrib/unrar
new file mode 100644
index 00000000..9dcd2065
--- /dev/null
+++ b/contrib/unrar
@@ -0,0 +1,30 @@
+# -*- 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()
+{
+ local cur
+
+ 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
+}
+complete -F _unrar $filenames unrar
diff --git a/contrib/vncviewer b/contrib/vncviewer
new file mode 100644
index 00000000..933783a4
--- /dev/null
+++ b/contrib/vncviewer
@@ -0,0 +1,126 @@
+# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
+# ex: ts=8 sw=8 noet filetype=sh
+#
+# bash completion for 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
+} &&
+complete -F _vncviewer_bootstrap vncviewer
+
+
+_tightvncviewer()
+{
+ local cur prev
+
+ 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
+
+
+ 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
+} &&
+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
+_xvnc4viewer()
+{
+ local cur prev
+
+ 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
+
+ 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
+} &&
+complete -F _xvnc4viewer xvnc4viewer