summaryrefslogtreecommitdiffstats
path: root/completions
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 16:24:27 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 16:24:27 +0000
commit6c18848a903eb3ee06dccd915859ce64195c257c (patch)
treeea0fe36eb5e6f40e0a1f765d44c4b0c0b2bfb089 /completions
parentInitial commit. (diff)
downloadbash-completion-6c18848a903eb3ee06dccd915859ce64195c257c.tar.xz
bash-completion-6c18848a903eb3ee06dccd915859ce64195c257c.zip
Adding upstream version 1:2.11.upstream/1%2.11
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--completions/.gitignore235
-rw-r--r--completions/2to339
-rw-r--r--completions/7z128
-rw-r--r--completions/Makefile.am950
-rw-r--r--completions/_adb69
-rw-r--r--completions/_cal38
-rw-r--r--completions/_chfn8
-rw-r--r--completions/_chsh31
-rw-r--r--completions/_dmesg33
-rw-r--r--completions/_eject33
-rw-r--r--completions/_hexdump31
-rw-r--r--completions/_hwclock26
-rw-r--r--completions/_ionice60
-rw-r--r--completions/_look17
-rw-r--r--completions/_mock69
-rw-r--r--completions/_modules85
-rw-r--r--completions/_mount65
-rw-r--r--completions/_mount.linux252
-rw-r--r--completions/_newgrp19
-rw-r--r--completions/_nmcli201
-rw-r--r--completions/_renice32
-rw-r--r--completions/_repomanage24
-rw-r--r--completions/_reptyr26
-rw-r--r--completions/_rfkill31
-rw-r--r--completions/_rtcwake32
-rw-r--r--completions/_runuser8
-rw-r--r--completions/_su41
-rw-r--r--completions/_svn210
-rw-r--r--completions/_svnadmin78
-rw-r--r--completions/_svnlook63
-rw-r--r--completions/_udevadm77
-rw-r--r--completions/_umount24
-rw-r--r--completions/_umount.linux145
-rw-r--r--completions/_write8
-rw-r--r--completions/_xm224
-rw-r--r--completions/_yum144
-rw-r--r--completions/a2x39
-rw-r--r--completions/abook49
-rw-r--r--completions/aclocal35
-rw-r--r--completions/acpi22
-rw-r--r--completions/add_members31
-rw-r--r--completions/alias20
-rw-r--r--completions/ant102
-rw-r--r--completions/apache2ctl16
-rw-r--r--completions/appdata-validate32
-rw-r--r--completions/apt-build54
-rw-r--r--completions/apt-cache85
-rw-r--r--completions/apt-get104
-rw-r--r--completions/aptitude119
-rw-r--r--completions/arch46
-rw-r--r--completions/arp59
-rw-r--r--completions/arping31
-rw-r--r--completions/arpspoof28
-rw-r--r--completions/asciidoc52
-rw-r--r--completions/aspell88
-rw-r--r--completions/autoconf40
-rw-r--r--completions/automake36
-rw-r--r--completions/autoreconf41
-rw-r--r--completions/autorpm14
-rw-r--r--completions/autoscan34
-rw-r--r--completions/avctrl20
-rw-r--r--completions/badblocks29
-rw-r--r--completions/bind36
-rw-r--r--completions/bk18
-rw-r--r--completions/brctl40
-rw-r--r--completions/btdownloadheadless.py32
-rw-r--r--completions/bts112
-rw-r--r--completions/bzip242
-rw-r--r--completions/cancel27
-rw-r--r--completions/cardctl15
-rw-r--r--completions/carton81
-rw-r--r--completions/ccache38
-rw-r--r--completions/ccze44
-rw-r--r--completions/cfagent21
-rw-r--r--completions/cfrun47
-rw-r--r--completions/chage30
-rw-r--r--completions/change_pw25
-rw-r--r--completions/check_db17
-rw-r--r--completions/check_perms15
-rw-r--r--completions/checksec37
-rw-r--r--completions/chgrp39
-rw-r--r--completions/chkconfig37
-rw-r--r--completions/chmod41
-rw-r--r--completions/chown46
-rw-r--r--completions/chpasswd30
-rw-r--r--completions/chromium-browser50
-rw-r--r--completions/chronyc61
-rw-r--r--completions/chrpath27
-rw-r--r--completions/cksfv29
-rw-r--r--completions/cleanarch16
-rw-r--r--completions/clisp22
-rw-r--r--completions/clone_member25
-rw-r--r--completions/complete49
-rw-r--r--completions/config_list27
-rw-r--r--completions/configure42
-rw-r--r--completions/convert324
-rw-r--r--completions/cowsay23
-rw-r--r--completions/cpan2dist37
-rw-r--r--completions/cpio78
-rw-r--r--completions/cppcheck91
-rw-r--r--completions/crontab48
-rw-r--r--completions/cryptsetup103
-rw-r--r--completions/curl99
-rw-r--r--completions/cvs398
-rw-r--r--completions/cvsps58
-rw-r--r--completions/dd42
-rw-r--r--completions/deja-dup32
-rw-r--r--completions/desktop-file-validate23
-rw-r--r--completions/dhclient34
-rw-r--r--completions/dict64
-rw-r--r--completions/dmypy48
-rw-r--r--completions/dnssec-keygen48
-rw-r--r--completions/dnsspoof26
-rw-r--r--completions/dot45
-rw-r--r--completions/dpkg126
-rw-r--r--completions/dpkg-source98
-rw-r--r--completions/dselect29
-rw-r--r--completions/dsniff26
-rw-r--r--completions/dumpdb18
-rw-r--r--completions/dumpe2fs28
-rw-r--r--completions/e2freefrag24
-rw-r--r--completions/e2label15
-rw-r--r--completions/ebtables78
-rw-r--r--completions/ecryptfs-migrate-home22
-rw-r--r--completions/eog26
-rw-r--r--completions/ether-wake27
-rw-r--r--completions/evince32
-rw-r--r--completions/explodepkg5
-rw-r--r--completions/export65
-rw-r--r--completions/faillog27
-rw-r--r--completions/fbgs50
-rw-r--r--completions/fbi54
-rw-r--r--completions/feh120
-rw-r--r--completions/file32
-rw-r--r--completions/file-roller42
-rw-r--r--completions/filefrag17
-rw-r--r--completions/filesnarf22
-rw-r--r--completions/find113
-rw-r--r--completions/find_member25
-rw-r--r--completions/fio90
-rw-r--r--completions/firefox46
-rw-r--r--completions/flake842
-rw-r--r--completions/freebsd-update29
-rw-r--r--completions/freeciv41
-rw-r--r--completions/freeciv-server22
-rw-r--r--completions/function37
-rw-r--r--completions/fusermount28
-rw-r--r--completions/gcc75
-rw-r--r--completions/gcl21
-rw-r--r--completions/gdb47
-rw-r--r--completions/genaliases15
-rw-r--r--completions/gendiff12
-rw-r--r--completions/genisoimage38
-rw-r--r--completions/geoiplookup33
-rw-r--r--completions/getconf32
-rw-r--r--completions/getent77
-rw-r--r--completions/gkrellm39
-rw-r--r--completions/gm40
-rw-r--r--completions/gnatmake26
-rw-r--r--completions/gnokii237
-rw-r--r--completions/gnome-mplayer38
-rw-r--r--completions/gnome-screenshot31
-rw-r--r--completions/gpasswd25
-rw-r--r--completions/gpg38
-rw-r--r--completions/gpg242
-rw-r--r--completions/gpgv46
-rw-r--r--completions/gphoto255
-rw-r--r--completions/gprof56
-rw-r--r--completions/groupadd26
-rw-r--r--completions/groupdel27
-rw-r--r--completions/groupmems27
-rw-r--r--completions/groupmod29
-rw-r--r--completions/growisofs39
-rw-r--r--completions/grpck25
-rw-r--r--completions/gssdp-discover34
-rw-r--r--completions/gzip43
-rw-r--r--completions/hcitool380
-rw-r--r--completions/hddtemp38
-rw-r--r--completions/hid2hci15
-rw-r--r--completions/hostname23
-rw-r--r--completions/hping235
-rw-r--r--completions/htop33
-rw-r--r--completions/htpasswd36
-rw-r--r--completions/hunspell43
-rw-r--r--completions/iconv38
-rw-r--r--completions/id18
-rw-r--r--completions/idn26
-rw-r--r--completions/ifstat68
-rw-r--r--completions/iftop26
-rw-r--r--completions/ifup39
-rw-r--r--completions/influx35
-rw-r--r--completions/info74
-rw-r--r--completions/inject26
-rw-r--r--completions/inotifywait47
-rw-r--r--completions/insmod18
-rw-r--r--completions/installpkg33
-rw-r--r--completions/interdiff33
-rw-r--r--completions/invoke-rc.d38
-rw-r--r--completions/ip378
-rw-r--r--completions/ipcalc25
-rw-r--r--completions/iperf69
-rw-r--r--completions/ipmitool199
-rw-r--r--completions/ipsec102
-rw-r--r--completions/iptables51
-rw-r--r--completions/ipv6calc38
-rw-r--r--completions/iscsiadm66
-rw-r--r--completions/isort41
-rw-r--r--completions/isql14
-rw-r--r--completions/iwconfig90
-rw-r--r--completions/iwlist22
-rw-r--r--completions/iwpriv31
-rw-r--r--completions/iwspy20
-rw-r--r--completions/jar27
-rw-r--r--completions/jarsigner57
-rw-r--r--completions/java333
-rw-r--r--completions/javaws34
-rw-r--r--completions/jpegoptim38
-rw-r--r--completions/jps25
-rw-r--r--completions/jq54
-rw-r--r--completions/jshint38
-rw-r--r--completions/json_xs31
-rw-r--r--completions/jsonschema30
-rw-r--r--completions/k3b48
-rw-r--r--completions/kcov64
-rw-r--r--completions/kill29
-rw-r--r--completions/killall36
-rw-r--r--completions/kldload21
-rw-r--r--completions/kldunload15
-rw-r--r--completions/koji245
-rw-r--r--completions/ktutil120
-rw-r--r--completions/larch39
-rw-r--r--completions/lastlog25
-rw-r--r--completions/ldapsearch231
-rw-r--r--completions/ldapvi51
-rw-r--r--completions/lftp28
-rw-r--r--completions/lftpget14
-rw-r--r--completions/lilo66
-rw-r--r--completions/links100
-rw-r--r--completions/lintian176
-rw-r--r--completions/lisp22
-rw-r--r--completions/list_admins17
-rw-r--r--completions/list_lists21
-rw-r--r--completions/list_members36
-rw-r--r--completions/list_owners18
-rw-r--r--completions/locale-gen32
-rw-r--r--completions/lpq28
-rw-r--r--completions/lpr33
-rw-r--r--completions/lrzip52
-rw-r--r--completions/lsof56
-rw-r--r--completions/lspci41
-rw-r--r--completions/lsscsi27
-rw-r--r--completions/lsusb20
-rw-r--r--completions/lua23
-rw-r--r--completions/luac27
-rw-r--r--completions/luseradd40
-rw-r--r--completions/luserdel23
-rw-r--r--completions/lvm861
-rw-r--r--completions/lz452
-rw-r--r--completions/lzip47
-rw-r--r--completions/lzma34
-rw-r--r--completions/lzop59
-rw-r--r--completions/macof22
-rw-r--r--completions/mailmanctl18
-rw-r--r--completions/make170
-rw-r--r--completions/makepkg48
-rw-r--r--completions/man101
-rw-r--r--completions/mc29
-rw-r--r--completions/mcrypt67
-rw-r--r--completions/mdadm149
-rw-r--r--completions/mdtool62
-rw-r--r--completions/medusa30
-rw-r--r--completions/mii-diag26
-rw-r--r--completions/mii-tool32
-rw-r--r--completions/minicom40
-rw-r--r--completions/mkinitrd50
-rw-r--r--completions/mktemp29
-rw-r--r--completions/mmsitepass15
-rw-r--r--completions/modinfo47
-rw-r--r--completions/modprobe123
-rw-r--r--completions/monodevelop19
-rw-r--r--completions/mplayer287
-rw-r--r--completions/mr91
-rw-r--r--completions/msynctool42
-rw-r--r--completions/mtx44
-rw-r--r--completions/munin-node-configure33
-rw-r--r--completions/munin-run28
-rw-r--r--completions/munin-update27
-rw-r--r--completions/munindoc13
-rw-r--r--completions/mussh52
-rw-r--r--completions/mutt160
-rw-r--r--completions/mypy57
-rw-r--r--completions/mysql99
-rw-r--r--completions/mysqladmin63
-rw-r--r--completions/nc51
-rw-r--r--completions/ncftp27
-rw-r--r--completions/nethogs26
-rw-r--r--completions/newlist25
-rw-r--r--completions/newusers30
-rw-r--r--completions/ngrep38
-rw-r--r--completions/nmap56
-rw-r--r--completions/nproc23
-rw-r--r--completions/nslookup86
-rw-r--r--completions/nsupdate40
-rw-r--r--completions/ntpdate35
-rw-r--r--completions/oggdec38
-rw-r--r--completions/op59
-rw-r--r--completions/openssl138
-rw-r--r--completions/opera47
-rw-r--r--completions/optipng52
-rw-r--r--completions/p451
-rw-r--r--completions/pack20074
-rw-r--r--completions/passwd24
-rw-r--r--completions/patch70
-rw-r--r--completions/pdftotext39
-rw-r--r--completions/perl146
-rw-r--r--completions/perlcritic51
-rw-r--r--completions/perltidy55
-rw-r--r--completions/pgrep62
-rw-r--r--completions/pidof27
-rw-r--r--completions/pine32
-rw-r--r--completions/ping71
-rw-r--r--completions/pkg-config45
-rw-r--r--completions/pkg-get72
-rw-r--r--completions/pkg_delete18
-rw-r--r--completions/pkgadd62
-rw-r--r--completions/pkgrm46
-rw-r--r--completions/pkgtool35
-rw-r--r--completions/pkgutil95
-rw-r--r--completions/plague-client14
-rw-r--r--completions/pm-hibernate12
-rw-r--r--completions/pm-is-supported13
-rw-r--r--completions/pm-powersave12
-rw-r--r--completions/pngfix36
-rw-r--r--completions/portinstall31
-rw-r--r--completions/portsnap25
-rw-r--r--completions/portupgrade19
-rw-r--r--completions/postcat39
-rw-r--r--completions/postconf39
-rw-r--r--completions/postfix33
-rw-r--r--completions/postmap41
-rw-r--r--completions/postsuper56
-rw-r--r--completions/povray64
-rw-r--r--completions/prelink42
-rw-r--r--completions/printenv23
-rw-r--r--completions/protoc63
-rw-r--r--completions/psql188
-rw-r--r--completions/puppet338
-rw-r--r--completions/pv31
-rw-r--r--completions/pwck18
-rw-r--r--completions/pwd20
-rw-r--r--completions/pwdx24
-rw-r--r--completions/pwgen28
-rw-r--r--completions/pycodestyle34
-rw-r--r--completions/pydoc42
-rw-r--r--completions/pydocstyle35
-rw-r--r--completions/pyflakes23
-rw-r--r--completions/pylint87
-rw-r--r--completions/pytest134
-rw-r--r--completions/python67
-rw-r--r--completions/pyvenv25
-rw-r--r--completions/qdbus14
-rw-r--r--completions/qemu108
-rw-r--r--completions/qrunner18
-rw-r--r--completions/querybts40
-rw-r--r--completions/quota191
-rw-r--r--completions/radvdump22
-rw-r--r--completions/rcs36
-rw-r--r--completions/rdesktop57
-rw-r--r--completions/remove_members27
-rw-r--r--completions/removepkg25
-rw-r--r--completions/reportbug96
-rw-r--r--completions/resolvconf21
-rw-r--r--completions/ri120
-rw-r--r--completions/rmlist17
-rw-r--r--completions/rmmod24
-rw-r--r--completions/route30
-rw-r--r--completions/rpcdebug46
-rw-r--r--completions/rpm302
-rw-r--r--completions/rpm2tgz17
-rw-r--r--completions/rpmcheck24
-rw-r--r--completions/rrdtool17
-rw-r--r--completions/rsync86
-rw-r--r--completions/sbcl21
-rw-r--r--completions/sbopkg73
-rw-r--r--completions/screen123
-rw-r--r--completions/scrub36
-rw-r--r--completions/secret-tool50
-rw-r--r--completions/sh36
-rw-r--r--completions/shellcheck63
-rw-r--r--completions/sitecopy50
-rw-r--r--completions/slackpkg112
-rw-r--r--completions/slapt-get86
-rw-r--r--completions/slapt-src68
-rw-r--r--completions/smartctl165
-rw-r--r--completions/smbclient322
-rw-r--r--completions/snownews15
-rw-r--r--completions/sqlite338
-rw-r--r--completions/ss41
-rw-r--r--completions/ssh563
-rw-r--r--completions/ssh-add35
-rw-r--r--completions/ssh-copy-id32
-rw-r--r--completions/ssh-keygen123
-rw-r--r--completions/sshfs23
-rw-r--r--completions/sshmitm17
-rw-r--r--completions/sshow26
-rw-r--r--completions/strace99
-rw-r--r--completions/strings45
-rw-r--r--completions/sudo56
-rw-r--r--completions/svcadm150
-rw-r--r--completions/svk214
-rw-r--r--completions/sync_members31
-rw-r--r--completions/synclient24
-rw-r--r--completions/sysbench132
-rw-r--r--completions/sysctl31
-rw-r--r--completions/tar711
-rw-r--r--completions/tcpdump64
-rw-r--r--completions/tcpkill22
-rw-r--r--completions/tcpnice22
-rw-r--r--completions/timeout39
-rw-r--r--completions/tipc289
-rw-r--r--completions/tox51
-rw-r--r--completions/tracepath26
-rw-r--r--completions/tshark136
-rw-r--r--completions/tsig-keygen28
-rw-r--r--completions/tune2fs61
-rw-r--r--completions/ulimit42
-rw-r--r--completions/unace20
-rw-r--r--completions/unpack20048
-rw-r--r--completions/unrar23
-rw-r--r--completions/unshunt17
-rw-r--r--completions/update-alternatives92
-rw-r--r--completions/update-rc.d58
-rw-r--r--completions/upgradepkg30
-rw-r--r--completions/urlsnarf26
-rw-r--r--completions/uscan33
-rw-r--r--completions/useradd46
-rw-r--r--completions/userdel27
-rw-r--r--completions/usermod51
-rw-r--r--completions/valgrind111
-rw-r--r--completions/vipw22
-rw-r--r--completions/vmstat27
-rw-r--r--completions/vncviewer99
-rw-r--r--completions/vpnc82
-rw-r--r--completions/watch54
-rw-r--r--completions/webmitm17
-rw-r--r--completions/wget174
-rw-r--r--completions/wine20
-rw-r--r--completions/withlist18
-rw-r--r--completions/wodim96
-rw-r--r--completions/wol42
-rw-r--r--completions/wsimport48
-rw-r--r--completions/wtf42
-rw-r--r--completions/wvdial46
-rw-r--r--completions/xdg-mime74
-rw-r--r--completions/xdg-settings31
-rw-r--r--completions/xfreerdp67
-rw-r--r--completions/xgamma61
-rw-r--r--completions/xhost16
-rw-r--r--completions/xmllint53
-rw-r--r--completions/xmlwf32
-rw-r--r--completions/xmms29
-rw-r--r--completions/xmodmap23
-rw-r--r--completions/xrandr63
-rw-r--r--completions/xrdb27
-rw-r--r--completions/xsltproc49
-rw-r--r--completions/xvfb-run36
-rw-r--r--completions/xxd23
-rw-r--r--completions/xz56
-rw-r--r--completions/xzdec29
-rw-r--r--completions/ypmatch26
-rw-r--r--completions/yum-arch16
-rw-r--r--completions/zopfli29
-rw-r--r--completions/zopflipng39
473 files changed, 29614 insertions, 0 deletions
diff --git a/completions/.gitignore b/completions/.gitignore
new file mode 100644
index 0000000..5edc172
--- /dev/null
+++ b/completions/.gitignore
@@ -0,0 +1,235 @@
+7za
+aclocal-1.1[0123456]
+alpine
+alternatives
+animate
+apropos
+aptitude-curses
+arm-koji
+asciidoc.py
+autoheader
+automake-1.1[0123456]
+autossh
+autoupdate
+bmake
+bsdtar
+btdownloadcurses.py
+btdownloadgui.py
+c++
+cc
+cdrecord
+chrome
+chromium
+ci
+ciptool
+civclient
+civserver
+clzip
+co
+colormake
+compare
+compgen
+composite
+conjure
+cowthink
+createdb
+createuser
+dcop
+declare
+dfutool
+display
+dpkg-deb
+dpkg-query
+dpkg-reconfigure
+dropdb
+dropuser
+edquota
+etherwake
+f77
+f95
+filebucket
+freeciv-gtk2
+freeciv-gtk3
+freeciv-sdl
+freeciv-xaw
+g++
+g++-[5678]
+g4
+g77
+g95
+gcc-[5678]
+gccgo
+gccgo-[5678]
+gcj
+geoiplookup6
+gfortran
+gfortran-[5678]
+gkrellm2
+gmake
+gmplayer
+gnumake
+google-chrome
+google-chrome-stable
+gpc
+gpgv2
+gtar
+hciattach
+hciconfig
+hd
+host
+hping
+hping3
+iceweasel
+identify
+ifdown
+ifquery
+ifstatus
+import
+inotifywatch
+insmod.static
+iperf3
+javac
+javadoc
+kplayer
+l2ping
+lbzip2
+ldapadd
+ldapcompare
+ldapdelete
+ldapmodify
+ldapmodrdn
+ldappasswd
+ldapwhoami
+links2
+lintian-info
+lusermod
+lvchange
+lvcreate
+lvdisplay
+lvextend
+lvmdiskscan
+lvreduce
+lvremove
+lvrename
+lvresize
+lvs
+lvscan
+lz4c
+mailsnarf
+mdecrypt
+mencoder
+micropython
+mkisofs
+mogrify
+montage
+mozilla-firefox
+mplayer2
+msgsnarf
+muttng
+ncal
+pbzip2
+pccardctl
+pdlzip
+perldoc
+phing
+pigz
+pinfo
+ping6
+pkg_deinstall
+pkg_info
+pkill
+plzip
+pm-suspend
+pm-suspend-hybrid
+pmake
+postalias
+ppc-koji
+puppetca
+puppetd
+puppetdoc
+puppetmasterd
+puppetqd
+puppetrun
+pvchange
+pvcreate
+pvdisplay
+pvmove
+pvremove
+pvs
+pvscan
+pxz
+py.test
+py.test-[23]
+pydoc3
+pylint-[23]
+pytest-[23]
+python2
+python2.7
+python3
+python3.[345678]
+pypy
+pypy3
+pyvenv-3.[45678]
+qemu-kvm
+qemu-system-i386
+qemu-system-x86_64
+quotacheck
+quotaoff
+quotaon
+ralsh
+rcsdiff
+rdict
+repquota
+rfcomm
+rlog
+rpm2targz
+rpm2txz
+rpmbuild
+rpmbuild-md5
+s390-koji
+sbcl-mt
+scp
+sdptool
+setquota
+sftp
+sidedoor
+slogin
+smbcacls
+smbcquotas
+smbget
+smbpasswd
+smbtar
+smbtree
+sparc-koji
+spovray
+star
+stream
+sudoedit
+tightvncviewer
+tracepath6
+typeset
+vgcfgbackup
+vgcfgrestore
+vgchange
+vgck
+vgconvert
+vgcreate
+vgdisplay
+vgexport
+vgextend
+vgimport
+vgmerge
+vgmknodes
+vgreduce
+vgremove
+vgrename
+vgs
+vgscan
+vgsplit
+vigr
+whatis
+wine-development
+wine-stable
+xpovray
+xvnc4viewer
+ypcat
diff --git a/completions/2to3 b/completions/2to3
new file mode 100644
index 0000000..7c5b330
--- /dev/null
+++ b/completions/2to3
@@ -0,0 +1,39 @@
+# bash completion for 2to3 -*- shell-script -*-
+
+_2to3()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -h | --help | --add-suffix)
+ return
+ ;;
+ -f | --fix | -x | --nofix)
+ COMPREPLY=($(compgen -W \
+ "$($1 --list-fixes 2>/dev/null | command sed -e 1d)" -- "$cur"))
+ return
+ ;;
+ -j | --processes)
+ COMPREPLY=($(compgen -W "{1..$(_ncpus)}" -- "$cur"))
+ return
+ ;;
+ -o | --output-dir)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir py
+} &&
+ complete -F _2to3 2to3
+
+# ex: filetype=sh
diff --git a/completions/7z b/completions/7z
new file mode 100644
index 0000000..a8acbc5
--- /dev/null
+++ b/completions/7z
@@ -0,0 +1,128 @@
+# 7z(1) completion -*- shell-script -*-
+
+_7z()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W 'a b d e l t u x' -- "$cur"))
+ return
+ fi
+
+ local mode
+ [[ ${words[1]} == [adu] ]] && mode=w || mode=r
+
+ case $cur in
+ -ao*)
+ COMPREPLY=($(compgen -P${cur:0:3} -W 'a s t u' -- "${cur:3}"))
+ return
+ ;;
+ -?(a)[ix]*)
+ local opt
+ if [[ $cur == -a[ix]* ]]; then
+ opt=${cur:0:3} cur=${cur:3}
+ else
+ opt=${cur:0:2} cur=${cur:2}
+ fi
+ if [[ $cur != *[@\!]* ]]; then
+ COMPREPLY=($(compgen -P$opt -W '@ ! r@ r-@ r0@ r! r-! r0!' \
+ -- "$cur"))
+ elif [[ $cur == ?(r@(-|0|))@* ]]; then
+ local IFS=$' \t\n' reset=$(shopt -po noglob)
+ set -o noglob
+ COMPREPLY=($(compgen -P"${opt}${cur%%@*}@" -f -- "${cur#*@}"))
+ $reset
+ compopt -o filenames
+ fi
+ return
+ ;;
+ -mhe=* | -mhc=* | -ms=* | -mt=*)
+ COMPREPLY=($(compgen -W 'on off' -- "${cur#*=}"))
+ return
+ ;;
+ -mx=*)
+ COMPREPLY=($(compgen -W '0 1 3 5 7 9' -- "${cur#*=}"))
+ return
+ ;;
+ -o* | -w?*)
+ local reset=$(shopt -po noglob)
+ set -o noglob
+ compopt -o filenames
+ local ifs=$IFS IFS=$'\n'
+ COMPREPLY=($(compgen -d -P${cur:0:2} -S/ -- "${cur:2}"))
+ IFS=$ifs
+ $reset
+ compopt -o nospace
+ return
+ ;;
+ -r?*)
+ COMPREPLY=($(compgen -P${cur:0:2} -W '- 0' -- "${cur:2}"))
+ return
+ ;;
+ -scs*)
+ COMPREPLY=($(compgen -P${cur:0:4} -W 'UTF-8 WIN DOS' \
+ -- "${cur:4}"))
+ return
+ ;;
+ -ssc?*)
+ COMPREPLY=($(compgen -P${cur:0:4} -W '-' -- "${cur:4}"))
+ return
+ ;;
+ -t*)
+ if [[ $mode == w ]]; then
+ COMPREPLY=($(compgen -P${cur:0:2} -W '7z bzip2 gzip swfc
+ tar wim xz zip' -- "${cur:2}"))
+ else
+ COMPREPLY=($(compgen -P${cur:0:2} -W '7z apm arj bzip2 cab
+ chm cpio cramfs deb dmg elf fat flv gzip hfs iso lzh lzma
+ lzma86 macho mbr mslz mub nsis ntfs pe ppmd rar rpm
+ squashfs swf swfc tar udf vhd wim xar xz z zip' \
+ -- "${cur:2}"))
+ fi
+ return
+ ;;
+ -m*=* | -p* | -u* | -v*)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-ai -an -ao -ax -bd -i -m{x,s,f,he,hc,mt}=
+ -o -p -r -scs -sfx -si -slp -slt -so -ssc -t -u -v -w -x -y' \
+ -- "$cur"))
+ [[ ${COMPREPLY-} == -@(an|bd|sfx|si|slt|so|ssc|[rwy]) ]] ||
+ compopt -o nospace
+ return
+ fi
+
+ local args
+ _count_args =
+ if ((args == 2)); then
+ _filedir_xspec unzip
+ # TODO: parsing 7z i output?
+ # - how to figure out if the format is input or output?
+ # - find string Formats:, read until next empty line
+ # - extensions start from column 26
+ # - ignore everything in parens
+ # - terminate on two spaces
+ # - terminate on token containing anything [^a-z0-9]
+ # (assumption: extensions are all lowercase)
+ [[ $mode == w ]] &&
+ _filedir '@(7z|bz2|swf|?(g)tar|?(t)[bglx]z|tb?(z)2|wim)' ||
+ _filedir '@(7z|arj|bz2|cab|chm|cpio|deb|dmg|flv|gem|img|iso|lz[ah]|lzma?(86)|msi|pmd|[rx]ar|rpm|sw[fm]|?(g)tar|taz|?(t)[bglx]z|tb?(z)2|vhd|wim|Z)'
+ else
+ if [[ ${words[1]} == d ]]; then
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W "$(printf '%s\n' "$($1 l ${words[2]} \
+ -slt 2>/dev/null | command sed -n '/^Path =/s/^Path = \(.*\)$/\1/p' \
+ 2>/dev/null | tail -n+2)")" -- "$cur"))
+ compopt -o filenames
+ else
+ _filedir
+ fi
+ fi
+} &&
+ complete -F _7z 7z 7za
+
+# ex: filetype=sh
diff --git a/completions/Makefile.am b/completions/Makefile.am
new file mode 100644
index 0000000..723b42f
--- /dev/null
+++ b/completions/Makefile.am
@@ -0,0 +1,950 @@
+bashcompdir = $(datadir)/$(PACKAGE)/completions
+bashcomp_DATA = 2to3 \
+ 7z \
+ a2x \
+ abook \
+ aclocal \
+ acpi \
+ _adb \
+ add_members \
+ alias \
+ ant \
+ apache2ctl \
+ appdata-validate \
+ apt-build \
+ apt-cache \
+ apt-get \
+ aptitude \
+ arch \
+ arp \
+ arping \
+ arpspoof \
+ asciidoc \
+ aspell \
+ autoconf \
+ automake \
+ autoreconf \
+ autorpm \
+ autoscan \
+ avctrl \
+ badblocks \
+ bind \
+ bk \
+ brctl \
+ btdownloadheadless.py \
+ bts \
+ bzip2 \
+ _cal \
+ cancel \
+ cardctl \
+ carton \
+ ccache \
+ ccze \
+ cfagent \
+ cfrun \
+ chage \
+ change_pw \
+ check_db \
+ check_perms \
+ checksec \
+ _chfn \
+ chgrp \
+ chkconfig \
+ chmod \
+ chown \
+ chpasswd \
+ chromium-browser \
+ chronyc \
+ chrpath \
+ _chsh \
+ cksfv \
+ cleanarch \
+ clisp \
+ clone_member \
+ complete \
+ config_list \
+ configure \
+ convert \
+ cowsay \
+ cpan2dist \
+ cpio \
+ cppcheck \
+ crontab \
+ cryptsetup \
+ curl \
+ cvs \
+ cvsps \
+ dd \
+ deja-dup \
+ desktop-file-validate \
+ dhclient \
+ dict \
+ _dmesg \
+ dmypy \
+ dnssec-keygen \
+ dnsspoof \
+ dot \
+ dpkg \
+ dpkg-source \
+ dselect \
+ dsniff \
+ dumpdb \
+ dumpe2fs \
+ e2freefrag \
+ e2label \
+ ebtables \
+ ecryptfs-migrate-home \
+ _eject \
+ eog \
+ ether-wake \
+ evince \
+ explodepkg \
+ export \
+ faillog \
+ fbgs \
+ fbi \
+ feh \
+ file \
+ file-roller \
+ filefrag \
+ filesnarf \
+ find \
+ find_member \
+ fio \
+ firefox \
+ flake8 \
+ freebsd-update \
+ freeciv \
+ freeciv-server \
+ function \
+ fusermount \
+ gcc \
+ gcl \
+ gdb \
+ genaliases \
+ gendiff \
+ genisoimage \
+ geoiplookup \
+ getconf \
+ getent \
+ gkrellm \
+ gm \
+ gnatmake \
+ gnokii \
+ gnome-mplayer \
+ gnome-screenshot \
+ gpasswd \
+ gpg \
+ gpg2 \
+ gpgv \
+ gphoto2 \
+ gprof \
+ groupadd \
+ groupdel \
+ groupmems \
+ groupmod \
+ growisofs \
+ grpck \
+ gssdp-discover \
+ gzip \
+ hcitool \
+ hddtemp \
+ _hexdump \
+ hid2hci \
+ hostname \
+ hping2 \
+ htop \
+ htpasswd \
+ hunspell \
+ _hwclock \
+ iconv \
+ id \
+ idn \
+ ifstat \
+ iftop \
+ ifup \
+ influx \
+ info \
+ inject \
+ inotifywait \
+ insmod \
+ installpkg \
+ interdiff \
+ invoke-rc.d \
+ _ionice \
+ ip \
+ ipcalc \
+ iperf \
+ ipmitool \
+ ipsec \
+ iptables \
+ ipv6calc \
+ iscsiadm \
+ isort \
+ isql \
+ iwconfig \
+ iwlist \
+ iwpriv \
+ iwspy \
+ jar \
+ jarsigner \
+ java \
+ javaws \
+ jq \
+ jpegoptim \
+ jps \
+ jshint \
+ json_xs \
+ jsonschema \
+ k3b \
+ kcov \
+ kill \
+ killall \
+ kldload \
+ kldunload \
+ koji \
+ ktutil \
+ larch \
+ lastlog \
+ ldapsearch \
+ ldapvi \
+ lftp \
+ lftpget \
+ lilo \
+ links \
+ lintian \
+ lisp \
+ list_admins \
+ list_lists \
+ list_members \
+ list_owners \
+ _look \
+ locale-gen \
+ lpq \
+ lpr \
+ lrzip \
+ lsof \
+ lsscsi \
+ lsusb \
+ lua \
+ luac \
+ luseradd \
+ luserdel \
+ lvm \
+ lz4 \
+ lzip \
+ lzma \
+ lzop \
+ macof \
+ mailmanctl \
+ make \
+ makepkg \
+ man \
+ mc \
+ mcrypt \
+ mdadm \
+ mdtool \
+ medusa \
+ mii-diag \
+ mii-tool \
+ minicom \
+ mkinitrd \
+ mktemp \
+ mmsitepass \
+ _mock \
+ modinfo \
+ modprobe \
+ _modules \
+ monodevelop \
+ _mount \
+ _mount.linux \
+ mplayer \
+ mr \
+ msynctool \
+ mtx \
+ munindoc \
+ munin-node-configure \
+ munin-run \
+ munin-update \
+ mussh \
+ mutt \
+ mypy \
+ mysql \
+ mysqladmin \
+ nc \
+ ncftp \
+ nethogs \
+ _newgrp \
+ newlist \
+ newusers \
+ ngrep \
+ nmap \
+ _nmcli \
+ nproc \
+ nslookup \
+ nsupdate \
+ ntpdate \
+ oggdec \
+ op \
+ openssl \
+ opera \
+ optipng \
+ p4 \
+ pack200 \
+ passwd \
+ patch \
+ pdftotext \
+ perl \
+ perlcritic \
+ perltidy \
+ pgrep \
+ pidof \
+ pine \
+ ping \
+ pkg-config \
+ pkg-get \
+ pkg_delete \
+ pkgadd \
+ pkgrm \
+ pkgtool \
+ pkgutil \
+ plague-client \
+ pm-hibernate \
+ pm-is-supported \
+ pm-powersave \
+ pngfix \
+ portinstall \
+ portsnap \
+ portupgrade \
+ postcat \
+ postconf \
+ postfix \
+ postmap \
+ postsuper \
+ povray \
+ prelink \
+ printenv \
+ protoc \
+ psql \
+ puppet \
+ pv \
+ pwck \
+ pwd \
+ pwdx \
+ pwgen \
+ pycodestyle \
+ pydoc \
+ pydocstyle \
+ pyflakes \
+ pylint \
+ pytest \
+ python \
+ pyvenv \
+ qdbus \
+ qemu \
+ qrunner \
+ querybts \
+ quota \
+ radvdump \
+ rcs \
+ rdesktop \
+ remove_members \
+ removepkg \
+ _renice \
+ _repomanage \
+ reportbug \
+ _reptyr \
+ resolvconf \
+ _rfkill \
+ ri \
+ rmlist \
+ rmmod \
+ route \
+ rpcdebug \
+ rpm \
+ rpm2tgz \
+ rpmcheck \
+ rrdtool \
+ rsync \
+ _rtcwake \
+ _runuser \
+ sbcl \
+ sbopkg \
+ screen \
+ scrub \
+ secret-tool \
+ sh \
+ shellcheck \
+ sitecopy \
+ slackpkg \
+ slapt-get \
+ slapt-src \
+ smartctl \
+ smbclient \
+ snownews \
+ sqlite3 \
+ ss \
+ ssh \
+ ssh-add \
+ ssh-copy-id \
+ ssh-keygen \
+ sshfs \
+ sshmitm \
+ sshow \
+ strace \
+ strings \
+ _su \
+ sudo \
+ svcadm \
+ svk \
+ _svn \
+ _svnadmin \
+ _svnlook \
+ sync_members \
+ synclient \
+ sysbench \
+ sysctl \
+ tar \
+ tcpdump \
+ tcpkill \
+ tcpnice \
+ timeout \
+ tipc \
+ tox \
+ tracepath \
+ tshark \
+ tsig-keygen \
+ tune2fs \
+ _udevadm \
+ ulimit \
+ _umount \
+ _umount.linux \
+ unace \
+ unpack200 \
+ unrar \
+ unshunt \
+ update-alternatives \
+ update-rc.d \
+ upgradepkg \
+ urlsnarf \
+ useradd \
+ userdel \
+ usermod \
+ valgrind \
+ vipw \
+ vmstat \
+ vncviewer \
+ vpnc \
+ watch \
+ webmitm \
+ wget \
+ wine \
+ withlist \
+ wodim \
+ wol \
+ _write \
+ wsimport \
+ wtf \
+ wvdial \
+ xdg-mime \
+ xdg-settings \
+ xfreerdp \
+ xgamma \
+ xhost \
+ _xm \
+ xmllint \
+ xmlwf \
+ xmms \
+ xmodmap \
+ xrandr \
+ xrdb \
+ xsltproc \
+ xvfb-run \
+ xxd \
+ xz \
+ xzdec \
+ ypmatch \
+ _yum \
+ yum-arch \
+ zopfli \
+ zopflipng
+
+EXTRA_DIST = $(bashcomp_DATA)
+
+CLEANFILES = \
+ 7za \
+ aclocal-1.10 \
+ aclocal-1.11 \
+ aclocal-1.12 \
+ aclocal-1.13 \
+ aclocal-1.14 \
+ aclocal-1.15 \
+ aclocal-1.16 \
+ alpine \
+ alternatives \
+ animate \
+ apropos \
+ aptitude-curses \
+ arm-koji \
+ asciidoc.py \
+ autoheader \
+ automake-1.10 \
+ automake-1.11 \
+ automake-1.12 \
+ automake-1.13 \
+ automake-1.14 \
+ automake-1.15 \
+ automake-1.16 \
+ autossh \
+ autoupdate \
+ bmake \
+ bsdtar \
+ btdownloadcurses.py \
+ btdownloadgui.py \
+ c++ \
+ cc \
+ cdrecord \
+ chrome \
+ chromium \
+ ci \
+ ciptool \
+ civclient \
+ civserver \
+ clzip \
+ co \
+ colormake \
+ compare \
+ compgen \
+ composite \
+ conjure \
+ cowthink \
+ createdb \
+ createuser \
+ dcop \
+ declare \
+ dfutool \
+ display \
+ dpkg-deb \
+ dpkg-query \
+ dpkg-reconfigure \
+ dropdb \
+ dropuser \
+ edquota \
+ etherwake \
+ f77 \
+ f95 \
+ filebucket \
+ freeciv-gtk2 \
+ freeciv-gtk3 \
+ freeciv-sdl \
+ freeciv-xaw \
+ g++ \
+ g++-5 \
+ g++-6 \
+ g++-7 \
+ g++-8 \
+ g4 \
+ g77 \
+ g95 \
+ gcc-5 \
+ gcc-6 \
+ gcc-7 \
+ gcc-8 \
+ gccgo \
+ gccgo-5 \
+ gccgo-6 \
+ gccgo-7 \
+ gccgo-8 \
+ gcj \
+ geoiplookup6 \
+ gfortran \
+ gfortran-5 \
+ gfortran-6 \
+ gfortran-7 \
+ gfortran-8 \
+ gkrellm2 \
+ gmake \
+ gmplayer \
+ gnumake \
+ google-chrome \
+ google-chrome-stable \
+ gpc \
+ gpgv2 \
+ gtar \
+ hciattach \
+ hciconfig \
+ hd \
+ host \
+ hping \
+ hping3 \
+ iceweasel \
+ identify \
+ ifdown \
+ ifquery \
+ ifstatus \
+ import \
+ inotifywatch \
+ insmod.static \
+ iperf3 \
+ javac \
+ javadoc \
+ kplayer \
+ l2ping \
+ lbzip2 \
+ ldapadd \
+ ldapcompare \
+ ldapdelete \
+ ldapmodify \
+ ldapmodrdn \
+ ldappasswd \
+ ldapwhoami \
+ links2 \
+ lintian-info \
+ lusermod \
+ lvchange \
+ lvcreate \
+ lvdisplay \
+ lvextend \
+ lvmdiskscan \
+ lvreduce \
+ lvremove \
+ lvrename \
+ lvresize \
+ lvs \
+ lvscan \
+ lz4c \
+ mailsnarf \
+ mdecrypt \
+ mencoder \
+ micropython \
+ mkisofs \
+ mogrify \
+ montage \
+ mozilla-firefox \
+ mplayer2 \
+ msgsnarf \
+ muttng \
+ ncal \
+ pbzip2 \
+ pccardctl \
+ pdlzip \
+ perldoc \
+ phing \
+ pigz \
+ pinfo \
+ ping6 \
+ pkg_deinstall \
+ pkg_info \
+ pkill \
+ plzip \
+ pm-suspend \
+ pm-suspend-hybrid \
+ pmake \
+ postalias \
+ ppc-koji \
+ puppetca \
+ puppetd \
+ puppetdoc \
+ puppetmasterd \
+ puppetqd \
+ puppetrun \
+ pvchange \
+ pvcreate \
+ pvdisplay \
+ pvmove \
+ pvremove \
+ pvs \
+ pvscan \
+ pxz \
+ py.test \
+ py.test-2 \
+ py.test-3 \
+ pydoc3 \
+ pylint-2 \
+ pylint-3 \
+ pypy \
+ pypy3 \
+ pytest-2 \
+ pytest-3 \
+ python2 \
+ python2.7 \
+ python3 \
+ python3.3 \
+ python3.4 \
+ python3.5 \
+ python3.6 \
+ python3.7 \
+ python3.8 \
+ pyvenv-3.4 \
+ pyvenv-3.5 \
+ pyvenv-3.6 \
+ pyvenv-3.7 \
+ pyvenv-3.8 \
+ qemu-kvm \
+ qemu-system-i386 \
+ qemu-system-x86_64 \
+ quotacheck \
+ quotaoff \
+ quotaon \
+ ralsh \
+ rcsdiff \
+ rdict \
+ repquota \
+ rfcomm \
+ rlog \
+ rpm2targz \
+ rpm2txz \
+ rpmbuild \
+ rpmbuild-md5 \
+ s390-koji \
+ sbcl-mt \
+ scp \
+ sdptool \
+ setquota \
+ sftp \
+ sidedoor \
+ slogin \
+ smbcacls \
+ smbcquotas \
+ smbget \
+ smbpasswd \
+ smbtar \
+ smbtree \
+ sparc-koji \
+ spovray \
+ star \
+ stream \
+ sudoedit \
+ tightvncviewer \
+ tracepath6 \
+ typeset \
+ vgcfgbackup \
+ vgcfgrestore \
+ vgchange \
+ vgck \
+ vgconvert \
+ vgcreate \
+ vgdisplay \
+ vgexport \
+ vgextend \
+ vgimport \
+ vgmerge \
+ vgmknodes \
+ vgreduce \
+ vgremove \
+ vgrename \
+ vgs \
+ vgscan \
+ vgsplit \
+ vigr \
+ whatis \
+ xpovray \
+ xvnc4viewer \
+ ypcat
+
+symlinks: $(DATA)
+ $(ss) 7z \
+ 7za
+ $(ss) aclocal \
+ aclocal-1.10 aclocal-1.11 aclocal-1.12 aclocal-1.13 \
+ aclocal-1.14 aclocal-1.15 aclocal-1.16
+ $(ss) ant \
+ phing
+ $(ss) aptitude \
+ aptitude-curses
+ $(ss) asciidoc \
+ asciidoc.py
+ $(ss) automake \
+ automake-1.10 automake-1.11 automake-1.12 automake-1.13 \
+ automake-1.14 automake-1.15 automake-1.16
+ $(ss) autoreconf \
+ autoheader
+ $(ss) autoscan \
+ autoupdate
+ $(ss) btdownloadheadless.py \
+ btdownloadcurses.py btdownloadgui.py
+ $(ss) bzip2 \
+ lbzip2 pbzip2
+ $(ss) _cal \
+ ncal
+ $(ss) cardctl \
+ pccardctl
+ $(ss) chromium-browser \
+ chrome chromium google-chrome google-chrome-stable
+ $(ss) complete \
+ compgen
+ $(ss) convert \
+ animate compare composite conjure display identify import \
+ mogrify montage stream
+ $(ss) cowsay \
+ cowthink
+ $(ss) dict \
+ rdict
+ $(ss) dpkg \
+ dpkg-deb dpkg-query dpkg-reconfigure
+ $(ss) ether-wake \
+ etherwake
+ $(ss) filesnarf \
+ mailsnarf msgsnarf
+ $(ss) firefox \
+ iceweasel mozilla-firefox
+ $(ss) freeciv \
+ civclient freeciv-gtk2 freeciv-gtk3 freeciv-sdl freeciv-xaw
+ $(ss) freeciv-server \
+ civserver
+ $(ss) function \
+ declare typeset
+ $(ss) gcc \
+ c++ cc f77 f95 g++ g++-5 g++-6 g++-7 g++-8 g77 g95 gcc-5 \
+ gcc-6 gcc-7 gcc-8 gccgo gccgo-5 gccgo-6 gccgo-7 gccgo-8 gcj \
+ gfortran gfortran-5 gfortran-6 gfortran-7 gfortran-8 gpc
+ $(ss) genisoimage \
+ mkisofs
+ $(ss) geoiplookup \
+ geoiplookup6
+ $(ss) gkrellm \
+ gkrellm2
+ $(ss) gpgv \
+ gpgv2
+ $(ss) gzip \
+ pigz
+ $(ss) hcitool \
+ ciptool dfutool hciattach hciconfig l2ping rfcomm sdptool
+ $(ss) _hexdump \
+ hd
+ $(ss) hping2 \
+ hping hping3
+ $(ss) ifup \
+ ifdown ifquery ifstatus
+ $(ss) info \
+ pinfo
+ $(ss) inotifywait \
+ inotifywatch
+ $(ss) insmod \
+ insmod.static
+ $(ss) iperf \
+ iperf3
+ $(ss) java \
+ javac javadoc
+ $(ss) koji \
+ arm-koji ppc-koji s390-koji sparc-koji
+ $(ss) ldapsearch \
+ ldapadd ldapcompare ldapdelete ldapmodify ldapmodrdn \
+ ldappasswd ldapwhoami
+ $(ss) links \
+ links2
+ $(ss) lintian \
+ lintian-info
+ $(ss) luseradd \
+ lusermod
+ $(ss) lvm \
+ lvchange lvcreate lvdisplay lvextend lvmdiskscan lvreduce \
+ lvremove lvrename lvresize lvs lvscan pvchange pvcreate \
+ pvdisplay pvmove pvremove pvs pvscan vgcfgbackup vgcfgrestore \
+ vgchange vgck vgconvert vgcreate vgdisplay vgexport vgextend \
+ vgimport vgmerge vgmknodes vgreduce vgremove vgrename vgs \
+ vgscan vgsplit
+ $(ss) lz4 \
+ lz4c
+ $(ss) lzip \
+ clzip pdlzip plzip
+ $(ss) make \
+ bmake colormake gmake gnumake pmake
+ $(ss) man \
+ apropos whatis
+ $(ss) mcrypt \
+ mdecrypt
+ $(ss) mplayer \
+ gmplayer kplayer mencoder mplayer2
+ $(ss) mutt \
+ muttng
+ $(ss) nslookup \
+ host
+ $(ss) p4 \
+ g4
+ $(ss) perl \
+ perldoc
+ $(ss) pine \
+ alpine
+ $(ss) ping \
+ ping6
+ $(ss) pkg_delete \
+ pkg_deinstall pkg_info
+ $(ss) pgrep \
+ pkill
+ $(ss) pm-hibernate \
+ pm-suspend pm-suspend-hybrid
+ $(ss) psql \
+ createdb createuser dropdb dropuser
+ $(ss) postmap \
+ postalias
+ $(ss) povray \
+ spovray xpovray
+ $(ss) puppet \
+ filebucket puppetca puppetd puppetdoc puppetmasterd puppetqd \
+ puppetrun ralsh
+ $(ss) pytest \
+ py.test py.test-2 py.test-3 pytest-2 pytest-3
+ $(ss) pydoc \
+ pydoc3
+ $(ss) pylint \
+ pylint-2 pylint-3
+ $(ss) python \
+ micropython pypy pypy3 python2 python2.7 python3 python3.3 python3.4 python3.5 python3.6 python3.7 python3.8
+ $(ss) pyvenv \
+ pyvenv-3.4 pyvenv-3.5 pyvenv-3.6 pyvenv-3.7 pyvenv-3.8
+ $(ss) qdbus \
+ dcop
+ $(ss) qemu \
+ qemu-kvm qemu-system-i386 qemu-system-x86_64
+ $(ss) quota \
+ edquota quotacheck quotaoff quotaon repquota setquota
+ $(ss) rcs \
+ ci co rcsdiff rlog
+ $(ss) rpm \
+ rpmbuild rpmbuild-md5
+ $(ss) rpm2tgz \
+ rpm2targz rpm2txz
+ $(ss) smbclient \
+ smbcacls smbcquotas smbget smbpasswd smbtar smbtree
+ $(ss) sbcl \
+ sbcl-mt
+ $(ss) ssh \
+ autossh scp sftp sidedoor slogin
+ $(ss) sudo \
+ sudoedit
+ $(ss) tar \
+ bsdtar gtar star
+ $(ss) tracepath \
+ tracepath6
+ $(ss) update-alternatives \
+ alternatives
+ $(ss) vipw \
+ vigr
+ $(ss) vncviewer \
+ tightvncviewer xvnc4viewer
+ $(ss) wine \
+ wine-development wine-stable
+ $(ss) wodim \
+ cdrecord
+ $(ss) xz \
+ pxz
+ $(ss) ypmatch \
+ ypcat
+.PHONY: symlinks
+
+SETUP_SYMLINKS = $(srcdir)/../setup-symlinks.sh
+
+all-local: ss = $(SETUP_SYMLINKS) .
+all-local: symlinks
+
+install-data-hook: ss = $(SETUP_SYMLINKS) $(DESTDIR)$(bashcompdir)
+install-data-hook: symlinks
+
+check-local:
+ ret=0; \
+ for file in $(bashcomp_DATA); do \
+ $${bashcomp_bash:-$${BASH:-bash}} \
+ -O extglob -n $(srcdir)/$$file || ret=$$?; \
+ done; \
+ exit $$ret
diff --git a/completions/_adb b/completions/_adb
new file mode 100644
index 0000000..e8ebab1
--- /dev/null
+++ b/completions/_adb
@@ -0,0 +1,69 @@
+# adb completion -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# the Android SDK, use that instead.
+
+_adb_command_usage()
+{
+ COMPREPLY=($(compgen -W \
+ '$("$1" help 2>&1 | command grep "^ *\(adb \)\? *$2 " \
+ | command sed -e "s/[]|[]/\n/g" | _parse_help -)' -- "$cur"))
+}
+
+_adb()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -s | -p | --algo | --key | --iv)
+ return
+ ;;
+ -f)
+ _filedir
+ return
+ ;;
+ esac
+
+ local cmd i
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} != -* && ${words[i - 1]} != -[sp] ]]; then
+ cmd="${words[i]}"
+ break
+ fi
+ done
+
+ if [[ ! -v cmd ]]; then
+ local tmp=()
+ if [[ ! $cur || $cur == -* ]]; then
+ tmp+=($(compgen -W '$(_parse_help "$1" help)' -- "$cur"))
+ fi
+ if [[ ! $cur || $cur != -* ]]; then
+ tmp+=($($1 help 2>&1 | awk '$1 == "adb" { print $2 }'))
+ tmp+=(devices connect disconnect sideload)
+ fi
+ COMPREPLY=($(compgen -W '${tmp[@]}' -- "$cur"))
+ return
+ fi
+
+ # TODO: more and better command completions
+
+ _adb_command_usage "$1" $cmd
+
+ case $cmd in
+ push | restore | sideload)
+ _filedir
+ ;;
+ forward)
+ COMPREPLY=($(compgen -W \
+ '$("$1" help 2>&1 | command sed -ne "s/^ *adb *forward *-/-/p" | \
+ _parse_help -)' -- "$cur"))
+ ;;
+ reboot)
+ COMPREPLY=($(compgen -W 'bootloader recovery' -- "$cur"))
+ ;;
+ esac
+} &&
+ complete -F _adb adb
+
+# ex: filetype=sh
diff --git a/completions/_cal b/completions/_cal
new file mode 100644
index 0000000..1eec267
--- /dev/null
+++ b/completions/_cal
@@ -0,0 +1,38 @@
+# cal(1) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+_cal()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -m)
+ if [[ $OSTYPE == *bsd* ]]; then
+ COMPREPLY=($(compgen -W '{1..12}' -- "$cur"))
+ return
+ fi
+ ;;
+ -s)
+ [[ $OSTYPE == *bsd* ]] && return
+ ;;
+ -A | -B | -d | -H)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ return
+ fi
+
+ local args
+ _count_args
+ ((args == 1)) && COMPREPLY=($(compgen -W '{1..12}' -- "$cur"))
+} &&
+ complete -F _cal cal ncal
+
+# ex: filetype=sh
diff --git a/completions/_chfn b/completions/_chfn
new file mode 100644
index 0000000..334967f
--- /dev/null
+++ b/completions/_chfn
@@ -0,0 +1,8 @@
+# chfn(1) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+complete -u chfn
+
+# ex: filetype=sh
diff --git a/completions/_chsh b/completions/_chsh
new file mode 100644
index 0000000..8f8a807
--- /dev/null
+++ b/completions/_chsh
@@ -0,0 +1,31 @@
+# chsh(1) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+_chsh()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --list-shells | --help | -v | --version)
+ return
+ ;;
+ -s | --shell)
+ _shells
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ else
+ _allowed_users
+ fi
+
+} &&
+ complete -F _chsh chsh
+
+# ex: filetype=sh
diff --git a/completions/_dmesg b/completions/_dmesg
new file mode 100644
index 0000000..8306654
--- /dev/null
+++ b/completions/_dmesg
@@ -0,0 +1,33 @@
+# dmesg(1) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+_dmesg()
+{
+ [[ $OSTYPE == *solaris* ]] && return # no args there
+
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | --help | -V | --version | -s | --buffer-size | -M | -N)
+ return
+ ;;
+ -f | --facility)
+ COMPREPLY=($(compgen -W 'kern user mail daemon auth syslog lpr
+ news' -- "$cur"))
+ return
+ ;;
+ -l | --level | -n | --console-level)
+ COMPREPLY=($(compgen -W '{1..8}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+} &&
+ complete -F _dmesg dmesg
+
+# ex: filetype=sh
diff --git a/completions/_eject b/completions/_eject
new file mode 100644
index 0000000..52168f7
--- /dev/null
+++ b/completions/_eject
@@ -0,0 +1,33 @@
+# bash completion for eject(1) -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+_eject()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | --help | -V | --version | -c | --changerslot | -x | --cdspeed)
+ return
+ ;;
+ -a | --auto | -i | --manualeject)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ elif [[ $prev == @(-d|--default) ]]; then
+ return
+ fi
+
+ _cd_devices
+ _dvd_devices
+} &&
+ complete -F _eject eject
+
+# ex: filetype=sh
diff --git a/completions/_hexdump b/completions/_hexdump
new file mode 100644
index 0000000..785f597
--- /dev/null
+++ b/completions/_hexdump
@@ -0,0 +1,31 @@
+# hexdump(1) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+_hexdump()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -V | -e | -n | -s)
+ return
+ ;;
+ -f)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts="$(_parse_help "$1")"
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _hexdump hexdump hd
+
+# ex: filetype=sh
diff --git a/completions/_hwclock b/completions/_hwclock
new file mode 100644
index 0000000..ef437a2
--- /dev/null
+++ b/completions/_hwclock
@@ -0,0 +1,26 @@
+# hwclock(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# util-linux >= 2.23, use that instead.
+
+_hwclock()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | --help | -V | --version | --date | --epoch)
+ return
+ ;;
+ -f | --rtc | --adjfile)
+ _filedir
+ return
+ ;;
+ esac
+
+ COMPREPLY=(
+ $(PATH="$PATH:/sbin" compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _hwclock hwclock
+
+# ex: filetype=sh
diff --git a/completions/_ionice b/completions/_ionice
new file mode 100644
index 0000000..b0d96a1
--- /dev/null
+++ b/completions/_ionice
@@ -0,0 +1,60 @@
+# ionice(1) completion -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# util-linux >= 2.23, use that instead.
+
+_ionice()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local offset=0 i
+ for ((i = 1; i <= cword; i++)); do
+ case ${words[i]} in
+ -h)
+ return
+ ;;
+ -p)
+ offset=0
+ break
+ ;;
+ -c | -n)
+ ((i++))
+ continue
+ ;;
+ -*)
+ continue
+ ;;
+ esac
+ offset=$i
+ break
+ done
+
+ if ((offset > 0)); then
+ _command_offset $offset
+ return
+ fi
+
+ case $prev in
+ -c)
+ COMPREPLY=($(compgen -W '{0..3}' -- "$cur"))
+ return
+ ;;
+ -n)
+ COMPREPLY=($(compgen -W '{0..7}' -- "$cur"))
+ return
+ ;;
+ -p)
+ _pids
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ return
+ fi
+} &&
+ complete -F _ionice ionice
+
+# ex: filetype=sh
diff --git a/completions/_look b/completions/_look
new file mode 100644
index 0000000..9788dec
--- /dev/null
+++ b/completions/_look
@@ -0,0 +1,17 @@
+# look(1) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+_look()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W '$(look "$cur" 2>/dev/null)' -- "$cur"))
+ fi
+} &&
+ complete -F _look -o default look
+
+# ex: filetype=sh
diff --git a/completions/_mock b/completions/_mock
new file mode 100644
index 0000000..b468148
--- /dev/null
+++ b/completions/_mock
@@ -0,0 +1,69 @@
+# bash completion for mock -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# mock > 1.1.0, use that instead.
+
+_mock()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local plugins='tmpfs root_cache yum_cache bind_mount ccache'
+ local cfgdir=/etc/mock count=0 i
+
+ for i in "${words[@]}"; do
+ ((count == cword)) && break
+ if [[ $i == --configdir ]]; then
+ cfgdir="${words[count + 1]}"
+ elif [[ $i == --configdir=* ]]; then
+ cfgdir=${i/*=/}
+ fi
+ ((count++))
+ done
+
+ case $prev in
+ -h | --help | --copyin | --copyout | --arch | -D | --define | --with | --without | \
+ --uniqueext | --rpmbuild_timeout | --sources | --cwd)
+ return
+ ;;
+ -r | --root)
+ COMPREPLY=($(compgen -W "$(command ls $cfgdir)" -- "$cur"))
+ COMPREPLY=(${COMPREPLY[@]/%.cfg/})
+ return
+ ;;
+ --configdir | --resultdir)
+ _filedir -d
+ return
+ ;;
+ --spec)
+ _filedir spec
+ return
+ ;;
+ --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 |
+ command sed -ne 's/^\s*compatible\s\s*archs\s*:\s*\(.*\)/\1/i p')" \
+ -- "$cur"))
+ return
+ ;;
+ --enable-plugin | --disable-plugin)
+ COMPREPLY=($(compgen -W "$plugins" -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _filedir '@(?(no)src.r|s)pm'
+ fi
+} &&
+ complete -F _mock mock
+
+# ex: filetype=sh
diff --git a/completions/_modules b/completions/_modules
new file mode 100644
index 0000000..4f7c4d4
--- /dev/null
+++ b/completions/_modules
@@ -0,0 +1,85 @@
+# module completion by Ted Stern <stern@cray.com> -*- shell-script -*-
+#
+# Use of this file is deprecated, upstream completion is available in
+# modules >= 3.2.7, use that instead.
+#
+# Completion for Environment Modules `module' alias.
+#
+# See https://sourceforge.net/projects/modules/
+# https://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.
+
+# 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.
+[ -f /etc/profile.d/modules.sh ] || return 1
+
+_module_list()
+{
+ local modules="$(command sed 's/:/ /g' <<<$LOADEDMODULES | sort)"
+ compgen -W "$modules" -- $1
+}
+
+_module_path()
+{
+ local modules="$(command sed 's/:/ /g' <<<$MODULEPATH | sort)"
+ compgen -W "$modules" -- $1
+}
+
+_module_avail()
+{
+ local modules="$(
+ module avail 2>&1 |
+ command grep -E -v '^(-|$)' |
+ xargs printf '%s\n' | command sed -e 's/(default)//g' | sort
+ )"
+
+ compgen -W "$modules" -- $1
+}
+
+# A completion function for the module alias
+_module()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ # First parameter on line -- we expect it to be a mode selection
+
+ local options
+ options="$(module help 2>&1 | command grep -E '^[[:space:]]*\+' |
+ awk '{print $2}' | command sed -e 's/|/ /g' | sort)"
+
+ COMPREPLY=($(compgen -W "$options" -- "$cur"))
+
+ elif ((cword == 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 ((cword == 3)); then
+ case ${words[1]} in
+ swap | switch)
+ COMPREPLY=($(_module_avail "$cur"))
+ ;;
+ esac
+ fi
+
+} &&
+ complete -F _module -o default module
+
+# ex: filetype=sh
diff --git a/completions/_mount b/completions/_mount
new file mode 100644
index 0000000..85f5490
--- /dev/null
+++ b/completions/_mount
@@ -0,0 +1,65 @@
+# mount(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.28, use that instead.
+
+if [[ $OSTYPE == *linux* ]]; then
+ . "$BASH_SOURCE.linux"
+ return
+fi
+
+# This will pull a list of possible mounts out of
+# /etc/{,v}fstab, unless the word being completed contains a ':', which
+# would indicate the specification of an NFS server. In that case, we
+# query the server for a list of all available exports and complete on
+# that instead.
+#
+_mount()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local sm host
+
+ case $prev in
+ -t | --types)
+ _fstypes
+ return
+ ;;
+ esac
+
+ [[ $cur == \\ ]] && cur="/"
+
+ if [[ $cur == *:* ]]; then
+ for sm in "$(type -P showmount)" {,/usr}/{,s}bin/showmount; do
+ [[ -x $sm ]] || continue
+ COMPREPLY=($(compgen -W "$("$sm" -e ${cur%%:*} |
+ awk 'NR>1 {print $1}')" -- "${cur#*:}"))
+ return
+ done
+ fi
+
+ if [[ $cur == //* ]]; then
+ host=${cur#//}
+ host=${host%%/*}
+ if [[ -n $host ]]; then
+ COMPREPLY=($(compgen -P "//$host" -W \
+ "$(smbclient -d 0 -NL $host 2>/dev/null |
+ command sed -ne '/^[[:blank:]]*Sharename/,/^$/p' |
+ command sed -ne '3,$s|^[^A-Za-z]*\([^[:blank:]]*\).*$|/\1|p')" \
+ -- "${cur#//$host}"))
+ fi
+ elif [[ -r /etc/vfstab ]]; then
+ # Solaris
+ COMPREPLY=($(compgen -W "$(awk '! /^[ \t]*#/ {if ($3 ~ /\//) print $3}' /etc/vfstab)" -- "$cur"))
+ elif [[ ! -e /etc/fstab ]]; then
+ # probably Cygwin
+ COMPREPLY=($(compgen -W "$($1 | awk '! /^[ \t]*#/ {if ($3 ~ /\//) print $3}')" -- "$cur"))
+ else
+ # probably BSD
+ COMPREPLY=($(compgen -W "$(awk '! /^[ \t]*#/ {if ($2 ~ /\//) print $2}' /etc/fstab)" -- "$cur"))
+ fi
+} &&
+ complete -F _mount -o default -o dirnames mount
+
+# ex: filetype=sh
diff --git a/completions/_mount.linux b/completions/_mount.linux
new file mode 100644
index 0000000..f40865e
--- /dev/null
+++ b/completions/_mount.linux
@@ -0,0 +1,252 @@
+# mount(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.28, use that instead.
+
+_mount()
+{
+ local cur prev words cword
+ _init_completion -n =: || return
+
+ local split=false
+ case "$prev" in
+ -t | --types)
+ # find /lib/modules/$(uname -r)/ -type f -path '*/fs/*.ko' -printf '%f\n' | cut -d. -f1
+ # FIXME: no<fstype>
+ if [[ $cur == ?*,* ]]; then
+ prev="${cur%,*}"
+ cur="${cur##*,}"
+ split=true
+ fi
+ COMPREPLY=($(compgen -W 'auto adfs affs autofs btrfs cifs coda
+ cramfs davfs debugfs devpts efs ext2 ext3 ext4 fuse hfs hfsplus
+ hpfs iso9660 jffs2 jfs minix msdos ncpfs nfs nfs4 ntfs ntfs-3g
+ proc qnx4 ramfs reiserfs romfs squashfs smbfs sysv tmpfs ubifs
+ udf ufs umsdos usbfs vfat xfs' -- "$cur"))
+ _fstypes
+ $split && COMPREPLY=(${COMPREPLY[@]/#/$prev,})
+ return
+ ;;
+ --bind | -B | --rbind | -R)
+ _filedir -d
+ return
+ ;;
+ -p | --pass-fd)
+ COMPREPLY=($(compgen -W '{0..9}'))
+ compopt -o nospace
+ return
+ ;;
+ -L)
+ COMPREPLY=($(
+ cd "/dev/disk/by-label/" 2>/dev/null || return
+ compgen -f -- "$cur"
+ ))
+ return
+ ;;
+ -U)
+ COMPREPLY=($(
+ cd "/dev/disk/by-uuid/" 2>/dev/null || return
+ compgen -f -- "$cur"
+ ))
+ return
+ ;;
+ -O | --test-opts)
+ # argument required but no completions available
+ return
+ ;;
+ -o | --options)
+ local fstype=auto # default fstype
+ for ((i = ${#words[@]} - 1; i > 0; i--)); do
+ if [[ ${words[i]} == -@(t|-types)* ]]; then
+ if [[ ${words[i]} == *=* ]]; then
+ [[ ${words[i]} == ?*,* ]] && break
+ fstype="${words[i]#-*=}"
+ else
+ [[ ${words[i + 1]} == ?*,* ]] && break
+ fstype="${words[i + 1]}"
+ fi
+ break
+ fi
+ done
+ # no<fstype> is not a real fstype, reset to "auto"
+ [[ $fstype == no?* ]] && fstype=auto
+ # split options list
+ if [[ $cur == ?*,* ]]; then
+ prev="${cur%,*}"
+ cur="${cur##*,}"
+ split=true
+ fi
+ # no completion if $cur is opt=smth
+ [[ $cur == *=* ]] && return
+ # mount options
+ COMPREPLY=($(compgen -W 'loop {,a}sync {,no}atime {,no}auto
+ {,fs,def,root}context= defaults {,no}dev {,no}diratime dirsync
+ {,no}exec group {,no}iversion {,no}mand _netdev nofail
+ {,no}relatime {,no}strictatime {,no}suid owner remount ro rw
+ {,no}user users' -- "$cur"))
+ case "$fstype" in
+ adfs | auto)
+ COMPREPLY+=($(compgen -W '{u,g}id= {own,oth}mask=' -- "$cur"))
+ ;;&
+ affs | auto)
+ COMPREPLY+=($(compgen -W '{u,g}id= set{u,g}id= mode= protect
+ usemp verbose prefix= volume= reserved= root= bs=
+ {,no,usr,grp}quota' -- "$cur"))
+ ;;&
+ btrfs | auto)
+ COMPREPLY+=($(compgen -W 'degraded subvol= subvolid= device=
+ nodatasum nodatacow nobarrier max_inline= alloc_start=
+ thread_pool= compress= compress-force= ssd noacl notreelog
+ flushoncommit metadata_ratio= {,no}space_cache clear_cache
+ user_subvol_rm_allowed autodefrag inode_cache' -- "$cur"))
+ ;;&
+ cifs | auto)
+ COMPREPLY+=($(compgen -W 'user= password= credentials= {u,g}id=
+ force{u,g}id port= servern= netbiosname= {file,dir}_mode=
+ ip= domain= guest iocharset {,no}setuids {,no,dyn}perm
+ directio {,no}mapchars {,no}intr hard soft noacl nocase sec=
+ nobrl sfu {,no}serverino nounix nouser_xattr {r,w}size=
+ rwpidforward backup{u,g}id cache=' -- "$cur"))
+ ;;&
+ davfs | auto)
+ COMPREPLY+=($(compgen -W 'conf= {file,dir}_mode= {u,g}id=
+ username=' -- "$cur"))
+ ;;&
+ ext[2-4] | auto)
+ COMPREPLY+=($(compgen -W '{,no}acl bsddf minixdf check= debug
+ errors= {,no}grpid {bsd,sysv}groups {,no,usr,grp}quota
+ nobh nouid32 oldalloc orlov res{u,g}id= sb=
+ {,no}user_xattr' -- "$cur"))
+ ;;&
+ ext[34] | auto)
+ COMPREPLY+=($(compgen -W 'journal= journal_dev= norecovery
+ noload data= barrier= commit=' -- "$cur"))
+ ;;&
+ ext4 | auto)
+ COMPREPLY+=($(compgen -W 'journal_checksum journal_async_commit
+ nobarrier inode_readahead= stripe= {,no}delalloc abort
+ {max,min}_batch_time= journal_ioprio= {,no}auto_da_alloc
+ {,no}discard nouid32 resize {,no}block_validity
+ dioread_{,no}lock max_dir_size_kb= i_version' -- "$cur"))
+ ;;&
+ msdos | umsdos | vfat | auto)
+ COMPREPLY+=($(compgen -W 'blocksize= {u,g}id= {u,d,f}mask=
+ allow_utime= check= codepage= conv= cvf_format= cvf_option=
+ debug fat= iocharset= tz= quiet showexec sys_immutable flush
+ usefree {,no}dots dotsOK=' -- "$cur"))
+ ;;&
+ vfat | auto)
+ COMPREPLY+=($(compgen -W 'uni_xlate posix nonumtail utf8
+ shortname=' -- "$cur"))
+ ;;&
+ iso9660 | auto)
+ COMPREPLY+=($(compgen -W 'norock nojoliet check= {u,g}id= map=
+ mode= unhide block= conv= cruft session= sbsector=
+ iocharset= utf8' -- "$cur"))
+ ;;&
+ jffs2 | auto)
+ COMPREPLY+=($(compgen -W 'compr= rp_size=' -- "$cur"))
+ ;;&
+ jfs | auto)
+ COMPREPLY+=($(compgen -W 'iocharset= resize= {,no}integrity
+ errors= {,no,usr,grp}quota' -- "$cur"))
+ ;;&
+ nfs | nfs4 | auto)
+ COMPREPLY+=($(compgen -W 'soft hard timeo= retrans= {r,w}size=
+ {,no}ac acreg{min,max}= acdir{min,max}= actimeo= bg fg
+ retry= sec= {,no}sharecache {,no}resvport lookupcache=
+ proto= port= {,no}intr {,no}cto {,nfs}vers= ' -- "$cur"))
+ ;;&
+ nfs | auto)
+ COMPREPLY+=($(compgen -W 'udp tcp rdma mount{port,proto,host}=
+ mountvers= namlen={,no}lock {,no}acl {,no}rdirplus
+ {,no}fsc' -- "$cur"))
+ ;;&
+ nfs4 | auto)
+ COMPREPLY+=($(compgen -W 'clientaddr= {,no}migration' \
+ -- "$cur"))
+ ;;&
+ ntfs-3g)
+ COMPREPLY+=($(compgen -W '{u,g}id= {u,f,d}mask= usermapping=
+ permissions inherit locale= force {,no}recover
+ ignore_case remove_hiberfile show_sys_files
+ hide_{hid,dot}_files windows_names allow_other max_read=
+ silent no_def_opts streams_interface= user_xattr efs_raw
+ {,no}compression debug no_detach' -- "$cur"))
+ ;;&
+ proc | auto)
+ COMPREPLY+=($(compgen -W '{u,g}id=' -- "$cur"))
+ ;;&
+ reiserfs | auto)
+ COMPREPLY+=($(compgen -W 'conv hash= {,no_un}hashed_relocation
+ noborder nolog notail replayonly resize= user_xattr acl
+ barrier=' -- "$cur"))
+ ;;&
+ tmpfs | auto)
+ COMPREPLY+=($(compgen -W 'size= nr_blocks= nr_inodes= mode=
+ {u,g}id= mpol=' -- "$cur"))
+ ;;&
+ udf | auto)
+ COMPREPLY+=($(compgen -W '{u,g}id= umask= unhide undelete
+ nostrict iocharset bs= novrs session= anchor= volume=
+ partition= lastblock= fileset= rootdir=' -- "$cur"))
+ ;;&
+ usbfs | auto)
+ COMPREPLY+=($(compgen -W 'dev{u,g}id= devmode= bus{u,g}id=
+ busmode= list{u,g}id= listmode=' -- "$cur"))
+ ;;&
+ xfs | auto)
+ COMPREPLY+=($(compgen -W 'allocsize= {,no}attr2 barrier dmapi
+ {,no}grpid {bsd,sysv}groups ihashsize= {,no}ikeep
+ inode{32,64} {,no}largeio logbufs= logbsize= logdev=
+ rtdev= mtpt= noalign norecovery nouuid osyncisosync
+ {u,g,p}qnoenforce {,u,usr,g,grp,p,prj}quota sunit= swidth=
+ swalloc' -- "$cur"))
+ ;;&
+ esac
+ # COMP_WORDBREAKS is a real pain in the ass
+ prev="${prev##*[$COMP_WORDBREAKS]}"
+ $split && COMPREPLY=(${COMPREPLY[@]/#/"$prev,"})
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--version --help --verbose --all --fork
+ --fake --internal-only -l --no-mtab --no-canonicalize --pass-fd -s
+ --read-only --rw -L -U --types --test-opts --options --bind --rbind
+ --move' -- "$cur"))
+ [[ ${COMPREPLY-} ]] && return
+ fi
+
+ [[ $cur == \\ ]] && cur="/"
+
+ local sm host
+
+ if [[ $cur == *:* ]]; then
+ for sm in "$(type -P showmount)" {,/usr}/{,s}bin/showmount; do
+ [[ -x $sm ]] || continue
+ COMPREPLY=($(compgen -W "$("$sm" -e ${cur%%:*} |
+ awk 'NR>1 {print $1}')" -- "${cur#*:}"))
+ return
+ done
+ fi
+
+ if [[ $cur == //* ]]; then
+ host=${cur#//}
+ host=${host%%/*}
+ if [[ -n $host ]]; then
+ COMPREPLY=($(compgen -P "//$host" -W \
+ "$(smbclient -d 0 -NL $host 2>/dev/null |
+ command sed -ne '/^[[:blank:]]*Sharename/,/^$/p' |
+ command sed -ne '3,$s|^[^A-Za-z]*\([^[:blank:]]*\).*$|/\1|p')" \
+ -- "${cur#//$host}"))
+ fi
+ fi
+
+ _filedir
+} &&
+ complete -F _mount mount
+
+# ex: filetype=sh
diff --git a/completions/_newgrp b/completions/_newgrp
new file mode 100644
index 0000000..a2dc3ed
--- /dev/null
+++ b/completions/_newgrp
@@ -0,0 +1,19 @@
+# newgrp(1) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+_newgrp()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == "-" ]]; then
+ COMPREPLY=(-)
+ else
+ _allowed_groups "$cur"
+ fi
+} &&
+ complete -F _newgrp newgrp
+
+# ex: filetype=sh
diff --git a/completions/_nmcli b/completions/_nmcli
new file mode 100644
index 0000000..eac285b
--- /dev/null
+++ b/completions/_nmcli
@@ -0,0 +1,201 @@
+# nmcli completion -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# NetworkManager >= 0.9.8.0, use that instead.
+
+_nmcli_list()
+{
+ COMPREPLY=($(compgen -W '$1' -- "$cur"))
+}
+
+_nmcli_con_id()
+{
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W "$(nmcli con list 2>/dev/null |
+ tail -n +2 | awk -F ' {2,}' '{print $1 }')" -- "$cur"))
+}
+
+_nmcli_con_uuid()
+{
+ COMPREPLY=($(compgen -W "$(nmcli con list 2>/dev/null |
+ tail -n +2 | awk -F ' {2,}' '{print $2}')" -- "$cur"))
+}
+
+_nmcli_ap_ssid()
+{
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W "$(nmcli dev wifi list 2>/dev/null |
+ tail -n +2 | awk -F ' {2,}' '{print $1}')" -- "$cur"))
+}
+
+_nmcli_ab_bssid()
+{
+ COMPREPLY=($(compgen -W "$(nmcli dev wifi list 2>/dev/null |
+ tail -n +2 | awk -F ' {2,}' '{print $2}')" -- "$cur"))
+}
+
+_nmcli()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -m | --mode)
+ COMPREPLY=($(compgen -W 'tabular multiline' -- "$cur"))
+ return
+ ;;
+ -f | --fields)
+ COMPREPLY=($(compgen -W 'all common' -- "$cur"))
+ return
+ ;;
+ -e | --escape)
+ _nmcli_list "yes no"
+ return
+ ;;
+ id)
+ _nmcli_con_id
+ return
+ ;;
+ uuid)
+ _nmcli_con_uuid
+ return
+ ;;
+ iface)
+ _available_interfaces
+ return
+ ;;
+ bssid)
+ _nmcli_ab_bssid
+ return
+ ;;
+ wep-key-type)
+ _nmcli_list "key phrase"
+ return
+ ;;
+ esac
+
+ if ((cword == 1)); then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--terse --pretty --mode --fields
+ --escape --version --help' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W "nm con dev" -- "$cur"))
+ fi
+ else
+ local object=${words[1]}
+ local command=${words[2]}
+
+ case $object in
+ nm)
+ case $command in
+ enable)
+ _nmcli_list "true false"
+ return
+ ;;
+ sleep)
+ _nmcli_list "true false"
+ return
+ ;;
+ wifi)
+ _nmcli_list "on off"
+ return
+ ;;
+ wwan)
+ _nmcli_list "on off"
+ return
+ ;;
+ wimax)
+ _nmcli_list "on off"
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W 'status permissions enable sleep
+ wifi wwan wimax' -- "$cur"))
+ ;;
+ con)
+ case $command in
+ list)
+ COMPREPLY=($(compgen -W 'id uuid' -- "$cur"))
+ return
+ ;;
+ up)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--nowait --timeout' \
+ -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'id uuid iface ap nsp' \
+ -- "$cur"))
+ fi
+ return
+ ;;
+ down)
+ COMPREPLY=($(compgen -W 'id uuid' -- "$cur"))
+ return
+ ;;
+ delete)
+ COMPREPLY=($(compgen -W 'id uuid' -- "$cur"))
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W 'list status up down delete' \
+ -- "$cur"))
+ ;;
+ dev)
+ case $command in
+ list)
+ COMPREPLY=($(compgen -W 'iface' -- "$cur"))
+ return
+ ;;
+ disconnect)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--nowait --timeout' \
+ -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'iface' -- "$cur"))
+ fi
+ return
+ ;;
+ wifi)
+ local subcommand=${words[3]}
+
+ case $subcommand in
+ list)
+ COMPREPLY=($(compgen -W 'iface bssid' \
+ -- "$cur"))
+ return
+ ;;
+ connect)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--private
+ --nowait --timeout' -- "$cur"))
+ else
+ if [[ $prev == "connect" ]]; then
+ _nmcli_ap_ssid
+ else
+ COMPREPLY=($(compgen -W 'password
+ wep-key-type iface bssid name' \
+ -- "$cur"))
+ fi
+ fi
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W 'list connect' -- "$cur"))
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W 'status list disconnect wifi' \
+ -- "$cur"))
+ ;;
+ esac
+
+ fi
+
+} &&
+ complete -F _nmcli nmcli
+
+# ex: filetype=sh
diff --git a/completions/_renice b/completions/_renice
new file mode 100644
index 0000000..a416744
--- /dev/null
+++ b/completions/_renice
@@ -0,0 +1,32 @@
+# renice(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+_renice()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local command=$1 curopt i=0
+
+ # walk back through command line and find last option
+ while ((i <= cword && ${#COMPREPLY[@]} == 0)); do
+ curopt=${words[cword - i]}
+ case "$curopt" in
+ -u)
+ _allowed_users
+ ;;
+ -g)
+ _pgids
+ ;;
+ -p | "$command")
+ _pids
+ ;;
+ esac
+ ((i++))
+ done
+} &&
+ complete -F _renice renice
+
+# ex: filetype=sh
diff --git a/completions/_repomanage b/completions/_repomanage
new file mode 100644
index 0000000..ba0787e
--- /dev/null
+++ b/completions/_repomanage
@@ -0,0 +1,24 @@
+# bash completion for repomanage -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# yum-utils >= 1.1.24, use that instead.
+
+_repomanage()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ [[ $prev == -@([hk]|-help|-keep) ]] && return
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _filedir -d
+ fi
+} &&
+ complete -F _repomanage repomanage
+
+# ex: filetype=sh
diff --git a/completions/_reptyr b/completions/_reptyr
new file mode 100644
index 0000000..01d61b2
--- /dev/null
+++ b/completions/_reptyr
@@ -0,0 +1,26 @@
+# bash completion for reptyr(1) -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# reptyr > 0.6.2, use that instead.
+
+_reptyr()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -l)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ [[ $prev != +([0-9]) ]] && _pids
+} &&
+ complete -F _reptyr reptyr
+
+# ex: filetype=sh
diff --git a/completions/_rfkill b/completions/_rfkill
new file mode 100644
index 0000000..96a6c09
--- /dev/null
+++ b/completions/_rfkill
@@ -0,0 +1,31 @@
+# bash completion for rfkill -*- shell-script -*-
+
+# Use of this file is deprecated on systems with util-linux >= 2.31, which
+# ships completion for the rfkill included with it.
+
+_rfkill()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--version' -- "$cur"))
+ else
+ case $cword in
+ 1)
+ COMPREPLY=($(compgen -W "help event list block unblock" \
+ -- "$cur"))
+ ;;
+ 2)
+ if [[ $prev == block || $prev == unblock ]]; then
+ COMPREPLY=($(compgen -W "$($1 list | awk -F: \
+ '/^[0-9]/ {print $1}') all wifi bluetooth uwb wimax \
+ wwan gps" -- "$cur"))
+ fi
+ ;;
+ esac
+ fi
+} &&
+ complete -F _rfkill rfkill
+
+# ex: filetype=sh
diff --git a/completions/_rtcwake b/completions/_rtcwake
new file mode 100644
index 0000000..4ca452d
--- /dev/null
+++ b/completions/_rtcwake
@@ -0,0 +1,32 @@
+# bash completion for rtcwake -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# util-linux >= 2.23, use that instead.
+
+_rtcwake()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --help | -h | --version | -V | --seconds | -s | --time | -t)
+ return
+ ;;
+ --mode | -m)
+ COMPREPLY=($(compgen -W 'standby mem disk on no off' -- "$cur"))
+ return
+ ;;
+ --device | -d)
+ COMPREPLY=($(command ls -d /dev/rtc?* 2>/dev/null))
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]#/dev/}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _rtcwake rtcwake
+
+# ex: filetype=sh
diff --git a/completions/_runuser b/completions/_runuser
new file mode 100644
index 0000000..95cf930
--- /dev/null
+++ b/completions/_runuser
@@ -0,0 +1,8 @@
+# runuser(1) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+complete -u runuser
+
+# ex: filetype=sh
diff --git a/completions/_su b/completions/_su
new file mode 100644
index 0000000..1a03c8f
--- /dev/null
+++ b/completions/_su
@@ -0,0 +1,41 @@
+# bash completion for su(1) -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+if [[ $OSTYPE != *linux* ]]; then
+ complete -u su # default completion
+ return
+fi
+
+_su()
+{ # linux-specific completion
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ -s | --shell)
+ _shells
+ return
+ ;;
+ -c | --command | --session-command)
+ local IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=($(compgen -d -c -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ COMPREPLY=($(compgen -u -- "$cur"))
+} &&
+ complete -F _su su
+
+# ex: filetype=sh
diff --git a/completions/_svn b/completions/_svn
new file mode 100644
index 0000000..5d85c2b
--- /dev/null
+++ b/completions/_svn
@@ -0,0 +1,210 @@
+# svn completion -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# subversion >= 0.12.0, use that instead.
+
+_svn()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local commands
+ 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 ((cword == 1)); then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--version' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W "$commands" -- "$cur"))
+ fi
+ else
+
+ case $prev in
+ --config-dir)
+ _filedir -d
+ return
+ ;;
+ -F | --file | --targets)
+ _filedir
+ return
+ ;;
+ --encoding)
+ _xfunc iconv _iconv_charsets
+ return
+ ;;
+ --editor-cmd | --diff-cmd | --diff3-cmd)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ esac
+
+ local command=${words[1]}
+
+ if [[ $cur == -* ]]; then
+ # possible options for the command
+ local options
+ case $command in
+ add)
+ options='--auto-props --no-auto-props --force --targets
+ --no-ignore --non-recursive --quiet'
+ ;;
+ blame | annotate | ann | praise)
+ options='--revision --username --password --no-auth-cache
+ --non-interactive --verbose --incremental --xml'
+ ;;
+ cat)
+ options='--revision --username --password --no-auth-cache
+ --non-interactive'
+ ;;
+ checkout | co)
+ options='--revision --quiet --non-recursive --username
+ --password --no-auth-cache --non-interactive
+ --ignore-externals'
+ ;;
+ cleanup)
+ options='--diff3-cmd'
+ ;;
+ commit | ci)
+ options='--message --file --encoding --force-log --quiet
+ --non-recursive --targets --editor-cmd --username
+ --password --no-auth-cache --non-interactive
+ --no-unlock'
+ ;;
+ copy | cp)
+ options='--message --file --encoding --force-log --revision
+ --quiet --editor-cmd -username --password
+ --no-auth-cache --non-interactive'
+ ;;
+ delete | del | remove | rm)
+ options='--force --message --file --encoding --force-log
+ --quiet --targets --editor-cmd --username
+ --password --no-auth-cache --non-interactive'
+ ;;
+ diff | di)
+ options='--revision --extensions --diff-cmd
+ --no-diff-deleted --non-recursive --username
+ --password --no-auth-cache --non-interactive
+ --force --old --new --notice-ancestry'
+ ;;
+ export)
+ options='--revision --quiet --username --password
+ --no-auth-cache --non-interactive --non-recursive
+ --force --native-eol --ignore-externals'
+ ;;
+ import)
+ options='--auto-props --no-auto-props --message --file
+ --encoding --force-log --quiet --non-recursive
+ --no-ignore --editor-cmd --username --password
+ --no-auth-cache --non-interactive'
+ ;;
+ info)
+ options='--username --password --no-auth-cache
+ --non-interactive --revision --xml --targets
+ --recursive --incremental'
+ ;;
+ list | ls)
+ options='--revision --verbose --recursive --username
+ --password --no-auth-cache --non-interactive
+ --incremental --xml'
+ ;;
+ lock)
+ options='--message --file --encoding --force-log --targets
+ --force --username --password --no-auth-cache
+ --non-interactive'
+ ;;
+ log)
+ options='--revision --verbose --targets --username
+ --password --no-auth-cache --non-interactive
+ --stop-on-copy --incremental --xml --quiet
+ --limit'
+ ;;
+ merge)
+ options='--revision --non-recursive --quiet --force
+ --dry-run --diff3-cmd --username --password
+ --no-auth-cache --non-interactive
+ --ignore-ancestry'
+ ;;
+ mkdir)
+ options='--message --file --encoding --force-log --quiet
+ --editor-cmd --username --password --no-auth-cache
+ --non-interactive'
+ ;;
+ move | mv | rename | ren)
+ options='--message --file --encoding --force-log --revision
+ --quiet --force --editor-cmd --username --password
+ --no-auth-cache --non-interactive'
+ ;;
+ propdel | pdel | pd)
+ options='--quiet --recursive --revision --revprop
+ --username --password --no-auth-cache
+ --non-interactive'
+ ;;
+ propedit | pedit | pe)
+ options='--revision --revprop --encoding --editor-cmd
+ --username --password --no-auth-cache
+ --non-interactive --force'
+ ;;
+ propget | pget | pg)
+ options='--recursive --revision --revprop --strict
+ --username --password --no-auth-cache
+ --non-interactive'
+ ;;
+ proplist | plist | pl)
+ options='--verbose --recursive --revision --revprop --quiet
+ --username --password --no-auth-cache
+ --non-interactive'
+ ;;
+ propset | pset | ps)
+ options='--file --quiet --targets --recursive --revprop
+ --encoding --username --password --no-auth-cache
+ --non-interactive --revision --force'
+ ;;
+ resolved)
+ options='--targets --recursive --quiet'
+ ;;
+ revert)
+ options='--targets --recursive --quiet'
+ ;;
+ status | stat | st)
+ options='--show-updates --verbose --non-recursive --quiet
+ --username --password --no-auth-cache
+ --non-interactive --no-ignore --ignore-externals
+ --incremental --xml'
+ ;;
+ switch | sw)
+ options='--relocate --revision --non-recursive --quiet
+ --username --password --no-auth-cache
+ --non-interactive --diff3-cmd'
+ ;;
+ unlock)
+ options='--targets --force --username --password
+ --no-auth-cache --non-interactive'
+ ;;
+ update | up)
+ options='--revision --non-recursive --quiet --username
+ --password --no-auth-cache --non-interactive
+ --diff3-cmd --ignore-externals'
+ ;;
+ esac
+ options+=" --help --config-dir"
+
+ COMPREPLY=($(compgen -W "$options" -- "$cur"))
+ else
+ if [[ $command == @(help|[h?]) ]]; then
+ COMPREPLY=($(compgen -W "$commands" -- "$cur"))
+ else
+ _filedir
+ fi
+ fi
+ fi
+
+} &&
+ complete -F _svn svn
+
+# ex: filetype=sh
diff --git a/completions/_svnadmin b/completions/_svnadmin
new file mode 100644
index 0000000..654fd3e
--- /dev/null
+++ b/completions/_svnadmin
@@ -0,0 +1,78 @@
+# svnadmin completion -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# subversion >= 0.12.0, use that instead.
+
+_svnadmin()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local commands
+ commands='create deltify dump help ? hotcopy list-dblogs list-unused-dblogs
+ load lslocks lstxns recover rmlocks rmtxns setlog verify'
+
+ if ((cword == 1)); then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--version' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W "$commands" -- "$cur"))
+ fi
+ else
+ case $prev in
+ --config-dir)
+ _filedir -d
+ return
+ ;;
+ --fs-type)
+ COMPREPLY=($(compgen -W 'fsfs bdb' -- "$cur"))
+ return
+ ;;
+ esac
+
+ local command=${words[1]}
+
+ if [[ $cur == -* ]]; then
+ # possible options for the command
+ local options
+ case $command in
+ create)
+ options='--bdb-txn-nosync --bdb-log-keep --config-dir
+ --fs-type'
+ ;;
+ deltify)
+ options='--revision --quiet'
+ ;;
+ dump)
+ options='--revision --incremental --quiet --deltas'
+ ;;
+ hotcopy)
+ options='--clean-logs'
+ ;;
+ load)
+ options='--ignore-uuid --force-uuid --parent-dir --quiet
+ --use-pre-commit-hook --use-post-commit-hook'
+ ;;
+ rmtxns)
+ options='--quiet'
+ ;;
+ setlog)
+ options='--revision --bypass-hooks'
+ ;;
+ esac
+
+ options+=" --help"
+ COMPREPLY=($(compgen -W "$options" -- "$cur"))
+ else
+ if [[ $command == @(help|[h?]) ]]; then
+ COMPREPLY=($(compgen -W "$commands" -- "$cur"))
+ else
+ _filedir
+ fi
+ fi
+ fi
+
+} &&
+ complete -F _svnadmin -o default svnadmin
+
+# ex: filetype=sh
diff --git a/completions/_svnlook b/completions/_svnlook
new file mode 100644
index 0000000..36188a5
--- /dev/null
+++ b/completions/_svnlook
@@ -0,0 +1,63 @@
+# svnlook completion -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# subversion >= 0.12.0, use that instead.
+
+_svnlook()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local commands
+ commands='author cat changed date diff dirs-changed help ? h history info
+ lock log propget pget pg proplist plist pl tree uuid youngest'
+
+ if ((cword == 1)); then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--version' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W "$commands" -- "$cur"))
+ fi
+ else
+ local command=${words[1]}
+
+ if [[ $cur == -* ]]; then
+ # possible options for the command
+ local options
+ case $command in
+ author | cat | date | dirs-changed | info | log)
+ options='--revision --transaction'
+ ;;
+ changed)
+ options='--revision --transaction --copy-info'
+ ;;
+ diff)
+ options='--revision --transaction --no-diff-deleted
+ --no-diff-added --diff-copy-from'
+ ;;
+ history)
+ options='--revision --show-ids'
+ ;;
+ propget | proplist)
+ options='--revision --transaction --revprop'
+ ;;
+ tree)
+ options='--revision --transaction --show-ids --full-paths'
+ ;;
+ esac
+
+ options+=" --help"
+ COMPREPLY=($(compgen -W "$options" -- "$cur"))
+ else
+ if [[ $command == @(help|[h?]) ]]; then
+ COMPREPLY=($(compgen -W "$commands" -- "$cur"))
+ else
+ _filedir
+ fi
+ fi
+ fi
+
+} &&
+ complete -F _svnlook -o default svnlook
+
+# ex: filetype=sh
diff --git a/completions/_udevadm b/completions/_udevadm
new file mode 100644
index 0000000..19624be
--- /dev/null
+++ b/completions/_udevadm
@@ -0,0 +1,77 @@
+# udevadm(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# systemd >= 196, use that instead.
+
+_udevadm()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local i udevcmd
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} != -* ]]; then
+ udevcmd=${words[i]}
+ break
+ fi
+ done
+
+ case $prev in
+ --help | --version | --property | --children-max | --timeout | --seq-start | \
+ --seq-end | --attr-match | --attr-nomatch | --parent-match | --property-match | \
+ --tag-match | --subsystem-match | --subsystem-nomatch | --sysname-match | \
+ --path)
+ return
+ ;;
+ --log-priority)
+ COMPREPLY=($(compgen -W 'err info debug' -- "$cur"))
+ return
+ ;;
+ --query)
+ COMPREPLY=($(compgen -W 'name symlink path property all' \
+ -- "$cur"))
+ return
+ ;;
+ --name)
+ cur=${cur:=/dev/}
+ _filedir
+ return
+ ;;
+ --device-id-of-file | --exit-if-exists)
+ _filedir
+ return
+ ;;
+ --action)
+ COMPREPLY=($(compgen -W 'add change remove' -- "$cur"))
+ return
+ ;;
+ --type)
+ COMPREPLY=($(compgen -W 'devices subsystems failed' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ ! -v udevcmd ]]; then
+ case $cur in
+ -*)
+ COMPREPLY=($(compgen -W '--help --version --debug' -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W "$("$1" --help 2>/dev/null |
+ awk '/^[ \t]/ { print $1 }')" -- "$cur"))
+ ;;
+ esac
+ return
+ fi
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W \
+ '$("$1" ${udevcmd-} --help 2>/dev/null | _parse_help -)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _udevadm udevadm
+
+# ex: filetype=sh
diff --git a/completions/_umount b/completions/_umount
new file mode 100644
index 0000000..36d5703
--- /dev/null
+++ b/completions/_umount
@@ -0,0 +1,24 @@
+# umount(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.28, use that instead.
+
+if [[ $OSTYPE == *linux* ]]; then
+ . "$BASH_SOURCE.linux"
+ return
+fi
+
+# umount(8) completion. This relies on the mount point being the third
+# space-delimited field in the output of mount(8)
+#
+_umount()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W '$(mount | cut -d" " -f 3)' -- "$cur"))
+} &&
+ complete -F _umount -o dirnames umount
+
+# ex: filetype=sh
diff --git a/completions/_umount.linux b/completions/_umount.linux
new file mode 100644
index 0000000..cf8a259
--- /dev/null
+++ b/completions/_umount.linux
@@ -0,0 +1,145 @@
+# umount(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.28, use that instead.
+
+# Just like COMPREPLY=(`compgen -W "${COMPREPLY[*]}" -- "$cur"`), only better!
+#
+# This will correctly escape special characters in COMPREPLY.
+_reply_compgen_array()
+{
+ # Create the argument for compgen -W by escaping twice.
+ #
+ # One round of escape is because we want to reply with escaped arguments. A
+ # second round is required because compgen -W will helpfully expand it's
+ # argument.
+ local i wlist
+ for i in ${!COMPREPLY[*]}; do
+ local q=$(quote "$(printf %q "${COMPREPLY[i]}")")
+ wlist+=$q$'\n'
+ done
+
+ # We also have to add another round of escaping to $cur.
+ local ecur="$cur"
+ ecur=${ecur//\\/\\\\}
+ ecur=${ecur//\'/\\\'}
+
+ # Actually generate completions.
+ local ifs=$IFS
+ IFS=$'\n' eval 'COMPREPLY=(`compgen -W "$wlist" -- "${ecur}"`)'
+ IFS=$ifs
+}
+
+# Unescape strings in the linux fstab(5) format (with octal escapes).
+__linux_fstab_unescape()
+{
+ eval $1="'${!1//\'/\\047}'"
+ eval $1="'${!1/%\\/\\\\}'"
+ eval "$1=$'${!1}'"
+}
+
+# Complete linux fstab entries.
+#
+# Reads a file from stdin in the linux fstab(5) format; as used by /etc/fstab
+# and /proc/mounts. With 1st arg -L, look for entries by label.
+# shellcheck disable=SC2120
+_linux_fstab()
+{
+ COMPREPLY=()
+
+ # Read and unescape values into COMPREPLY
+ local fs_spec fs_file fs_other
+ local ifs="$IFS"
+ while read -r fs_spec fs_file fs_other; do
+ if [[ $fs_spec == [#]* ]]; then continue; fi
+ if [[ ${1-} == -L ]]; then
+ local fs_label=${fs_spec/#LABEL=/}
+ if [[ $fs_label != "$fs_spec" ]]; then
+ __linux_fstab_unescape fs_label
+ IFS=$'\0'
+ COMPREPLY+=("$fs_label")
+ IFS=$ifs
+ fi
+ else
+ __linux_fstab_unescape fs_spec
+ __linux_fstab_unescape fs_file
+ IFS=$'\0'
+ [[ $fs_spec == */* ]] && COMPREPLY+=("$fs_spec")
+ [[ $fs_file == */* ]] && COMPREPLY+=("$fs_file")
+ IFS=$ifs
+ fi
+ done
+
+ # Add relative paths to COMPREPLY
+ if [[ $cur && $cur != /* ]]; then
+ local realcur
+ [[ $cur == */ ]] && # don't let readlink drop last / from path
+ realcur="$(readlink -f "$cur." 2>/dev/null)/" ||
+ realcur=$(readlink -f "$cur" 2>/dev/null)
+ if [[ $realcur ]]; then
+ local dirrealcur="" dircur="" basecur
+ if [[ $cur == */* ]]; then
+ dirrealcur="${realcur%/*}/"
+ dircur="${cur%/*}/"
+ fi
+ basecur=${cur#"$dircur"}
+ local i
+ for i in ${!COMPREPLY[*]}; do
+ [[ ${COMPREPLY[i]} == "$realcur"* ]] &&
+ COMPREPLY+=($(cd "$dircur" 2>/dev/null &&
+ compgen -f -d -P "$dircur" \
+ -X "!${COMPREPLY[i]##"$dirrealcur"}" -- "$basecur"))
+ done
+ fi
+ fi
+
+ _reply_compgen_array
+}
+
+_umount()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ -t)
+ # FIXME: no<fstype>
+ local split=false
+ if [[ $cur == ?*,* ]]; then
+ prev="${cur%,*}"
+ cur="${cur##*,}"
+ split=true
+ fi
+ COMPREPLY=($(compgen -W 'adfs affs autofs btrfs cifs coda
+ cramfs debugfs devpts efs ext2 ext3 ext4 fuse hfs hfsplus hpfs
+ iso9660 jfs minix msdos ncpfs nfs nfs4 ntfs ntfs-3g proc qnx4
+ ramfs reiserfs romfs squashfs smbfs sysv tmpfs ubifs udf ufs
+ umsdos usbfs vfat xfs' -- "$cur"))
+ _fstypes
+ $split && COMPREPLY=(${COMPREPLY[@]/#/$prev,})
+ return
+ ;;
+ -O)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-V -h -v -n -r -d -i -a -t -O -f -l
+ --no-canonicalize --fake' -- "$cur"))
+ [[ ${COMPREPLY-} ]] && return
+ fi
+
+ if [[ -r /proc/mounts ]]; then
+ # Linux /proc/mounts is properly quoted. This is important when
+ # unmounting usb devices with pretty names.
+ _linux_fstab </proc/mounts
+ else
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W '$(mount | cut -d" " -f 3)' -- "$cur"))
+ fi
+} &&
+ complete -F _umount -o dirnames umount
+
+# ex: filetype=sh
diff --git a/completions/_write b/completions/_write
new file mode 100644
index 0000000..49e56ff
--- /dev/null
+++ b/completions/_write
@@ -0,0 +1,8 @@
+# write(1) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.23, use that instead.
+
+complete -u write
+
+# ex: filetype=sh
diff --git a/completions/_xm b/completions/_xm
new file mode 100644
index 0000000..06b25d3
--- /dev/null
+++ b/completions/_xm
@@ -0,0 +1,224 @@
+# bash completion for xm -*- shell-script -*-
+
+# Use of this file is deprecated. The 'xm' command itself is no longer
+# provided by upstream. It has been replaced with the 'xl' command, for
+# which upstream provides completion, use that instead.
+
+_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()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # TODO: _split_longopt
+
+ local args command commands options
+
+ commands='console vncviewer create new delete destroy domid domname
+ dump-core list mem-max mem-set migrate pause reboot rename reset
+ restore resume save shutdown start suspend sysrq trigger top unpause
+ uptime usb-add usb-del vcpu-list vcpu-pin vcpu-set debug-keys dmesg
+ info log serve sched-credit sched-sedf block-attach block-detach
+ block-list block-configure network-attach network-detach network-list
+ vtpm-list pci-attach pci-detach pci-list pci-list-assignable-devices
+ scsi-attach scsi-detach scsi-list vnet-list vnet-create vnet-delete
+ labels addlabel rmlabel getlabel dry-run resources dumppolicy setpolicy
+ resetpolicy getpolicy shell help'
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W "$commands" -- "$cur"))
+ else
+ if [[ $cur == *=* ]]; then
+ prev=${cur/=*/}
+ cur=${cur/*=/}
+ fi
+
+ command=${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-list | network-list | vtpm-list | 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 | mem-max | \
+ pause | reboot | rename | shutdown | unpause | vcpu-list | vcpu-pin | \
+ vcpu-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
+ ;;
+ esac
+ ;;
+ create)
+ _filedir
+ COMPREPLY+=(
+ $(compgen -W '$(command ls /etc/xen 2>/dev/null)' \
+ -- "$cur"))
+ ;;
+ new)
+ case $prev in
+ -f | -F | --defconfig | --config)
+ _filedir
+ return
+ ;;
+ --path)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ _count_args
+ case $args in
+ 2)
+ _xen_domain_names
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ fi
+} &&
+ complete -F _xm xm
+
+# ex: filetype=sh
diff --git a/completions/_yum b/completions/_yum
new file mode 100644
index 0000000..224ea25
--- /dev/null
+++ b/completions/_yum
@@ -0,0 +1,144 @@
+# yum(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# yum > 3.2.25, use that instead.
+
+_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 |
+ command sed -ne '/^Available /d' -e '/^Installed /d' -e '/^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 |
+ command 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 |
+ command sed -ne '/^repo\s\s*id/d' -e '/^repolist:/d' -e 's/[[:space:]].*//p'
+}
+
+_yum_plugins()
+{
+ command ls /usr/lib/yum-plugins/*.py{,c,o} 2>/dev/null |
+ command sed -ne 's|.*/\([^./]*\)\.py[co]\{0,1\}$|\1|p' | sort -u
+}
+
+_yum()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local special i
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ if [[ ${words[i]} == @(install|update|upgrade|remove|erase|deplist|info) ]]; then
+ special=${words[i]}
+ break
+ fi
+ done
+
+ if [[ -v special ]]; then
+ # TODO: install|update|upgrade should not match *src.rpm
+ if [[ $cur == @(*/|[.~])* && \
+ $special == @(deplist|install|update|upgrade) ]]; then
+ _filedir rpm
+ return
+ fi
+ case $special in
+ install)
+ _yum_list available
+ return
+ ;;
+ deplist | info)
+ _yum_list all
+ return
+ ;;
+ upgrade | update)
+ _yum_list updates
+ return
+ ;;
+ remove | erase)
+ # _rpm_installed_packages is not arch-qualified
+ _yum_list installed
+ return
+ ;;
+ esac
+ fi
+
+ 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..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
+ ;;
+ -h | --help | --version)
+ # no other options useful with these
+ return
+ ;;
+ *)
+ 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
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _yum yum
+
+# ex: filetype=sh
diff --git a/completions/a2x b/completions/a2x
new file mode 100644
index 0000000..b59c786
--- /dev/null
+++ b/completions/a2x
@@ -0,0 +1,39 @@
+# a2x(1) completion -*- shell-script -*-
+
+_a2x()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --attribute | --asciidoc-opts | --dblatex-opts | --fop-opts | --help | \
+ --version | --xsltproc-opts | -!(-*)[ah])
+ return
+ ;;
+ --destination-dir | --icons-dir | -!(-*)D)
+ _filedir -d
+ return
+ ;;
+ --doctype | -!(-*)d)
+ _xfunc asciidoc _asciidoc_doctype
+ return
+ ;;
+ --stylesheet)
+ _filedir css
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _a2x a2x
+
+# ex: filetype=sh
diff --git a/completions/abook b/completions/abook
new file mode 100644
index 0000000..42197d1
--- /dev/null
+++ b/completions/abook
@@ -0,0 +1,49 @@
+# abook(1) completion -*- shell-script -*-
+
+_abook()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # abook only takes options, tabbing after command name adds a single dash
+ [[ $cword -eq 1 && -z $cur ]] &&
+ {
+ compopt -o nospace
+ COMPREPLY=("-")
+ return
+ }
+
+ case $cur in
+ -*)
+ _longopt "$1"
+ return
+ ;;
+ esac
+
+ case $prev in
+ --informat)
+ COMPREPLY=($(compgen -W "$($1 --formats |
+ command sed -n -e 's/^'$'\t''\([a-z]*\).*/\1/p' -e '/^$/q')" \
+ -- "$cur"))
+ ;;
+ --outformat)
+ COMPREPLY=($(compgen -W "$($1 --formats |
+ command sed -n -e '/^$/,$s/^'$'\t''\([a-z]*\).*/\1/p')" \
+ -- "$cur"))
+ ;;
+ --infile)
+ COMPREPLY=($(compgen -W stdin -- "$cur"))
+ _filedir
+ ;;
+ --outfile)
+ COMPREPLY=($(compgen -W stdout -- "$cur"))
+ _filedir
+ ;;
+ --config | --datafile)
+ _filedir
+ ;;
+ esac
+} &&
+ complete -F _abook abook
+
+# ex: filetype=sh
diff --git a/completions/aclocal b/completions/aclocal
new file mode 100644
index 0000000..010862f
--- /dev/null
+++ b/completions/aclocal
@@ -0,0 +1,35 @@
+# aclocal(1) completion -*- shell-script -*-
+
+_aclocal()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --help | --print-ac-dir | --version)
+ return
+ ;;
+ --acdir | -I)
+ _filedir -d
+ return
+ ;;
+ --output)
+ _filedir
+ return
+ ;;
+ --warnings | -W)
+ local cats=(syntax unsupported)
+ COMPREPLY=($(compgen -W \
+ '${cats[@]} ${cats[@]/#/no-} all none error' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _aclocal aclocal aclocal-1.1{0..6}
+
+# ex: filetype=sh
diff --git a/completions/acpi b/completions/acpi
new file mode 100644
index 0000000..f2c38b2
--- /dev/null
+++ b/completions/acpi
@@ -0,0 +1,22 @@
+# acpi(1) completion -*- shell-script -*-
+
+_acpi()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | -!(-*)[hv])
+ return
+ ;;
+ --directory | -!(-*)d)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _acpi acpi
+
+# ex: filetype=sh
diff --git a/completions/add_members b/completions/add_members
new file mode 100644
index 0000000..efa4f1e
--- /dev/null
+++ b/completions/add_members
@@ -0,0 +1,31 @@
+# mailman add_members completion -*- shell-script -*-
+
+_add_members()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -r | -d | --regular-members-file | --digest-members-file)
+ _filedir
+ return
+ ;;
+ -w | -a | --welcome-msg | --admin-notify)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--regular-members-file --digest-members-file
+ --welcome-msg --admin-notify --help' -- "$cur"))
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+
+} &&
+ complete -F _add_members add_members
+
+# ex: filetype=sh
diff --git a/completions/alias b/completions/alias
new file mode 100644
index 0000000..92211d8
--- /dev/null
+++ b/completions/alias
@@ -0,0 +1,20 @@
+# bash alias completion -*- shell-script -*-
+
+_alias()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ case ${words[@]} in
+ *[^=])
+ COMPREPLY=($(compgen -A alias -- "$cur"))
+ ;;
+ *=)
+ COMPREPLY=("$(alias ${cur%=} 2>/dev/null | command sed \
+ -e 's|^alias '"$cur"'\(.*\)$|\1|')")
+ ;;
+ esac
+} &&
+ complete -F _alias -o nospace alias
+
+# ex: filetype=sh
diff --git a/completions/ant b/completions/ant
new file mode 100644
index 0000000..197c0e9
--- /dev/null
+++ b/completions/ant
@@ -0,0 +1,102 @@
+# bash completion for ant and phing -*- shell-script -*-
+
+_ant_parse_targets()
+{
+ local line basedir
+
+ [[ $1 == */* ]] && basedir=${1%/*} || basedir=.
+
+ # parse buildfile for targets
+ while read -rd '>' line; do
+ if [[ $line =~ \<(target|extension-point)[[:space:]].*name=[\"\']([^\"\']+) ]]; then
+ targets+=" ${BASH_REMATCH[2]}"
+ fi
+ done <$1
+
+ # parse imports
+ while read -rd '>' line; do
+ if [[ $line =~ \<import[[:space:]].*file=[\"\']([^\"\']+) ]]; then
+ local imported_buildfile
+ imported_buildfile="${basedir}/${BASH_REMATCH[1]}"
+ if [[ -f $imported_buildfile ]]; then
+ _ant_parse_targets $imported_buildfile
+ fi
+ fi
+ done <$1
+}
+
+_ant()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | -help | --h | --help | -projecthelp | -p | -version | -diagnostics)
+ return
+ ;;
+ -buildfile | -file | -f)
+ _filedir 'xml'
+ return
+ ;;
+ -logfile | -l)
+ [[ $1 != *phing || $prev != -l ]] && _filedir
+ return
+ ;;
+ -propertyfile)
+ _filedir properties
+ return
+ ;;
+ -nice)
+ COMPREPLY=($(compgen -W '{1..10}' -- "$cur"))
+ return
+ ;;
+ -lib)
+ _filedir -d
+ return
+ ;;
+ -logger | -listener | -inputhandler | -main | -find | -s)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -D* ]]; then
+ return
+ elif [[ $cur == -* ]]; then
+ # The </dev/null prevents "phing -" weirdness/getting just a literal
+ # tab displayed on complete on CentOS 6 with phing 2.6.1.
+ COMPREPLY=(
+ $(compgen -W '$(_parse_help "$1" -h </dev/null)' -- "$cur"))
+ else
+ # available targets completion
+ # find which buildfile to use
+ local buildfile=build.xml i
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == -@(?(build)file|f) ]]; then
+ buildfile=${words[i + 1]}
+ break
+ fi
+ done
+ if ((i == cword)); then
+ for i in ${ANT_ARGS-}; do
+ if [[ $prev == -@(?(build)file|f) ]]; then
+ buildfile=$i
+ break
+ fi
+ prev=$i
+ done
+ fi
+ [[ ! -f $buildfile ]] && return
+
+ local targets
+
+ # fill targets
+ _ant_parse_targets $buildfile
+
+ COMPREPLY=($(compgen -W '$targets' -- "$cur"))
+ fi
+} &&
+ complete -F _ant ant phing
+type complete-ant-cmd.pl &>/dev/null &&
+ complete -C complete-ant-cmd.pl -F _ant ant || :
+
+# ex: filetype=sh
diff --git a/completions/apache2ctl b/completions/apache2ctl
new file mode 100644
index 0000000..980b3c5
--- /dev/null
+++ b/completions/apache2ctl
@@ -0,0 +1,16 @@
+# apache2ctl(1) completion -*- shell-script -*-
+
+_apache2ctl()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local APWORDS
+ APWORDS=$($1 2>&1 >/dev/null | awk 'NR<2 { print $3; exit }' |
+ tr "|" " ")
+
+ COMPREPLY=($(compgen -W "$APWORDS" -- "$cur"))
+} &&
+ complete -F _apache2ctl apache2ctl
+
+# ex: filetype=sh
diff --git a/completions/appdata-validate b/completions/appdata-validate
new file mode 100644
index 0000000..03d8cc9
--- /dev/null
+++ b/completions/appdata-validate
@@ -0,0 +1,32 @@
+# appdata-validate(1) completion -*- shell-script -*-
+
+_appdata_validate()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -h | --help | --version)
+ return
+ ;;
+ --output-format)
+ COMPREPLY=($(compgen -W "$($1 --help |
+ command sed -ne 's/--output-format.*\[\(.*\)\]/\1/' -e 's/|/ /gp')" \
+ -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir appdata.xml
+} &&
+ complete -F _appdata_validate appdata-validate
+
+# ex: filetype=sh
diff --git a/completions/apt-build b/completions/apt-build
new file mode 100644
index 0000000..713f4c3
--- /dev/null
+++ b/completions/apt-build
@@ -0,0 +1,54 @@
+# Debian apt-build(1) completion -*- shell-script -*-
+
+_apt_build()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local special i
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ if [[ ${words[i]} == @(install|remove|source|info|clean) ]]; then
+ special=${words[i]}
+ break
+ fi
+ done
+
+ if [[ -v special ]]; then
+ case $special in
+ install | source | info)
+ COMPREPLY=($(_xfunc apt-cache _apt_cache_packages))
+ ;;
+ remove)
+ COMPREPLY=(
+ $(_xfunc dpkg _comp_dpkg_installed_packages "$cur"))
+ ;;
+ esac
+ return
+ fi
+
+ case $prev in
+ --patch | --build-dir | --repository-dir)
+ _filedir
+ return
+ ;;
+ -h | --help)
+ return
+ ;;
+ 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
+
+} &&
+ complete -F _apt_build apt-build
+
+# ex: filetype=sh
diff --git a/completions/apt-cache b/completions/apt-cache
new file mode 100644
index 0000000..61aa07b
--- /dev/null
+++ b/completions/apt-cache
@@ -0,0 +1,85 @@
+# Debian apt-cache(8) completion -*- shell-script -*-
+
+# List APT binary packages
+_apt_cache_packages()
+{
+ apt-cache --no-generate pkgnames "$cur" 2>/dev/null || :
+}
+
+# List APT source packages
+_apt_cache_sources()
+{
+ compgen -W "$(apt-cache dumpavail |
+ awk '$1 == "Source:" { print $2 }' | sort -u)" -- "$1"
+}
+
+# List APT source packages
+_apt_cache_src_packages()
+{
+ compgen -W '$(_apt_cache_sources "$cur")' -- "$cur"
+}
+
+_apt_cache()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local special ispecial
+ if [[ $cur != show ]]; then
+ for ((ispecial = 1; ispecial < ${#words[@]} - 1; ispecial++)); do
+ if [[ ${words[ispecial]} == @(add|depends|dotty|madison|policy|rdepends|show?(pkg|src|)) ]]; then
+ special=${words[ispecial]}
+ break
+ fi
+ done
+ fi
+
+ if [[ -v special && $ispecial -lt $cword ]]; then
+ case $special in
+ add)
+ _filedir
+ ;;
+
+ showsrc)
+ COMPREPLY=($(_apt_cache_sources "$cur"))
+ ;;
+
+ *)
+ COMPREPLY=($(_apt_cache_packages))
+ ;;
+
+ esac
+ return
+ fi
+
+ case $prev in
+ --config-file | --pkg-cache | --src-cache | -!(-*)[cps])
+ _filedir
+ return
+ ;;
+ search)
+ if [[ $cur != -* ]]; then
+ return
+ 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"))
+ elif [[ ! -v special ]]; then
+
+ COMPREPLY=($(compgen -W 'add gencaches show showpkg showsrc stats
+ dump dumpavail unmet search search depends rdepends pkgnames
+ dotty xvcg policy madison' -- "$cur"))
+
+ fi
+
+} &&
+ complete -F _apt_cache apt-cache
+
+# ex: filetype=sh
diff --git a/completions/apt-get b/completions/apt-get
new file mode 100644
index 0000000..4aee263
--- /dev/null
+++ b/completions/apt-get
@@ -0,0 +1,104 @@
+# Debian apt-get(8) completion -*- shell-script -*-
+
+_apt_get()
+{
+ local cur prev words cword package
+ _init_completion -n ':=' || return
+
+ local special i
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ if [[ ${words[i]} == @(install|remove|autoremove|purge|source|build-dep|download|changelog) ]]; then
+ special=${words[i]}
+ break
+ fi
+ done
+
+ if [[ -v special ]]; then
+ case $special in
+ remove | autoremove | purge)
+ if [[ -f /etc/debian_version ]]; then
+ # Debian system
+ COMPREPLY=($(
+ _xfunc dpkg _comp_dpkg_installed_packages $cur
+ ))
+ else
+ # assume RPM based
+ _xfunc rpm _rpm_installed_packages
+ fi
+ ;;
+ source)
+ COMPREPLY=($(_xfunc apt-cache _apt_cache_packages)
+ $(compgen -W "$(apt-cache dumpavail |
+ awk '$1 == "Source:" { print $2 }' | sort -u)" -- "$cur"))
+ ;;
+ install)
+ if [[ $cur == */* ]]; then
+ _filedir deb
+ return
+ elif [[ $cur == *=* ]]; then
+ package="${cur%%=*}"
+ cur="${cur#*=}"
+ COMPREPLY=($(IFS=$'\n' compgen -W "$(
+ apt-cache --no-generate madison "$package" 2>/dev/null |
+ while IFS=' |' read -r _ version _; do
+ echo "$version"
+ done
+ )" \
+ -- "$cur"))
+ __ltrim_colon_completions "$cur"
+ return
+ fi
+ ;;&
+ build-dep)
+ _filedir -d
+ [[ $cur != */* ]] || return
+ ;;&
+ *)
+ COMPREPLY+=($(_xfunc apt-cache _apt_cache_packages))
+ ;;
+ esac
+ return
+ fi
+
+ case $prev in
+ --help | --version | --option | -!(-*)[hvo])
+ return
+ ;;
+ --config-file | -!(-*)c)
+ _filedir
+ return
+ ;;
+ --target-release | --default-release | -!(-*)t)
+ COMPREPLY=($(compgen -W "$(apt-cache policy | command sed -ne \
+ 's/^ *release.*[ ,]o=\(Debian\|Ubuntu\),a=\(\w*\).*/\2/p')" \
+ -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--no-install-recommends --install-suggests
+ --download-only --fix-broken --ignore-missing --fix-missing
+ --no-download --quiet --simulate --just-print --dry-run --recon
+ --no-act --yes --assume-yes --assume-no --no-show-upgraded
+ --verbose-versions --host-architecture --build-profiles --compile
+ --build --ignore-hold --with-new-pkgs --no-upgrade --only-upgrade
+ --allow-downgrades --allow-remove-essential
+ --allow-change-held-packages --force-yes --print-uris --purge
+ --reinstall --list-cleanup --target-release --default-release
+ --trivial-only --no-remove --auto-remove --autoremove --only-source
+ --diff-only --dsc-only --tar-only --arch-only --indep-only
+ --allow-unauthenticated --no-allow-insecure-repositories
+ --allow-releaseinfo-change --show-progress --with-source --help
+ --version --config-file --option' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'update upgrade dist-upgrade
+ dselect-upgrade install remove purge source build-dep check
+ download clean autoclean autoremove changelog indextargets' \
+ -- "$cur"))
+ fi
+
+} &&
+ complete -F _apt_get apt-get
+
+# ex: filetype=sh
diff --git a/completions/aptitude b/completions/aptitude
new file mode 100644
index 0000000..e5ea163
--- /dev/null
+++ b/completions/aptitude
@@ -0,0 +1,119 @@
+# Debian aptitude(1) completion -*- shell-script -*-
+
+_have grep-status && {
+ _comp_dpkg_hold_packages()
+ {
+ grep-status -P -e "^$1" -a -FStatus 'hold' -n -s Package
+ }
+} || {
+ _comp_dpkg_hold_packages()
+ {
+ command grep -B 2 'hold' /var/lib/dpkg/status |
+ awk "/Package: $1/ { print \$2 }"
+ }
+}
+
+_aptitude()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local special i
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ if [[ ${words[i]} == @(@(|re)install|@(|un)hold|@(|un)markauto|@(dist|full|safe)-upgrade|download|show|forbid-version|purge|remove|changelog|why@(|-not)|keep@(|-all)|build-dep|@(add|remove)-user-tag|versions) ]]; then
+ special=${words[i]}
+ break
+ fi
+ done
+
+ if [[ -v special ]]; then
+ case $special in
+ install | hold | markauto | unmarkauto | dist-upgrade | full-upgrade | \
+ safe-upgrade | download | show | changelog | why | why-not | build-dep | \
+ add-user-tag | remove-user-tag | versions)
+ COMPREPLY=($(_xfunc apt-cache _apt_cache_packages))
+ return
+ ;;
+ purge | remove | reinstall | forbid-version)
+ COMPREPLY=(
+ $(_xfunc dpkg _comp_dpkg_installed_packages "$cur"))
+ return
+ ;;
+ unhold)
+ COMPREPLY=($(_comp_dpkg_hold_packages "$cur"))
+ return
+ ;;
+ esac
+ fi
+
+ case $prev in
+ # don't complete anything if these options are found
+ autoclean | clean | forget-new | search | upgrade | update | keep-all)
+ return
+ ;;
+ -!(-*)S)
+ _filedir
+ return
+ ;;
+ --display-format | --width | -!(-*)[wFo])
+ return
+ ;;
+ --sort | -!(-*)O)
+ COMPREPLY=($(compgen -W 'installsize installsizechange debsize
+ name priority version' -- "$cur"))
+ return
+ ;;
+ --target-release | --default-release | -!(-*)t)
+ COMPREPLY=($(apt-cache policy |
+ command grep "release.o=Debian,a=$cur" |
+ command sed -e "s/.*a=\(\w*\).*/\1/" | uniq 2>/dev/null))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts=" $($1 --help 2>&1 | command sed -e \
+ 's/--with(out)-recommends/--without-recommends\n--with-recommends/' |
+ _parse_help - | tr '\n' ' ') "
+
+ # Exclude some mutually exclusive options
+ for i in "${words[@]}"; do
+ [[ $i == -u ]] && opts=${opts/ -i / }
+ [[ $i == -i ]] && opts=${opts/ -u / }
+ done
+
+ # Do known short -> long replacements; at least up to 0.8.12, --help
+ # outputs mostly only short ones.
+ COMPREPLY=($opts)
+ for i in "${!COMPREPLY[@]}"; do
+ case ${COMPREPLY[i]} in
+ -h) COMPREPLY[i]=--help ;;
+ -s) COMPREPLY[i]=--simulate ;;
+ -d) COMPREPLY[i]=--download-only ;;
+ -P) COMPREPLY[i]=--prompt ;;
+ -y) COMPREPLY[i]=--assume-yes ;;
+ -F) COMPREPLY[i]=--display-format ;;
+ -O) COMPREPLY[i]=--sort ;;
+ -W) COMPREPLY[i]=--show-why ;;
+ -w) COMPREPLY[i]=--width ;;
+ -V) COMPREPLY[i]=--show-versions ;;
+ -D) COMPREPLY[i]=--show-deps ;;
+ -v) COMPREPLY[i]=--verbose ;;
+ -t) COMPREPLY[i]=--target-release ;;
+ -q) COMPREPLY[i]=--quiet ;;
+ esac
+ done
+
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]}' -- "$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 keep-all build-dep add-user-tag
+ remove-user-tag versions' -- "$cur"))
+ fi
+
+} &&
+ complete -F _aptitude -o default aptitude aptitude-curses
+
+# ex: filetype=sh
diff --git a/completions/arch b/completions/arch
new file mode 100644
index 0000000..afeed05
--- /dev/null
+++ b/completions/arch
@@ -0,0 +1,46 @@
+# mailman arch completion -*- shell-script -*-
+
+# Try to detect whether this is the mailman "arch" to avoid installing
+# it for the coreutils/util-linux-ng one.
+_have mailmanctl &&
+ _arch()
+ {
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -w | -g | -d | --welcome-msg | --goodbye-msg | --digest)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --file)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ local args=$cword
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == -* ]]; then
+ ((args--))
+ fi
+ done
+ case $args in
+ 1)
+ _xfunc list_lists _mailman_lists
+ ;;
+ 2)
+ _filedir
+ ;;
+ esac
+ fi
+
+ } &&
+ complete -F _arch arch
+
+# ex: filetype=sh
diff --git a/completions/arp b/completions/arp
new file mode 100644
index 0000000..922e800
--- /dev/null
+++ b/completions/arp
@@ -0,0 +1,59 @@
+# arp(8) completion -*- shell-script -*-
+
+_arp()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --device | -!(-*)i)
+ _available_interfaces -a
+ return
+ ;;
+ --protocol | -!(-*)[Ap])
+ # TODO protocol/address family
+ return
+ ;;
+ --file | -!(-*)f)
+ _filedir
+ return
+ ;;
+ --hw-type | -!(-*)[Ht])
+ # TODO: parse from --help output?
+ COMPREPLY=($(compgen -W 'ash ether ax25 netrom rose arcnet \
+ dlci fddi hippi irda x25 eui64' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ local args
+ _count_args "" "@(--device|--protocol|--file|--hw-type|-!(-*)[iApfHt])"
+ case $args in
+ 1)
+ local ips=$("$1" -an | command sed -ne \
+ 's/.*(\([0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}\)).*/\1/p')
+ COMPREPLY=($(compgen -W '$ips' -- "$cur"))
+ ;;
+ 2)
+ # TODO if -d mode: "pub"; if not -f mode: hw_addr
+ # TODO hw_addr is a configured interface with --use-device/-*D*
+ ;;
+ 3)
+ # TODO netmask|pub|temp if -s mode
+ ;;
+ 4)
+ # TODO netmask value if previous was "netmask"
+ ;;
+ 5)
+ # TODO "pub" if 3rd was "netmask"
+ ;;
+ esac
+} &&
+ complete -F _arp arp
+
+# ex: filetype=sh
diff --git a/completions/arping b/completions/arping
new file mode 100644
index 0000000..57e1e19
--- /dev/null
+++ b/completions/arping
@@ -0,0 +1,31 @@
+# arping(8) completion -*- shell-script -*-
+
+_arping()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*c | -*w)
+ return
+ ;;
+ -*I)
+ _available_interfaces -a
+ return
+ ;;
+ -*s)
+ _ip_addresses
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ return
+ fi
+
+ _known_hosts_real -- "$cur"
+} &&
+ complete -F _arping arping
+
+# ex: filetype=sh
diff --git a/completions/arpspoof b/completions/arpspoof
new file mode 100644
index 0000000..d1a1373
--- /dev/null
+++ b/completions/arpspoof
@@ -0,0 +1,28 @@
+# arpspoof completion -*- shell-script -*-
+
+_arpspoof()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -i)
+ _available_interfaces -a
+ return
+ ;;
+ -t)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ else
+ _known_hosts_real -- "$cur"
+ fi
+
+} &&
+ complete -F _arpspoof arpspoof
+
+# ex: filetype=sh
diff --git a/completions/asciidoc b/completions/asciidoc
new file mode 100644
index 0000000..1ea4abf
--- /dev/null
+++ b/completions/asciidoc
@@ -0,0 +1,52 @@
+# asciidoc(1) completion -*- shell-script -*-
+
+_asciidoc_doctype()
+{
+ COMPREPLY+=($(compgen -W 'article book manpage' -- "$cur"))
+}
+
+_asciidoc()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --attribute | -!(-*)a)
+ return
+ ;;
+ --backend | -!(-*)b)
+ COMPREPLY=($(compgen -W 'docbook html4 xhtml11' -- "$cur"))
+ return
+ ;;
+ --conf-file | -!(-*)f)
+ _filedir conf
+ return
+ ;;
+ --doctype | -!(-*)d)
+ _asciidoc_doctype
+ return
+ ;;
+ --help | -!(-*)h)
+ COMPREPLY=($(compgen -W 'manpage syntax topics' -- "$cur"))
+ return
+ ;;
+ --out-file | -!(-*)o)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" "--help manpage")' \
+ -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _asciidoc asciidoc asciidoc.py
+
+# ex: filetype=sh
diff --git a/completions/aspell b/completions/aspell
new file mode 100644
index 0000000..e080a07
--- /dev/null
+++ b/completions/aspell
@@ -0,0 +1,88 @@
+# bash completion for aspell -*- shell-script -*-
+
+_aspell_dictionary()
+{
+ local datadir aspell=${1:-aspell}
+ datadir=$($aspell config data-dir 2>/dev/null || echo /usr/lib/aspell)
+ # First, get aliases (dicts dump does not list them)
+ COMPREPLY=($(printf '%s\n' $datadir/*.alias))
+ COMPREPLY=("${COMPREPLY[@]%.alias}")
+ COMPREPLY=("${COMPREPLY[@]#$datadir/}")
+ # Then, add the canonical dicts
+ COMPREPLY+=($($aspell dicts 2>/dev/null))
+ COMPREPLY=($(compgen -X '\*' -W '${COMPREPLY[@]}' -- "$cur"))
+}
+
+_aspell()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -c | -p | check | --conf | --personal | --repl | --per-conf)
+ _filedir
+ return
+ ;;
+ --conf-dir | --data-dir | --dict-dir | --home-dir | --local-data-dir | --prefix)
+ _filedir -d
+ return
+ ;;
+ dump | create | merge)
+ COMPREPLY=($(compgen -W 'master personal repl' -- "$cur"))
+ return
+ ;;
+ --mode)
+ COMPREPLY=($(compgen -W "$($1 modes 2>/dev/null |
+ awk '{ print $1 }')" -- "$cur"))
+ return
+ ;;
+ --sug-mode)
+ COMPREPLY=($(compgen -W 'ultra fast normal bad-speller' \
+ -- "$cur"))
+ return
+ ;;
+ --keymapping)
+ COMPREPLY=($(compgen -W 'aspell ispell' -- "$cur"))
+ return
+ ;;
+ -d | --master)
+ _aspell_dictionary "$1"
+ return
+ ;;
+ --add-filter | --rem-filter)
+ COMPREPLY=($(compgen -W "$($1 filters 2>/dev/null |
+ awk '{ print $1 }')" -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--conf= --conf-dir= --data-dir= --dict-dir=
+ --encoding= --add-filter= --rem-filter= --mode= --add-extra-dicts=
+ --rem-extra-dicts= --home-dir= --ignore= --ignore-accents
+ --dont-ignore-accents --ignore-case --dont-ignore-case
+ --ignore-repl --dont-ignore-repl --jargon --keyboard= --lang=
+ --language-tag --local-data-dir= --master= --module
+ --add-module-search-order --rem-module-search-order --per-conf=
+ --personal= --prefix= --repl= --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 --backup --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"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ COMPREPLY=($(compgen -W 'usage help check pipe list config soundslike
+ filter version dump create merge' -- "$cur"))
+ fi
+} &&
+ complete -F _aspell aspell
+
+# ex: filetype=sh
diff --git a/completions/autoconf b/completions/autoconf
new file mode 100644
index 0000000..b51e797
--- /dev/null
+++ b/completions/autoconf
@@ -0,0 +1,40 @@
+# autoconf(1) completion -*- shell-script -*-
+
+_autoconf()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --help | -h | --version | -V | --trace | -t)
+ return
+ ;;
+ --output | -o)
+ _filedir
+ return
+ ;;
+ --warnings | -W)
+ local cats=(cross obsolete syntax)
+ COMPREPLY=($(compgen -W \
+ '${cats[@]} ${cats[@]/#/no-} all none error' -- "$cur"))
+ return
+ ;;
+ --prepend-include | -B | --include | -I)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir '@(ac|in)'
+} &&
+ complete -F _autoconf autoconf
+
+# ex: filetype=sh
diff --git a/completions/automake b/completions/automake
new file mode 100644
index 0000000..5fe5f4f
--- /dev/null
+++ b/completions/automake
@@ -0,0 +1,36 @@
+# automake(1) completion -*- shell-script -*-
+
+_automake()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --help | --version)
+ return
+ ;;
+ --warnings | -W)
+ local cats=(gnu obsolete override portability syntax unsupported)
+ COMPREPLY=($(compgen -W \
+ '${cats[@]} ${cats[@]/#/no-} all none error' -- "$cur"))
+ return
+ ;;
+ --libdir)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _automake automake automake-1.1{0..6}
+
+# ex: filetype=sh
diff --git a/completions/autoreconf b/completions/autoreconf
new file mode 100644
index 0000000..9b0f0dc
--- /dev/null
+++ b/completions/autoreconf
@@ -0,0 +1,41 @@
+# autoreconf(1) completion -*- shell-script -*-
+
+_autoreconf()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --help | -h | --version | -V)
+ return
+ ;;
+ --warnings | -W)
+ local cats=(cross gnu obsolete override portability syntax
+ unsupported)
+ COMPREPLY=($(compgen -W \
+ '${cats[@]} ${cats[@]/#/no-} all none error' -- "$cur"))
+ return
+ ;;
+ --prepend-include | -B | --include | -I)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ if [[ $1 == *autoheader ]]; then
+ _filedir '@(ac|in)'
+ else
+ _filedir -d
+ fi
+} &&
+ complete -F _autoreconf autoreconf autoheader
+
+# ex: filetype=sh
diff --git a/completions/autorpm b/completions/autorpm
new file mode 100644
index 0000000..d55322a
--- /dev/null
+++ b/completions/autorpm
@@ -0,0 +1,14 @@
+# autorpm(8) completion -*- shell-script -*-
+
+_autorpm()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ COMPREPLY=($(compgen -W '--notty --debug --help --version auto add
+ fullinfo info help install list remove set' -- "$cur"))
+
+} &&
+ complete -F _autorpm autorpm
+
+# ex: filetype=sh
diff --git a/completions/autoscan b/completions/autoscan
new file mode 100644
index 0000000..e007143
--- /dev/null
+++ b/completions/autoscan
@@ -0,0 +1,34 @@
+# autoscan(1) completion -*- shell-script -*-
+
+_autoscan()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --help | --version | -!(-*)[hV])
+ return
+ ;;
+ --prepend-include | --include | -!(-*)[BI])
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ if [[ $1 == *autoupdate ]]; then
+ _filedir '@(ac|in)'
+ else
+ _filedir -d
+ fi
+} &&
+ complete -F _autoscan autoscan autoupdate
+
+# ex: filetype=sh
diff --git a/completions/avctrl b/completions/avctrl
new file mode 100644
index 0000000..89c24e4
--- /dev/null
+++ b/completions/avctrl
@@ -0,0 +1,20 @@
+# avctrl completion -*- shell-script -*-
+
+_avctrl()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--help --quiet' -- "$cur"))
+ else
+ local args
+ _count_args
+ if ((args == 1)); then
+ COMPREPLY=($(compgen -W 'discover switch' -- "$cur"))
+ fi
+ fi
+} &&
+ complete -F _avctrl avctrl
+
+# ex: filetype=sh
diff --git a/completions/badblocks b/completions/badblocks
new file mode 100644
index 0000000..29c4e00
--- /dev/null
+++ b/completions/badblocks
@@ -0,0 +1,29 @@
+# badblocks(8) completion -*- shell-script -*-
+
+_badblocks()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*[bcedpt])
+ return
+ ;;
+ -*[io])
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ # Filter out -w (dangerous) and -X (internal use)
+ COMPREPLY=($(compgen -X -[wX] -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ cur=${cur:=/dev/}
+ _filedir
+} &&
+ complete -F _badblocks badblocks
+
+# ex: filetype=sh
diff --git a/completions/bind b/completions/bind
new file mode 100644
index 0000000..2ee428b
--- /dev/null
+++ b/completions/bind
@@ -0,0 +1,36 @@
+# bash bind completion -*- shell-script -*-
+
+_bind()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*[lpPsSvVrxX])
+ return
+ ;;
+ -*m)
+ COMPREPLY=($(compgen -W "emacs emacs-standard emacs-meta
+ emacs-ctlx vi vi-move vi-command vi-insert" -- "$cur"))
+ return
+ ;;
+ -*f)
+ _filedir
+ return
+ ;;
+ -*[qu])
+ COMPREPLY=($(compgen -W '$("$1" -l)' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -A binding -- "$cur"))
+} &&
+ complete -F _bind bind
+
+# ex: filetype=sh
diff --git a/completions/bk b/completions/bk
new file mode 100644
index 0000000..4e4d140
--- /dev/null
+++ b/completions/bk
@@ -0,0 +1,18 @@
+# BitKeeper completion -*- shell-script -*-
+# adapted from code by Bart Trojanowski <bart@jukie.net>
+
+_bk()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local BKCMDS="$(bk help topics 2>/dev/null |
+ awk '/^ bk/ { print $2 }' | xargs printf '%s ')"
+
+ COMPREPLY=($(compgen -W "$BKCMDS" -- "$cur"))
+ _filedir
+
+} &&
+ complete -F _bk bk
+
+# ex: filetype=sh
diff --git a/completions/brctl b/completions/brctl
new file mode 100644
index 0000000..14569b6
--- /dev/null
+++ b/completions/brctl
@@ -0,0 +1,40 @@
+# bash completion for brctl -*- shell-script -*-
+
+_brctl()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local command=${words[1]}
+
+ case $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 "$($1 show |
+ awk 'NR>1 {print $1}')" -- "$cur"))
+ ;;
+ esac
+ ;;
+ 3)
+ case $command in
+ addif | delif)
+ _configured_interfaces
+ ;;
+ stp)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ ;;
+ esac
+ ;;
+ esac
+} &&
+ complete -F _brctl -o default brctl
+
+# ex: filetype=sh
diff --git a/completions/btdownloadheadless.py b/completions/btdownloadheadless.py
new file mode 100644
index 0000000..a470e53
--- /dev/null
+++ b/completions/btdownloadheadless.py
@@ -0,0 +1,32 @@
+# btdownloadheadless(1) completion -*- shell-script -*-
+
+_btdownload()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --responsefile | --saveas)
+ _filedir
+ return
+ ;;
+ 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
+
+# ex: filetype=sh
diff --git a/completions/bts b/completions/bts
new file mode 100644
index 0000000..d535d13
--- /dev/null
+++ b/completions/bts
@@ -0,0 +1,112 @@
+# bts completion -*- shell-script -*-
+
+# List bug numbers from bugs cache in ~/.devscripts_cache/bts
+_cached_bugs()
+{
+ [[ -d $HOME/.devscripts_cache/bts ]] &&
+ find $HOME/.devscripts_cache/bts -maxdepth 1 -name "${cur}[0-9]*.html" \
+ -printf "%f\n" | cut -d'.' -f1
+}
+
+# List APT source packages prefixed with "src:"
+_src_packages_with_prefix()
+{
+ ppn=${cur:4} # partial package name, after stripping "src:"
+ compgen -P "src:" -W '$(_xfunc apt-cache _apt_cache_sources "$ppn")' \
+ -- "$ppn"
+}
+
+_bts()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ show | bugs)
+ COMPREPLY=($(compgen -W 'release-critical RC from: tag:
+ usertag:' -- "$cur") $(_cached_bugs)
+ $(_src_packages_with_prefix))
+ return
+ ;;
+ select)
+ COMPREPLY=($(compgen -W 'package: source: maintainer: submitter:
+ severity: status: tag: owner: correspondent: affects: bugs:
+ users: archive:' -- "$cur"))
+ return
+ ;;
+ status)
+ COMPREPLY=($(compgen -W 'file: fields: verbose' -- "$cur")
+ $(_cached_bugs))
+ return
+ ;;
+ block | unblock)
+ COMPREPLY=($(compgen -W 'by with' -- "$cur"))
+ return
+ ;;
+ severity)
+ COMPREPLY=($(compgen -W 'wishlist minor normal important serious
+ grave critical' -- "$cur"))
+ return
+ ;;
+ limit)
+ COMPREPLY=($(compgen -W 'submitter date subject msgid package
+ source tag severity owner affects archive' -- "$cur"))
+ return
+ ;;
+ clone | "done" | reopen | archive | unarchive | retitle | summary | submitter | found | notfound | fixed | notfixed | merge | forcemerge | unmerge | claim | unclaim | forwarded | notforwarded | owner | noowner | subscribe | unsubscribe | reportspam | spamreport | affects | usertag | usertags | reassign | tag | tags)
+ COMPREPLY=($(_cached_bugs))
+ return
+ ;;
+ package)
+ COMPREPLY=($(_xfunc apt-cache _apt_cache_packages))
+ return
+ ;;
+ cache)
+ COMPREPLY=($(_xfunc apt-cache _apt_cache_packages)
+ $(_src_packages_with_prefix)
+ $(compgen -W 'from: release-critical RC' -- "$cur"))
+ return
+ ;;
+ cleancache)
+ COMPREPLY=($(_xfunc apt-cache _apt_cache_packages)
+ $(_src_packages_with_prefix)
+ $(compgen -W 'from: tag: usertag: ALL' -- "$cur"))
+ return
+ ;;
+ user)
+ # non-predicible arguments
+ COMPREPLY=()
+ return
+ ;;
+ :)
+ # Chances are that "src:<src_package>" is being completed
+ # COMP_WORDS would be: "bts cleancache src : <partial_pkg_name>"
+ pos=$((COMP_CWORD - 2))
+ if [[ $pos -gt 0 && ${COMP_WORDS[pos]} == "src" ]]; then
+ COMPREPLY=($(_xfunc apt-cache _apt_cache_src_packages))
+ return
+ fi
+ ;;
+ esac
+
+ $split && return
+
+ COMPREPLY=($(compgen -W '--offline --online --no-offline
+ --no-action --cache --no-cache --cache-mode --cache-delay --mbox
+ --mailreader --cc-addr --use-default-cc --no-use-default-cc
+ --sendmail --mutt --no-mutt --smtp-host --smtp-username
+ --smtp-helo --bts-server --force-refresh --no-force-refresh
+ --only-new --include-resolved --no-include-resolved --no-ack --ack
+ --interactive --force-interactive --no-interactive --quiet
+ --no-conf --noconf
+ show bugs select status clone done reopen archive unarchive retitle
+ summary submitter reassign found notfound fixed notfixed block unblock
+ merge forcemerge unmerge tag tags affects user usertag usertags claim
+ unclaim severity forwarded notforwarded package limit owner noowner
+ subscribe unsubscribe reportspam spamreport cache cleancache version
+ help' -- "$cur"))
+
+} &&
+ complete -F _bts bts
+
+# ex: filetype=sh
diff --git a/completions/bzip2 b/completions/bzip2
new file mode 100644
index 0000000..40e50fe
--- /dev/null
+++ b/completions/bzip2
@@ -0,0 +1,42 @@
+# bash completion for bzip2 -*- shell-script -*-
+
+_bzip2()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | -!(-*)[bhp])
+ return
+ ;;
+ -!(-*)n)
+ COMPREPLY=($(compgen -W "{1..$(_ncpus)}" -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local helpopts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W "${helpopts//#/} -2 -3 -4 -5 -6 -7 -8 -9" \
+ -- "$cur"))
+ return
+ fi
+
+ local IFS=$'\n' xspec="*.?(t)bz2"
+
+ if [[ $prev == --* ]]; then
+ [[ $prev == --@(decompress|list|test) ]] && xspec="!"$xspec
+ [[ $prev == --compress ]] && xspec=
+ elif [[ $prev == -* ]]; then
+ [[ $prev == -*[dt]* ]] && xspec="!"$xspec
+ [[ $prev == -*z* ]] && xspec=
+ fi
+
+ _tilde "$cur" || return
+
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -X "$xspec" -- "$cur") $(compgen -d -- "$cur"))
+} &&
+ complete -F _bzip2 bzip2 pbzip2 lbzip2
+
+# ex: filetype=sh
diff --git a/completions/cancel b/completions/cancel
new file mode 100644
index 0000000..3e0c1d5
--- /dev/null
+++ b/completions/cancel
@@ -0,0 +1,27 @@
+# cancel(1) completion -*- shell-script -*-
+
+_cancel()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -U)
+ return
+ ;;
+ -u)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W \
+ "$(lpstat 2>/dev/null | cut -d' ' -f1)" -- "$cur"))
+} &&
+ complete -F _cancel cancel
+
+# ex: filetype=sh
diff --git a/completions/cardctl b/completions/cardctl
new file mode 100644
index 0000000..bb3a0db
--- /dev/null
+++ b/completions/cardctl
@@ -0,0 +1,15 @@
+# Linux cardctl(8) completion -*- shell-script -*-
+
+_cardctl()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W 'status config ident suspend resume reset
+ eject insert scheme' -- "$cur"))
+ fi
+} &&
+ complete -F _cardctl cardctl pccardctl
+
+# ex: filetype=sh
diff --git a/completions/carton b/completions/carton
new file mode 100644
index 0000000..5d700c8
--- /dev/null
+++ b/completions/carton
@@ -0,0 +1,81 @@
+# carton(3pm) completion -*- shell-script -*-
+
+_carton_commands()
+{
+ local cmds=$("${1:-carton}" usage 2>&1 |
+ command sed -ne '/.*command.* is one of/{n;p;q;}')
+ COMPREPLY+=($(IFS="$IFS," compgen -W "$cmds" -- "$cur"))
+}
+
+_carton_command_help()
+{
+ local help=$(PERLDOC_PAGER=cat PERLDOC=-otext "${1:-carton}" -h $2 2>&1)
+ COMPREPLY+=($(compgen -W '$help' -- "$cur"))
+}
+
+_carton()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local i command
+ for ((i = 1; i < cword; i++)); do
+ case ${words[i]} in
+ -*) ;;
+ *)
+ command=${words[i]}
+ break
+ ;;
+ esac
+ done
+
+ if [[ ! -v command ]]; then
+ _carton_commands "$1"
+ return
+ fi
+
+ case $prev in
+ --version | -v)
+ return
+ ;;
+ --help | -h)
+ [[ -n $command ]] || _carton_commands "$1"
+ return
+ ;;
+ --cpanfile)
+ if [[ $command == install ]]; then
+ _filedir
+ return
+ fi
+ ;;
+ --path)
+ if [[ $command == install ]]; then
+ _filedir -d
+ return
+ fi
+ ;;
+ --without)
+ if [[ $command == install ]]; then
+ local phases="configure build test runtime develop"
+ COMPREPLY+=($(compgen -W '$phases' -- "$cur"))
+ return
+ fi
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ [[ $command == @(help|usage) ]] || COMPREPLY=(--help)
+ _carton_command_help "$1" $command
+ fi
+
+ case $command in
+ show | update)
+ : # TODO modules completion
+ ;;
+ esac
+} &&
+ complete -F _carton carton
+
+# ex: filetype=sh
diff --git a/completions/ccache b/completions/ccache
new file mode 100644
index 0000000..80c39de
--- /dev/null
+++ b/completions/ccache
@@ -0,0 +1,38 @@
+# ccache(1) completion -*- shell-script -*-
+
+_ccache()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local i
+ for ((i = 1; i <= COMP_CWORD; i++)); do
+ if [[ ${COMP_WORDS[i]} != -* ]]; then
+ _command_offset $i
+ return
+ fi
+ [[ ${COMP_WORDS[i]} == -*[oFM] ]] && ((i++))
+ done
+
+ case $prev in
+ --help | --version | --max-files | --max-size | -!(-*)[hVFM])
+ return
+ ;;
+ --set-config | -!(-*)o)
+ if [[ $cur != *=* ]]; then
+ COMPREPLY=($(compgen -S = -W "$($1 -p 2>/dev/null |
+ awk '$3 = "=" { print $2 }')" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+ return
+ ;;
+ esac
+
+ $split && return
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _ccache ccache
+
+# ex: filetype=sh
diff --git a/completions/ccze b/completions/ccze
new file mode 100644
index 0000000..35f4c3f
--- /dev/null
+++ b/completions/ccze
@@ -0,0 +1,44 @@
+# ccze(1) completion -*- shell-script -*-
+
+_ccze()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -'?' | --help | --usage | -V | --version)
+ return
+ ;;
+ --argument | --color | -!(-*)[ac])
+ # TODO?
+ return
+ ;;
+ --rcfile | -!(-*)F)
+ _filedir
+ return
+ ;;
+ --mode | -!(-*)m)
+ COMPREPLY=($(compgen -W "curses ansi html" -- "$cur"))
+ return
+ ;;
+ --option | -!(-*)o)
+ local -a opts=(scroll wordcolor lookups transparent cssfile)
+ COMPREPLY=($(compgen -W '${opts[@]} ${opts[@]/#/no}' -- "$cur"))
+ return
+ ;;
+ --plugin | -!(-*)p)
+ COMPREPLY=($(compgen -W '$("$1" --list-plugins | command \
+ sed -ne "s/^\([a-z0-9]\{1,\}\)[[:space:]]\{1,\}|.*/\1/p")' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _ccze ccze
+
+# ex: filetype=sh
diff --git a/completions/cfagent b/completions/cfagent
new file mode 100644
index 0000000..e7ba04d
--- /dev/null
+++ b/completions/cfagent
@@ -0,0 +1,21 @@
+# cfagent completion -*- shell-script -*-
+
+_cfagent()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -f | --file)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+} &&
+ complete -F _cfagent cfagent
+
+# ex: filetype=sh
diff --git a/completions/cfrun b/completions/cfrun
new file mode 100644
index 0000000..72b6138
--- /dev/null
+++ b/completions/cfrun
@@ -0,0 +1,47 @@
+# cfrun completion -*- shell-script -*-
+
+_cfrun()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local i section=1
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == -- ]]; then
+ ((section++))
+ fi
+ done
+
+ case $section in
+ 1)
+ case $prev in
+ -f)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-f -h -d -S -T -v' -- "$cur"))
+ else
+ local hostfile=${CFINPUTS:-/var/lib/cfengine/inputs}/cfrun.hosts
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == -f ]]; then
+ hostfile=${words[i + 1]}
+ break
+ fi
+ done
+ [[ ! -f $hostfile ]] && return
+
+ COMPREPLY=($(compgen -W "$(command grep -v \
+ -E '(=|^$|^#)' $hostfile)" -- "$cur"))
+ fi
+ ;;
+ 2)
+ COMPREPLY=($(compgen -W '$(_parse_help cfagent)' -- "$cur"))
+ ;;
+ esac
+} &&
+ complete -F _cfrun cfrun
+
+# ex: filetype=sh
diff --git a/completions/chage b/completions/chage
new file mode 100644
index 0000000..fcf87cd
--- /dev/null
+++ b/completions/chage
@@ -0,0 +1,30 @@
+# chage(1) completion -*- shell-script -*-
+
+_chage()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --lastday | --expiredate | --help | --inactive | --mindays | --maxdays | \
+ --warndays | -!(-*)[dEhImMW])
+ return
+ ;;
+ --root | -!(-*)R)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -u -- "$cur"))
+} &&
+ complete -F _chage chage
+
+# ex: filetype=sh
diff --git a/completions/change_pw b/completions/change_pw
new file mode 100644
index 0000000..04837ea
--- /dev/null
+++ b/completions/change_pw
@@ -0,0 +1,25 @@
+# mailman change_pw completion -*- shell-script -*-
+
+_change_pw()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -l | --listname)
+ _xfunc list_lists _mailman_lists
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--all --domain --listname --password --quiet
+ --help' -- "$cur"))
+ fi
+
+} &&
+ complete -F _change_pw change_pw
+
+# ex: filetype=sh
diff --git a/completions/check_db b/completions/check_db
new file mode 100644
index 0000000..aaec99f
--- /dev/null
+++ b/completions/check_db
@@ -0,0 +1,17 @@
+# mailman check_db completion -*- shell-script -*-
+
+_check_db()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--all --verbose --help' -- "$cur"))
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+
+} &&
+ complete -F _check_db check_db
+
+# ex: filetype=sh
diff --git a/completions/check_perms b/completions/check_perms
new file mode 100644
index 0000000..8ff276e
--- /dev/null
+++ b/completions/check_perms
@@ -0,0 +1,15 @@
+# mailman check_perms completion -*- shell-script -*-
+
+_check_perms()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-f -v -h' -- "$cur"))
+ fi
+
+} &&
+ complete -F _check_perms check_perms
+
+# ex: filetype=sh
diff --git a/completions/checksec b/completions/checksec
new file mode 100644
index 0000000..fc2fef7
--- /dev/null
+++ b/completions/checksec
@@ -0,0 +1,37 @@
+# bash completion for checksec -*- shell-script -*-
+
+_checksec()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --version | --help)
+ return
+ ;;
+ --file | --fortify-file)
+ _filedir
+ return
+ ;;
+ --dir)
+ _filedir -d
+ return
+ ;;
+ --proc)
+ _pnames
+ return
+ ;;
+ --proc-libs | --fortify-proc)
+ _pids
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+} &&
+ complete -F _checksec checksec
+
+# ex: filetype=sh
diff --git a/completions/chgrp b/completions/chgrp
new file mode 100644
index 0000000..4793a45
--- /dev/null
+++ b/completions/chgrp
@@ -0,0 +1,39 @@
+# chgrp(1) completion -*- shell-script -*-
+
+_chgrp()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ cur=${cur//\\\\/}
+
+ if [[ $prev == --reference ]]; then
+ _filedir
+ return
+ fi
+
+ $split && return
+
+ # options completion
+ if [[ $cur == -* ]]; then
+ local w opts
+ for w in "${words[@]}"; do
+ [[ $w == -@(R|-recursive) ]] && opts="-H -L -P" && break
+ done
+ COMPREPLY=($(compgen -W '-c -h -f -R -v --changes --dereference
+ --no-dereference --silent --quiet --reference --recursive --verbose
+ --help --version $opts' -- "$cur"))
+ return
+ fi
+
+ # first parameter on line or first since an option?
+ if [[ $cword -eq 1 && $cur != -* || $prev == -* ]]; then
+ _allowed_groups "$cur"
+ else
+ _filedir
+ fi
+
+} &&
+ complete -F _chgrp chgrp
+
+# ex: filetype=sh
diff --git a/completions/chkconfig b/completions/chkconfig
new file mode 100644
index 0000000..8ff6637
--- /dev/null
+++ b/completions/chkconfig
@@ -0,0 +1,37 @@
+# chkconfig(8) completion -*- shell-script -*-
+
+_chkconfig()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --level=[1-6] | [1-6] | --list | --add | --del | --override)
+ _services
+ _xinetd_services
+ return
+ ;;
+ --level)
+ COMPREPLY=($(compgen -W '{1..6}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--list --add --del --override --level' \
+ -- "$cur"))
+ else
+ if ((cword == 2 || cword == 4)); then
+ COMPREPLY=($(compgen -W 'on off reset resetpriorities' \
+ -- "$cur"))
+ else
+ _services
+ _xinetd_services
+ fi
+ fi
+} &&
+ complete -F _chkconfig chkconfig
+
+# ex: filetype=sh
diff --git a/completions/chmod b/completions/chmod
new file mode 100644
index 0000000..d3fc349
--- /dev/null
+++ b/completions/chmod
@@ -0,0 +1,41 @@
+# chmod(1) completion -*- shell-script -*-
+
+_chmod()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version)
+ return
+ ;;
+ --reference)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ # Adapted from coreutils 8.28 chmod man page
+ local modearg="-@(@(+([rwxXst])|[ugo])|+([0-7]))"
+
+ # shellcheck disable=SC2053
+ if [[ $cur == -* && $cur != $modearg ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ local args
+ _count_args "" "" "$modearg"
+
+ case $args in
+ 1) ;; # mode
+ *) _filedir ;;
+ esac
+} &&
+ complete -F _chmod chmod
+
+# ex: filetype=sh
diff --git a/completions/chown b/completions/chown
new file mode 100644
index 0000000..1d746b7
--- /dev/null
+++ b/completions/chown
@@ -0,0 +1,46 @@
+# chown(1) completion -*- shell-script -*-
+
+_chown()
+{
+ local cur prev words cword split
+ # Don't treat user:group as separate words.
+ _init_completion -s -n : || return
+
+ case "$prev" in
+ --from)
+ _usergroup
+ return
+ ;;
+ --reference)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ # Complete -options
+ local w opts
+ for w in "${words[@]}"; do
+ [[ $w == -@(R|-recursive) ]] && opts="-H -L -P" && break
+ done
+ COMPREPLY=($(compgen -W '-c -h -f -R -v --changes --dereference
+ --no-dereference --from --silent --quiet --reference --recursive
+ --verbose --help --version $opts' -- "$cur"))
+ else
+ local args
+
+ # The first argument is an usergroup; the rest are filedir.
+ _count_args :
+
+ if ((args == 1)); then
+ _usergroup -u
+ else
+ _filedir
+ fi
+ fi
+} &&
+ complete -F _chown chown
+
+# ex: filetype=sh
diff --git a/completions/chpasswd b/completions/chpasswd
new file mode 100644
index 0000000..3abea99
--- /dev/null
+++ b/completions/chpasswd
@@ -0,0 +1,30 @@
+# chpasswd(8) completion -*- shell-script -*-
+
+_chpasswd()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --crypt | -!(-*)c)
+ COMPREPLY=($(compgen -W 'DES MD5 NONE SHA256 SHA512' \
+ -- "$cur"))
+ return
+ ;;
+ --sha-rounds | -!(-*)s)
+ return
+ ;;
+ --root | -!(-*)R)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _chpasswd chpasswd
+
+# ex: filetype=sh
diff --git a/completions/chromium-browser b/completions/chromium-browser
new file mode 100644
index 0000000..9ee9896
--- /dev/null
+++ b/completions/chromium-browser
@@ -0,0 +1,50 @@
+# chromium-browser completion -*- shell-script -*-
+
+_chromium_browser()
+{
+ local cur prev words cword split
+ _init_completion -s -n : || return
+
+ case $prev in
+ --help | --app | --proxy-pac-url | -h)
+ return
+ ;;
+ --user-data-dir)
+ _filedir -d
+ return
+ ;;
+ --proxy-server)
+ case $cur in
+ *://*)
+ local prefix="${cur%%://*}://"
+ _known_hosts_real -- "${cur#*://}"
+ COMPREPLY=("${COMPREPLY[@]/#/$prefix}")
+ __ltrim_colon_completions "$cur"
+ ;;
+ *)
+ compopt -o nospace
+ COMPREPLY=($(compgen -S :// -W 'http socks socks4 socks5' -- "$cur"))
+ ;;
+ esac
+ return
+ ;;
+ --password-store)
+ COMPREPLY=($(compgen -W 'basic gnome kwallet' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir "@(?([mxs])htm?(l)|pdf|txt)"
+} &&
+ complete -F _chromium_browser chromium-browser google-chrome \
+ google-chrome-stable chromium chrome
+
+# ex: filetype=sh
diff --git a/completions/chronyc b/completions/chronyc
new file mode 100644
index 0000000..e6bb8e9
--- /dev/null
+++ b/completions/chronyc
@@ -0,0 +1,61 @@
+# chronyc(1) completion -*- shell-script -*-
+
+_chronyc_command_args()
+{
+ local -a args
+ args=($(compgen -W "$($1 help 2>/dev/null |
+ awk '/^'$prev'\s[^ []/ { gsub("\\|", " ", $2); print $2 }')"))
+ case $args in
+ \<address\>) _known_hosts_real -- "$cur" ;;
+ \<*) ;;
+ *) COMPREPLY+=($(compgen -W '${args[@]}' -- "$cur")) ;;
+ esac
+}
+
+_chronyc()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | -*p)
+ return
+ ;;
+ -*h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1") -6' -- "$cur"))
+ return
+ fi
+
+ local i args
+ args=0
+ for ((i = 1; i < cword; i++)); do
+ [[ ${words[i]} != -* && ${words[i - 1]} != @(-p|-h) ]] && ((args++))
+ done
+
+ case $args in
+ 0)
+ COMPREPLY=($(compgen -W "$($1 help 2>/dev/null |
+ awk '!/(^ |: *$)/ { sub("\\|", " ", $1); print $1 }')" \
+ -- "$cur"))
+ ;;
+ 1)
+ _chronyc_command_args "$1"
+ if [[ ! ${COMPREPLY-} && $prev == sources?(tats) ]]; then
+ # [-v] not handled by _chronyc_command_args yet
+ COMPREPLY=($(compgen -W '-v' -- "$cur"))
+ fi
+ ;;
+ 2)
+ [[ $prev == @(peer|server) ]] && _known_hosts_real -- "$cur"
+ ;;
+ esac
+} &&
+ complete -F _chronyc chronyc
+
+# ex: filetype=sh
diff --git a/completions/chrpath b/completions/chrpath
new file mode 100644
index 0000000..2883967
--- /dev/null
+++ b/completions/chrpath
@@ -0,0 +1,27 @@
+# chrpath(1) completion -*- shell-script -*-
+
+_chrpath()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --version | --help | -!(-*)[vh])
+ return
+ ;;
+ --replace | -!(-*)r)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _chrpath chrpath
+
+# ex: filetype=sh
diff --git a/completions/cksfv b/completions/cksfv
new file mode 100644
index 0000000..da404dd
--- /dev/null
+++ b/completions/cksfv
@@ -0,0 +1,29 @@
+# cksfv completion by Chris <xris@forevermore.net> -*- shell-script -*-
+
+_cksfv()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ case "$prev" in
+ -*C | -*g)
+ _filedir -d
+ return
+ ;;
+ -*f)
+ _filedir 'sfv'
+ return
+ ;;
+ esac
+
+ _filedir
+
+} &&
+ complete -F _cksfv cksfv
+
+# ex: filetype=sh
diff --git a/completions/cleanarch b/completions/cleanarch
new file mode 100644
index 0000000..0f7d5f5
--- /dev/null
+++ b/completions/cleanarch
@@ -0,0 +1,16 @@
+# mailman cleanarch completion -*- shell-script -*-
+
+_cleanarch()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--status --dry-run --quiet --help' \
+ -- "$cur"))
+ fi
+
+} &&
+ complete -F _cleanarch cleanarch
+
+# ex: filetype=sh
diff --git a/completions/clisp b/completions/clisp
new file mode 100644
index 0000000..c4259a0
--- /dev/null
+++ b/completions/clisp
@@ -0,0 +1,22 @@
+# -*- shell-script -*-
+# bash brogrammable completion for various Common Lisp implementations by
+# Nikodemus Siivola <nikodemus@random-state.net>
+
+_clisp()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # 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
+
+} &&
+ complete -F _clisp -o default clisp
+
+# ex: filetype=sh
diff --git a/completions/clone_member b/completions/clone_member
new file mode 100644
index 0000000..a3ca2b3
--- /dev/null
+++ b/completions/clone_member
@@ -0,0 +1,25 @@
+# mailman clone_member completion -*- shell-script -*-
+
+_clone_member()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -l | --listname)
+ _xfunc list_lists _mailman_lists
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--listname --remove --admin --quiet
+ --nomodify --help' -- "$cur"))
+ fi
+
+} &&
+ complete -F _clone_member clone_member
+
+# ex: filetype=sh
diff --git a/completions/complete b/completions/complete
new file mode 100644
index 0000000..a57f366
--- /dev/null
+++ b/completions/complete
@@ -0,0 +1,49 @@
+# bash complete completion -*- shell-script -*-
+
+_complete()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*o)
+ COMPREPLY=($(compgen -W 'bashdefault default dirnames filenames
+ nospace plusdirs' -- "$cur"))
+ return
+ ;;
+
+ -*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
+ ;;
+
+ -*C)
+ COMPREPLY=($(compgen -A command -- "$cur"))
+ return
+ ;;
+ -*F)
+ COMPREPLY=($(compgen -A function -- "$cur"))
+ return
+ ;;
+ -*p | -*r)
+ COMPREPLY=($(complete -p | command sed -e 's|.* ||'))
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ # relevant options completion
+ local opts="-a -b -c -d -e -f -g -j -k -o -s -u -v -A -G -W -P -S -X"
+ [[ $1 != compgen ]] && opts+=" -F -C"
+ COMPREPLY=($(compgen -W "$opts" -- "$cur"))
+ else
+ COMPREPLY=($(compgen -A command -- "$cur"))
+ fi
+} &&
+ complete -F _complete compgen complete
+
+# ex: filetype=sh
diff --git a/completions/config_list b/completions/config_list
new file mode 100644
index 0000000..1807e33
--- /dev/null
+++ b/completions/config_list
@@ -0,0 +1,27 @@
+# mailman config_list completion -*- shell-script -*-
+
+_config_list()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -i | -o | --inputfile | --outputfile)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--inputfile --outputfile --checkonly
+ --verbose --help' -- "$cur"))
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+
+} &&
+ complete -F _config_list config_list
+
+# ex: filetype=sh
diff --git a/completions/configure b/completions/configure
new file mode 100644
index 0000000..3f59a01
--- /dev/null
+++ b/completions/configure
@@ -0,0 +1,42 @@
+# bash completion for configure -*- shell-script -*-
+
+_configure()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -h | --help | -V | --version | --program-prefix | --program-suffix | \
+ --program-transform-name)
+ return
+ ;;
+ --*file)
+ _filedir
+ return
+ ;;
+ --*prefix | --*dir)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ # if $COMP_CONFIGURE_HINTS is not null, then completions of the form
+ # --option=SETTING will include 'SETTING' as a contextual hint
+ [[ $cur != -* ]] && return
+
+ if [[ ${COMP_CONFIGURE_HINTS-} ]]; then
+ COMPREPLY=($(compgen -W "$($1 --help 2>&1 |
+ awk '/^ --[A-Za-z]/ { print $1; \
+ if ($2 ~ /--[A-Za-z]/) print $2 }' | command sed -e 's/[[,].*//g')" \
+ -- "$cur"))
+ [[ ${COMPREPLY-} == *=* ]] && compopt -o nospace
+ else
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _configure configure
+
+# ex: filetype=sh
diff --git a/completions/convert b/completions/convert
new file mode 100644
index 0000000..ef7baea
--- /dev/null
+++ b/completions/convert
@@ -0,0 +1,324 @@
+# bash completion for ImageMagick -*- shell-script -*-
+
+_ImageMagick()
+{
+ case $prev in
+ -channel)
+ COMPREPLY=($(compgen -W 'Red Green Blue Opacity Matte Cyan
+ Magenta Yellow Black' -- "$cur"))
+ return
+ ;;
+ -colormap)
+ COMPREPLY=($(compgen -W 'shared private' -- "$cur"))
+ return
+ ;;
+ -colorspace)
+ COMPREPLY=($(compgen -W 'GRAY OHTA RGB Transparent XYZ YCbCr YIQ
+ YPbPr YUV CMYK' -- "$cur"))
+ return
+ ;;
+ -compose)
+ COMPREPLY=($(compgen -W 'Over In Out Atop Xor Plus Minus Add
+ Subtract Difference Multiply Bumpmap Copy CopyRed CopyGreen
+ CopyBlue CopyOpacity' -- "$cur"))
+ return
+ ;;
+ -compress)
+ COMPREPLY=($(compgen -W 'None BZip Fax Group4 JPEG Lossless LZW
+ RLE Zip' -- "$cur"))
+ return
+ ;;
+ -dispose)
+ COMPREPLY=($(compgen -W 'Undefined None Background Previous' \
+ -- "$cur"))
+ return
+ ;;
+ -encoding)
+ COMPREPLY=($(compgen -W 'AdobeCustom AdobeExpert AdobeStandard
+ AppleRoman BIG5 GB2312 Latin2 None SJIScode Symbol Unicode
+ Wansung' -- "$cur"))
+ return
+ ;;
+ -endian)
+ COMPREPLY=($(compgen -W 'MSB LSB' -- "$cur"))
+ return
+ ;;
+ -filter)
+ COMPREPLY=($(compgen -W 'Point Box Triangle Hermite Hanning
+ Hamming Blackman Gaussian Quadratic Cubic Catrom Mitchell
+ Lanczos Bessel Sinc' -- "$cur"))
+ return
+ ;;
+ -format)
+ COMPREPLY=($(compgen -W "$(convert -list format | awk \
+ '/ [r-][w-][+-] / { sub("[*]$","",$1); print tolower($1) }')" \
+ -- "$cur"))
+ return
+ ;;
+ -gravity)
+ COMPREPLY=($(compgen -W 'Northwest North NorthEast West Center
+ East SouthWest South SouthEast' -- "$cur"))
+ return
+ ;;
+ -intent)
+ COMPREPLY=($(compgen -W 'Absolute Perceptual Relative
+ Saturation' -- "$cur"))
+ return
+ ;;
+ -interlace)
+ COMPREPLY=($(compgen -W 'None Line Plane Partition' -- "$cur"))
+ return
+ ;;
+ -limit)
+ COMPREPLY=($(compgen -W 'Disk File Map Memory' -- "$cur"))
+ return
+ ;;
+ -list)
+ COMPREPLY=($(compgen -W 'Delegate Format Magic Module Resource
+ Type' -- "$cur"))
+ return
+ ;;
+ -map)
+ COMPREPLY=($(compgen -W 'best default gray red green blue' \
+ -- "$cur"))
+ _filedir
+ return
+ ;;
+ -noise)
+ COMPREPLY=($(compgen -W 'Uniform Gaussian Multiplicative
+ Impulse Laplacian Poisson' -- "$cur"))
+ return
+ ;;
+ -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
+ ;;
+ -mask | -profile | -texture | -tile | -write)
+ _filedir
+ return
+ ;;
+ -type)
+ COMPREPLY=($(compgen -W 'Bilevel Grayscale Palette PaletteMatte
+ TrueColor TrueColorMatte ColorSeparation ColorSeparationlMatte
+ Optimize' -- "$cur"))
+ return
+ ;;
+ -units)
+ COMPREPLY=($(compgen -W 'Undefined PixelsPerInch
+ PixelsPerCentimeter' -- "$cur"))
+ return
+ ;;
+ -virtual-pixel)
+ COMPREPLY=($(compgen -W 'Constant Edge mirror tile' -- "$cur"))
+ return
+ ;;
+ -visual)
+ COMPREPLY=($(compgen -W 'StaticGray GrayScale StaticColor
+ PseudoColor TrueColor DirectColor defaut visualid' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+
+ return 1
+}
+
+_convert()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$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 convert
+
+_mogrify()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$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 mogrify
+
+_display()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$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 display
+
+_animate()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ elif [[ $cur == +* ]]; then
+ COMPREPLY=($(compgen -W '+debug +dither +gamma +map +matte' \
+ -- "$cur"))
+ else
+ _filedir
+ fi
+} &&
+ complete -F _animate animate
+
+_identify()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ elif [[ $cur == +* ]]; then
+ COMPREPLY=($(compgen -W '+debug' -- "$cur"))
+ else
+ _filedir
+ fi
+} &&
+ complete -F _identify identify
+
+_montage()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ elif [[ $cur == +* ]]; then
+ COMPREPLY=($(compgen -W '+adjoin +compress +debug +dither +endian
+ +gamma +label +matte +page' -- "$cur"))
+ else
+ _filedir
+ fi
+} &&
+ complete -F _montage montage
+
+_composite()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ elif [[ $cur == +* ]]; then
+ COMPREPLY=($(compgen -W '+compress +debug +dither +endian +label
+ +matte +negate +page +write' -- "$cur"))
+ else
+ _filedir
+ fi
+} &&
+ complete -F _composite composite
+
+_compare()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ elif [[ $cur == +* ]]; then
+ COMPREPLY=($(compgen -W '+debug' -- "$cur"))
+ else
+ _filedir
+ fi
+} &&
+ complete -F _compare compare
+
+_conjure()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ elif [[ $cur == +* ]]; then
+ COMPREPLY=($(compgen -W '+debug' -- "$cur"))
+ else
+ _filedir
+ fi
+} &&
+ complete -F _conjure conjure
+
+_import()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ elif [[ $cur == +* ]]; then
+ COMPREPLY=($(compgen -W '+debug' -- "$cur"))
+ else
+ _filedir
+ fi
+} &&
+ complete -F _import import
+
+_stream()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _ImageMagick && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ elif [[ $cur == +* ]]; then
+ COMPREPLY=($(compgen -W '+debug' -- "$cur"))
+ else
+ _filedir
+ fi
+} &&
+ complete -F _stream stream
+
+# ex: filetype=sh
diff --git a/completions/cowsay b/completions/cowsay
new file mode 100644
index 0000000..6ba1d0f
--- /dev/null
+++ b/completions/cowsay
@@ -0,0 +1,23 @@
+# bash completion for cowsay -*- shell-script -*-
+
+_cowsay()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -f)
+ COMPREPLY=($(compgen -W \
+ '$(cowsay -l 2>/dev/null | tail -n +2)' -- "$cur"))
+ return
+ ;;
+ 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 -o default cowsay cowthink
+
+# ex: filetype=sh
diff --git a/completions/cpan2dist b/completions/cpan2dist
new file mode 100644
index 0000000..b5e59da
--- /dev/null
+++ b/completions/cpan2dist
@@ -0,0 +1,37 @@
+# bash completion for cpan2dist -*- shell-script -*-
+
+_cpan2dist()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ 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
+ ;;
+ --banlist | --ignorelist | --modulelist | --logfile)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ local cpandirs=("$HOME/.cpanplus/" "$HOME/.cpan/source/modules/")
+ local packagelist
+ for dir in "${cpandirs[@]}"; do
+ [[ -d $dir && -r "$dir/02packages.details.txt.gz" ]] &&
+ packagelist="$dir/02packages.details.txt.gz"
+ done
+ [[ -v packagelist ]] && COMPREPLY=($(zgrep "^${cur//-/::}" \
+ $packagelist 2>/dev/null | awk '{print $1}' | command sed -e 's/::/-/g'))
+ fi
+} &&
+ complete -F _cpan2dist -o default cpan2dist
+
+# ex: filetype=sh
diff --git a/completions/cpio b/completions/cpio
new file mode 100644
index 0000000..d6fde0c
--- /dev/null
+++ b/completions/cpio
@@ -0,0 +1,78 @@
+# bash completion for cpio -*- shell-script -*-
+
+_cpio()
+{
+ local cur prev words cword split
+ _init_completion -s -n : || return
+
+ # --name value style option
+ case $prev in
+ --format | -!(-*)H)
+ COMPREPLY=($(compgen -W \
+ 'bin odc newc crc tar ustar hpbin hpodc' -- "$cur"))
+ return
+ ;;
+ --file | --pattern-file | -!(-*)[EFI])
+ _filedir
+ return
+ ;;
+ --owner | -!(-*)R)
+ _usergroup
+ return
+ ;;
+ --rsh-command)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W '-o --create -i --extract -p --pass-through
+ -? --help --license --usage --version' -- "$cur"))
+ else
+ case ${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 --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 --to-stdout --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
+
+# ex: filetype=sh
diff --git a/completions/cppcheck b/completions/cppcheck
new file mode 100644
index 0000000..8ea9571
--- /dev/null
+++ b/completions/cppcheck
@@ -0,0 +1,91 @@
+# bash completion for cppcheck(1) -*- shell-script -*-
+
+_cppcheck()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --append | --exitcode-suppressions | --rule-file | --config-excludes-file | \
+ --suppressions-list | --includes-file | --include | -i)
+ _filedir
+ return
+ ;;
+ -D | -U | --rule | --suppress | --template | --max-configs | -h | --help | --version | \
+ --errorlist | --config-exclude | -l)
+ return
+ ;;
+ --enable)
+ # split comma-separated list
+ split=false
+ if [[ $cur == ?*,* ]]; then
+ prev="${cur%,*}"
+ cur="${cur##*,}"
+ split=true
+ fi
+ COMPREPLY=($(compgen -W 'all warning style performance
+ portability information unusedFunction missingInclude' \
+ -- "$cur"))
+ $split && COMPREPLY=(${COMPREPLY[@]/#/"$prev,"})
+ return
+ ;;
+ --error-exitcode)
+ COMPREPLY=($(compgen -W '{0..255}' -- "$cur"))
+ return
+ ;;
+ --file-list)
+ _filedir
+ [[ -z $cur || $cur == - ]] && COMPREPLY+=(-)
+ return
+ ;;
+ -I)
+ _filedir -d
+ return
+ ;;
+ -j)
+ COMPREPLY=($(compgen -W "{2..$(_ncpus)}" -- "$cur"))
+ return
+ ;;
+ --language | -x)
+ COMPREPLY=($(compgen -W 'c c++' -- "$cur"))
+ return
+ ;;
+ --std)
+ COMPREPLY=($(compgen -W 'c89 c99 c11 c++03 c++11 c++14 c++17
+ c++20' -- "$cur"))
+ return
+ ;;
+ --platform)
+ _filedir
+ COMPREPLY+=($(compgen -W 'unix32 unix64 win32A win32W win64
+ native' -- "$cur"))
+ return
+ ;;
+ -rp | --relative-paths)
+ if $split; then # -rp without argument is allowed
+ _filedir -d
+ return
+ fi
+ ;;
+ --library)
+ _filedir cfg
+ return
+ ;;
+ --xml-version)
+ COMPREPLY=($(compgen -W '1 2' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _filedir '@([cht]pp|[cht]xx|cc|[ch]++|[ch])'
+ fi
+} &&
+ complete -F _cppcheck cppcheck
+
+# ex: filetype=sh
diff --git a/completions/crontab b/completions/crontab
new file mode 100644
index 0000000..cac7853
--- /dev/null
+++ b/completions/crontab
@@ -0,0 +1,48 @@
+# crontab(1) completion -*- shell-script -*-
+
+_crontab()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*u)
+ _allowed_users
+ return
+ ;;
+ esac
+
+ local -A opts=([-u]="" [-l]="" [-r]="" [-e]="")
+ [[ $OSTYPE == *linux* ]] && opts[-i]=
+ [[ -d /sys/fs/selinux || -d /selinux ]] && opts[-s]=
+
+ local i
+ for i in "${!words[@]}"; do
+ [[ ${words[i]} && $i -ne $cword ]] && unset "opts[${words[i]}]"
+ case "${words[i]}" in
+ -l)
+ unset 'opts[-r]' 'opts[-e]' 'opts[-i]' 'opts[-s]'
+ ;;
+ -e)
+ unset 'opts[-l]' 'opts[-r]' 'opts[-i]'
+ ;;
+ -r)
+ unset 'opts[-l]' 'opts[-e]'
+ ;;
+ -u)
+ unset 'opts[-i]'
+ ;;
+ esac
+ done
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '${!opts[@]}' -- "$cur"))
+ return
+ fi
+
+ # do filenames only if we did not have -l, -r, or -e
+ [[ ${words[*]} == *\ -[lre]* ]] || _filedir
+} &&
+ complete -F _crontab crontab
+
+# ex: filetype=sh
diff --git a/completions/cryptsetup b/completions/cryptsetup
new file mode 100644
index 0000000..e73e165
--- /dev/null
+++ b/completions/cryptsetup
@@ -0,0 +1,103 @@
+# bash completion for cryptsetup -*- shell-script -*-
+
+_cryptsetup_name()
+{
+ COMPREPLY=($(compgen -X control -W '$(command ls /dev/mapper)' -- "$cur"))
+}
+
+_cryptsetup_device()
+{
+ cur=${cur:=/dev/}
+ _filedir
+}
+
+_cryptsetup()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | --cipher | --hash | --*-size | --key-slot | --size | --offset | \
+ --skip | --iter-time | --timeout | --tries | -!(-*)[chslSbopitT])
+ return
+ ;;
+ --key-file | --master-key-file | --header-backup-file | -!(-*)d)
+ _filedir
+ return
+ ;;
+ --type | -!(-*)M)
+ COMPREPLY=($(compgen -W "luks plain loopaes tcrypt" -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ local arg
+ _get_first_arg
+ if [[ -z $arg ]]; then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ COMPREPLY=($(compgen -W 'open close resize status benchmark
+ repair erase luksFormat luksAddKey luksRemoveKey luksChangeKey
+ luksKillSlot luksUUID isLuks luksDump tcryptDump luksSuspend
+ luksResume luksHeaderBackup luksHeaderRestore' -- "$cur"))
+ fi
+ else
+ local args
+ _count_args "" "-!(-*)[chslSbopitTdM]"
+ case $arg in
+ open | create | luksOpen | loopaesOpen | tcryptOpen)
+ case $args in
+ 2)
+ _cryptsetup_device
+ ;;
+ 3)
+ _cryptsetup_name
+ ;;
+ esac
+ ;;
+ close | remove | luksClose | loopaesClose | tcryptClose | status | resize | \
+ luksSuspend | luksResume)
+ case $args in
+ 2)
+ _cryptsetup_name
+ ;;
+ esac
+ ;;
+ luksFormat | luksAddKey | luksRemoveKey | luksChangeKey)
+ case $args in
+ 2)
+ _cryptsetup_device
+ ;;
+ 3)
+ _filedir
+ ;;
+ esac
+ ;;
+ luksKillSlot | luksDelKey | luksUUID | isLuks | luksDump)
+ case $args in
+ 2)
+ _cryptsetup_device
+ ;;
+ esac
+ ;;
+ luksHeaderBackup | luksHeaderRestore)
+ case $args in
+ 2)
+ _cryptsetup_device
+ ;;
+ 3)
+ COMPREPLY=('--header-backup-file')
+ ;;
+ esac
+ ;;
+ esac
+ fi
+
+} &&
+ complete -F _cryptsetup cryptsetup
+
+# ex: filetype=sh
diff --git a/completions/curl b/completions/curl
new file mode 100644
index 0000000..6e84269
--- /dev/null
+++ b/completions/curl
@@ -0,0 +1,99 @@
+# curl(1) completion -*- shell-script -*-
+
+_curl()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --ciphers | --connect-timeout | --continue-at | --form | --form-string | \
+ --ftp-account | --ftp-alternative-to-user | --ftp-port | --header | --help | \
+ --hostpubmd5 | --keepalive-time | --krb | --limit-rate | --local-port | \
+ --mail-from | --mail-rcpt | --max-filesize | --max-redirs | --max-time | --pass | \
+ --proto | --proto-redir | --proxy-user | --proxy1.0 | --quote | --range | \
+ --request | --retry | --retry-delay | --retry-max-time | \
+ --socks5-gssapi-service | --telnet-option | --tftp-blksize | --time-cond | \
+ --url | --user | --user-agent | --version | --write-out | --resolve | --tlsuser | \
+ --tlspassword | -!(-*)[CFPHhmQrXtzuAVw])
+ return
+ ;;
+ --config | --cookie | --cookie-jar | --dump-header | --egd-file | \
+ --key | --libcurl | --output | --random-file | --upload-file | --trace | \
+ --trace-ascii | --netrc-file | -!(-*)[KbcDoT])
+ _filedir
+ return
+ ;;
+ --cacert | --cert | -!(-*)E)
+ _filedir '@(c?(e)rt|cer|pem|der)'
+ return
+ ;;
+ --capath)
+ _filedir -d
+ return
+ ;;
+ --cert-type | --key-type)
+ COMPREPLY=($(compgen -W 'DER PEM ENG' -- "$cur"))
+ return
+ ;;
+ --crlfile)
+ _filedir crl
+ return
+ ;;
+ --data | --data-ascii | --data-binary | --data-urlencode | -!(-*)d)
+ if [[ $cur == \@* ]]; then
+ cur=${cur:1}
+ _filedir
+ if [[ ${#COMPREPLY[@]} -eq 1 && -d ${COMPREPLY[0]} ]]; then
+ COMPREPLY[0]+=/
+ compopt -o nospace
+ fi
+ COMPREPLY=("${COMPREPLY[@]/#/@}")
+ fi
+ return
+ ;;
+ --delegation)
+ COMPREPLY=($(compgen -W 'none policy always' -- "$cur"))
+ return
+ ;;
+ --engine)
+ COMPREPLY=($(compgen -W 'list' -- "$cur"))
+ return
+ ;;
+ --ftp-method)
+ COMPREPLY=($(compgen -W 'multicwd nocwd singlecwd' -- "$cur"))
+ return
+ ;;
+ --ftp-ssl-ccc-mode)
+ COMPREPLY=($(compgen -W 'active passive' -- "$cur"))
+ return
+ ;;
+ --interface)
+ _available_interfaces -a
+ return
+ ;;
+ --proxy | --socks4 | --socks4a | --socks5 | --socks5-hostname | -!(-*)x)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --pubkey)
+ _xfunc ssh _ssh_identityfile pub
+ return
+ ;;
+ --stderr)
+ COMPREPLY=($(compgen -W '-' -- "$cur"))
+ _filedir
+ return
+ ;;
+ --tlsauthtype)
+ COMPREPLY=($(compgen -W 'SRP' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+} &&
+ complete -F _curl curl
+
+# ex: filetype=sh
diff --git a/completions/cvs b/completions/cvs
new file mode 100644
index 0000000..ba1f062
--- /dev/null
+++ b/completions/cvs
@@ -0,0 +1,398 @@
+# cvs(1) completion -*- shell-script -*-
+
+_cvs_entries()
+{
+ local prefix=${cur%/*}/ IFS=$'\n'
+ [[ -e ${prefix:-}CVS/Entries ]] || prefix=""
+ entries=($(cut -d/ -f2 -s ${prefix:-}CVS/Entries 2>/dev/null))
+ if [[ $entries ]]; then
+ entries=("${entries[@]/#/${prefix:-}}")
+ compopt -o filenames
+ fi
+}
+
+_cvs_modules()
+{
+ if [[ -n $prefix ]]; then
+ COMPREPLY=($(command ls -d ${cvsroot}/${prefix}/!(CVSROOT)))
+ else
+ COMPREPLY=($(command ls -d ${cvsroot}/!(CVSROOT)))
+ fi
+}
+
+_cvs_commands()
+{
+ cvs --help-commands 2>&1 | awk '/^( *|\t)/ { print $1 }'
+}
+
+_cvs_command_options()
+{
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" "--help $2")' -- "$cur"))
+}
+
+_cvs_kflags()
+{
+ COMPREPLY=($(compgen -W 'kv kvl k o b v' -- "$cur"))
+}
+
+_cvs_roots()
+{
+ local -a cvsroots
+ [[ -v CVSROOT ]] && cvsroots=("$CVSROOT")
+ [[ -r ~/.cvspass ]] && cvsroots+=($(awk '{ print $2 }' ~/.cvspass))
+ [[ -r CVS/Root ]] && mapfile -tO ${#cvsroots[@]} cvsroots <CVS/Root
+ COMPREPLY=($(compgen -W '${cvsroots[@]}' -- "$cur"))
+ __ltrim_colon_completions "$cur"
+}
+
+_cvs()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local count mode i cvsroot cvsroots pwd
+ local -a flags files entries changed newremoved
+
+ count=0
+ for i in "${words[@]}"; do
+ ((count == cword)) && break
+ # Last parameter was the CVSROOT, now go back to mode selection
+ if [[ ${words[count]} == "${cvsroot-}" && ${mode-} == cvsroot ]]; then
+ mode=""
+ fi
+ if [[ ! -v mode ]]; then
+ case $i in
+ --help | -!(-*)H)
+ COMPREPLY=($(compgen -W "$(_cvs_commands)" -- "$cur"))
+ return
+ ;;
+ -!(-*)d)
+ mode=cvsroot
+ cvsroot=${words[count + 1]}
+ ;;
+ add | ad | new)
+ mode=add
+ ;;
+ admin | adm | rcs)
+ mode="admin"
+ ;;
+ annotate | ann | blame | rannotate | rann | ra)
+ mode=annotate
+ ;;
+ checkout | co | get)
+ mode=checkout
+ ;;
+ commit | ci | com)
+ mode=commit
+ ;;
+ diff | di | dif)
+ mode="diff"
+ ;;
+ export | ex | exp)
+ mode="export"
+ ;;
+ edit | unedit | editors | logout | pserver | server | watch | watchers)
+ mode=$i
+ ;;
+ history | hi | his)
+ mode=history
+ ;;
+ import | im | imp)
+ mode=import
+ ;;
+ log | lo | rlog | rl)
+ mode=log
+ ;;
+ login | logon | lgn)
+ mode=login
+ ;;
+ rdiff | patch | pa)
+ mode=rdiff
+ ;;
+ release | re | rel)
+ mode=release
+ ;;
+ remove | rm | delete)
+ mode=remove
+ ;;
+ rtag | rt | rfreeze)
+ mode=rtag
+ ;;
+ status | st | stat)
+ mode=status
+ ;;
+ tag | ta | freeze)
+ mode=tag
+ ;;
+ update | up | upd)
+ mode=update
+ ;;
+ version | ve | ver)
+ mode=version
+ ;;
+ esac
+ elif [[ $i == -* ]]; then
+ flags+=($i)
+ fi
+ ((count++))
+ done
+
+ case ${mode-} in
+ add)
+ case $prev in
+ --*) ;;
+ -*m)
+ return
+ ;;
+ -*k)
+ _cvs_kflags
+ return
+ ;;
+ esac
+
+ if [[ $cur != -* ]]; then
+ _cvs_entries
+ [[ -z $cur ]] && files=(!(CVS)) ||
+ files=($(command ls -d ${cur}* 2>/dev/null))
+ local f
+ for i in "${!files[@]}"; do
+ if [[ ${files[i]} == ?(*/)CVS ]]; then
+ unset 'files[i]'
+ else
+ for f in "${entries[@]}"; do
+ if [[ ${files[i]} == "$f" && ! -d $f ]]; then
+ unset 'files[i]'
+ break
+ fi
+ done
+ fi
+ done
+ COMPREPLY=($(compgen -X "$_backup_glob" -W '${files[@]}' \
+ -- "$cur"))
+ else
+ _cvs_command_options "$1" $mode
+ fi
+ ;;
+ admin)
+ case $prev in
+ --*) ;;
+ -*@([aAbcelmnNosu]|t-))
+ return
+ ;;
+ -*t)
+ _filedir
+ return
+ ;;
+ -*k)
+ _cvs_kflags
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ _cvs_command_options "$1" $mode
+ else
+ _cvs_entries
+ COMPREPLY=($(compgen -W '${entries[@]}' -- "$cur"))
+ fi
+ ;;
+ annotate)
+ [[ $prev == -[rD] ]] && return
+
+ if [[ $cur == -* ]]; then
+ _cvs_command_options "$1" $mode
+ else
+ _cvs_entries
+ COMPREPLY=($(compgen -W '${entries[@]}' -- "$cur"))
+ fi
+ ;;
+ checkout)
+ case $prev in
+ --*) ;;
+ -*[rDj])
+ return
+ ;;
+ -*d)
+ _filedir -d
+ return
+ ;;
+ -*k)
+ _cvs_kflags
+ return
+ ;;
+ esac
+
+ if [[ $cur != -* ]]; then
+ [[ ! -v cvsroot ]] && cvsroot=${CVSROOT-}
+ COMPREPLY=($(cvs -d "$cvsroot" co -c 2>/dev/null |
+ awk '{print $1}'))
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]}' -- "$cur"))
+ else
+ _cvs_command_options "$1" $mode
+ fi
+ ;;
+ commit)
+ case $prev in
+ --*) ;;
+ -*[mr])
+ return
+ ;;
+ -*F)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur != -* ]]; 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 |
+ command sed -ne 's/^Files [^ ]* and \([^ ]*\) differ$/\1/p'))
+ newremoved=($(cvs -q diff --brief 2>&1 |
+ command sed -ne 's/^cvs diff: \([^ ]*\) .*, no comparison available$/\1/p'))
+ COMPREPLY=($(compgen -W '${changed[@]:-} \
+ ${newremoved[@]:-}' -- "$cur"))
+ else
+ _cvs_entries
+ COMPREPLY=($(compgen -W '${entries[@]}' -- "$cur"))
+ fi
+ else
+ _cvs_command_options "$1" $mode
+ fi
+ ;;
+ cvsroot)
+ _cvs_roots
+ ;;
+ diff | log)
+ if [[ $cur == -* ]]; then
+ _cvs_command_options "$1" $mode
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _cvs_entries
+ COMPREPLY=($(compgen -W '${entries[@]:-}' -- "$cur"))
+ fi
+ ;;
+ editors | watchers)
+ if [[ $cur == -* ]]; then
+ _cvs_command_options "$1" $mode
+ else
+ _cvs_entries
+ COMPREPLY=($(compgen -W '${entries[@]}' -- "$cur"))
+ fi
+ ;;
+ export)
+ case $prev in
+ --*) ;;
+ -*[rD])
+ return
+ ;;
+ -*d)
+ _filedir -d
+ return
+ ;;
+ -*k)
+ _cvs_kflags
+ return
+ ;;
+ esac
+
+ if [[ $cur != -* ]]; then
+ [[ ! -v cvsroot ]] && cvsroot=${CVSROOT-}
+ COMPREPLY=($(cvs -d "$cvsroot" co -c | awk '{print $1}'))
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]}' -- "$cur"))
+ else
+ _cvs_command_options "$1" $mode
+ fi
+ ;;
+ import)
+ case $prev in
+ --*) ;;
+ -*[IbmW])
+ return
+ ;;
+ -*k)
+ _cvs_kflags
+ return
+ ;;
+ esac
+
+ if [[ $cur != -* ]]; then
+ # starts with same algorithm as checkout
+ [[ ! -v cvsroot ]] && cvsroot=${CVSROOT-}
+ local prefix=${cur%/*}
+ if [[ -r ${cvsroot}/${prefix} ]]; then
+ _cvs_modules
+ COMPREPLY=(${COMPREPLY[@]#$cvsroot})
+ COMPREPLY=(${COMPREPLY[@]#\/})
+ fi
+ pwd=$(pwd)
+ pwd=${pwd##*/}
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]} $pwd' -- "$cur"))
+ else
+ _cvs_command_options "$1" $mode
+ fi
+ ;;
+ remove)
+ if [[ $cur != -* ]]; then
+ _cvs_entries
+ if [[ $prev != -f ]]; then
+ # find out what files are missing
+ for i in "${!entries[@]}"; do
+ [[ -r ${entries[i]} ]] && unset 'entries[i]'
+ done
+ fi
+ COMPREPLY=($(compgen -W '${entries[@]:-}' -- "$cur"))
+ else
+ _cvs_command_options "$1" $mode
+ fi
+ ;;
+ update)
+ case $prev in
+ --*) ;;
+ -*[rDjIW])
+ return
+ ;;
+ -*k)
+ _cvs_kflags
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ _cvs_command_options "$1" $mode
+ else
+ _cvs_entries
+ COMPREPLY=($(compgen -W '${entries[@]}' -- "$cur"))
+ fi
+ ;;
+ "")
+ case $prev in
+ --*) ;;
+ -*T)
+ _filedir -d
+ return
+ ;;
+ -*[es])
+ return
+ ;;
+ -*z)
+ COMPREPLY=($(compgen -W '{1..9}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$(_cvs_commands)
+ $(_parse_help "$1" --help-options) --help --help-commands
+ --help-options --version' -- "$cur"))
+ ;;
+ esac
+
+} &&
+ complete -F _cvs cvs
+
+# ex: filetype=sh
diff --git a/completions/cvsps b/completions/cvsps
new file mode 100644
index 0000000..4fdfefc
--- /dev/null
+++ b/completions/cvsps
@@ -0,0 +1,58 @@
+# bash completion for cvsps -*- shell-script -*-
+
+_cvsps()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ case $prev in
+ -h | -z | -f | -d | -l | --diff-opts | --debuglvl)
+ return
+ ;;
+ -s)
+ COMPREPLY=($(compgen -W "$($1 2>/dev/null |
+ awk '/^PatchSet:?[ \t]/ { print $2 }')" -- "$cur"))
+ return
+ ;;
+ -a)
+ COMPREPLY=($(compgen -W "$($1 2>/dev/null |
+ awk '/^Author:[ \t]/ { print $2 }')" -- "$cur"))
+ return
+ ;;
+ -b)
+ COMPREPLY=($(compgen -W "$($1 2>/dev/null |
+ awk '/^Branch:[ \t]/ { print $2 }')" -- "$cur"))
+ return
+ ;;
+ -r)
+ COMPREPLY=($(compgen -W "$($1 2>/dev/null |
+ awk '/^Tag:[ \t]+[^(]/ { print $2 }')" -- "$cur"))
+ return
+ ;;
+ -p)
+ _filedir -d
+ return
+ ;;
+ --test-log)
+ _filedir
+ return
+ ;;
+ -Z)
+ COMPREPLY=($(compgen -W '{1..9}' -- "$cur"))
+ return
+ ;;
+ --root)
+ _xfunc cvs _cvs_roots
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ else
+ _xfunc cvs _cvs_roots
+ fi
+} &&
+ complete -F _cvsps cvsps
+
+# ex: filetype=sh
diff --git a/completions/dd b/completions/dd
new file mode 100644
index 0000000..04d876a
--- /dev/null
+++ b/completions/dd
@@ -0,0 +1,42 @@
+# bash completion for dd -*- shell-script -*-
+
+_dd()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ case $cur in
+ if=* | of=*)
+ cur=${cur#*=}
+ _filedir
+ return
+ ;;
+ conv=*)
+ cur=${cur#*=}
+ COMPREPLY=($(compgen -W 'ascii ebcdic ibm block unblock lcase
+ ucase sparse swab sync excl nocreat notrunc noerror fdatasync
+ fsync' -- "$cur"))
+ return
+ ;;
+ iflag=* | oflag=*)
+ cur=${cur#*=}
+ COMPREPLY=($(compgen -W 'append direct directory dsync sync
+ fullblock nonblock noatime nocache noctty nofollow count_bytes
+ skip_bytes seek_bytes' -- "$cur"))
+ return
+ ;;
+ status=*)
+ cur=${cur#*=}
+ COMPREPLY=($(compgen -W 'none noxfer progress' -- "$cur"))
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")
+ $(compgen -W 'bs cbs conv count ibs if iflag obs of oflag
+ seek skip status' -S '=' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _dd dd
+
+# ex: filetype=sh
diff --git a/completions/deja-dup b/completions/deja-dup
new file mode 100644
index 0000000..1854d6a
--- /dev/null
+++ b/completions/deja-dup
@@ -0,0 +1,32 @@
+# bash completion for deja-dup(1) -*- shell-script -*-
+
+_deja_dup()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -'?' | --help | --help-*)
+ return
+ ;;
+ --restore)
+ _filedir
+ return
+ ;;
+ --restore-missing)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help-all)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+} &&
+ complete -F _deja_dup deja-dup
+
+# ex: filetype=sh
diff --git a/completions/desktop-file-validate b/completions/desktop-file-validate
new file mode 100644
index 0000000..8f4e139
--- /dev/null
+++ b/completions/desktop-file-validate
@@ -0,0 +1,23 @@
+# desktop-file-validate completion -*- shell-script -*-
+
+_desktop_file_validate()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir desktop
+} &&
+ complete -F _desktop_file_validate desktop-file-validate
+
+# ex: filetype=sh
diff --git a/completions/dhclient b/completions/dhclient
new file mode 100644
index 0000000..ce4b745
--- /dev/null
+++ b/completions/dhclient
@@ -0,0 +1,34 @@
+# bash completion for dhclient -*- shell-script -*-
+
+_dhclient()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -p | -e)
+ return
+ ;;
+ -D)
+ COMPREPLY=($(compgen -W 'LL LLT' -- "$cur"))
+ return
+ ;;
+ -*f)
+ _filedir
+ return
+ ;;
+ -s)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ else
+ _available_interfaces
+ fi
+} &&
+ complete -F _dhclient dhclient
+
+# ex: filetype=sh
diff --git a/completions/dict b/completions/dict
new file mode 100644
index 0000000..f3426ff
--- /dev/null
+++ b/completions/dict
@@ -0,0 +1,64 @@
+# dict(1) completion -*- shell-script -*-
+
+_dictdata()
+{
+ dict $host $port $1 2>/dev/null | command sed -ne \
+ 's/^[[:blank:]]\{1,\}\([^[:blank:]]*\).*$/\1/p'
+}
+
+_dict()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local host port db i
+
+ for ((i = 1; i < cword; i++)); do
+ case ${words[i]} in
+ --host | -!(-*)h)
+ host=${words[++i]}
+ [[ -n $host ]] && host="-h $host"
+ ;;
+ --port | -!(-*)p)
+ port=${words[++i]}
+ [[ -n $port ]] && port="-p $port"
+ ;;
+ --database | -!(-*)d)
+ db=${words[++i]}
+ [[ -n $db ]] && host="-d $db"
+ ;;
+ esac
+ done
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ case $prev in
+ --database | -info | -!(-*)[di])
+ COMPREPLY=($(compgen -W '$(_dictdata -D)' -- "$cur"))
+ return
+ ;;
+ --strategy | -!(-*)s)
+ COMPREPLY=($(compgen -W '$(_dictdata -S)' -- "$cur"))
+ return
+ ;;
+ esac
+
+ local dictfile=/usr/share/dict/words
+ if [[ -r $dictfile ]]; then
+ # Dictfile may be too large for practical compgen -W usage, so narrow
+ # it down with grep if $cur looks like something that's safe to embed
+ # in a pattern instead.
+ if [[ $cur == +([-A-Za-z0-9/.]) ]]; then
+ COMPREPLY=($(compgen -W \
+ '$(command grep "^${cur//./\\.}" $dictfile)' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W '$(cat $dictfile)' -- "$cur"))
+ fi
+ fi
+} &&
+ complete -F _dict -o default dict rdict
+
+# ex: filetype=sh
diff --git a/completions/dmypy b/completions/dmypy
new file mode 100644
index 0000000..5abe37d
--- /dev/null
+++ b/completions/dmypy
@@ -0,0 +1,48 @@
+# dmypy completion -*- shell-script -*-
+
+_dmypy()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | -[hV])
+ return
+ ;;
+ --status-file)
+ _filedir
+ return
+ ;;
+ esac
+
+ local cmd i
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} != -* && ${words[i - 1]} != --status-file ]]; then
+ cmd=${words[i]}
+ break
+ fi
+ done
+
+ case ${cmd-} in
+ check | run)
+ _filedir '@(py|pyi)'
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ if [[ ! -v cmd ]]; then
+ local cmds=$($1 --help 2>&1 |
+ command sed -ne '/positional arguments/{p;n;p;q}' |
+ command sed -ne 's/{\(.*\)}/\1/p')
+ COMPREPLY=($(IFS="," compgen -W '$cmds' -- "$cur"))
+ return
+ fi
+} &&
+ complete -F _dmypy dmypy
+
+# ex: filetype=sh
diff --git a/completions/dnssec-keygen b/completions/dnssec-keygen
new file mode 100644
index 0000000..3f68a68
--- /dev/null
+++ b/completions/dnssec-keygen
@@ -0,0 +1,48 @@
+# bash completion for dnssec-keygen(8) -*- shell-script -*-
+
+_dnssec_keygen_optarg()
+{
+ local args=$("$1" -h 2>&1 |
+ command sed -e 's/|/ /g' -e 's/(.*//' \
+ -ne '/^[[:space:]]*'$2'/,/^[[:space:]]*[(-]/p' |
+ command sed -e 's/^[[:space:]]*'$2'.*://' -e '/^[[:space:]]*-/d')
+ COMPREPLY+=($(compgen -W '$args' -- "$cur"))
+}
+
+_dnssec_keygen()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -[hbEgLpsPARIDSi])
+ return
+ ;;
+ -K)
+ _filedir -d
+ return
+ ;;
+ -[ancdfTtm])
+ _dnssec_keygen_optarg "$1" $prev
+ return
+ ;;
+ -r)
+ cur=${cur:=/dev/}
+ _filedir
+ return
+ ;;
+ -v)
+ COMPREPLY=($(compgen -W '{0..10}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" | \
+ command sed -e "s/:\$//")' -- "$cur"))
+ return
+ fi
+} &&
+ complete -F _dnssec_keygen dnssec-keygen
+
+# ex: filetype=sh
diff --git a/completions/dnsspoof b/completions/dnsspoof
new file mode 100644
index 0000000..86ade91
--- /dev/null
+++ b/completions/dnsspoof
@@ -0,0 +1,26 @@
+# dnsspoof completion -*- shell-script -*-
+
+_dnsspoof()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -i)
+ _available_interfaces -a
+ return
+ ;;
+ -f)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ fi
+
+} &&
+ complete -F _dnsspoof dnsspoof
+
+# ex: filetype=sh
diff --git a/completions/dot b/completions/dot
new file mode 100644
index 0000000..8122229
--- /dev/null
+++ b/completions/dot
@@ -0,0 +1,45 @@
+# dot(1) completion -*- shell-script -*-
+
+_dot()
+{
+ local cur prev words cword
+ _init_completion -n := || return
+
+ [[ $prev == -[V?] ]] && return
+
+ case $cur in
+ -G* | -N* | -E* | -l?* | -q?* | -s?* | -Ln* | -LU* | -LC* | -LT*)
+ return
+ ;;
+ -T*)
+ local langs=($("$1" -TNON_EXISTENT 2>&1 |
+ command sed -ne 's/.*one of://p'))
+ COMPREPLY=($(compgen -P -T -W '${langs[@]}' -- "${cur#-T}"))
+ return
+ ;;
+ -K*)
+ local layouts=($("$1" -KNON_EXISTENT 2>&1 |
+ command sed -ne 's/.*one of://p'))
+ COMPREPLY=($(compgen -P -K -W '${layouts[@]}' -- "${cur#-K}"))
+ return
+ ;;
+ -o*)
+ cur=${cur#-o}
+ _filedir
+ COMPREPLY=($(compgen -P -o -W '${COMPREPLY[@]}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-V -v -G -N -E -T -K -l -o -O -P -q -s -y -n
+ -n1 -n2 -x -Lg -LO -Ln -LU -LC -LT -m -c -?' -- "$cur"))
+ [[ ${COMPREPLY-} == -@([GNETKo]|L[nUCT]) ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir dot
+} &&
+ complete -F _dot dot
+
+# ex: filetype=sh
diff --git a/completions/dpkg b/completions/dpkg
new file mode 100644
index 0000000..0b90b14
--- /dev/null
+++ b/completions/dpkg
@@ -0,0 +1,126 @@
+# This function is required by _dpkg and _dpkg-reconfigure -*- shell-script -*-
+
+_have grep-status && {
+ _comp_dpkg_installed_packages()
+ {
+ grep-status -P -e "^$1" -a -FStatus 'ok installed' -n -s Package
+ }
+} || {
+ _comp_dpkg_installed_packages()
+ {
+ command grep -A 1 "Package: $1" /var/lib/dpkg/status 2>/dev/null |
+ command grep -B 1 -Ee "ok installed|half-installed|unpacked| \
+ half-configured" \
+ -Ee "^Essential: yes" |
+ awk "/Package: $1/ { print \$2 }" 2>/dev/null
+ }
+}
+
+_have grep-status && {
+ _comp_dpkg_purgeable_packages()
+ {
+ grep-status -P -e "^$1" -a -FStatus 'ok installed' -o -FStatus 'ok config-files' -n -s Package
+ }
+} || {
+ _comp_dpkg_purgeable_packages()
+ {
+ command grep -A 1 "Package: $1" /var/lib/dpkg/status 2>/dev/null |
+ command grep -B 1 -Ee "ok installed|half-installed|unpacked| \
+ half-configured|config-files" \
+ -Ee "^Essential: yes" |
+ awk "/Package: $1/ { print \$2 }" 2>/dev/null
+ }
+}
+
+# Debian dpkg(1) completion
+#
+_dpkg()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local i=$cword
+
+ # find the last option flag
+ if [[ $cur != -* ]]; then
+ while [[ $prev != -* && $i -ne 1 ]]; do
+ prev=${words[--i - 1]}
+ done
+ fi
+
+ case $prev in
+ --install | --unpack | --record-avail | --contents | --info | --fsys-tarfile | \
+ --field | --control | --extract | --vextract | --raw-extract | -!(-*)[ciAIfexX])
+ _filedir '?(u|d)deb'
+ return
+ ;;
+ --build | -!(-*)b)
+ _filedir -d
+ return
+ ;;
+ --status | --print-avail | --list | -!(-*)[spl])
+ COMPREPLY=($(_xfunc apt-cache _apt_cache_packages))
+ return
+ ;;
+ --show | -!(-*)W)
+ if [[ $1 == *dpkg-query ]]; then
+ COMPREPLY=($(_xfunc apt-cache _apt_cache_packages))
+ else
+ _filedir '?(u|d)deb'
+ fi
+ return
+ ;;
+ --search | -!(-*)S)
+ _filedir
+ return
+ ;;
+ --remove | --verify | -!(-*)[rV])
+ COMPREPLY=($(_comp_dpkg_installed_packages "$cur"))
+ return
+ ;;
+ --listfiles | --purge | -!(-*)[LP])
+ COMPREPLY=($(_comp_dpkg_purgeable_packages "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _dpkg dpkg dpkg-deb dpkg-query
+
+# Debian GNU dpkg-reconfigure(8) completion
+#
+_dpkg_reconfigure()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local opt
+
+ case $prev in
+ --frontend | -!(-*)f)
+ opt=($(printf '%s\n' /usr/share/perl5/Debconf/FrontEnd/*))
+ opt=(${opt[@]##*/})
+ opt=(${opt[@]%.pm})
+ COMPREPLY=($(compgen -W '${opt[@]}' -- "$cur"))
+ return
+ ;;
+ --priority | -!(-*)p)
+ COMPREPLY=($(compgen -W 'low medium high critical' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--frontend --priority --all --unseen-only
+ --help --showold --force --terse' -- "$cur"))
+ else
+ COMPREPLY=($(_comp_dpkg_installed_packages "$cur"))
+ fi
+} &&
+ complete -F _dpkg_reconfigure -o default dpkg-reconfigure
+
+# ex: filetype=sh
diff --git a/completions/dpkg-source b/completions/dpkg-source
new file mode 100644
index 0000000..05fa3a1
--- /dev/null
+++ b/completions/dpkg-source
@@ -0,0 +1,98 @@
+# Debian dpkg-source completion -*- shell-script -*-
+
+_dpkg_source()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local options word action packopts unpackopts fields
+
+ packopts="-c -l -F -V -T -D -U -W -E -sa -i -I -sk -sr -ss -sA -sK -sP \
+ -sU -sR"
+ unpackopts="-sp -sn -su"
+ options="-x -b --print-format --before-build --after-build --commit $packopts $unpackopts"
+ fields="Format Source Version Binary Maintainer Uploader Architecture \
+ Standards-Version Build-Depends Files"
+
+ action=options
+ for word in "${words[@]:1}"; do
+ if [[ $word == -x ]]; then
+ action=unpack
+ elif [[ $word == -b ]]; then
+ action=pack
+ elif [[ $word == -h ]]; then
+ action=help
+ fi
+ done
+
+ case $action in
+ unpack)
+ case $prev in
+ -x)
+ _filedir -d
+ _filedir 'dsc'
+ ;;
+ *)
+ COMPREPLY=($(compgen -W "$unpackopts" -- "$cur"))
+ _filedir -d
+ _filedir
+ ;;
+ esac
+ return
+ ;;
+ pack)
+ case $prev in
+ -b)
+ _filedir -d
+ ;;
+ -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
+ _filedir -d
+ _filedir
+ ;;
+ -F)
+ # -F: force change log format
+ COMPREPLY=($(command ls /usr/lib/dpkg/parsechangelog))
+ ;;
+ -V)
+ # -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=()
+ ;;
+ -D)
+ # -D: override or add a .dsc field and value
+ # if $cur doesn't contain a = yet, suggest variable names
+ if [[ $cur == *=* ]]; then
+ # $cur contains a "="
+ COMPREPLY=()
+ else
+ COMPREPLY=($(compgen -W "$fields" -- "$cur"))
+ fi
+ ;;
+ -U)
+ # -U: remove a field
+ # Suggest possible fieldnames
+ COMPREPLY=($(compgen -W "$fields" -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W "$packopts $unpackopts" \
+ -- "$cur"))
+ ;;
+ esac
+ return
+ ;;
+ *)
+ COMPREPLY=($(compgen -W "$options" -- "$cur"))
+ return
+ ;;
+ esac
+} &&
+ complete -F _dpkg_source dpkg-source
+
+# ex: filetype=sh
diff --git a/completions/dselect b/completions/dselect
new file mode 100644
index 0000000..4c18026
--- /dev/null
+++ b/completions/dselect
@@ -0,0 +1,29 @@
+# Debian Linux dselect(8) completion -*- shell-script -*-
+
+_dselect()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --admindir)
+ _filedir -d
+ return
+ ;;
+ -D | -debug)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'access update select install config remove
+ quit' -- "$cur"))
+ fi
+
+} &&
+ complete -F _dselect dselect
+
+# ex: filetype=sh
diff --git a/completions/dsniff b/completions/dsniff
new file mode 100644
index 0000000..749c533
--- /dev/null
+++ b/completions/dsniff
@@ -0,0 +1,26 @@
+# dsniff completion -*- shell-script -*-
+
+_dsniff()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -r | -w | -f | -p)
+ _filedir
+ return
+ ;;
+ -i)
+ _available_interfaces -a
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1") -r -w -p' -- "$cur"))
+ fi
+
+} &&
+ complete -F _dsniff dsniff
+
+# ex: filetype=sh
diff --git a/completions/dumpdb b/completions/dumpdb
new file mode 100644
index 0000000..eb1927f
--- /dev/null
+++ b/completions/dumpdb
@@ -0,0 +1,18 @@
+# mailman dumpdb completion -*- shell-script -*-
+
+_dumpdb()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--marshal --pickle --noprint --help' \
+ -- "$cur"))
+ else
+ _filedir
+ fi
+
+} &&
+ complete -F _dumpdb dumpdb
+
+# ex: filetype=sh
diff --git a/completions/dumpe2fs b/completions/dumpe2fs
new file mode 100644
index 0000000..413a5bf
--- /dev/null
+++ b/completions/dumpe2fs
@@ -0,0 +1,28 @@
+# dumpe2fs(8) completion -*- shell-script -*-
+
+_dumpe2fs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*[oV])
+ return
+ ;;
+ -*i)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ cur=${cur:=/dev/}
+ _filedir
+} &&
+ complete -F _dumpe2fs dumpe2fs
+
+# ex: filetype=sh
diff --git a/completions/e2freefrag b/completions/e2freefrag
new file mode 100644
index 0000000..c89dc9c
--- /dev/null
+++ b/completions/e2freefrag
@@ -0,0 +1,24 @@
+# e2freefrag(8) completion -*- shell-script -*-
+
+_e2freefrag()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -c | -h)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" -h)' -- "$cur"))
+ return
+ fi
+
+ cur=${cur:=/dev/}
+ _filedir
+} &&
+ complete -F _e2freefrag e2freefrag
+
+# ex: filetype=sh
diff --git a/completions/e2label b/completions/e2label
new file mode 100644
index 0000000..ac8e4b5
--- /dev/null
+++ b/completions/e2label
@@ -0,0 +1,15 @@
+# e2label(8) completion -*- shell-script -*-
+
+_e2label()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ cur=${cur:=/dev/}
+ _filedir
+ fi
+} &&
+ complete -F _e2label e2label
+
+# ex: filetype=sh
diff --git a/completions/ebtables b/completions/ebtables
new file mode 100644
index 0000000..de6bc54
--- /dev/null
+++ b/completions/ebtables
@@ -0,0 +1,78 @@
+# bash completion for ebtables -*- shell-script -*-
+
+_ebtables()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local table chain='s/^Bridge chain: \([^ ,]\{1,\}\).*$/\1/p' \
+ targets='ACCEPT DROP CONTINUE RETURN'
+
+ [[ ${words[*]} =~ [[:space:]]-(t|-table=?)[[:space:]]*([^[:space:]]+) ]] &&
+ table="-t ${BASH_REMATCH[2]}"
+
+ case $prev in
+ -!(-*)[AIDPFXLZ])
+ COMPREPLY=($(compgen -W '`"$1" $table -L 2>/dev/null | \
+ command sed -ne "$chain"`' -- "$cur"))
+ ;;
+ -!(-*)t)
+ COMPREPLY=($(compgen -W 'nat filter broute' -- "$cur"))
+ ;;
+ -!(-*)j)
+ if [[ $table == "-t filter" || -z $table ]]; then
+ COMPREPLY=($(compgen -W '$targets
+ $("$1" $table -L 2>/dev/null | \
+ command sed -n -e "s/INPUT\|OUTPUT\|FORWARD//" \
+ -e "$chain")' \
+ -- "$cur"))
+ elif [[ $table == "-t nat" ]]; then
+ COMPREPLY=($(compgen -W '$targets
+ $("$1" $table -L 2>/dev/null | \
+ command sed -n -e "s/OUTPUT|PREROUTING|POSTROUTING//" \
+ -e "$chain")' \
+ -- "$cur"))
+ elif [[ $table == "-t broute" ]]; then
+ COMPREPLY=($(compgen -W 'ACCEPT DROP
+ $("$1" $table -L 2>/dev/null | \
+ command sed -n -e "s/BROUTING//" -e "$chain")' \
+ -- "$cur"))
+ fi
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--802_3-sap --802_3-type --among-dst
+ --among-dst-file --among-src --among-src-file --append
+ --arp-gratuitous --arp-htype --arp-ip-dst --arp-ip-src
+ --arp-mac-dst --arp-mac-src --arp-opcode --arp-ptype --arpreply-mac
+ --arpreply-target --atomic-commit --atomic-file --atomic-init
+ --atomic-save --change-counters --concurrent --delete
+ --delete-chain --destination --dnat-target --dst --flush --help
+ --in-if --in-interface --init-table --insert --ip6-destination
+ --ip6-destination-port --ip6-dport --ip6-dst --ip6-icmp-type
+ --ip6-prococol --ip6-proto --ip6-protocol --ip6-source
+ --ip6-source-port --ip6-sport --ip6-src --ip6-tclass
+ --ip-destination --ip-destination-port --ip-dport --ip-dst
+ --ip-proto --ip-protocol --ip-source --ip-source-port --ip-sport
+ --ip-src --ip-tos --jump --Lc --limit --limit-burst --list --Lmac2
+ --Ln --log --log-arp --logical-in --logical-out --log-ip --log-ip6
+ --log-level --log-prefix --Lx --mark --mark-and --mark-or
+ --mark-set --mark-target --mark-xor --modprobe --new-chain --nflog
+ --nflog-group --nflog-prefix --nflog-range --nflog-threshold
+ --out-if --out-interface --pkttype-type --policy --proto --protocol
+ --redirect-target --rename-chain --set-counter --snat-arp
+ --snat-target --source --src --stp-flags --stp-forward-delay
+ --stp-hello-time --stp-max-age --stp-msg-age --stp-port
+ --stp-root-addr --stp-root-cost --stp-root-prio --stp-sender-addr
+ --stp-sender-prio --stp-type --table --to-destination --to-dst
+ --to-source --to-src --ulog --ulog-cprange --ulog-nlgroup
+ --ulog-prefix --ulog-qthreshold --version --vlan-encap --vlan-id
+ --vlan-prio --zero' -- "$cur"))
+ fi
+ ;;
+ esac
+
+} &&
+ complete -F _ebtables ebtables
+
+# ex: filetype=sh
diff --git a/completions/ecryptfs-migrate-home b/completions/ecryptfs-migrate-home
new file mode 100644
index 0000000..d2eeb38
--- /dev/null
+++ b/completions/ecryptfs-migrate-home
@@ -0,0 +1,22 @@
+# ecryptfs-migrate-home(8) completion -*- shell-script -*-
+
+_ecryptfs_migrate_home()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help)
+ return
+ ;;
+ --user | -u)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _ecryptfs_migrate_home ecryptfs-migrate-home
+
+# ex: filetype=sh
diff --git a/completions/eog b/completions/eog
new file mode 100644
index 0000000..2330e1a
--- /dev/null
+++ b/completions/eog
@@ -0,0 +1,26 @@
+# eog(1) completion -*- shell-script -*-
+
+_eog()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -'?' | --help | --help-all | --help-gtk)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help-all)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir '@(ani|?(w)bmp|gif|ico|j2[ck]|jp[cefgx2]|jpeg|jpg2|pcx|p[gp]m|pn[gm]|ras|svg?(z)|tga|tif?(f)|x[bp]m)'
+} &&
+ complete -F _eog eog
+
+# ex: filetype=sh
diff --git a/completions/ether-wake b/completions/ether-wake
new file mode 100644
index 0000000..d952673
--- /dev/null
+++ b/completions/ether-wake
@@ -0,0 +1,27 @@
+# ether-wake(8) completion -*- shell-script -*-
+
+_ether_wake()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ case $prev in
+ -i)
+ _available_interfaces -a
+ return
+ ;;
+ -p)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -u) -V' -- "$cur"))
+ return
+ fi
+
+ _mac_addresses
+} &&
+ complete -F _ether_wake ether-wake etherwake
+
+# ex: filetype=sh
diff --git a/completions/evince b/completions/evince
new file mode 100644
index 0000000..1c97dd9
--- /dev/null
+++ b/completions/evince
@@ -0,0 +1,32 @@
+# evince(1) completion -*- shell-script -*-
+
+_evince()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help* | --sm-client-id | --class | --name | --screen | --gdk-debug | \
+ --gdk-no-debug | --gtk-module | --gtk-debug | --gtk-no-debug | --page-label | \
+ --page-index | --find | --display | -!(-*)[hpil])
+ return
+ ;;
+ --sm-client-state-file)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help-all)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir '@(@(?(e)ps|?(E)PS|[pf]df|[PF]DF|dvi|DVI)?(.gz|.GZ|.bz2|.BZ2|.xz|.XZ)|cb[rz]|djv?(u)|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)'
+} &&
+ complete -F _evince evince
+
+# ex: filetype=sh
diff --git a/completions/explodepkg b/completions/explodepkg
new file mode 100644
index 0000000..a281f81
--- /dev/null
+++ b/completions/explodepkg
@@ -0,0 +1,5 @@
+# Slackware Linux explodepkg completion -*- shell-script -*-
+
+complete -o plusdirs -f -X '!*.t[bglx]z' explodepkg
+
+# ex: filetype=sh
diff --git a/completions/export b/completions/export
new file mode 100644
index 0000000..8d82361
--- /dev/null
+++ b/completions/export
@@ -0,0 +1,65 @@
+# bash export completion -*- shell-script -*-
+
+_export()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ local i action=variable remove=false
+ for ((i = 1; i < cword; i++)); do
+ case ${words[i]} in
+ -p)
+ return
+ ;;
+ -*f*)
+ action=function
+ ;;&
+ -*n*)
+ remove=true
+ ;;
+ -*)
+ continue
+ ;;
+ esac
+ break
+ done
+
+ if [[ $cur == *=* ]]; then
+ local ocur=$cur oprev=$prev
+ prev=${cur%%=*} cur=${cur#*=}
+ _variables && return
+ cur=$ocur prev=$oprev
+ fi
+
+ case $cur in
+ *=)
+ local pval=$(quote "$(eval printf %s \"\$\{${cur%=}-\}\")")
+ # Complete previous value if it's not empty.
+ if [[ $pval != \'\' ]]; then
+ COMPREPLY=("$pval")
+ else
+ cur=${cur#*=}
+ _filedir
+ fi
+ ;;
+ *=*)
+ cur=${cur#*=}
+ _filedir
+ ;;
+ *)
+ if [[ $cword -eq 1 && $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-p $(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+ local suffix=""
+ if ! $remove; then
+ suffix="="
+ compopt -o nospace
+ fi
+ COMPREPLY=($(compgen -A $action -S "$suffix" -- "$cur"))
+ ;;
+ esac
+} &&
+ complete -F _export export
+
+# ex: filetype=sh
diff --git a/completions/faillog b/completions/faillog
new file mode 100644
index 0000000..c8b81bd
--- /dev/null
+++ b/completions/faillog
@@ -0,0 +1,27 @@
+# faillog(8) completion -*- shell-script -*-
+
+_faillog()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --lock-time | --maximum | --time | -!(-*)[hlmt])
+ return
+ ;;
+ --user | -!(-*)u)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _faillog faillog
+
+# ex: filetype=sh
diff --git a/completions/fbgs b/completions/fbgs
new file mode 100644
index 0000000..1947b87
--- /dev/null
+++ b/completions/fbgs
@@ -0,0 +1,50 @@
+# bash completion for fbgs(1) -*- shell-script -*-
+
+_fbgs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ -f | --font)
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W '$(fc-list 2>/dev/null)' -- "$cur"))
+ return
+ ;;
+ -m | --mode)
+ COMPREPLY=($(compgen -W '$(command sed \
+ -n "/^mode/{s/^mode \{1,\}\"\([^\"]\{1,\}\)\"/\1/g;p}" \
+ /etc/fb.modes 2>/dev/null)' -- "$cur"))
+ return
+ ;;
+ -d | --device)
+ COMPREPLY=($(compgen -f -d -- "${cur:-/dev/}"))
+ return
+ ;;
+ -fp | --firstpage | -lp | --lastpage | -r | --resolution | -s | --scroll | -t | \
+ --timeout)
+ # expect integer value
+ COMPREPLY+=($(compgen -W '{0..9}'))
+ compopt -o nospace
+ return
+ ;;
+ -T | --vt | -p | --password | -g | --gamma)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--bell --help --password -fp --firstpage
+ -lp --lastpage --color -l -xl -xxl --resolution --autozoom
+ --{,no}autoup --{,no}autodown --{,no}fitwidth --{,no}verbose
+ --{,no}random --vt --scroll --timeout --{,no}once --gamma --font
+ --device --mode' -- "$cur"))
+ [[ ${COMPREPLY-} ]] && return
+ fi
+
+ _filedir '?(e)ps|pdf'
+} &&
+ complete -F _fbgs fbgs
+
+# ex: filetype=sh
diff --git a/completions/fbi b/completions/fbi
new file mode 100644
index 0000000..455887a
--- /dev/null
+++ b/completions/fbi
@@ -0,0 +1,54 @@
+# bash completion for fbi(1) -*- shell-script -*-
+
+_fbi()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ -l | --list)
+ _filedir
+ return
+ ;;
+ -r | --resolution)
+ COMPREPLY+=($(compgen -W '{1..5}'))
+ return
+ ;;
+ -f | --font)
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W '$(fc-list 2>/dev/null)' -- "$cur"))
+ return
+ ;;
+ -m | --mode)
+ COMPREPLY=($(compgen -W '$(command sed \
+ -n "/^mode/{s/^mode \{1,\}\"\([^\"]\{1,\}\)\"/\1/g;p}" \
+ /etc/fb.modes 2>/dev/null)' -- "$cur"))
+ return
+ ;;
+ -d | --device)
+ COMPREPLY=($(compgen -f -d -- "${cur:-/dev/}"))
+ return
+ ;;
+ --cachemem | --blend | -T | --vt | -s | --scroll | -t | --timeout | -g | --gamma)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--help --version --store --list --text
+ --autozoom --{,no}autoup --{,no}autodown --{,no}fitwidth
+ --{,no}verbose --{,no}random --{,no}comments --{,no}edit
+ --{,no}backup --{,no}preserve --{,no}readahead --cachemem --blend
+ --vt --scroll --timeout --{,no}once --resolution --gamma --font
+ --device --mode' -- "$cur"))
+ [[ ${COMPREPLY-} ]] && return
+ fi
+
+ # FIXME: It is hard to determine correct supported extensions.
+ # fbi can handle any format that imagemagick can plus some others
+ _filedir 'bmp|gif|jp?(e)g|pcd|png|p[pgb]m|tif?(f)|webp|xpm|xwd|?(e)ps|pdf|dvi|txt|svg?(z)|cdr|[ot]tf'
+} &&
+ complete -F _fbi fbi
+
+# ex: filetype=sh
diff --git a/completions/feh b/completions/feh
new file mode 100644
index 0000000..f1d4b18
--- /dev/null
+++ b/completions/feh
@@ -0,0 +1,120 @@
+# bash completion for feh(1) -*- shell-script -*-
+
+_feh()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --image-bg | -B)
+ COMPREPLY=($(compgen -W 'checks white black' -- "$cur"))
+ return
+ ;;
+ --filelist | --output | --output-only | --start-at | -!(-*)[foO\|])
+ _filedir
+ return
+ ;;
+ --caption-path | --fontpath | --output-dir | -!(-*)[KCj])
+ _filedir -d
+ return
+ ;;
+ --font | --menu-font | --title-font | -!(-*)[eM@])
+ # expect string like "dejavu.ttf/12"
+ if [[ $cur == */* ]]; then # expect integer value
+ COMPREPLY=($(compgen -P "$cur" -W '{0..9}'))
+ compopt -o nospace
+ return
+ fi
+ local font_path
+ # font_path="$(imlib2-config --prefix 2>/dev/null)/share/imlib2/data/fonts"
+ # COMPREPLY=( $(cd "$font_path" 2>/dev/null; compgen -f \
+ # -X "!*.@([tT][tT][fF])" -S / -- "$cur") )
+ for ((i = ${#words[@]} - 1; i > 0; i--)); do
+ if [[ ${words[i]} == -@(C|-fontpath) ]]; then
+ font_path="${words[i + 1]}"
+ COMPREPLY+=($(
+ cd "$font_path" 2>/dev/null
+ compgen -f \
+ -X "!*.@([tT][tT][fF])" -S / -- "$cur"
+ ))
+ fi
+ done
+ compopt -o nospace
+ return
+ ;;
+ --theme | -!(-*)T)
+ local conf_path=~/.config/feh/themes
+ local theme_name theme_opts
+ [[ -r $conf_path ]] || return
+ while read theme_name theme_opts; do
+ if [[ $theme_name == '#'* || $theme_name == "" ]]; then
+ continue
+ fi
+ COMPREPLY+=($(compgen -W "$theme_name" -- "$cur"))
+ done <"$conf_path"
+ return
+ ;;
+ --sort | -!(-*)S)
+ COMPREPLY=($(compgen -W 'name filename mtime width height
+ pixels size format' -- "$cur"))
+ return
+ ;;
+ --reload | --limit-height | --limit-width | --thumb-height | --thumb-width | \
+ --thumb-redraw | --magick-timeout | -!(-*)[RHWEyJ])
+ # expect integer value
+ COMPREPLY+=($(compgen -W '{0..9}'))
+ compopt -o nospace
+ return
+ ;;
+ --zoom)
+ # expect integer value or "max", "fill"
+ COMPREPLY=($(compgen -W 'max fill' -- "$cur"))
+ if [[ ! $cur || ! ${COMPREPLY-} ]]; then
+ COMPREPLY+=($(compgen -W '{0..9}'))
+ compopt -o nospace
+ fi
+ return
+ ;;
+ --alpha | -!(-*)a)
+ COMPREPLY=($(compgen -W '{0..255}' -- "$cur"))
+ return
+ ;;
+ --bg | -!(-*)b)
+ _filedir
+ COMPREPLY+=($(compgen -W 'trans' -- "$cur"))
+ return
+ ;;
+ --geometry | --max-dimension | --min-dimension | -!(-*)g)
+ # expect string like 640x480
+ if [[ $cur && $cur != *x* ]]; then
+ COMPREPLY=(x)
+ fi
+ COMPREPLY+=($(compgen -W "{0..9}"))
+ compopt -o nospace
+ return
+ ;;
+ --customlist | --index-info | --info | --slideshow-delay | --thumb-title | \
+ --title | -!(-*)[LD~^])
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ # Some versions of feh just output "See 'man feh'" for --help :(
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help)' -- "$cur"))
+ if [[ ${COMPREPLY-} ]]; then
+ [[ $COMPREPLY == *= ]] && compopt -o nospace
+ return
+ fi
+ fi
+
+ # FIXME: It is hard to determine correct supported extensions.
+ # feh can handle any format that imagemagick can plus some others
+ _filedir 'xpm|tif?(f)|png|p[npgba]m|iff|?(i)lbm|jp?(e)g|jfi?(f)|gif|bmp|arg?(b)|tga|xcf|ani|ico|?(e)ps|pdf|dvi|txt|svg?(z)|cdr|[ot]tf'
+} &&
+ complete -F _feh feh
+
+# ex: filetype=sh
diff --git a/completions/file b/completions/file
new file mode 100644
index 0000000..21fbd16
--- /dev/null
+++ b/completions/file
@@ -0,0 +1,32 @@
+# file(1) completion -*- shell-script -*-
+
+_file()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | --separator | -!(-*)[vF])
+ return
+ ;;
+ --magic-file | --files-from | -!(-*)[mf])
+ _filedir
+ return
+ ;;
+ --exclude | -!(-*)e)
+ COMPREPLY=($(compgen -W 'apptype ascii cdf compress elf encoding
+ soft tar text tokens troff' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _file file
+
+# ex: filetype=sh
diff --git a/completions/file-roller b/completions/file-roller
new file mode 100644
index 0000000..1d223fd
--- /dev/null
+++ b/completions/file-roller
@@ -0,0 +1,42 @@
+# file-roller(1) completion -*- shell-script -*-
+
+_file_roller()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local exts='@(7z|ace|alz|ar|arj|[bglx]z|bz2|tb?(z)2|cab|cb[rz]|iso?(9660)|Z|t[abglx]z|cpio|deb|rar|?(g)tar|gem|lh[az]|lz[4h]|?(t)lrz|lzma|lzo|wim|swm|rpm|sit|zoo)'
+
+ case $prev in
+ --help | --help-all | --help-gtk | --help-sm-client | -!(-*)'?')
+ return
+ ;;
+ --sm-client-state-file)
+ _filedir
+ return
+ ;;
+ --add-to | -!(-*)a)
+ _filedir_xspec unzip
+ _filedir "$exts"
+ return
+ ;;
+ --extract-to | --default-dir | -!(-*)e)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help-all)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir_xspec unzip
+ _filedir "$exts"
+} &&
+ complete -F _file_roller file-roller
+
+# ex: filetype=sh
diff --git a/completions/filefrag b/completions/filefrag
new file mode 100644
index 0000000..d26e8c8
--- /dev/null
+++ b/completions/filefrag
@@ -0,0 +1,17 @@
+# filefrag(8) completion -*- shell-script -*-
+
+_filefrag()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _filefrag filefrag
+
+# ex: filetype=sh
diff --git a/completions/filesnarf b/completions/filesnarf
new file mode 100644
index 0000000..f959d80
--- /dev/null
+++ b/completions/filesnarf
@@ -0,0 +1,22 @@
+# filesnarf etc completion -*- shell-script -*-
+
+_snarf()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -i)
+ _available_interfaces -a
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ fi
+
+} &&
+ complete -F _snarf filesnarf mailsnarf msgsnarf
+
+# ex: filetype=sh
diff --git a/completions/find b/completions/find
new file mode 100644
index 0000000..64121ed
--- /dev/null
+++ b/completions/find
@@ -0,0 +1,113 @@
+# bash completion for GNU find -*- shell-script -*-
+# This makes heavy use of ksh style extended globs and contains Linux specific
+# code for completing the parameter to the -fstype option.
+
+_find()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local i
+ for i in ${!words[*]}; do
+ if [[ ${words[i]} == -@(exec|ok)?(dir) ]]; then
+ _command_offset $((i + 1))
+ return
+ fi
+ done
+
+ case $prev in
+ -maxdepth | -mindepth)
+ COMPREPLY=($(compgen -W '{0..9}' -- "$cur"))
+ return
+ ;;
+ -newer | -anewer | -cnewer | -fls | -fprint | -fprint0 | -fprintf | -name | -[il]name | \
+ -ilname | -wholename | -[il]wholename | -samefile)
+ _filedir
+ return
+ ;;
+ -fstype)
+ _fstypes
+ [[ $OSTYPE == *bsd* ]] &&
+ COMPREPLY+=($(compgen -W 'local rdonly' -- "$cur"))
+ return
+ ;;
+ -gid)
+ _gids
+ return
+ ;;
+ -group)
+ COMPREPLY=($(compgen -g -- "$cur" 2>/dev/null))
+ return
+ ;;
+ -xtype | -type)
+ COMPREPLY=($(compgen -W 'b c d p f l s' -- "$cur"))
+ return
+ ;;
+ -uid)
+ _uids
+ return
+ ;;
+ -user)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ -[acm]min | -[acm]time | -inum | -path | -ipath | -regex | -iregex | -links | -perm | \
+ -size | -used | -printf | -context)
+ # do nothing, just wait for a parameter to be given
+ return
+ ;;
+ -regextype)
+ COMPREPLY=($(compgen -W 'emacs posix-awk posix-basic posix-egrep
+ posix-extended' -- "$cur"))
+ return
+ ;;
+ esac
+
+ local i exprfound=false
+ # set exprfound to true if there is already an expression present
+ for i in "${words[@]}"; do
+ [[ $i == [-\(\),\!]* ]] && exprfound=true && break
+ done
+
+ # handle case where first parameter is not a dash option
+ if ! $exprfound && [[ $cur != [-\(\),\!]* ]]; then
+ _filedir -d
+ return
+ fi
+
+ # complete using basic options
+ COMPREPLY=($(compgen -W '-daystart -depth -follow -help
+ -ignore_readdir_race -maxdepth -mindepth -mindepth -mount
+ -noignore_readdir_race -noleaf -regextype -version -warn -nowarn -xdev
+ -amin -anewer -atime -cmin -cnewer -ctime -empty -executable -false
+ -fstype -gid -group -ilname -iname -inum -ipath -iregex -iwholename
+ -links -lname -mmin -mtime -name -newer -nogroup -nouser -path -perm
+ -readable -regex -samefile -size -true -type -uid -used -user
+ -wholename -writable -xtype -context -delete -exec -execdir -fls
+ -fprint -fprint0 -fprintf -ls -ok -okdir -print -print0 -printf -prune
+ -quit' -- "$cur"))
+
+ if ((${#COMPREPLY[@]} != 0)); then
+ # 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).
+ local -A onlyonce=([-daystart]=1 [-depth]=1 [-follow]=1 [-help]=1
+ [-ignore_readdir_race]=1 [-maxdepth]=1 [-mindepth]=1 [-mount]=1
+ [-noignore_readdir_race]=1 [-noleaf]=1 [-nowarn]=1 [-regextype]=1
+ [-version]=1 [-warn]=1 [-xdev]=1)
+ local j
+ for i in "${words[@]}"; do
+ [[ $i && -v onlyonce["$i"] ]] || continue
+ for j in "${!COMPREPLY[@]}"; do
+ [[ ${COMPREPLY[j]} == "$i" ]] && unset 'COMPREPLY[j]'
+ done
+ done
+ fi
+
+ _filedir
+
+} &&
+ complete -F _find find
+
+# ex: filetype=sh
diff --git a/completions/find_member b/completions/find_member
new file mode 100644
index 0000000..cf30c70
--- /dev/null
+++ b/completions/find_member
@@ -0,0 +1,25 @@
+# mailman find_member completion -*- shell-script -*-
+
+_find_member()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -l | -x | --listname | --exclude)
+ _xfunc list_lists _mailman_lists
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--listname --exclude --owners --help' \
+ -- "$cur"))
+ fi
+
+} &&
+ complete -F _find_member find_member
+
+# ex: filetype=sh
diff --git a/completions/fio b/completions/fio
new file mode 100644
index 0000000..f81a4da
--- /dev/null
+++ b/completions/fio
@@ -0,0 +1,90 @@
+# fio(1) completion -*- shell-script -*-
+
+_fio()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version)
+ return
+ ;;
+ --debug)
+ local prefix=
+ [[ $cur == *,* ]] && prefix="${cur%,*},"
+ COMPREPLY=($(compgen -W "process file io mem blktrace verify
+ random parse diskutil job mutex profile time net rate compress
+ steadystate helperthread" -- "${cur##*,}"))
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ return
+ ;;
+ --output-format)
+ COMPREPLY=($(compgen -W "terse json json+ normal" -- "$cur"))
+ return
+ ;;
+ --terse-version)
+ COMPREPLY=($(compgen -W "2 3" -- "$cur"))
+ return
+ ;;
+ --cmdhelp)
+ # TODO more commands?
+ COMPREPLY=($(compgen -W "all" -- "$cur"))
+ return
+ ;;
+ --enghelp)
+ # TODO print ioengine help, or list available ioengines
+ # TODO engine,help arg
+ return
+ ;;
+ --eta)
+ COMPREPLY=($(compgen -W "always never auto" -- "$cur"))
+ return
+ ;;
+ --daemonize)
+ _filedir pid
+ return
+ ;;
+ --client)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --remote-config)
+ _filedir job
+ return
+ ;;
+ --idle-prof)
+ COMPREPLY=($(compgen -W "system percpu calibrate" -- "$cur"))
+ return
+ ;;
+ --inflate-log)
+ _filedir log
+ return
+ ;;
+ --trigger-file)
+ _filedir
+ return
+ ;;
+ --trigger | --trigger-remote)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ --aux-path)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir job
+} &&
+ complete -F _fio fio
+
+# ex: filetype=sh
diff --git a/completions/firefox b/completions/firefox
new file mode 100644
index 0000000..4656f8d
--- /dev/null
+++ b/completions/firefox
@@ -0,0 +1,46 @@
+# firefox completion -*- shell-script -*-
+
+_firefox()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ [[ $cur == -MOZ_LOG*=* ]] && prev=${cur%%=*} cur=${cur#*=}
+
+ case $prev in
+ --help | --version | --display | --UILocale | -MOZ_LOG | --new-window | --new-tab | \
+ --private-window | --window-size | --search | --start-debugger-server | \
+ --recording | --debugger-args | -[hvPa])
+ return
+ ;;
+ --profile | --screenshot)
+ _filedir -d
+ return
+ ;;
+ -MOZ_LOG_FILE)
+ _filedir log
+ return
+ ;;
+ --recording-file)
+ _filedir
+ return
+ ;;
+ --debugger | -d)
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir "@(?([xs])htm?(l)|pdf|txt)"
+} &&
+ complete -F _firefox firefox mozilla-firefox iceweasel
+
+# ex: filetype=sh
diff --git a/completions/flake8 b/completions/flake8
new file mode 100644
index 0000000..045c409
--- /dev/null
+++ b/completions/flake8
@@ -0,0 +1,42 @@
+# flake8 completion -*- shell-script -*-
+
+_flake8()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | -!(-*)h)
+ return
+ ;;
+ --format)
+ COMPREPLY=($(compgen -W 'default pylint' -- "$cur"))
+ return
+ ;;
+ --jobs | -!(-*)j)
+ COMPREPLY=($(compgen -W "auto {1..$(_ncpus)}" -- "$cur"))
+ return
+ ;;
+ --output-file | --append-config | --config)
+ _filedir
+ return
+ ;;
+ --include-in-doctest | --exclude-from-doctest)
+ _filedir py
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir py
+} &&
+ complete -F _flake8 flake8
+
+# ex: filetype=sh
diff --git a/completions/freebsd-update b/completions/freebsd-update
new file mode 100644
index 0000000..d5be861
--- /dev/null
+++ b/completions/freebsd-update
@@ -0,0 +1,29 @@
+# bash completion for FreeBSD update tool - freebsd-update -*- shell-script -*-
+
+[[ $OSTYPE == *freebsd* ]] || return 1
+
+_freebsd_update()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -b | -d)
+ _filedir -d
+ return
+ ;;
+ -f)
+ _filedir
+ return
+ ;;
+ -k | -r | -s | -t)
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W "fetch cron upgrade install rollback IDS" -- \
+ $cur))
+} &&
+ complete -F _freebsd_update freebsd-update
+
+# ex: filetype=sh
diff --git a/completions/freeciv b/completions/freeciv
new file mode 100644
index 0000000..01af311
--- /dev/null
+++ b/completions/freeciv
@@ -0,0 +1,41 @@
+# freeciv client completions -*- shell-script -*-
+
+_freeciv()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | --name | --port | -[hvnp])
+ return
+ ;;
+ --file | --log | --music | --read | --Sound | --tiles | -[flmrSt])
+ _filedir
+ return
+ ;;
+ --Announce | -A)
+ COMPREPLY=($(compgen -W 'IPv4 IPv6 none' -- "$cur"))
+ return
+ ;;
+ --debug | -d)
+ COMPREPLY=($(compgen -W '{0..3}' -- "$cur"))
+ return
+ ;;
+ --Meta | --server | -[Ms])
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --Plugin | -P)
+ COMPREPLY=($(compgen -W 'none esd sdl' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+
+} &&
+ complete -F _freeciv freeciv{,-{gtk{2,3},sdl,xaw}} civclient
+
+# ex: filetype=sh
diff --git a/completions/freeciv-server b/completions/freeciv-server
new file mode 100644
index 0000000..a34b5a2
--- /dev/null
+++ b/completions/freeciv-server
@@ -0,0 +1,22 @@
+# freeciv-server completion -*- shell-script -*-
+
+_civserver()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -f | -g | -l | -r | --file | --log | --gamelog | --read)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+
+} &&
+ complete -F _civserver civserver freeciv-server
+
+# ex: filetype=sh
diff --git a/completions/function b/completions/function
new file mode 100644
index 0000000..6ae5271
--- /dev/null
+++ b/completions/function
@@ -0,0 +1,37 @@
+# bash shell function completion -*- shell-script -*-
+
+_function()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $1 == @(declare|typeset) ]]; then
+ if [[ $cur == [-+]* ]]; then
+ local opts
+ opts=($(_parse_usage "$1"))
+ # Most options also have a '+' form. We'll exclude the ones that don't with compgen.
+ opts+=(${opts[*]/-/+})
+ COMPREPLY=($(compgen -W "${opts[*]}" -X '+[Ffgp]' -- "$cur"))
+ else
+ local i=1
+ while [[ ${words[i]} == [-+]* ]]; do
+ if [[ ${words[i]} == -*[fF]* ]]; then
+ COMPREPLY=($(compgen -A function -- "$cur"))
+ return
+ fi
+ ((i++))
+ done
+ if ((i > 1)); then
+ # There was at least one option and it was not one that limited operations to functions
+ COMPREPLY=($(compgen -A variable -- "$cur"))
+ fi
+ fi
+ elif ((cword == 1)); then
+ COMPREPLY=($(compgen -A function -- "$cur"))
+ else
+ COMPREPLY=("() $(type -- ${words[1]} | command sed -e 1,2d)")
+ fi
+} &&
+ complete -F _function function declare typeset
+
+# ex: filetype=sh
diff --git a/completions/fusermount b/completions/fusermount
new file mode 100644
index 0000000..7e48922
--- /dev/null
+++ b/completions/fusermount
@@ -0,0 +1,28 @@
+# fusermount completion -*- shell-script -*-
+
+_fusermount()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*[hVo])
+ return
+ ;;
+ -*u)
+ COMPREPLY=($(compgen -W "$(awk \
+ '{ if ($3 ~ /^fuse(\.|$)/) print $2 }' /etc/mtab \
+ 2>/dev/null)" -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ else
+ _filedir -d
+ fi
+} &&
+ complete -F _fusermount fusermount
+
+# ex: filetype=sh
diff --git a/completions/gcc b/completions/gcc
new file mode 100644
index 0000000..fa95274
--- /dev/null
+++ b/completions/gcc
@@ -0,0 +1,75 @@
+# gcc(1) completion -*- shell-script -*-
+
+_gcc()
+{
+ local cur prev prev2 words cword argument prefix prefix_length
+ _init_completion || return
+
+ # Test that GCC is recent enough and if not fallback to
+ # parsing of --completion option.
+ if ! $1 --completion=" " 2>/dev/null; then
+ if [[ $cur == -* ]]; then
+ local cc=$($1 -print-prog-name=cc1 2>/dev/null)
+ [[ $cc ]] || return
+ COMPREPLY=($(compgen -W "$($cc --help 2>/dev/null | tr '\t' ' ' |
+ command sed -e '/^ *-/!d' -e 's/ *-\([^][ <>]*\).*/-\1/')" \
+ -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _filedir
+ fi
+ return
+ fi
+
+ # extract also for situations like: -fsanitize=add
+ if ((cword > 2)); then
+ prev2="${COMP_WORDS[cword - 2]}"
+ fi
+
+ # sample: -fsan
+ if [[ $cur == -* ]]; then
+ argument=$cur
+ prefix=""
+ # sample: -fsanitize=
+ elif [[ $cur == "=" && $prev == -* ]]; then
+ argument=$prev$cur
+ prefix=$prev$cur
+ # sample: -fsanitize=add
+ elif [[ $prev == "=" && $prev2 == -* ]]; then
+ argument=$prev2$prev$cur
+ prefix=$prev2$prev
+ # sample: --param lto-
+ elif [[ $prev == --param ]]; then
+ argument="$prev $cur"
+ prefix="$prev "
+ fi
+
+ if [[ ! -v argument ]]; then
+ _filedir
+ else
+ # In situation like '-fsanitize=add' $cur is equal to last token.
+ # Thus we need to strip the beginning of suggested option.
+ prefix_length=$((${#prefix} + 1))
+ local flags=$($1 --completion="$argument" | cut -c $prefix_length-)
+ [[ ${flags} == "=*" ]] && compopt -o nospace 2>/dev/null
+ COMPREPLY=($(compgen -W "$flags" -- ""))
+ fi
+} &&
+ complete -F _gcc gcc{,-5,-6,-7,-8} g++{,-5,-6,-7,-8} g77 g95 \
+ gccgo{,-5,-6,-7,-8} gcj gfortran{,-5,-6,-7,-8} gpc &&
+ {
+ cc --version 2>/dev/null | command grep -q GCC ||
+ [[ $(_realcommand cc) == *gcc* ]] &&
+ complete -F _gcc cc || complete -F _minimal cc
+ c++ --version 2>/dev/null | command grep -q GCC ||
+ [[ $(_realcommand c++) == *g++* ]] &&
+ complete -F _gcc c++ || complete -F _minimal c++
+ f77 --version 2>/dev/null | command grep -q GCC ||
+ [[ $(_realcommand f77) == *gfortran* ]] &&
+ complete -F _gcc f77 || complete -F _minimal f77
+ f95 --version 2>/dev/null | command grep -q GCC ||
+ [[ $(_realcommand f95) == *gfortran* ]] &&
+ complete -F _gcc f95 || complete -F _minimal f95
+ }
+
+# ex: filetype=sh
diff --git a/completions/gcl b/completions/gcl
new file mode 100644
index 0000000..73a18b2
--- /dev/null
+++ b/completions/gcl
@@ -0,0 +1,21 @@
+# -*- shell-script -*-
+# bash programmable completion for various Common Lisp implementations by
+# Nikodemus Siivola <nikodemus@random-state.net>
+
+_gcl()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # 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
+
+} &&
+ complete -F _gcl -o default gcl
+
+# ex: filetype=sh
diff --git a/completions/gdb b/completions/gdb
new file mode 100644
index 0000000..f78f8a5
--- /dev/null
+++ b/completions/gdb
@@ -0,0 +1,47 @@
+# bash completion for gdb -*- shell-script -*-
+
+_gdb()
+{
+ local cur prev words cword i
+ _init_completion || return
+
+ # gdb [options] --args executable-file [inferior-arguments ...]
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == --args ]]; then
+ _command_offset $((i + 1))
+ return $?
+ fi
+ done
+
+ # gdb [options] [executable-file [core-file or process-id]]
+ if ((cword == 1)); then
+ local IFS
+ compopt -o filenames
+ 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=($(
+ command sed -e 's/:\{2,\}/:/g' -e 's/^://' -e 's/:$//' <<<"$PATH"
+ ))
+ 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 ((cword == 2)); then
+ COMPREPLY=($(compgen -W "$(command ps axo comm,pid |
+ awk '{if ($1 ~ /^'"${prev##*/}"'/) print $2}')" -- "$cur"))
+ compopt -o filenames
+ COMPREPLY+=($(compgen -f -X '!?(*/)core?(.?*)' -o plusdirs \
+ -- "$cur"))
+ fi
+} &&
+ complete -F _gdb gdb
+
+# ex: filetype=sh
diff --git a/completions/genaliases b/completions/genaliases
new file mode 100644
index 0000000..5953b9e
--- /dev/null
+++ b/completions/genaliases
@@ -0,0 +1,15 @@
+# mailman genaliases completion -*- shell-script -*-
+
+_genaliases()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--quiet --help' -- "$cur"))
+ fi
+
+} &&
+ complete -F _genaliases genaliases
+
+# ex: filetype=sh
diff --git a/completions/gendiff b/completions/gendiff
new file mode 100644
index 0000000..d37793f
--- /dev/null
+++ b/completions/gendiff
@@ -0,0 +1,12 @@
+# gendiff(1) completion -*- shell-script -*-
+
+_gendiff()
+{
+ local cur prev words cword
+ _init_completion -o '@(diff|patch)' || return
+
+ ((cword == 1)) && _filedir -d
+} &&
+ complete -F _gendiff gendiff
+
+# ex: filetype=sh
diff --git a/completions/genisoimage b/completions/genisoimage
new file mode 100644
index 0000000..dfa39c0
--- /dev/null
+++ b/completions/genisoimage
@@ -0,0 +1,38 @@
+# bash completion for mkisofs/genisoimage -*- shell-script -*-
+
+_mkisofs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -o | -abstract | -biblio | -check-session | -copyright | -log-file | \
+ -root-info | -prep-boot | -*-list)
+ _filedir
+ return
+ ;;
+ -*-charset)
+ COMPREPLY=($(compgen -W '$(mkisofs -input-charset \
+ help 2>&1 | tail -n +3)' -- "$cur"))
+ return
+ ;;
+ -uid)
+ _uids
+ return
+ ;;
+ -gid)
+ _gids
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ else
+ _filedir
+ fi
+
+} &&
+ complete -F _mkisofs mkisofs genisoimage
+
+# ex: filetype=sh
diff --git a/completions/geoiplookup b/completions/geoiplookup
new file mode 100644
index 0000000..c60be89
--- /dev/null
+++ b/completions/geoiplookup
@@ -0,0 +1,33 @@
+# geoiplookup(1) completion -*- shell-script -*-
+
+_geoiplookup()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | -'?' | -v)
+ return
+ ;;
+ -d)
+ _filedir -d
+ return
+ ;;
+ -f)
+ _filedir dat
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" -h)' -- "$cur"))
+ return
+ fi
+
+ local ipvx
+ [[ $1 == *6 ]] && ipvx=-6 || ipvx=-4
+ _known_hosts_real $ipvx -- "$cur"
+} &&
+ complete -F _geoiplookup geoiplookup geoiplookup6
+
+# ex: filetype=sh
diff --git a/completions/getconf b/completions/getconf
new file mode 100644
index 0000000..de1ad2d
--- /dev/null
+++ b/completions/getconf
@@ -0,0 +1,32 @@
+# getconf(1) completion -*- shell-script -*-
+
+_getconf()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -a)
+ _filedir
+ return
+ ;;
+ -v)
+ COMPREPLY=($(compgen -W \
+ '$("$1" -a 2>/dev/null | awk "{ print \$1 }")' -- \
+ "${cur:-POSIX_V}"))
+ return
+ ;;
+ esac
+
+ if [[ $prev == PATH_MAX ]]; then # TODO more path vars, better handling
+ _filedir
+ elif [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-a -v' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W \
+ '$("$1" -a 2>/dev/null | awk "{ print \$1 }")' -- "$cur"))
+ fi
+} &&
+ complete -F _getconf getconf
+
+# ex: filetype=sh
diff --git a/completions/getent b/completions/getent
new file mode 100644
index 0000000..4c54a24
--- /dev/null
+++ b/completions/getent
@@ -0,0 +1,77 @@
+# bash completion for getent -*- shell-script -*-
+
+_getent()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local i db
+ for ((i = 1; i < cword; i++)); do
+ case ${words[i]} in
+ --version | --usage | --help | -!(-*)[V?])
+ return
+ ;;
+ --service | -!(-*)s)
+ ((i++))
+ ;;
+ -*) ;;
+
+ *)
+ # First non-option value is the db
+ db=${words[i]}
+ break
+ ;;
+ esac
+ done
+
+ case ${db-} in
+ passwd)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ group)
+ COMPREPLY=($(compgen -g -- "$cur"))
+ return
+ ;;
+ services)
+ COMPREPLY=($(compgen -s -- "$cur"))
+ return
+ ;;
+ hosts)
+ COMPREPLY=($(compgen -A hostname -- "$cur"))
+ return
+ ;;
+ protocols | networks | ahosts | ahostsv4 | ahostsv6 | rpc)
+ COMPREPLY=($(compgen -W "$($1 $db |
+ awk '{ print $1 }')" -- "$cur"))
+ return
+ ;;
+ aliases | shadow | gshadow)
+ COMPREPLY=($(compgen -W "$($1 $db | cut -d: -f1)" -- "$cur"))
+ return
+ ;;
+ ethers | netgroup)
+ return
+ ;;
+ esac
+
+ case $prev in
+ -s | --service)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ elif [[ ! -v db ]]; then
+ COMPREPLY=($(compgen -W 'passwd group hosts services protocols
+ networks ahosts ahostsv4 ahostsv6 aliases ethers netgroup rpc
+ shadow gshadow' -- "$cur"))
+ fi
+} &&
+ complete -F _getent getent
+
+# ex: filetype=sh
diff --git a/completions/gkrellm b/completions/gkrellm
new file mode 100644
index 0000000..c38c5ae
--- /dev/null
+++ b/completions/gkrellm
@@ -0,0 +1,39 @@
+# gkrellm(1) completion -*- shell-script -*-
+
+_gkrellm()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -t | --theme)
+ _filedir -d
+ return
+ ;;
+ -p | --plugin)
+ _filedir so
+ return
+ ;;
+ -s | --server)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -l | --logfile)
+ _filedir
+ return
+ ;;
+ -g | --geometry | -c | --config | -P | --port | -d | --debug-level)
+ # Argument required but no completions available
+ return
+ ;;
+ -h | --help | -v | --version)
+ # All other options are noop with these
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _gkrellm gkrellm gkrellm2
+
+# ex: filetype=sh
diff --git a/completions/gm b/completions/gm
new file mode 100644
index 0000000..b86c9cc
--- /dev/null
+++ b/completions/gm
@@ -0,0 +1,40 @@
+# bash completion for gm(1) -*- shell-script -*-
+
+_gm_commands()
+{
+ COMPREPLY+=($(compgen -W '$("$1" help |
+ awk "/^ +[^ ]+ +- / { print \$1 }")' -- "$cur"))
+}
+
+_gm()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ _gm_commands "$1"
+ return
+ elif [[ $cword -eq 2 && ${words[1]} == time ]]; then
+ _gm_commands "$1"
+ return
+ fi
+
+ local gmcmd=${words[1]}
+ [[ $gmcmd == time ]] && gmcmd=${words[2]}
+
+ case $gmcmd in
+ help)
+ [[ $prev == help ]] && _gm_commands "$1"
+ return
+ ;;
+ version)
+ return
+ ;;
+ esac
+
+ # TODO... defer some commnds to the imagemagick "gm"less completions etc?
+ compopt -o default
+} &&
+ complete -F _gm gm
+
+# ex: filetype=sh
diff --git a/completions/gnatmake b/completions/gnatmake
new file mode 100644
index 0000000..5f4b963
--- /dev/null
+++ b/completions/gnatmake
@@ -0,0 +1,26 @@
+# Gnatmake completion -*- shell-script -*-
+# by Ralf_Schroth@t-online.de (Ralf Schroth)
+
+_gnatmake()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ 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 gnatmake
+
+# ex: filetype=sh
diff --git a/completions/gnokii b/completions/gnokii
new file mode 100644
index 0000000..039141a
--- /dev/null
+++ b/completions/gnokii
@@ -0,0 +1,237 @@
+# gnokii(1) completion -*- shell-script -*-
+
+_gnokii_memory_type()
+{
+ # TODO: reduce the number of choices
+ COMPREPLY=($(compgen -W "IN OU SM ME MT" -- "$cur"))
+}
+
+_gnokii()
+{
+ local cur prev words cword pprev tprev fprev
+ _init_completion || return
+
+ case $prev in
+ --config)
+ _filedir
+ return
+ ;;
+ --phone)
+ local config_file
+ for config_file in "$XDG_CONFIG_HOME/gnokii/config" \
+ "$HOME/.config/gnokii/config" "$HOME/.gnokiirc" \
+ "$XDG_CONFIG_DIRS/gnokii/config" /etc/gnokiirc; do
+ [[ -f $config_file ]] && break
+ done
+ [[ ! -f $config_file ]] && return
+ COMPREPLY=($(compgen -W \
+ "$(command sed -n 's/^\[phone_\(.*\)\]/\1/p' $config_file)" \
+ -- "$cur"))
+ return
+ ;;
+ --help)
+ COMPREPLY=($(compgen -W 'all monitor sms mms phonebook calendar
+ todo dial profile settings wap logo ringtone security file
+ other' -- "$cur"))
+ return
+ ;;
+ --version | --shell | ping)
+ return
+ ;;
+
+ # MONITOR
+ --monitor)
+ COMPREPLY=($(compgen -W 'delay once' -- "$cur"))
+ return
+ ;;
+ --getdisplaystatus | --displayoutput)
+ return
+ ;;
+ --netmonitor)
+ COMPREPLY=($(compgen -W 'reset off field devel next nr' \
+ -- "$cur"))
+ return
+ ;;
+
+ # SMS
+ --sendsms)
+ # (how)TODO ?
+ return
+ ;;
+ --savesms)
+ COMPREPLY=($(compgen -W '--sender --smsc --smscno --folder
+ --location --sent --read --deliver --datetime' -- "$cur"))
+ return
+ ;;
+ --memory-type | --memory | --getsms | --deletesms | --getmms | --deletemms | \
+ --getphonebook | --deletephonebook)
+ _gnokii_memory_type
+ return
+ ;;
+ --getsmsc | --getcalendarnote | --deletecalendarnote | --gettodo | \
+ --getspeeddial)
+ # TODO: grab a specific entry ID
+ return
+ ;;
+ --setsmsc | --smsreader | --createsmsfolder | --deletealltodos | \
+ --showsmsfolderstatus)
+ return
+ ;;
+ --deletesmsfolder | --folder)
+ # TODO: folderid
+ return
+ ;;
+ --writephonebook)
+ COMPREPLY=($(compgen -W '--overwrite --find-free --memory-type
+ --location --vcard --ldif' -- "$cur"))
+ return
+ ;;
+ --writecalendarnote | --writetodo)
+ _filedir vcf
+ return
+ ;;
+
+ # DIAL
+ --setspeeddial | --dialvoice | --senddtmf | --answercall | --hangup)
+ # TODO
+ return
+ ;;
+ --divert)
+ COMPREPLY=($(compgen -W '--op' -- "$cur"))
+ return
+ ;;
+
+ # PROFILE
+ --getprofile | --setactiveprofile)
+ # TODO
+ return
+ ;;
+ --setprofile | --getactiveprofile)
+ return
+ ;;
+
+ # SETTINGS
+ --reset)
+ COMPREPLY=($(compgen -W 'soft hard' -- "$cur"))
+ return
+ ;;
+ --setdatetime | --setalarm)
+ # TODO
+ return
+ ;;
+ --getdatetime | --getalarm)
+ return
+ ;;
+
+ # WAP
+ --getwapbookmark | --writewapbookmark | --deletewapbookmark | \
+ --getwapsetting | --writewapsetting | --activatewapsetting)
+ return
+ ;;
+
+ # LOGOS
+ --sendlogo)
+ COMPREPLY=($(compgen -W 'caller op picture' -- "$cur"))
+ return
+ ;;
+ --setlogo | --getlogo)
+ COMPREPLY=($(compgen -W 'op startup caller dealer text' \
+ -- "$cur"))
+ return
+ ;;
+ --viewlogo)
+ # TODO: logofile
+ return
+ ;;
+
+ --entersecuritycode)
+ COMPREPLY=($(compgen -W 'PIN PIN2 PUK PUK2 SEC' -- "$cur"))
+ return
+ ;;
+
+ # TODO: RINGTONES
+ esac
+
+ # second level completion
+ if [[ $((cword - 2)) -ge 1 && ${words[cword - 2]} =~ --* ]]; then
+ pprev=${words[cword - 2]}
+ case $pprev in
+ --setspeeddial)
+ _gnokii_memory_type
+ return
+ ;;
+ --getsms | --deletesms | --getmms | --deletemms | --getphonebook | \
+ --writetodo | --writecalendarnote)
+ # TODO: start number
+ return
+ ;;
+ --gettodo | --getcalendarnote)
+ COMPREPLY=($(compgen -W '{1..9} end --vCal' -- "$cur"))
+ return
+ ;;
+ --deletecalendarnote)
+ COMPREPLY=($(compgen -W '{1..9} end' -- "$cur"))
+ return
+ ;;
+ --divert)
+ COMPREPLY=($(compgen -W 'register enable query disable
+ erasure' -- "$cur"))
+ return
+ ;;
+ esac
+ fi
+
+ # third level completion
+ if [[ $((cword - 3)) -ge 1 && ${words[cword - 3]} =~ --* ]]; then
+ tprev=${words[cword - 3]}
+ case $tprev in
+ --deletesms | --deletemms)
+ COMPREPLY=($(compgen -W 'end' -- "$cur"))
+ return
+ ;;
+ --getphonebook | --writetodo | --writecalendarnote)
+ COMPREPLY=($(compgen -W '{1..9} end' -- "$cur"))
+ return
+ ;;
+ --gettodo | --getcalendarnote)
+ [[ ${words[cword - 1]} == end ]] &&
+ COMPREPLY=($(compgen -W '--vCal' -- "$cur"))
+ return
+ ;;
+ --divert)
+ COMPREPLY=($(compgen -W '--type' -- "$cur"))
+ return
+ ;;
+ esac
+ fi
+
+ # fourth level completion
+ if [[ $((cword - 4)) -ge 1 && ${words[cword - 4]} =~ --* ]]; then
+ fprev=${words[cword - 4]}
+ case $fprev in
+ --getphonebook)
+ COMPREPLY=($(compgen -W '--raw --vcard --ldif' -- "$cur"))
+ return
+ ;;
+ --divert)
+ COMPREPLY=($(compgen -W 'all busy noans outofreach notavail' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+ fi
+
+ # safer to use LANG=C
+ local all_cmd="$(LANG=C _parse_help $1 "--help all")"
+ # these 2 below are allowed in combination with others
+ local main_cmd=$(command grep -v -- '--config\|--phone' <<<"$all_cmd")
+
+ # don't provide main command completions if one is
+ # already on the command line
+ [[ $COMP_LINE =~ $(tr ' ' '\b|' <<<$main_cmd) ]] && return
+
+ COMPREPLY=($(compgen -W "$all_cmd" -- "$cur"))
+} &&
+ complete -F _gnokii gnokii
+
+# ex: filetype=sh
diff --git a/completions/gnome-mplayer b/completions/gnome-mplayer
new file mode 100644
index 0000000..32d93fc
--- /dev/null
+++ b/completions/gnome-mplayer
@@ -0,0 +1,38 @@
+# gnome-mplayer(1) completion -*- shell-script -*-
+
+_gnome_mplayer()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -'?' | --help | --help-all | --help-gtk)
+ return
+ ;;
+ --showcontrols | --showsubtitles | --autostart)
+ COMPREPLY=($(compgen -w '0 1' -- "$cur"))
+ return
+ ;;
+ --subtitle)
+ _filedir '@(srt|sub|txt|utf|rar|mpsub|smi|js|ssa|ass)'
+ return
+ ;;
+ --tvdriver)
+ COMPREPLY=($(compgen -W 'v4l v4l2' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help-all)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _gnome_mplayer gnome-mplayer
+
+# ex: filetype=sh
diff --git a/completions/gnome-screenshot b/completions/gnome-screenshot
new file mode 100644
index 0000000..b3594d2
--- /dev/null
+++ b/completions/gnome-screenshot
@@ -0,0 +1,31 @@
+# gnome-screenshot(1) completion -*- shell-script -*-
+
+_gnome_screenshot()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --help-* | --version | --delay | --display | -!(-*)[hd])
+ return
+ ;;
+ --border-effect | -!(-*)e)
+ COMPREPLY=($(compgen -W 'shadow border vintage none' -- "$cur"))
+ return
+ ;;
+ --file | -!(-*)f)
+ _filedir '@(jp?(e)|pn)g'
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _gnome_screenshot gnome-screenshot
+
+# ex: filetype=sh
diff --git a/completions/gpasswd b/completions/gpasswd
new file mode 100644
index 0000000..f1f2200
--- /dev/null
+++ b/completions/gpasswd
@@ -0,0 +1,25 @@
+# gpasswd(1) completion -*- shell-script -*-
+
+_gpasswd()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --add | --delete | --administrators | --members | -!(-*)[adAM])
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ # TODO: only -A and -M can be combined
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -g -- "$cur"))
+} &&
+ complete -F _gpasswd gpasswd
+
+# ex: filetype=sh
diff --git a/completions/gpg b/completions/gpg
new file mode 100644
index 0000000..f0ca884
--- /dev/null
+++ b/completions/gpg
@@ -0,0 +1,38 @@
+# bash completion for gpg -*- shell-script -*-
+
+_gpg()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --sign | --clearsign | --decrypt-files | --load-extension | -!(-*)s)
+ _filedir
+ return
+ ;;
+ --export | --sign-key | --lsign-key | --nrsign-key | --nrlsign-key | --edit-key)
+ # return list of public keys
+ COMPREPLY=($(compgen -W "$($1 --list-keys 2>/dev/null | command sed -ne \
+ 's@^pub.*/\([^ ]*\).*$@\1@p' -ne \
+ 's@^.*\(<\([^>]*\)>\).*$@\2@p')" -- "$cur"))
+ return
+ ;;
+ --recipient | -!(-*)r)
+ COMPREPLY=($(compgen -W "$($1 --list-keys 2>/dev/null | command sed -ne \
+ 's@^.*<\([^>]*\)>.*$@\1@p')" -- "$cur"))
+ if [[ -e ~/.gnupg/gpg.conf ]]; then
+ COMPREPLY+=($(compgen -W "$(command sed -ne \
+ 's@^[ \t]*group[ \t][ \t]*\([^=]*\).*$@\1@p' \
+ ~/.gnupg/gpg.conf)" -- "$cur"))
+ fi
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$($1 --dump-options)' -- "$cur"))
+ fi
+} &&
+ complete -F _gpg -o default gpg
+
+# ex: filetype=sh
diff --git a/completions/gpg2 b/completions/gpg2
new file mode 100644
index 0000000..cfa4023
--- /dev/null
+++ b/completions/gpg2
@@ -0,0 +1,42 @@
+# gpg2(1) completion -*- shell-script -*-
+
+_gpg2()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --homedir)
+ _filedir -d
+ return
+ ;;
+ --sign | --clearsign | --options | --decrypt | -!(-*)s)
+ _filedir
+ return
+ ;;
+ --export | --sign-key | --lsign-key | --nrsign-key | --nrlsign-key | --edit-key)
+ # return list of public keys
+ COMPREPLY=($(compgen -W "$($1 --list-keys 2>/dev/null | command sed -ne \
+ 's@^pub.*/\([^ ]*\).*$@\1@p' -ne \
+ 's@^.*\(<\([^>]*\)>\).*$@\2@p')" -- "$cur"))
+ return
+ ;;
+ --recipient | -!(-*)r)
+ COMPREPLY=($(compgen -W "$($1 --list-keys 2>/dev/null |
+ command sed -ne 's@^.*<\([^>]*\)>.*$@\1@p')" -- "$cur"))
+ if [[ -e ~/.gnupg/gpg.conf ]]; then
+ COMPREPLY+=($(compgen -W "$(command sed -ne \
+ 's@^[ \t]*group[ \t][ \t]*\([^=]*\).*$@\1@p' \
+ ~/.gnupg/gpg.conf)" -- "$cur"))
+ fi
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$($1 --dump-options)' -- "$cur"))
+ fi
+} &&
+ complete -F _gpg2 -o default gpg2
+
+# ex: filetype=sh
diff --git a/completions/gpgv b/completions/gpgv
new file mode 100644
index 0000000..29315c9
--- /dev/null
+++ b/completions/gpgv
@@ -0,0 +1,46 @@
+# gpgv(1) completion -*- shell-script -*-
+
+_gpgv()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | --weak-digest | --*-fd | -!(-*)[?h]*)
+ return
+ ;;
+ --keyring)
+ _filedir "@(gpg|kbx)"
+ return
+ ;;
+ --homedir)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ local args
+ _count_args "" "--@(weak-digest|*-fd|keyring|homedir)"
+
+ if [[ $cur == -* && $args -eq 1 ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ if ((args > 1)); then
+ if [[ ${COMP_LINE,,} == *.@(asc|sig|sign)\ * ]]; then
+ # Detached signature, only complete one arbitrary file arg and -
+ if ((args == 2)); then
+ COMPREPLY=($(compgen -W '-' -- "$cur"))
+ _filedir
+ fi
+ else
+ _filedir gpg
+ fi
+ else
+ _filedir "@(asc|gpg|sig|sign)"
+ fi
+} &&
+ complete -F _gpgv gpgv gpgv2
+
+# ex: filetype=sh
diff --git a/completions/gphoto2 b/completions/gphoto2
new file mode 100644
index 0000000..cbf84c0
--- /dev/null
+++ b/completions/gphoto2
@@ -0,0 +1,55 @@
+# bash completion for gphoto2(1) -*- shell-script -*-
+
+_gphoto2()
+{
+ local cur prev words cword split
+ _init_completion -s -n : || return
+
+ case $prev in
+ --debug-logfile)
+ _filedir
+ return
+ ;;
+ --hook-script)
+ _filedir
+ return
+ ;;
+ --filename)
+ _filedir
+ return
+ ;;
+ -u | --upload-file)
+ _filedir
+ return
+ ;;
+ --port)
+ COMPREPLY=($(compgen -W "$($1 --list-ports 2>/dev/null |
+ awk 'NR>3 { print $1 }')" -- "$cur"))
+ __ltrim_colon_completions "$cur"
+ return
+ ;;
+ --camera)
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W "$($1 --list-cameras 2>/dev/null |
+ awk -F'"' 'NR>2 { print $2 }')" -- "$cur"))
+ return
+ ;;
+ --get-config | --set-config | --set-config-index | --set-config-value)
+ COMPREPLY=($(compgen -W "$(
+ $1 --list-config 2>/dev/null
+ )" -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+
+} &&
+ complete -F _gphoto2 gphoto2
+
+# ex: filetype=sh
diff --git a/completions/gprof b/completions/gprof
new file mode 100644
index 0000000..5a4ab2d
--- /dev/null
+++ b/completions/gprof
@@ -0,0 +1,56 @@
+# gprof(1) completion -*- shell-script -*-
+
+_gprof()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $cur in
+ -A* | -C* | -J* | -p* | -P* | -q* | -Q* | -n* | -N* | -d*)
+ return
+ ;;
+ -S*)
+ cur=${cur:2}
+ _filedir
+ COMPREPLY=("${COMPREPLY[@]/#/-S}")
+ return
+ ;;
+ -O*)
+ cur=${cur:2}
+ COMPREPLY=($(compgen -P -O -W 'auto bsd 4.4bsd magic prof' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+
+ case $prev in
+ -I | --directory-path)
+ _filedir -d
+ return
+ ;;
+ -R | --file-ordering | --external-symbol-table)
+ _filedir
+ return
+ ;;
+ -w | --width | -k | -m | --min-count | -h | --help | -e | -E | -f | -F)
+ return
+ ;;
+ --file-format)
+ COMPREPLY=($(compgen -W 'auto bsd 4.4bsd magic prof' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _gprof gprof
+
+# ex: filetype=sh
diff --git a/completions/groupadd b/completions/groupadd
new file mode 100644
index 0000000..5f67f29
--- /dev/null
+++ b/completions/groupadd
@@ -0,0 +1,26 @@
+# groupadd(8) completion -*- shell-script -*-
+
+_groupadd()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ # TODO: if -o/--non-unique is given, could complete on existing gids
+ # with -g/--gid
+
+ case $prev in
+ --gid | --key | --password | -!(-*)[gKp])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _groupadd groupadd
+
+# ex: filetype=sh
diff --git a/completions/groupdel b/completions/groupdel
new file mode 100644
index 0000000..4d8ca7f
--- /dev/null
+++ b/completions/groupdel
@@ -0,0 +1,27 @@
+# groupdel(8) completion -*- shell-script -*-
+
+_groupdel()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | --help)
+ return
+ ;;
+ -R | --root)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -g -- "$cur"))
+} &&
+ complete -F _groupdel groupdel
+
+# ex: filetype=sh
diff --git a/completions/groupmems b/completions/groupmems
new file mode 100644
index 0000000..2e89a5a
--- /dev/null
+++ b/completions/groupmems
@@ -0,0 +1,27 @@
+# groupmems(8) completion -*- shell-script -*-
+
+_groupmems()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -a | --add | -d | --delete)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ -g | --group)
+ COMPREPLY=($(compgen -g -- "$cur"))
+ return
+ ;;
+ -R | --root)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _groupmems groupmems
+
+# ex: filetype=sh
diff --git a/completions/groupmod b/completions/groupmod
new file mode 100644
index 0000000..5516d31
--- /dev/null
+++ b/completions/groupmod
@@ -0,0 +1,29 @@
+# groupmod(8) completion -*- shell-script -*-
+
+_groupmod()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ # TODO: if -o/--non-unique is given, could complete on existing gids
+ # with -g/--gid
+
+ case $prev in
+ --gid | --help | --new-name | --password | -!(-*)[ghnp])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ COMPREPLY=($(compgen -g -- "$cur"))
+} &&
+ complete -F _groupmod groupmod
+
+# ex: filetype=sh
diff --git a/completions/growisofs b/completions/growisofs
new file mode 100644
index 0000000..ee09fe6
--- /dev/null
+++ b/completions/growisofs
@@ -0,0 +1,39 @@
+# growisofs(1) completion -*- shell-script -*-
+
+_growisofs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -version | -speed)
+ return
+ ;;
+ -Z | -M)
+ compopt -o nospace
+ _dvd_devices
+ return
+ ;;
+ /?(r)dev/*)
+ if [[ $cur == =* ]]; then
+ # e.g. /dev/dvd=foo.iso, /dev/dvdrw=/dev/zero
+ cur="${cur#=}"
+ _filedir
+ return
+ fi
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ # TODO: mkisofs options
+ COMPREPLY=($(compgen -W '-dvd-compat -overburn -speed= -Z -M' \
+ -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _growisofs growisofs
+
+# ex: filetype=sh
diff --git a/completions/grpck b/completions/grpck
new file mode 100644
index 0000000..0fadbed
--- /dev/null
+++ b/completions/grpck
@@ -0,0 +1,25 @@
+# grpck(8) completion -*- shell-script -*-
+
+_grpck()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --root | -!(-*)R)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _grpck grpck
+
+# ex: filetype=sh
diff --git a/completions/gssdp-discover b/completions/gssdp-discover
new file mode 100644
index 0000000..8454f52
--- /dev/null
+++ b/completions/gssdp-discover
@@ -0,0 +1,34 @@
+# bash completion for gssdp-discover -*- shell-script -*-
+
+_gssdp_discover()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --target | --timeout | --rescan-interval | -[htnr])
+ return
+ ;;
+ --interface | -i)
+ _available_interfaces -a
+ return
+ ;;
+ --message-type | -m)
+ local types=$($1 --help 2>&1 |
+ command sed -ne 's/^.*--message-type=.*(\([^)]*\))$/\1/p')
+ COMPREPLY=($(
+ IFS+=,
+ compgen -W "$types" -- "$cur"
+ ))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _gssdp_discover gssdp-discover
+
+# ex: filetype=sh
diff --git a/completions/gzip b/completions/gzip
new file mode 100644
index 0000000..0144c3a
--- /dev/null
+++ b/completions/gzip
@@ -0,0 +1,43 @@
+# bash completion for gzip -*- shell-script -*-
+
+_gzip()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --blocksize | --suffix | --help | --version | -!(-*)[bShV])
+ return
+ ;;
+ --processes | -!(-*)p)
+ COMPREPLY=($(compgen -W "{1..$(_ncpus)}" -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") {-1..-9}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ local IFS=$'\n' xspec="*.@(gz|t[ag]z)"
+ [[ ${1##*/} == pigz ]] && xspec="*.@([gz]z|t[ag]z)"
+
+ if [[ $prev == --* ]]; then
+ [[ $prev == --@(decompress|list|test) ]] && xspec="!"$xspec
+ [[ $prev == --force ]] && xspec=
+ elif [[ $prev == -* ]]; then
+ [[ $prev == -*[dlt]* ]] && xspec="!"$xspec
+ [[ $prev == -*f* ]] && xspec=
+ fi
+
+ _tilde "$cur" || return
+
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -X "$xspec" -- "$cur")
+ $(compgen -d -- "$cur"))
+} &&
+ complete -F _gzip gzip pigz
+
+# ex: filetype=sh
diff --git a/completions/hcitool b/completions/hcitool
new file mode 100644
index 0000000..58bf5a7
--- /dev/null
+++ b/completions/hcitool
@@ -0,0 +1,380 @@
+# bash completion for bluez utils -*- shell-script -*-
+
+_bluetooth_addresses()
+{
+ if [[ -n ${COMP_BLUETOOTH_SCAN:-} ]]; then
+ COMPREPLY+=($(compgen -W "$(hcitool scan |
+ awk '/^\t/{print $1}')" -- "$cur"))
+ fi
+}
+
+_bluetooth_devices()
+{
+ 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"))
+}
+
+_hcitool()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -i)
+ _bluetooth_devices
+ return
+ ;;
+ --role)
+ COMPREPLY=($(compgen -W 'm s' -- "$cur"))
+ return
+ ;;
+ --pkt-type)
+ _bluetooth_packet_types
+ return
+ ;;
+ esac
+
+ $split && return
+
+ local arg
+ _get_first_arg
+ if [[ -z $arg ]]; then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$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
+ local args
+ case $arg in
+ name | info | dc | rssi | lq | afh | auth | key | clkoff | lst)
+ _count_args
+ if ((args == 2)); then
+ _bluetooth_addresses
+ fi
+ ;;
+ cc)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--role --pkt-type' -- "$cur"))
+ else
+ _count_args
+ if ((args == 2)); then
+ _bluetooth_addresses
+ fi
+ fi
+ ;;
+ sr)
+ _count_args
+ if ((args == 2)); then
+ _bluetooth_addresses
+ else
+ COMPREPLY=($(compgen -W 'master slave' -- "$cur"))
+ fi
+ ;;
+ cpt)
+ _count_args
+ if ((args == 2)); then
+ _bluetooth_addresses
+ else
+ _bluetooth_packet_types
+ fi
+ ;;
+ tpl | enc | clock)
+ _count_args
+ if ((args == 2)); then
+ _bluetooth_addresses
+ else
+ COMPREPLY=($(compgen -W '0 1' -- "$cur"))
+ fi
+ ;;
+ esac
+ fi
+} &&
+ complete -F _hcitool hcitool
+
+_sdptool()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --bdaddr)
+ _bluetooth_addresses
+ return
+ ;;
+ esac
+
+ $split && return
+
+ local arg
+ _get_first_arg
+ if [[ -z $arg ]]; then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'search browse records add del get
+ setattr setseq' -- "$cur"))
+ fi
+ else
+ case $arg 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_addresses
+ 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 words cword
+ _init_completion || return
+
+ case $prev in
+ -i)
+ _bluetooth_devices
+ return
+ ;;
+ -s | -c | -t | -d)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ else
+ _bluetooth_addresses
+ fi
+} &&
+ complete -F _l2ping l2ping
+
+_rfcomm()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -f | --config)
+ _filedir
+ return
+ ;;
+ -i)
+ _bluetooth_devices
+ _bluetooth_addresses
+ return
+ ;;
+ esac
+
+ local arg
+ _get_first_arg
+ if [[ -z $arg ]]; then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'show connect listen watch bind
+ release' -- "$cur"))
+ fi
+ else
+ local args
+ _count_args
+ if ((args == 2)); then
+ _bluetooth_devices
+ else
+ case $arg in
+ connect | bind)
+ if ((args == 3)); then
+ _bluetooth_addresses
+ fi
+ ;;
+ esac
+ fi
+ fi
+} &&
+ complete -F _rfcomm rfcomm
+
+_ciptool()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -i)
+ _bluetooth_devices
+ _bluetooth_addresses
+ return
+ ;;
+ esac
+
+ local arg
+ _get_first_arg
+ if [[ -z $arg ]]; then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'show search connect release loopback' \
+ -- "$cur"))
+ fi
+ else
+ local args
+ case $arg in
+ connect | release | loopback)
+ _count_args
+ if ((args == 2)); then
+ _bluetooth_addresses
+ fi
+ ;;
+ esac
+ fi
+} &&
+ complete -F _ciptool ciptool
+
+_dfutool()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -d | --device)
+ _bluetooth_devices
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ local args
+ _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 prev words cword
+ _init_completion || return
+
+ local arg
+ _get_first_arg
+ if [[ -z $arg ]]; then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--help --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
+ local args
+ case $arg in
+ putkey | delkey)
+ _count_args
+ if ((args == 2)); then
+ _bluetooth_addresses
+ fi
+ ;;
+ lm)
+ _count_args
+ if ((args == 2)); then
+ COMPREPLY=($(compgen -W 'MASTER SLAVE NONE ACCEPT' \
+ -- "$cur"))
+ fi
+ ;;
+ ptype)
+ _count_args
+ if ((args == 2)); then
+ _bluetooth_packet_types
+ fi
+ ;;
+ esac
+ fi
+} &&
+ complete -F _hciconfig hciconfig
+
+_hciattach()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-n -p -t -b -s -l' -- "$cur"))
+ else
+ local args
+ _count_args
+ case $args in
+ 1)
+ COMPREPLY=($(printf '%s\n' /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_addresses
+ ;;
+ esac
+ fi
+} &&
+ complete -F _hciattach hciattach
+
+# ex: filetype=sh
diff --git a/completions/hddtemp b/completions/hddtemp
new file mode 100644
index 0000000..7b95f0e
--- /dev/null
+++ b/completions/hddtemp
@@ -0,0 +1,38 @@
+# hddtemp(8) completion -*- shell-script -*-
+
+_hddtemp()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --file | -!(-*)f)
+ _filedir db
+ return
+ ;;
+ --listen | -!(-*)l)
+ _ip_addresses
+ return
+ ;;
+ --unit | -!(-*)u)
+ COMPREPLY=($(compgen -W 'C F' -- "$cur"))
+ return
+ ;;
+ --port | --separator | --syslog | --version | --help | -!(-*)[psSvh?])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") --help' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ cur=${cur:=/dev/}
+ _filedir
+ fi
+} &&
+ complete -F _hddtemp hddtemp
+
+# ex: filetype=sh
diff --git a/completions/hid2hci b/completions/hid2hci
new file mode 100644
index 0000000..f33a495
--- /dev/null
+++ b/completions/hid2hci
@@ -0,0 +1,15 @@
+# hid2hci completion -*- shell-script -*-
+
+_hid2hci()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--help --quiet -0 --tohci -1 --tohid' \
+ -- "$cur"))
+ fi
+} &&
+ complete -F _hid2hci hid2hci
+
+# ex: filetype=sh
diff --git a/completions/hostname b/completions/hostname
new file mode 100644
index 0000000..ce1b32e
--- /dev/null
+++ b/completions/hostname
@@ -0,0 +1,23 @@
+# hostname(1) completion -*- shell-script -*-
+
+_hostname()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | -!(-*)[hV])
+ return
+ ;;
+ --file | -!(-*)F)
+ _filedir
+ return
+ ;;
+ esac
+
+ [[ $cur == -* ]] &&
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _hostname hostname
+
+# ex: filetype=sh
diff --git a/completions/hping2 b/completions/hping2
new file mode 100644
index 0000000..666838b
--- /dev/null
+++ b/completions/hping2
@@ -0,0 +1,35 @@
+# bash completion for hping2 -*- shell-script -*-
+
+_hping2()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --interface | -!(-*)I)
+ _available_interfaces
+ return
+ ;;
+ --spoof | -!(-*)a)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --tos | -!(-*)o)
+ COMPREPLY=($(compgen -W '02 04 08 10'))
+ return
+ ;;
+ --file | -!(-*)E)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ _known_hosts_real -- "$cur"
+ fi
+} &&
+ complete -F _hping2 hping hping2 hping3
+
+# ex: filetype=sh
diff --git a/completions/htop b/completions/htop
new file mode 100644
index 0000000..b4916d5
--- /dev/null
+++ b/completions/htop
@@ -0,0 +1,33 @@
+# htop(1) completion -*- shell-script -*-
+
+_htop()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --sort-key | -!(-*)s)
+ COMPREPLY=($(compgen -W '$("$1" -s help)' -- "$cur"))
+ return
+ ;;
+ --user | -!(-*)u)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ --delay | -!(-*)d)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+} &&
+ complete -F _htop htop
+
+# ex: filetype=sh
diff --git a/completions/htpasswd b/completions/htpasswd
new file mode 100644
index 0000000..527684b
--- /dev/null
+++ b/completions/htpasswd
@@ -0,0 +1,36 @@
+# htpasswd(1) completion -*- shell-script -*-
+
+_htpasswd()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local i o=0 # $o is index of first non-option argument
+ for ((i = 1; i <= cword; i++)); do
+ case ${words[i]} in
+ -*n*) return ;;
+ -*) ;;
+ *)
+ o=$i
+ break
+ ;;
+ esac
+ done
+
+ if ((o == 0 || o == cword)); then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+ # Password file (first non-option argument)
+ _filedir
+
+ elif ((o == cword - 1)); then
+ # Username (second non-option argument)
+ COMPREPLY=($(compgen -W \
+ '$(cut -d: -f1 "${words[o]}" 2>/dev/null)' -- "$cur"))
+ fi
+} &&
+ complete -F _htpasswd htpasswd
+
+# ex: filetype=sh
diff --git a/completions/hunspell b/completions/hunspell
new file mode 100644
index 0000000..92b4fe8
--- /dev/null
+++ b/completions/hunspell
@@ -0,0 +1,43 @@
+# hunspell(1) completion -*- shell-script -*-
+
+_hunspell()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | -vv | -[hPv])
+ return
+ ;;
+ -d)
+ local IFS=$' \t\n' reset=$(shopt -p nullglob)
+ shopt -s nullglob
+ local -a dicts=(/usr/share/hunspell/*.dic
+ /usr/local/share/hunspell/*.dic)
+ dicts=("${dicts[@]##*/}")
+ dicts=("${dicts[@]%.dic}")
+ $reset
+ IFS=$'\n'
+ COMPREPLY=($(compgen -W '${dicts[@]}' -- "$cur"))
+ return
+ ;;
+ -i)
+ _xfunc iconv _iconv_charsets
+ return
+ ;;
+ -p)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _hunspell hunspell
+
+# ex: filetype=sh
diff --git a/completions/iconv b/completions/iconv
new file mode 100644
index 0000000..81ae01b
--- /dev/null
+++ b/completions/iconv
@@ -0,0 +1,38 @@
+# iconv(1) completion -*- shell-script -*-
+
+_iconv_charsets()
+{
+ COMPREPLY+=($(compgen -X ... -W '$(${1:-iconv} -l | \
+ command sed -e "s@/*\$@@" -e "s/[,()]//g")' -- "$cur"))
+}
+
+_iconv()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --usage | --version | --unicode-subst | --byte-subst | \
+ --widechar-subst | -!(-*)[?V])
+ return
+ ;;
+ --from-code | --to-code | -!(-*)[ft])
+ _iconv_charsets $1
+ return
+ ;;
+ --output | -!(-*)o)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _iconv -o default iconv
+
+# ex: filetype=sh
diff --git a/completions/id b/completions/id
new file mode 100644
index 0000000..a07e51d
--- /dev/null
+++ b/completions/id
@@ -0,0 +1,18 @@
+# id(1) completion -*- shell-script -*-
+
+_id()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ [[ $opts ]] || opts="-G -g -u" # POSIX fallback
+ COMPREPLY=($(compgen -W "$opts" -- "$cur"))
+ else
+ COMPREPLY=($(compgen -u "$cur"))
+ fi
+} &&
+ complete -F _id id
+
+# ex: filetype=sh
diff --git a/completions/idn b/completions/idn
new file mode 100644
index 0000000..8023f8f
--- /dev/null
+++ b/completions/idn
@@ -0,0 +1,26 @@
+# idn(1) completion -*- shell-script -*-
+
+_idn()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | -!(-*)[hV])
+ return
+ ;;
+ --profile | -!(-*)p)
+ COMPREPLY=($(compgen -W 'Nameprep iSCSI Nodeprep Resourceprep
+ trace SASLprep' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if ! $split && [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _idn idn
+
+# ex: filetype=sh
diff --git a/completions/ifstat b/completions/ifstat
new file mode 100644
index 0000000..629786e
--- /dev/null
+++ b/completions/ifstat
@@ -0,0 +1,68 @@
+# bash completion for ifstat(1) -*- shell-script -*-
+
+_ifstat()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | --scan | --interval | -!(-*)[hvV])
+ return
+ ;;
+ -!(-*)i)
+ # TODO comma separated
+ _available_interfaces -a
+ return
+ ;;
+ -!(-*)d)
+ # iproute2: no completion (scan delay)
+ # traditional: parse driver
+ if ! {
+ "$1" --help 2>&1 || :
+ } |
+ command grep -q -- '-d.*--scan'; then
+ COMPREPLY=($(compgen -W '$("$1" -v | command \
+ sed -e "s/[,.]//g" -ne "s/^.*drivers://p")' -- "$cur"))
+ fi
+ return
+ ;;
+ --noupdate | -!(-*)s)
+ # iproute2: pass through (skip history update)
+ # traditional: hostnames (snmp)
+ if ! {
+ "$1" --help 2>&1 || :
+ } |
+ command grep -q -- '-s.*--noupdate'; then
+ _known_hosts_real -- "$cur"
+ return
+ fi
+ ;;
+ -!(-*)t)
+ # iproute2: no completion (interval)
+ # traditional: pass through (add timestamp)
+ ! {
+ "$1" --help 2>&1 || :
+ } |
+ command grep -q -- '-t.*--interval' || return
+ ;;
+ --extended | -!(-*)x)
+ # iproute2: parse xstat types
+ COMPREPLY=($(compgen -W '$("$1" -x nonexistent-xstat 2>&1 |
+ awk "found { print \$1 } /supported xstats:/ { found=1 }")' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+} &&
+ complete -F _ifstat ifstat
+
+# ex: filetype=sh
diff --git a/completions/iftop b/completions/iftop
new file mode 100644
index 0000000..b73f4b6
--- /dev/null
+++ b/completions/iftop
@@ -0,0 +1,26 @@
+# iftop(8) completion -*- shell-script -*-
+
+_iftop()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | -f | -F | -m)
+ return
+ ;;
+ -i)
+ _available_interfaces -a
+ return
+ ;;
+ -c)
+ _filedir
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+} &&
+ complete -F _iftop iftop
+
+# ex: filetype=sh
diff --git a/completions/ifup b/completions/ifup
new file mode 100644
index 0000000..5b35bfb
--- /dev/null
+++ b/completions/ifup
@@ -0,0 +1,39 @@
+# Red Hat & Debian GNU/Linux if{up,down} completion -*- shell-script -*-
+
+_userland GNU || return 1
+
+_ifupdown()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | --allow | --exclude | --option | -!(-*)[hVXo])
+ return
+ ;;
+ --interfaces | -!(-*)i)
+ _filedir
+ return
+ ;;
+ --state-dir)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ local args
+ _count_args "" "@(--allow|-i|--interfaces|--state-dir|-X|--exclude|-o)"
+
+ if ((args == 1)); then
+ _configured_interfaces
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]}' -- "$cur"))
+ fi
+} &&
+ complete -F _ifupdown ifup ifdown ifquery ifstatus
+
+# ex: filetype=sh
diff --git a/completions/influx b/completions/influx
new file mode 100644
index 0000000..e9362e7
--- /dev/null
+++ b/completions/influx
@@ -0,0 +1,35 @@
+# bash completion for influx(8) -*- shell-script -*-
+
+_influx()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -version | -port | -database | -password | -username | -execute | -pps)
+ return
+ ;;
+ -host)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -format | -precision | -consistency)
+ local args=$($1 --help 2>&1 | awk "\$1 == \"$prev\" { print \$2 }")
+ COMPREPLY=($(
+ IFS+="\"'|"
+ compgen -W "$args" -- "$cur"
+ ))
+ return
+ ;;
+ -import | -path)
+ _filedir
+ return
+ ;;
+ esac
+
+ [[ $cur == -* ]] &&
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _influx influx
+
+# ex: filetype=sh
diff --git a/completions/info b/completions/info
new file mode 100644
index 0000000..f50f842
--- /dev/null
+++ b/completions/info
@@ -0,0 +1,74 @@
+# bash completion for info -*- shell-script -*-
+
+_info()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ # default completion if parameter looks like a path
+ if [[ $cur == @(*/|[.~])* ]]; then
+ _filedir
+ return
+ fi
+
+ case $prev in
+ --apropos | --index-search | --node | --help | --version | -!(-*)[knhv])
+ return
+ ;;
+ -!(-*)d)
+ if [[ ${1##*/} == info ]]; then
+ _filedir -d
+ return
+ fi
+ ;;
+ --directory)
+ _filedir -d
+ return
+ ;;
+ --dribble | --file | --output | --restore | --raw-filename | --rcfile | -!(-*)[for])
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ local i infopath=/usr/share/info
+
+ if [[ ${INFOPATH-} == *: ]]; then
+ infopath=${INFOPATH}${infopath}
+ elif [[ ${INFOPATH:+set} ]]; then
+ infopath=$INFOPATH
+ fi
+
+ _expand || return
+
+ 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 in ${!COMPREPLY[*]}; do
+ [[ ${COMPREPLY[i]} == dir ]] && unset "COMPREPLY[i]"
+ done
+ # strip suffix from info pages
+ COMPREPLY=(${COMPREPLY[@]%.@(gz|bz2|xz|lzma)})
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]%.*}' -- "${cur//\\\\/}"))
+
+} &&
+ complete -F _info info pinfo
+
+# ex: filetype=sh
diff --git a/completions/inject b/completions/inject
new file mode 100644
index 0000000..fad73a1
--- /dev/null
+++ b/completions/inject
@@ -0,0 +1,26 @@
+# mailman inject completion -*- shell-script -*-
+
+_inject()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -l | --listname)
+ _xfunc list_lists _mailman_lists
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--listname --queue --help' -- "$cur"))
+ else
+ _filedir
+ fi
+
+} &&
+ complete -F _inject inject
+
+# ex: filetype=sh
diff --git a/completions/inotifywait b/completions/inotifywait
new file mode 100644
index 0000000..e5608fc
--- /dev/null
+++ b/completions/inotifywait
@@ -0,0 +1,47 @@
+# bash completion for inotifywait(1) and inotifywatch(1) -*- shell-script -*-
+
+_inotifywait_events()
+{
+ # Expecting line with "Events:", followed by ones starting with one
+ # tab. Word following the tab is event name, others are line
+ # wrapped explanations.
+ COMPREPLY+=($(compgen -W "$($1 --help 2>/dev/null |
+ command sed -e '/^Events:/,/^[^'$'\t'']/!d' \
+ -ne 's/^'$'\t''\([^ '$'\t'']\{1,\}\)[ '$'\t''].*/\1/p')" \
+ -- "$cur"))
+}
+
+_inotifywait()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --exclude | --excludei | --format | --timefmt | --timeout | -!(-*)[ht])
+ return
+ ;;
+ --fromfile | --outfile | -!(-*)o)
+ _filedir
+ return
+ ;;
+ --event | -!(-*)e)
+ _inotifywait_events "$1"
+ return
+ ;;
+ --ascending | --descending)
+ COMPREPLY=($(compgen -W 'total' -- "$cur"))
+ _inotifywait_events "$1"
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _inotifywait inotifywait inotifywatch
+
+# ex: filetype=sh
diff --git a/completions/insmod b/completions/insmod
new file mode 100644
index 0000000..a59e753
--- /dev/null
+++ b/completions/insmod
@@ -0,0 +1,18 @@
+# Linux insmod(8) completion -*- shell-script -*-
+
+_insmod()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # do filename completion for first argument
+ if ((cword == 1)); then
+ _filedir '@(?(k)o?(.[gx]z))'
+ else # do module parameter completion
+ COMPREPLY=($(compgen -W "$(PATH="$PATH:/sbin" modinfo \
+ -p ${words[1]} 2>/dev/null | cut -d: -f1)" -- "$cur"))
+ fi
+} &&
+ complete -F _insmod insmod insmod.static
+
+# ex: filetype=sh
diff --git a/completions/installpkg b/completions/installpkg
new file mode 100644
index 0000000..7455eb1
--- /dev/null
+++ b/completions/installpkg
@@ -0,0 +1,33 @@
+# Slackware Linux installpkg completion -*- shell-script -*-
+
+_installpkg()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ --root)
+ _filedir -d
+ return
+ ;;
+ --priority)
+ COMPREPLY=($(compgen -W 'ADD REC OPT SKP' -- "$cur"))
+ return
+ ;;
+ --tagfile)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--warn --md5sum --root --infobox --terse
+ --menu --ask --priority --tagfile' -- "$cur"))
+ return
+ fi
+
+ _filedir 't[bglx]z'
+} &&
+ complete -F _installpkg installpkg
+
+# ex: filetype=sh
diff --git a/completions/interdiff b/completions/interdiff
new file mode 100644
index 0000000..9933d15
--- /dev/null
+++ b/completions/interdiff
@@ -0,0 +1,33 @@
+# interdiff(1) completion -*- shell-script -*-
+
+_interdiff()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --unified | --strip-match | --drop-context | -!(-*)[Upd])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ local exts='@(?(d)patch|dif?(f))' word
+ for word in "${words[@]}"; do
+ if [[ $word == -@(z|-decompress) ]]; then
+ exts+='?(.@(gz|bz2))'
+ break
+ fi
+ done
+ _filedir "$exts"
+} &&
+ complete -F _interdiff interdiff
+
+# ex: filetype=sh
diff --git a/completions/invoke-rc.d b/completions/invoke-rc.d
new file mode 100644
index 0000000..4a5045a
--- /dev/null
+++ b/completions/invoke-rc.d
@@ -0,0 +1,38 @@
+# invoke-rc.d(8) completion -*- shell-script -*-
+#
+# Copyright (C) 2004 Servilio Afre Puentes <servilio@gmail.com>
+
+_invoke_rc_d()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local sysvdir services options valid_options
+
+ [[ -d /etc/rc.d/init.d ]] && sysvdir=/etc/rc.d/init.d ||
+ sysvdir=/etc/init.d
+
+ services=($(printf '%s ' $sysvdir/!(README*|*.sh|$_backup_glob)))
+ services=(${services[@]#$sysvdir/})
+ options=(--help --quiet --force --try-anyway --disclose-deny --query
+ --no-fallback)
+
+ if [[ $cword -eq 1 || $prev == --* ]]; then
+ valid_options=($(
+ tr " " "\n" <<<"${words[*]} ${options[*]}" |
+ command sed -ne "/$(command sed 's/ /\\|/g' <<<"${options[*]}")/p" |
+ sort | uniq -u
+ ))
+ COMPREPLY=($(compgen -W '${valid_options[@]} ${services[@]}' -- "$cur"))
+ elif [[ -x $sysvdir/$prev ]]; then
+ COMPREPLY=($(compgen -W '`command sed -e "y/|/ /" \
+ -ne "s/^.*Usage:[ ]*[^ ]*[ ]*{*\([^}\"]*\).*$/\1/p" \
+ $sysvdir/$prev`' -- "$cur"))
+ else
+ COMPREPLY=()
+ fi
+
+} &&
+ complete -F _invoke_rc_d invoke-rc.d
+
+# ex: filetype=sh
diff --git a/completions/ip b/completions/ip
new file mode 100644
index 0000000..12ad9aa
--- /dev/null
+++ b/completions/ip
@@ -0,0 +1,378 @@
+# ip(8) completion -*- shell-script -*-
+
+_iproute2_etc()
+{
+ COMPREPLY+=($(compgen -W \
+ "$(awk '!/#/ { print $2 }' /etc/iproute2/$1 2>/dev/null)" \
+ -- "$cur"))
+}
+
+_ip()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -V | -Version | -rc | -rcvbuf)
+ return
+ ;;
+ -f | -family)
+ COMPREPLY=($(compgen -W 'inet inet6 ipx dnet link' -- "$cur"))
+ return
+ ;;
+ -b | -batch)
+ _filedir
+ return
+ ;;
+ -force)
+ COMPREPLY=($(compgen -W '-batch' -- "$cur"))
+ return
+ ;;
+ esac
+
+ local subcword cmd subcmd=""
+ for ((subcword = 1; subcword < ${#words[@]} - 1; subcword++)); do
+ [[ ${words[subcword]} == -b?(atch) ]] && return
+ [[ -v cmd ]] && subcmd=${words[subcword]} && break
+ [[ ${words[subcword]} != -* && \
+ ${words[subcword - 1]} != -@(f?(amily)|rc?(vbuf)) ]] &&
+ cmd=${words[subcword]}
+ done
+
+ if [[ ! -v cmd ]]; then
+ case $cur in
+ -*)
+ local c="-Version -statistics -details -resolve -family
+ -oneline -timestamp -batch -rcvbuf"
+ ((cword == 1)) && c+=" -force"
+ COMPREPLY=($(compgen -W "$c" -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W "help $($1 help 2>&1 | command sed -e \
+ '/OBJECT := /,/}/!d' -e \
+ 's/.*{//' -e \
+ 's/}.*//' -e \
+ 's/|//g')" -- "$cur"))
+ ;;
+ esac
+ return
+ fi
+
+ [[ $subcmd == help ]] && return
+
+ case $cmd in
+ l | link)
+ case $subcmd in
+ add)
+ # TODO
+ ;;
+ delete)
+ case $((cword - subcword)) in
+ 1)
+ _available_interfaces
+ ;;
+ 2)
+ COMPREPLY=($(compgen -W 'type' -- "$cur"))
+ ;;
+ 3)
+ [[ $prev == type ]] &&
+ COMPREPLY=($(compgen -W 'vlan veth vcan dummy
+ ifb macvlan can' -- "$cur"))
+ ;;
+ esac
+ ;;
+ set)
+ if ((cword - subcword == 1)); then
+ _available_interfaces
+ else
+ case $prev in
+ arp | dynamic | multicast | allmulticast | promisc | \
+ trailers)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ ;;
+ txqueuelen | name | address | broadcast | mtu | netns | alias) ;;
+
+ *)
+ local c="arp dynamic multicast allmulticast
+ promisc trailers txqueuelen name address
+ broadcast mtu netns alias"
+ [[ $prev != @(up|down) ]] && c+=" up down"
+ COMPREPLY=($(compgen -W "$c" -- "$cur"))
+ ;;
+ esac
+ fi
+ ;;
+ show)
+ if ((cword == subcword + 1)); then
+ _available_interfaces
+ COMPREPLY+=($(compgen -W 'dev group up' -- "$cur"))
+ elif [[ $prev == dev ]]; then
+ _available_interfaces
+ elif [[ $prev == group ]]; then
+ _iproute2_etc group
+ fi
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help add delete set show' \
+ -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ a | addr | address)
+ case $subcmd in
+ add | change | replace)
+ if [[ $prev == dev ]]; then
+ _available_interfaces
+ elif [[ $prev == scope ]]; then
+ _iproute2_etc rt_scopes
+ else
+ : # TODO
+ fi
+ ;;
+ del)
+ if [[ $prev == dev ]]; then
+ _available_interfaces
+ elif [[ $prev == scope ]]; then
+ _iproute2_etc rt_scopes
+ else
+ : # TODO
+ fi
+ ;;
+ show | flush)
+ if ((cword == subcword + 1)); then
+ _available_interfaces
+ COMPREPLY+=($(compgen -W 'dev scope to label dynamic
+ permanent tentative deprecated dadfailed temporary
+ primary secondary up' -- "$cur"))
+ elif [[ $prev == dev ]]; then
+ _available_interfaces
+ elif [[ $prev == scope ]]; then
+ _iproute2_etc rt_scopes
+ fi
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help add change replace del
+ show flush' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ addrlabel)
+ case $subcmd in
+ list | add | del | flush)
+ if [[ $prev == dev ]]; then
+ _available_interfaces
+ else
+ : # TODO
+ fi
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help list add del flush' \
+ -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ r | route)
+ case $subcmd in
+ list | flush)
+ if [[ $prev == proto ]]; then
+ _iproute2_etc rt_protos
+ else
+ : # TODO
+ fi
+ ;;
+ get)
+ # TODO
+ ;;
+ a | add | d | del | change | append | r | replace | monitor)
+ if [[ $prev == via ]]; then
+ COMPREPLY=($(compgen -W "$($1 r | command sed -ne \
+ 's/.*via \([0-9.]*\).*/\1/p')" -- "$cur"))
+ elif [[ $prev == "$subcmd" ]]; then
+ COMPREPLY=($(compgen -W "table default \
+ $($1 r | cut -d ' ' -f 1)" -- "$cur"))
+ elif [[ $prev == dev ]]; then
+ _available_interfaces -a
+ elif [[ $prev == table ]]; then
+ COMPREPLY=($(compgen -W 'local main default' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'via dev weight' -- "$cur"))
+ fi
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help list flush get add del
+ change append replace monitor' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ rule)
+ case $subcmd in
+ add | del | list | lst)
+ case $prev in
+ from | to | tos | dsfield | fwmark | uidrange | ipproto | sport | \
+ dport | priority | protocol | suppress_prefixlength | \
+ suppress_ifgroup | realms | nat | goto) ;;
+
+ iif | oif)
+ _available_interfaces -a
+ ;;
+ table | lookup)
+ COMPREPLY=($(compgen -W 'local main default' -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W 'from to tos dsfield fwmark
+ uidrange ipproto sport dport priority table lookup
+ protocol suppress_prefixlength suppress_ifgroup realms
+ nat goto iif oif not' -- "$cur"))
+ ;;
+ esac
+ ;;
+ flush | save)
+ if [[ $prev == protocol ]]; then
+ :
+ else
+ COMPREPLY=($(compgen -W 'protocol' -- "$cur"))
+ fi
+ ;;
+ restore | show) ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help add del list flush save
+ restore show' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ neigh)
+ case $subcmd in
+ add | del | change | replace)
+ # TODO
+ ;;
+ show | flush)
+ # TODO
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help add del change replace
+ show flush' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ ntable)
+ case $subcmd in
+ change)
+ # TODO
+ ;;
+ show)
+ # TODO
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help change show' \
+ -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ tunnel)
+ case $subcmd in
+ show) ;;
+
+ add | change | del | prl | 6rd)
+ # TODO
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help add change del show prl
+ 6rd' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ maddr)
+ case $subcmd in
+ add | del)
+ # TODO
+ ;;
+ show)
+ if [[ $cword -eq $subcword+1 || $prev == dev ]]; then
+ _available_interfaces
+ [[ $prev != dev ]] &&
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]} dev' \
+ -- "$cur"))
+ fi
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help add del show' \
+ -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ mroute)
+ case $subcmd in
+ show)
+ # TODO
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help show' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ monitor)
+ case $subcmd in
+ all) ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help all' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ netns)
+ case $subcmd in
+ list | monitor) ;;
+
+ add | identify | list-id)
+ # TODO
+ ;;
+ delete | exec | pids | set)
+ [[ $prev == "$subcmd" ]] &&
+ COMPREPLY=($(compgen -W "$($1 netns list)" -- "$cur"))
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'help add delete exec
+ identify list list-id monitor pids set' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ xfrm)
+ case $subcmd in
+ state | policy | monitor)
+ # TODO
+ ;;
+ *)
+ ((cword == subcword)) &&
+ COMPREPLY=($(compgen -W 'state policy monitor' \
+ -- "$cur"))
+ ;;
+ esac
+ ;;
+ esac
+} &&
+ complete -F _ip ip
+
+# ex: filetype=sh
diff --git a/completions/ipcalc b/completions/ipcalc
new file mode 100644
index 0000000..5603c26
--- /dev/null
+++ b/completions/ipcalc
@@ -0,0 +1,25 @@
+# ipcalc(1) completion -*- shell-script -*-
+
+_ipcalc()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | --split | -[hs])
+ return
+ ;;
+ esac
+
+ # --split takes 3 args
+ local i
+ for i in {1..3}; do
+ [[ ${words[cword - i]} == -@(-split|s) ]] && return
+ done
+
+ [[ $cur != -* ]] ||
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _ipcalc ipcalc
+
+# ex: filetype=sh
diff --git a/completions/iperf b/completions/iperf
new file mode 100644
index 0000000..6347fe0
--- /dev/null
+++ b/completions/iperf
@@ -0,0 +1,69 @@
+# iperf(1) completion -*- shell-script -*-
+
+_iperf()
+{
+ local cur prev words cword split
+ _init_completion -s -n : || return
+
+ case $prev in
+ --help | --version | --interval | --len | --port | --window | --mss | --bandwidth | \
+ --num | --time | --listenport | --parallel | --ttl | --linux-congestion | --omit | \
+ --congestion | --bytes | --blockcount | --cport | --set-mss | --flowlabel | \
+ --title | --tos | --affinity | -!(-*)[hvilpwMbntLPTZCkOSA])
+ return
+ ;;
+ --format | -!(-*)f)
+ COMPREPLY=($(compgen -W 'k m g K M G' -- "$cur"))
+ return
+ ;;
+ --output | --fileinput | -!(-*)[oF])
+ _filedir
+ return
+ ;;
+ --bind | -!(-*)B)
+ _available_interfaces -a
+ _ip_addresses -a
+ __ltrim_colon_completions "$cur"
+ return
+ ;;
+ --client | -!(-*)c)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --reportexclude | -!(-*)x)
+ COMPREPLY=($(compgen -W 'C D M S V' -- "$cur"))
+ return
+ ;;
+ --reportstyle | -!(-*)y)
+ COMPREPLY=($(compgen -W 'C' -- "$cur"))
+ return
+ ;;
+ --logfile)
+ _filedir log
+ return
+ ;;
+ esac
+
+ $split && return
+
+ # Filter mode specific options
+ local i filter=cat
+ for i in "${words[@]}"; do
+ case $i in
+ -s | --server)
+ filter='command sed -e /^Client.specific/,/^\(Server.specific.*\)\?$/d'
+ ;;
+ -c | --client)
+ filter='command sed -e /^Server.specific/,/^\(Client.specific.*\)\?$/d'
+ ;;
+ esac
+ done
+ [[ $filter != cat ]] && filter+=' -e /--client/d -e /--server/d'
+
+ COMPREPLY=($(compgen -W \
+ '$("$1" --help 2>&1 | $filter | _parse_help -)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _iperf iperf iperf3
+
+# ex: filetype=sh
diff --git a/completions/ipmitool b/completions/ipmitool
new file mode 100644
index 0000000..920287d
--- /dev/null
+++ b/completions/ipmitool
@@ -0,0 +1,199 @@
+# bash completion for ipmitool -*- shell-script -*-
+
+_ipmitool_singleline_help()
+{
+ COMPREPLY=($(compgen -W "$($1 $2 2>&1 |
+ command sed -ne 's/[,\r]//g' -e 's/^.*[Cc]ommands://p')" -- "$cur"))
+}
+
+_ipmitool()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*[hVpUekyPmbtBTl])
+ return
+ ;;
+ -*d)
+ COMPREPLY=($(compgen -W "$(
+ command ls -d /dev/ipmi* /dev/ipmi/* /dev/ipmidev/* \
+ 2>/dev/null | command sed -ne 's/^[^0-9]*\([0-9]\{1,\}\)/\1/p'
+ )" \
+ -- "$cur"))
+ return
+ ;;
+ -*I)
+ COMPREPLY=($(compgen -W "$($1 -h 2>&1 |
+ command sed -e '/^Interfaces:/,/^[[:space:]]*$/!d' \
+ -ne 's/^[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*/\1/p')" \
+ -- "$cur"))
+ return
+ ;;
+ -*H)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*[fSO])
+ _filedir
+ return
+ ;;
+ -*C)
+ COMPREPLY=($(compgen -W '{0..14}' -- "$cur"))
+ return
+ ;;
+ -*L)
+ COMPREPLY=($(compgen -W 'CALLBACK USER OPERATOR ADMINISTRATOR' \
+ -- "$cur"))
+ return
+ ;;
+ -*A)
+ COMPREPLY=($(compgen -W 'NONE PASSWORD MD2 MD5 OEM' -- "$cur"))
+ return
+ ;;
+ -*o)
+ COMPREPLY=($(compgen -W "$($1 -o list 2>&1 |
+ awk '/^[ \t]+/ { print $1 }') list" -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ return
+ fi
+
+ # Find out command and subcommand
+
+ local cmds=(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 shell exec set hpm ekanalyzer)
+ local i c cmd subcmd
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ [[ -v cmd ]] && subcmd=${words[i]} && break
+ for c in "${cmds[@]}"; do
+ [[ ${words[i]} == "$c" ]] && cmd=$c && break
+ done
+ done
+
+ if [[ ! -v cmd ]]; then
+ COMPREPLY=($(compgen -W '${cmds[@]}' -- "$cur"))
+ return
+ fi
+
+ # Command/subcommand completions
+
+ case $cmd in
+
+ shell) ;;
+
+ \
+ exec)
+ _filedir
+ ;;
+
+ chassis | power | kontronoem | fwum)
+ _ipmitool_singleline_help $1 $cmd
+ ;;
+
+ lan)
+ case $subcmd in
+ print | set) ;;
+
+ alert)
+ [[ $prev == alert ]] &&
+ COMPREPLY=($(compgen -W 'print set' -- "$cur"))
+ ;;
+ stats)
+ [[ $prev == stats ]] &&
+ COMPREPLY=($(compgen -W 'print set' -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W 'print set alert stats' \
+ -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ sdr)
+ case $subcmd in
+ get | info | type | list | entity) ;;
+
+ elist)
+ COMPREPLY=($(compgen -W 'all full compact event mclog fru
+ generic' -- "$cur"))
+ ;;
+ dump)
+ _filedir
+ ;;
+ fill)
+ case $prev in
+ fill)
+ COMPREPLY=($(compgen -W 'sensors file' -- "$cur"))
+ ;;
+ file)
+ _filedir
+ ;;
+ esac
+ ;;
+ *)
+ COMPREPLY=($(compgen -W 'get info type list elist entity
+ dump fill' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ sensor)
+ case $subcmd in
+ list | get | thresh) ;;
+
+ *)
+ COMPREPLY=($(compgen -W 'list get thresh' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ sel)
+ case $subcmd in
+ info | clear | list | elist | delete) ;;
+
+ add | save | writeraw | readraw)
+ _filedir
+ ;;
+ time)
+ [[ $prev == time ]] &&
+ COMPREPLY=($(compgen -W 'get set' -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W 'info clear list elist delete add
+ get save writeraw readraw time' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ user)
+ case $subcmd in
+ summary | list | disable | enable | priv | test) ;;
+
+ set)
+ [[ $prev == set ]] &&
+ COMPREPLY=($(compgen -W 'name password' -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W 'summary list set disable enable
+ priv test' -- "$cur"))
+ ;;
+ esac
+ ;;
+
+ set)
+ [[ $prev == set ]] &&
+ COMPREPLY=($(compgen -W 'hostname username password privlvl
+ authtype localaddr targetaddr port csv verbose' -- "$cur"))
+ ;;
+
+ esac
+} &&
+ complete -F _ipmitool ipmitool
+
+# ex: filetype=sh
diff --git a/completions/ipsec b/completions/ipsec
new file mode 100644
index 0000000..4bc8cdf
--- /dev/null
+++ b/completions/ipsec
@@ -0,0 +1,102 @@
+# Linux ipsec(8) completion (for FreeS/WAN and strongSwan) -*- shell-script -*-
+
+# Complete ipsec.conf conn entries.
+#
+# Reads a file from stdin in the ipsec.conf(5) format.
+_ipsec_connections()
+{
+ local keyword name
+ while read -r keyword name; do
+ if [[ $keyword == [#]* ]]; then continue; fi
+ [[ $keyword == conn && $name != '%default' ]] && COMPREPLY+=("$name")
+ done
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]}' -- "$cur"))
+}
+
+_ipsec_freeswan()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W 'auto barf eroute klipsdebug look manual
+ pluto ranbits rsasigkey setup showdefaults showhostkey spi spigrp
+ tncfg whack' -- "$cur"))
+ return
+ fi
+
+ case ${words[1]} in
+ auto)
+ COMPREPLY=($(compgen -W '--asynchronous --up --add --delete
+ --replace --down --route --unroute --ready --status
+ --rereadsecrets' -- "$cur"))
+ ;;
+ manual)
+ COMPREPLY=($(compgen -W '--up --down --route --unroute --union' \
+ -- "$cur"))
+ ;;
+ ranbits)
+ COMPREPLY=($(compgen -W '--quick --continuous --bytes' -- "$cur"))
+ ;;
+ setup)
+ COMPREPLY=($(compgen -W '--start --stop --restart' -- "$cur"))
+ ;;
+ *) ;;
+
+ esac
+}
+
+_ipsec_strongswan()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W 'down irdumm leases listaacerts listacerts
+ listalgs listall listcacerts listcainfos listcards listcerts
+ listcrls listgroups listocsp listocspcerts listpubkeys openac pki
+ pluto pool purgecerts purgecrls purgeike purgeocsp ready reload
+ rereadaacerts rereadacerts rereadall rereadcacerts rereadcrls
+ rereadgroups rereadocspcerts rereadsecrets restart route scdecrypt
+ scencrypt scepclient secrets start starter status statusall stop
+ stroke unroute uci up update version whack --confdir --copyright
+ --directory --help --version --versioncode' -- "$cur"))
+ return
+ fi
+
+ case ${words[1]} in
+ down | route | status | statusall | unroute | up)
+ local confdir=$(ipsec --confdir)
+ _ipsec_connections <"$confdir/ipsec.conf"
+ ;;
+ list*)
+ COMPREPLY=($(compgen -W '--utc' -- "$cur"))
+ ;;
+ restart | start)
+ COMPREPLY=($(compgen -W '--attach-gdb --auto-update --debug
+ --debug-all --debug-more --nofork' -- "$cur"))
+ ;;
+ pki)
+ COMPREPLY=($(compgen -W '--gen --issue --keyid --print --pub
+ --req --self --signcrl --verify' -- "$cur"))
+ ;;
+ pool) ;;
+
+ irdumm)
+ _filedir 'rb'
+ ;;
+ *) ;;
+
+ esac
+}
+
+case "$(ipsec --version 2>/dev/null)" in
+ *strongSwan*)
+ complete -F _ipsec_strongswan ipsec
+ ;;
+ *)
+ complete -F _ipsec_freeswan ipsec
+ ;;
+esac
+
+# ex: filetype=sh
diff --git a/completions/iptables b/completions/iptables
new file mode 100644
index 0000000..ffb905b
--- /dev/null
+++ b/completions/iptables
@@ -0,0 +1,51 @@
+# bash completion for iptables -*- shell-script -*-
+
+_iptables()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local table chain='s/^Chain \([^ ]\{1,\}\).*$/\1/p'
+
+ [[ ${words[*]} =~ [[:space:]]-(t|-table=?)[[:space:]]*([^[:space:]]+) ]] &&
+ table="-t ${BASH_REMATCH[2]}"
+
+ case $prev in
+ -*[AIDRPFXLZ])
+ COMPREPLY=($(compgen -W '`"$1" $table -nL 2>/dev/null | \
+ command sed -ne "s/^Chain \([^ ]\{1,\}\).*$/\1/p"`' -- "$cur"))
+ ;;
+ -*t)
+ COMPREPLY=($(compgen -W 'nat filter mangle' -- "$cur"))
+ ;;
+ -j)
+ if [[ $table == "-t filter" || -z $table ]]; then
+ COMPREPLY=($(compgen -W 'ACCEPT DROP LOG ULOG REJECT
+ `"$1" $table -nL 2>/dev/null | command 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 `"$1" $table -nL 2>/dev/null | \
+ command sed -ne "$chain" -e "s/OUTPUT|PREROUTING|POSTROUTING//"`' \
+ -- "$cur"))
+ elif [[ $table == "-t mangle" ]]; then
+ COMPREPLY=($(compgen -W 'ACCEPT DROP LOG ULOG REJECT MARK TOS
+ `"$1" $table -nL 2>/dev/null | command sed -ne "$chain" \
+ -e "s/INPUT|OUTPUT|FORWARD|PREROUTING|POSTROUTING//"`' -- \
+ "$cur"))
+ fi
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$("$1" --help 2>&1 |
+ command sed -e "s/^\[\!\]//" | _parse_help -)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+ ;;
+ esac
+
+} &&
+ complete -F _iptables iptables
+
+# ex: filetype=sh
diff --git a/completions/ipv6calc b/completions/ipv6calc
new file mode 100644
index 0000000..c452c15
--- /dev/null
+++ b/completions/ipv6calc
@@ -0,0 +1,38 @@
+# ipv6calc completion -*- shell-script -*-
+
+_ipv6calc()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --debug | -!(-*)d)
+ return
+ ;;
+ --in | --out | --action | -!(-*)[IOA])
+ # With ipv6calc < 0.73.0, -m does nothing here, so use sed instead.
+ COMPREPLY=($(compgen -W "$($1 "$prev" -h 2>&1 |
+ command sed -ne 's/^[[:space:]]\{1,\}\([^[:space:]:]\{1,\}\)[[:space:]]*:.*/\1/p')" \
+ -- "$cur"))
+ return
+ ;;
+ --db-geoip | --db-ip2location-ipv4 | --db-ip2location-ipv6)
+ _filedir
+ return
+ ;;
+ --printstart | --printend)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$("$1" -h 2>&1 |
+ command sed -e "s/[][]//g" | _parse_help -)' -- "$cur"))
+ fi
+
+} &&
+ complete -F _ipv6calc ipv6calc
+
+# ex: filetype=sh
diff --git a/completions/iscsiadm b/completions/iscsiadm
new file mode 100644
index 0000000..7786ddc
--- /dev/null
+++ b/completions/iscsiadm
@@ -0,0 +1,66 @@
+# iscsiadm(1) completion -*- shell-script -*-
+
+_iscsiadm()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --mode | -!(-*)m)
+ COMPREPLY=($(compgen -W 'discovery node session iface fw host' \
+ -- "$cur"))
+ return
+ ;;
+ --op | -!(-*)o)
+ COMPREPLY=($(compgen -W 'new delete update show' -- "$cur"))
+ return
+ ;;
+ --type | -!(-*)t)
+ COMPREPLY=($(compgen -W 'sendtargets st slp isns fw' -- "$cur"))
+ return
+ ;;
+ --loginall | --logoutall | -!(-*)[LU])
+ COMPREPLY=($(compgen -W 'all manual automatic' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ local options
+ if ((cword > 1)); then
+
+ case ${words[2]} in
+ discovery)
+ options='--help --version --debug --print --interface --type \
+ --portal --login --op --name --value'
+ ;;
+ node)
+ options='--help --version --debug --print --loginall \
+ --logoutall--show -T --portal --interface --login \
+ --logout --rescan --stats --op --name --value'
+ ;;
+ session)
+ options='--help --version --debug --print --sid --logout \
+ --rescan --stats'
+ ;;
+ iface)
+ options='--help --version --debug --print --interface --op \
+ --name --value'
+ ;;
+ fw)
+ options='--login'
+ ;;
+ host)
+ options='--print -H'
+ ;;
+ esac
+ else
+ options='--mode'
+ fi
+
+ COMPREPLY=($(compgen -W "$options" -- "$cur"))
+} &&
+ complete -F _iscsiadm iscsiadm
+
+# ex: filetype=sh
diff --git a/completions/isort b/completions/isort
new file mode 100644
index 0000000..2a84e25
--- /dev/null
+++ b/completions/isort
@@ -0,0 +1,41 @@
+# isort completion -*- shell-script -*-
+
+_isort()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --add-import | --builtin | --future | --from-first | -ff | \
+ --force-grid-wrap | -fgw | --indent | --lines | --lines-after-imports | -lai | \
+ --lines-between-types | -lbt | --line-ending | -le | --no-lines-before | -nlb | \
+ --dont-skip | -ns | --thirdparty | --project | --remove-import | --skip | \
+ --skip-glob | -sg | --settings-path | -sp | --top | --virtual-env | --line-width | \
+ --wrap-length | -wl | -[habfiloprstw])
+ return
+ ;;
+ --jobs | -j)
+ COMPREPLY=($(compgen -W "{1..$(_ncpus)}" -- "$cur"))
+ return
+ ;;
+ --multi-line | -m)
+ COMPREPLY=($(compgen -W '{0..5}' -- "$cur"))
+ return
+ ;;
+ --section-default | -sd)
+ COMPREPLY=($(compgen -W 'FUTURE STDLIB THIRDPARTY FIRSTPARTY
+ LOCALFOLDER' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir '@(py|pyi)'
+} &&
+ complete -F _isort isort
+
+# ex: filetype=sh
diff --git a/completions/isql b/completions/isql
new file mode 100644
index 0000000..4258c51
--- /dev/null
+++ b/completions/isql
@@ -0,0 +1,14 @@
+# isql completion -*- shell-script -*-
+# by Victor Bogado da Silva Lins <victor@bogado.net>
+
+_isql()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ [[ -f $ODBCINI ]] &&
+ COMPREPLY=($(command grep "\[$cur" "$ODBCINI" | tr -d \[\]))
+} &&
+ complete -F _isql isql
+
+# ex: filetype=sh
diff --git a/completions/iwconfig b/completions/iwconfig
new file mode 100644
index 0000000..aa8fbf3
--- /dev/null
+++ b/completions/iwconfig
@@ -0,0 +1,90 @@
+# iwconfig completion -*- shell-script -*-
+
+_iwconfig()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ mode)
+ COMPREPLY=($(compgen -W 'managed ad-hoc master repeater secondary
+ monitor' -- "$cur"))
+ return
+ ;;
+ essid)
+ COMPREPLY=($(compgen -W 'on off any' -- "$cur"))
+ if [[ -n ${COMP_IWLIST_SCAN:-} ]]; then
+ COMPREPLY+=($(compgen -W \
+ "$(iwlist ${words[1]} scan |
+ awk -F'\"' '/ESSID/ {print $2}')" -- "$cur"))
+ fi
+ return
+ ;;
+ nwid)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ channel)
+ COMPREPLY=($(compgen -W "$(iwlist ${words[1]} channel |
+ awk '/^[ \t]*Channel/ {print $2}')" -- "$cur"))
+ return
+ ;;
+
+ freq)
+ COMPREPLY=($(compgen -W "$(iwlist ${words[1]} channel |
+ awk '/^[ \t]*Channel/ {print $4"G"}')" -- "$cur"))
+ return
+ ;;
+ ap)
+ COMPREPLY=($(compgen -W 'on off any' -- "$cur"))
+ if [[ -n ${COMP_IWLIST_SCAN:-} ]]; then
+ COMPREPLY+=($(compgen -W \
+ "$(iwlist ${words[1]} scan |
+ awk -F ': ' '/Address/ {print $2}')" -- "$cur"))
+ fi
+ return
+ ;;
+ rate)
+ COMPREPLY=($(compgen -W 'auto fixed' -- "$cur"))
+ COMPREPLY+=($(compgen -W \
+ "$(iwlist ${words[1]} rate |
+ awk '/^[ \t]*[0-9]/ {print $1"M"}')" -- "$cur"))
+ return
+ ;;
+ rts | frag)
+ COMPREPLY=($(compgen -W 'auto fixed off' -- "$cur"))
+ return
+ ;;
+ key | enc)
+ COMPREPLY=($(compgen -W 'off on open restricted' -- "$cur"))
+ return
+ ;;
+ power)
+ COMPREPLY=($(compgen -W 'period timeout off on' -- "$cur"))
+ return
+ ;;
+ txpower)
+ COMPREPLY=($(compgen -W 'off on auto' -- "$cur"))
+ return
+ ;;
+ retry)
+ COMPREPLY=($(compgen -W 'limit lifetime' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if ((cword == 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
+
+# ex: filetype=sh
diff --git a/completions/iwlist b/completions/iwlist
new file mode 100644
index 0000000..16aa39c
--- /dev/null
+++ b/completions/iwlist
@@ -0,0 +1,22 @@
+# iwlist completion -*- shell-script -*-
+
+_iwlist()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 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
+
+# ex: filetype=sh
diff --git a/completions/iwpriv b/completions/iwpriv
new file mode 100644
index 0000000..4e38246
--- /dev/null
+++ b/completions/iwpriv
@@ -0,0 +1,31 @@
+# iwpriv completion -*- shell-script -*-
+
+_iwpriv()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ roam)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ port)
+ COMPREPLY=($(compgen -W 'ad-hoc managed' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if ((cword == 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
+
+# ex: filetype=sh
diff --git a/completions/iwspy b/completions/iwspy
new file mode 100644
index 0000000..38b7868
--- /dev/null
+++ b/completions/iwspy
@@ -0,0 +1,20 @@
+# iwspy completion -*- shell-script -*-
+
+_iwspy()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 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
+
+# ex: filetype=sh
diff --git a/completions/jar b/completions/jar
new file mode 100644
index 0000000..2289491
--- /dev/null
+++ b/completions/jar
@@ -0,0 +1,27 @@
+# jar(1) completion -*- shell-script -*-
+
+_jar()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W 'c t x u' -- "$cur"))
+ return
+ fi
+
+ case ${words[1]} in
+ *c*f)
+ _filedir
+ ;;
+ *f)
+ _filedir_xspec unzip
+ ;;
+ *)
+ _filedir
+ ;;
+ esac
+} &&
+ complete -F _jar jar
+
+# ex: filetype=sh
diff --git a/completions/jarsigner b/completions/jarsigner
new file mode 100644
index 0000000..1f26c9c
--- /dev/null
+++ b/completions/jarsigner
@@ -0,0 +1,57 @@
+# jarsigner(1) completion -*- shell-script -*-
+
+_jarsigner()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -keystore)
+ COMPREPLY=($(compgen -W 'NONE' -- "$cur"))
+ _filedir '@(jks|ks|p12|pfx)'
+ return
+ ;;
+ -storepass | -keypass | -sigfile | -digestalg | -sigalg | -tsacert | -tsapolicyid | \
+ -tsadigestalg | -altsigner | -altsignerpath | -providerName | -providerClass | \
+ -providerArg)
+ return
+ ;;
+ -certchain | -tsa)
+ _filedir
+ return
+ ;;
+ -storetype)
+ COMPREPLY=($(compgen -W 'JKS PKCS11 PKCS12' -- "$cur"))
+ return
+ ;;
+ -signedjar)
+ _filedir '@(jar|apk)'
+ return
+ ;;
+ esac
+
+ # Check if a jar was already given.
+ local i jar=false
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ if [[ ${words[i]} == *.@(jar|apk) && \
+ ${words[i - 1]} != -signedjar ]]; then
+ jar=true
+ break
+ fi
+ done
+
+ if ! $jar; then
+ if [[ $cur == -* ]]; then
+ # Documented as "should not be used": -internalsf, -sectionsonly
+ COMPREPLY=($(compgen -W '-keystore -storepass -storetype
+ -keypass -sigfile -signedjar -digestalg -sigalg -verify
+ -verbose -certs -tsa -tsacert -altsigner -altsignerpath
+ -protected -providerName -providerClass -providerArg' \
+ -- "$cur"))
+ fi
+ _filedir '@(jar|apk)'
+ fi
+} &&
+ complete -F _jarsigner jarsigner
+
+# ex: filetype=sh
diff --git a/completions/java b/completions/java
new file mode 100644
index 0000000..d0f70ae
--- /dev/null
+++ b/completions/java
@@ -0,0 +1,333 @@
+# bash completion for java, javac and javadoc -*- shell-script -*-
+
+# available path elements completion
+_java_path()
+{
+ cur=${cur##*:}
+ _filedir '@(jar|zip)'
+}
+
+# exact classpath determination
+_java_find_classpath()
+{
+ local i
+
+ # search first in current options
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == -@(cp|classpath) ]]; then
+ classpath=${words[i + 1]}
+ break
+ fi
+ done
+
+ # default to environment
+ [[ ! -v 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 < cword; i++)); do
+ if [[ ${words[i]} == -sourcepath ]]; then
+ sourcepath=${words[i + 1]}
+ break
+ fi
+ done
+
+ # default to classpath
+ if [[ ! -v sourcepath ]]; then
+ local classpath
+ _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 [[ $i == *.@(jar|zip) && -r $i ]]; then
+ if type zipinfo &>/dev/null; then
+ COMPREPLY+=($(zipinfo -1 "$i" "$cur*" 2>/dev/null |
+ command grep '^[^$]*\.class$'))
+ elif type unzip &>/dev/null; then
+ # Last column, between entries consisting entirely of dashes
+ COMPREPLY+=($(unzip -lq "$i" "$cur*" 2>/dev/null |
+ awk '$NF ~ /^-+$/ { flag=!flag; next };
+ flag && $NF ~ /^[^$]*\.class/ { print $NF }'))
+ elif type jar &>/dev/null; then
+ COMPREPLY+=($(jar tf "$i" "$cur" |
+ command grep '^[^$]*\.class$'))
+ fi
+
+ elif [[ -d $i ]]; then
+ COMPREPLY+=(
+ $(compgen -d -- "$i/$cur" | command sed -e "s|^$i/\(.*\)|\1.|")
+ $(compgen -f -X '!*.class' -- "$i/$cur" |
+ command sed -e '/\$/d' -e "s|^$i/||")
+ )
+ [[ ${COMPREPLY-} == *.class ]] || compopt -o nospace
+
+ # FIXME: if we have foo.class and foo/, the completion
+ # returns "foo/"... how to give precedence to files
+ # over directories?
+ fi
+ done
+
+ if ((${#COMPREPLY[@]} != 0)); then
+ # remove class extension
+ COMPREPLY=(${COMPREPLY[@]%.class})
+ # convert path syntax to package syntax
+ COMPREPLY=(${COMPREPLY[@]//\//.})
+ fi
+}
+
+# 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+=($(command ls -F -d $i/$cur* 2>/dev/null |
+ command sed -e 's|^'$i'/||'))
+ fi
+ done
+ if ((${#COMPREPLY[@]} != 0)); then
+ # keep only packages
+ COMPREPLY=($(tr " " "\n" <<<"${COMPREPLY[@]}" | command grep "/$"))
+ # remove packages extension
+ COMPREPLY=(${COMPREPLY[@]%/})
+ # convert path syntax to package syntax
+ cur="${COMPREPLY[*]//\//.}"
+ fi
+}
+
+# java completion
+#
+_java()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local i
+
+ for ((i = 1; i < cword; i++)); do
+ case ${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
+ ;;
+ esac
+ done
+
+ case $cur in
+ # standard option completions
+ -verbose:*)
+ COMPREPLY=($(compgen -W 'class gc jni' -- "${cur#*:}"))
+ return
+ ;;
+ -javaagent:*)
+ cur=${cur#*:}
+ _filedir '@(jar|zip)'
+ return
+ ;;
+ -agentpath:*)
+ cur=${cur#*:}
+ _filedir so
+ return
+ ;;
+ # various non-standard option completions
+ -splash:*)
+ cur=${cur#*:}
+ _filedir '@(gif|jp?(e)g|png)'
+ return
+ ;;
+ -Xbootclasspath*:*)
+ _java_path
+ return
+ ;;
+ -Xcheck:*)
+ COMPREPLY=($(compgen -W 'jni' -- "${cur#*:}"))
+ return
+ ;;
+ -Xgc:*)
+ COMPREPLY=($(compgen -W 'singlecon gencon singlepar genpar' \
+ -- "${cur#*:}"))
+ return
+ ;;
+ -Xgcprio:*)
+ COMPREPLY=($(compgen -W 'throughput pausetime deterministic' \
+ -- "${cur#*:}"))
+ return
+ ;;
+ -Xloggc:* | -Xverboselog:*)
+ cur=${cur#*:}
+ _filedir
+ return
+ ;;
+ -Xshare:*)
+ COMPREPLY=($(compgen -W 'auto off on' -- "${cur#*:}"))
+ return
+ ;;
+ -Xverbose:*)
+ COMPREPLY=($(compgen -W 'memory load jni cpuinfo codegen opt
+ gcpause gcreport' -- "${cur#*:}"))
+ return
+ ;;
+ -Xverify:*)
+ COMPREPLY=($(compgen -W 'all none remote' -- "${cur#*:}"))
+ return
+ ;;
+ # the rest that we have no completions for
+ -D* | -*:*)
+ return
+ ;;
+ esac
+
+ case $prev in
+ -cp | -classpath)
+ _java_path
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ [[ $cur == -X* ]] &&
+ COMPREPLY+=($(compgen -W '$(_parse_help "$1" -X)' -- "$cur"))
+ else
+ if [[ $prev == -jar ]]; then
+ # jar file completion
+ _filedir '[jw]ar'
+ else
+ # classes completion
+ _java_classes
+ fi
+ fi
+
+ [[ ${COMPREPLY-} == -*[:=] ]] && compopt -o nospace
+
+ __ltrim_colon_completions "$cur"
+} &&
+ complete -F _java java
+
+_javadoc()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -overview | -helpfile)
+ _filedir '?(x)htm?(l)'
+ return
+ ;;
+ -doclet | -exclude | -subpackages | -source | -locale | -encoding | -windowtitle | \
+ -doctitle | -header | -footer | -top | -bottom | -group | -noqualifier | -tag | \
+ -charset | -sourcetab | -docencoding)
+ return
+ ;;
+ -stylesheetfile)
+ _filedir css
+ return
+ ;;
+ -d | -link | -linkoffline)
+ _filedir -d
+ return
+ ;;
+ -classpath | -cp | -bootclasspath | -docletpath | -sourcepath | -extdirs | \
+ -excludedocfilessubdir)
+ _java_path
+ return
+ ;;
+ esac
+
+ # -linkoffline takes two arguments
+ if [[ $cword -gt 2 && ${words[cword - 2]} == -linkoffline ]]; then
+ _filedir -d
+ return
+ fi
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ else
+ # source files completion
+ _filedir java
+ # packages completion
+ _java_packages
+ fi
+} &&
+ complete -F _javadoc javadoc
+
+_javac()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ case $prev in
+ -d)
+ _filedir -d
+ return
+ ;;
+ -cp | -classpath | -bootclasspath | -sourcepath | -extdirs)
+ _java_path
+ return
+ ;;
+ esac
+
+ if [[ $cur == -+([a-zA-Z0-9-_]):* ]]; then
+ # Parse required options from -foo:{bar,quux,baz}
+ local helpopt=-help
+ [[ $cur == -X* ]] && helpopt=-X
+ # For some reason there may be -g:none AND -g:{lines,source,vars};
+ # convert the none case to the curly brace format so it parses like
+ # the others.
+ local opts=$("$1" $helpopt 2>&1 | command sed -e 's/-g:none/-g:{none}/' -ne \
+ "s/^[[:space:]]*${cur%%:*}:{\([^}]\{1,\}\)}.*/\1/p")
+ COMPREPLY=($(compgen -W "${opts//,/ }" -- "${cur#*:}"))
+ return
+ fi
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ [[ $cur == -X* ]] &&
+ COMPREPLY+=($(compgen -W '$(_parse_help "$1" -X)' -- "$cur"))
+ else
+ # source files completion
+ _filedir java
+ fi
+
+ [[ ${COMPREPLY-} == -*[:=] ]] && compopt -o nospace
+
+ __ltrim_colon_completions "$cur"
+} &&
+ complete -F _javac javac
+
+# ex: filetype=sh
diff --git a/completions/javaws b/completions/javaws
new file mode 100644
index 0000000..f42a1e5
--- /dev/null
+++ b/completions/javaws
@@ -0,0 +1,34 @@
+# javaws(1) completion -*- shell-script -*-
+
+_javaws()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ case $prev in
+ -help | -license | -about | -viewer | -arg | -param | -property | -update | -umask)
+ return
+ ;;
+ -basedir | -codebase)
+ _filedir -d
+ return
+ ;;
+ -uninstall | -import)
+ _filedir jnlp
+ return
+ ;;
+ esac
+
+ if [[ $cur == *= ]]; then
+ return
+ elif [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$(_parse_help "$1" -help) " -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir jnlp
+} &&
+ complete -F _javaws javaws
+
+# ex: filetype=sh
diff --git a/completions/jpegoptim b/completions/jpegoptim
new file mode 100644
index 0000000..c366972
--- /dev/null
+++ b/completions/jpegoptim
@@ -0,0 +1,38 @@
+# jpegoptim(1) completion -*- shell-script -*-
+
+_jpegoptim()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | -!(-*)[hV]*)
+ return
+ ;;
+ --dest | -!(-*)d)
+ _filedir -d
+ return
+ ;;
+ --max | --threshold | -!(-*)[mT])
+ COMPREPLY=($(compgen -W '{0..100}' -- "$cur"))
+ return
+ ;;
+ --size | -!(-*)S)
+ COMPREPLY=($(compgen -W '{1..99}%' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir 'jp?(e)g'
+} &&
+ complete -F _jpegoptim jpegoptim
+
+# ex: filetype=sh
diff --git a/completions/jps b/completions/jps
new file mode 100644
index 0000000..a451eec
--- /dev/null
+++ b/completions/jps
@@ -0,0 +1,25 @@
+# jps(1) completion -*- shell-script -*-
+
+_jps()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -J* | -help)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ # Not using _parse_usage because output has [-help] which does not
+ # mean -h, -e, -l, -p...
+ COMPREPLY=($(compgen -W "-q -m -l -v -V -J -help" -- "$cur"))
+ [[ ${COMPREPLY-} == -J* ]] && compopt -o nospace
+ else
+ _known_hosts_real -- "$cur"
+ fi
+} &&
+ complete -F _jps jps
+
+# ex: filetype=sh
diff --git a/completions/jq b/completions/jq
new file mode 100644
index 0000000..2d99c39
--- /dev/null
+++ b/completions/jq
@@ -0,0 +1,54 @@
+# jq(1) completion -*- shell-script -*-
+
+_jq()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | --arg | --argjson | --slurpfile | --argfile)
+ return
+ ;;
+ --indent)
+ COMPREPLY=($(compgen -W '{1..8}' -- "$cur"))
+ return
+ ;;
+ --from-file | --run-tests | -!(-*)f)
+ _filedir
+ return
+ ;;
+ -!(-*)L)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ ((cword > 2)) &&
+ case ${words[cword - 2]} in
+ --arg | --argjson)
+ return
+ ;;
+ --slurpfile | --argfile)
+ _filedir json
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ local args
+ # TODO: DTRT with args taking 2 options
+ _count_args "" "@(--arg|--arg?(json|file)|--?(slurp|from-)file|--indent|--run-tests|-!(-*)[fL])"
+
+ # 1st arg is filter
+ ((args == 1)) && return
+ # 2... are input files
+ _filedir json
+
+} &&
+ complete -F _jq jq
+
+# ex: filetype=sh
diff --git a/completions/jshint b/completions/jshint
new file mode 100644
index 0000000..3622cec
--- /dev/null
+++ b/completions/jshint
@@ -0,0 +1,38 @@
+# bash completion for jshint -*- shell-script -*-
+
+_jshint()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -v | --version | -h | --help | --exclude | --filename | -e | --extra-ext)
+ return
+ ;;
+ -c | --config)
+ _filedir
+ return
+ ;;
+ --reporter)
+ COMPREPLY=($(compgen -W "jslint checkstyle unix" -- "$cur"))
+ return
+ ;;
+ --extract)
+ COMPREPLY=($(compgen -W "auto always never" -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir js
+} &&
+ complete -F _jshint jshint
+
+# ex: filetype=sh
diff --git a/completions/json_xs b/completions/json_xs
new file mode 100644
index 0000000..c93ba86
--- /dev/null
+++ b/completions/json_xs
@@ -0,0 +1,31 @@
+# json_xs completion -*- shell-script -*-
+
+_json_xs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*f)
+ COMPREPLY=($(compgen -W 'json cbor storable storable-file bencode
+ clzf eval yaml string none' -- "$cur"))
+ return
+ ;;
+ -*t)
+ COMPREPLY=($(compgen -W 'json json-utf-8 json-pretty
+ json-utf-16le json-utf-16be json-utf-32le json-utf-32be
+ cbor storable storable-file bencode clzf yaml dump dumper
+ string none' -- "$cur"))
+ return
+ ;;
+ -*e)
+ return
+ ;;
+ esac
+
+ [[ $cur == -* ]] &&
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1") -f' -- "$cur"))
+} &&
+ complete -F _json_xs json_xs
+
+# ex: filetype=sh
diff --git a/completions/jsonschema b/completions/jsonschema
new file mode 100644
index 0000000..8a36ed3
--- /dev/null
+++ b/completions/jsonschema
@@ -0,0 +1,30 @@
+# bash completion for jsonschema -*- shell-script -*-
+
+_jsonschema()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --error-format | --validator | -[hFV])
+ return
+ ;;
+ --instance | -i)
+ _filedir json
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ local args
+ _count_args "" "-*"
+ ((args == 1)) || return
+ _filedir '@(json|schema)'
+} &&
+ complete -F _jsonschema jsonschema
+
+# ex: filetype=sh
diff --git a/completions/k3b b/completions/k3b
new file mode 100644
index 0000000..87d26cd
--- /dev/null
+++ b/completions/k3b
@@ -0,0 +1,48 @@
+# bash completion for k3b -*- shell-script -*-
+
+_k3b()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help* | --author | -v | --version | --license | --lang)
+ return
+ ;;
+ --datacd | --audiocd | --videocd | --mixedcd | --emovixcd | --videodvd)
+ _filedir
+ return
+ ;;
+ --copydvd | --formatdvd | --videodvdrip)
+ _dvd_devices
+ return
+ ;;
+ --copycd | --erasecd | --cddarip | --videocdrip)
+ _cd_devices
+ _dvd_devices
+ return
+ ;;
+ --cdimage | --image)
+ _filedir '@(cue|iso|toc)'
+ return
+ ;;
+ --dvdimage)
+ _filedir iso
+ return
+ ;;
+ --ao)
+ COMPREPLY=($(compgen -W 'alsa arts' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$(_parse_help "$1")" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _filedir
+ fi
+} &&
+ complete -F _k3b k3b
+
+# ex: filetype=sh
diff --git a/completions/kcov b/completions/kcov
new file mode 100644
index 0000000..672967a
--- /dev/null
+++ b/completions/kcov
@@ -0,0 +1,64 @@
+# kcov(1) completion -*- shell-script -*-
+
+_kcov()
+{
+ local cur prev words cword split
+ _init_completion -s -n : || return
+
+ case "$prev" in
+ --pid | -p)
+ _pids
+ return
+ ;;
+ --sort-type | -s)
+ COMPREPLY=($(compgen -W 'filename percent reverse lines
+ uncovered' -- "$cur"))
+ return
+ ;;
+ --include-path | --exclude-path)
+ _filedir
+ return
+ ;;
+ --replace-src-path)
+ if [[ $cur == ?*:* ]]; then
+ cur="${cur##*:}"
+ _filedir
+ else
+ _filedir
+ compopt -o nospace
+ fi
+ return
+ ;;
+ --limits | -l)
+ if [[ $cur == ?*,* ]]; then
+ prev="${cur%,*}"
+ cur="${cur##*,}"
+ COMPREPLY=($(compgen -W "{0..100}" -- "$cur"))
+ ((${#COMPREPLY[@]} == 1)) &&
+ COMPREPLY=(${COMPREPLY/#/$prev,})
+ else
+ COMPREPLY=($(compgen -W "{0..100}" -- "$cur"))
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/%/,})
+ compopt -o nospace
+ fi
+ return
+ ;;
+ --title | -t | --include-pattern | --exclude-pattern | --path-strip-level)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _kcov kcov
+
+# ex: filetype=sh
diff --git a/completions/kill b/completions/kill
new file mode 100644
index 0000000..25cddba
--- /dev/null
+++ b/completions/kill
@@ -0,0 +1,29 @@
+# kill(1) completion -*- shell-script -*-
+
+_kill()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -s)
+ _signals
+ return
+ ;;
+ -l)
+ return
+ ;;
+ esac
+
+ if [[ $cword -eq 1 && $cur == -* ]]; then
+ # return list of available signals
+ _signals -
+ COMPREPLY+=($(compgen -W "-s -l" -- "$cur"))
+ else
+ # return list of available PIDs
+ _pids
+ fi
+} &&
+ complete -F _kill kill
+
+# ex: filetype=sh
diff --git a/completions/killall b/completions/killall
new file mode 100644
index 0000000..c7c0b0f
--- /dev/null
+++ b/completions/killall
@@ -0,0 +1,36 @@
+# killall(1) completion -*- shell-script -*-
+
+[[ $OSTYPE == *@(linux|freebsd|darwin)* ]] || return 1
+
+_killall()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --context | --older-than | --younger-than | --version | -!(-*)@([Zoy]|V*))
+ return
+ ;;
+ --signal | -!(-*)s)
+ _signals
+ return
+ ;;
+ --user | -!(-*)u)
+ _allowed_users
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ ((cword == 1)) && _signals -
+ return
+ fi
+
+ _pnames
+} &&
+ complete -F _killall killall
+
+# ex: filetype=sh
diff --git a/completions/kldload b/completions/kldload
new file mode 100644
index 0000000..f511158
--- /dev/null
+++ b/completions/kldload
@@ -0,0 +1,21 @@
+# FreeBSD kldload completion -*- shell-script -*-
+
+[[ $OSTYPE == *freebsd* ]] || return 1
+
+_kldload()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local moddir=/modules/
+ [[ -d $moddir ]] || moddir=/boot/kernel/
+
+ compopt -o filenames
+ COMPREPLY=($(compgen -f "$moddir$cur"))
+ COMPREPLY=(${COMPREPLY[@]#$moddir})
+ COMPREPLY=(${COMPREPLY[@]%.ko})
+
+} &&
+ complete -F _kldload kldload
+
+# ex: filetype=sh
diff --git a/completions/kldunload b/completions/kldunload
new file mode 100644
index 0000000..2e12282
--- /dev/null
+++ b/completions/kldunload
@@ -0,0 +1,15 @@
+# FreeBSD kldunload completion -*- shell-script -*-
+
+[[ $OSTYPE == *freebsd* ]] || return 1
+
+_kldunload()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ COMPREPLY=($(compgen -W '$(kldstat)' -X 'kernel' -X '!*.ko' -- "$cur"))
+ COMPREPLY=(${COMPREPLY[@]%.ko})
+} &&
+ complete -F _kldunload kldunload
+
+# ex: filetype=sh
diff --git a/completions/koji b/completions/koji
new file mode 100644
index 0000000..8efef9a
--- /dev/null
+++ b/completions/koji
@@ -0,0 +1,245 @@
+# koji completion -*- shell-script -*-
+
+_koji_search()
+{
+ COMPREPLY+=($(compgen -W \
+ '$("$1" -q search $2 "$cur*" 2>/dev/null)' -- "$cur"))
+}
+
+_koji_build()
+{
+ _koji_search "$1" build
+}
+
+_koji_package()
+{
+ _koji_search "$1" package
+}
+
+_koji_user()
+{
+ _koji_search "$1" user
+}
+
+_koji_tag()
+{
+ COMPREPLY+=($(compgen -W '$("$1" -q list-tags 2>/dev/null)' -- "$cur"))
+}
+
+_koji_target()
+{
+ COMPREPLY+=($(compgen -W '$("$1" -q list-targets 2>/dev/null |
+ awk "{ print \$1 }")' -- "$cur"))
+}
+
+_koji()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local commandix command
+ for ((commandix = 1; commandix < cword; commandix++)); do
+ if [[ ${words[commandix]} != -* ]]; then
+ command=${words[commandix]}
+ break
+ fi
+ done
+
+ case $prev in
+ --help | --help-commands | -!(-*)h*)
+ return
+ ;;
+ --config | --keytab | -!(-*)[co])
+ _filedir
+ return
+ ;;
+ --runas | --user | --editor | --by)
+ _koji_user "$1"
+ return
+ ;;
+ --authtype)
+ COMPREPLY=($(compgen -W 'noauth ssl password kerberos' -- "$cur"))
+ return
+ ;;
+ --topdir)
+ _filedir -d
+ return
+ ;;
+ --type)
+ case ${command-} in
+ latest-pkg | list-tagged)
+ COMPREPLY=($(compgen -W 'maven' -- "$cur"))
+ ;;
+ esac
+ return
+ ;;
+ --name)
+ case ${command-} in
+ list-targets)
+ _koji_target "$1"
+ ;;
+ esac
+ return
+ ;;
+ --owner)
+ _koji_user "$1"
+ return
+ ;;
+ --tag | --latestfrom)
+ _koji_tag "$1"
+ return
+ ;;
+ --package)
+ _koji_package "$1"
+ return
+ ;;
+ --build)
+ _koji_build "$1"
+ return
+ ;;
+ --build-target)
+ _koji_target "$1"
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ -v command ]]; then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W \
+ '$(_parse_help "$1" "$command --help")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ # How many'th non-option arg (1-based) for $command are we completing?
+ local i nth=1
+ for ((i = commandix + 1; i < cword; i++)); do
+ [[ ${words[i]} == -* ]] || ((nth++))
+ done
+
+ case $command in
+ build | maven-build | win-build)
+ case $nth in
+ 1)
+ _koji_target "$1"
+ ;;
+ 2)
+ _filedir src.rpm
+ ;;
+ esac
+ ;;
+ cancel)
+ _koji_build "$1"
+ ;;
+ chain-build)
+ case $nth in
+ 1)
+ _koji_target "$1"
+ ;;
+ esac
+ ;;
+ download-build)
+ case $nth in
+ 1)
+ _koji_build "$1"
+ ;;
+ esac
+ ;;
+ import-comps)
+ case $nth in
+ 1)
+ _filedir xml
+ ;;
+ 2)
+ _koji_tag "$1"
+ ;;
+ esac
+ ;;
+ latest-by-tag)
+ _koji_package "$1"
+ ;;
+ latest-pkg | list-groups | list-tag-inheritance | show-groups)
+ case $nth in
+ 1)
+ _koji_tag "$1"
+ ;;
+ esac
+ ;;
+ list-tagged)
+ case $nth in
+ 1)
+ _koji_tag "$1"
+ ;;
+ 2)
+ _koji_package "$1"
+ ;;
+ esac
+ ;;
+ list-untagged)
+ case $nth in
+ 1)
+ _koji_package "$1"
+ ;;
+ esac
+ ;;
+ move-pkg)
+ case $nth in
+ 1 | 2)
+ _koji_tag "$1"
+ ;;
+ *)
+ _koji_package "$1"
+ ;;
+ esac
+ ;;
+ search)
+ case $nth in
+ 1)
+ COMPREPLY=($(compgen -W 'package build tag target
+ user host rpm' -- "$cur"))
+ ;;
+ esac
+ ;;
+ tag-pkg | untag-pkg)
+ case $nth in
+ 1)
+ _koji_tag "$1"
+ ;;
+ *)
+ _koji_package "$1"
+ ;;
+ esac
+ ;;
+ taginfo)
+ _koji_tag "$1"
+ ;;
+ wait-repo)
+ case $nth in
+ 1)
+ for ((i = commandix + 1; i < cword; i++)); do
+ if [[ ${words[i]} == --target ]]; then
+ _koji_target "$1"
+ return
+ fi
+ done
+ _koji_tag "$1"
+ ;;
+ esac
+ ;;
+ esac
+ return
+ fi
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ elif [[ ! -v command ]]; then
+ COMPREPLY=($(compgen -W '$("$1" --help-commands 2>/dev/null | \
+ awk "/^( +|\t)/ { print \$1 }")' -- "$cur"))
+ fi
+} &&
+ complete -F _koji koji arm-koji ppc-koji s390-koji sparc-koji
+
+# ex: filetype=sh
diff --git a/completions/ktutil b/completions/ktutil
new file mode 100644
index 0000000..6030a47
--- /dev/null
+++ b/completions/ktutil
@@ -0,0 +1,120 @@
+# ktutil completion -*- shell-script -*-
+
+_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 words cword split
+ _init_completion -s || return
+
+ local command commands i options
+
+ case $prev in
+ -p | --principal)
+ _heimdal_principals
+ return
+ ;;
+ -e | --enctype)
+ _heimdal_encodings
+ return
+ ;;
+ -a | --admin-server)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -r | --realm)
+ _heimdal_realms
+ return
+ ;;
+ -s | -k | --srvtab | --keytab)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ commands='add change copy get list remove rename purge srvconvert
+ srv2keytab srvcreate key2srvtab'
+
+ for ((i = 1; i < cword; i++)); do
+ case ${words[i]} in
+ -k | --keytab)
+ ((i++))
+ ;;
+ -*) ;;
+
+ *)
+ command=${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
+
+# ex: filetype=sh
diff --git a/completions/larch b/completions/larch
new file mode 100644
index 0000000..7ed9ca2
--- /dev/null
+++ b/completions/larch
@@ -0,0 +1,39 @@
+# larch(1) completion -*- shell-script -*-
+# by Alex Shinn <foof@synthcode.com>
+
+_larch()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $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
+
+} &&
+ complete -F _larch -o default larch
+
+# ex: filetype=sh
diff --git a/completions/lastlog b/completions/lastlog
new file mode 100644
index 0000000..214a174
--- /dev/null
+++ b/completions/lastlog
@@ -0,0 +1,25 @@
+# lastlog(8) completion -*- shell-script -*-
+
+_lastlog()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --before | --help | --time | -!(-*)@([bt]|h*))
+ return
+ ;;
+ --user | -!(-*)u)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _lastlog lastlog
+
+# ex: filetype=sh
diff --git a/completions/ldapsearch b/completions/ldapsearch
new file mode 100644
index 0000000..6dc415e
--- /dev/null
+++ b/completions/ldapsearch
@@ -0,0 +1,231 @@
+# bash completion for openldap -*- shell-script -*-
+
+_ldap_uris()
+{
+ COMPREPLY=($(compgen -W 'ldap:// ldaps://' -- "$cur"))
+}
+
+_ldap_protocols()
+{
+ COMPREPLY=($(compgen -W '2 3' -- "$cur"))
+}
+
+_ldapsearch()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*H)
+ _ldap_uris
+ return
+ ;;
+ -*T)
+ _filedir -d
+ return
+ ;;
+ -*[fy])
+ _filedir
+ return
+ ;;
+ -*s)
+ COMPREPLY=($(compgen -W 'base one sub children' -- "$cur"))
+ return
+ ;;
+ -*a)
+ COMPREPLY=($(compgen -W 'never always search find' -- "$cur"))
+ return
+ ;;
+ -*P)
+ _ldap_protocols
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") -MM -ZZ' -- "$cur"))
+ fi
+} &&
+ complete -F _ldapsearch ldapsearch
+
+_ldapaddmodify()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*H)
+ _ldap_uris
+ return
+ ;;
+ -*[Sfy])
+ _filedir
+ return
+ ;;
+ -*P)
+ _ldap_protocols
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") -MM -ZZ' -- "$cur"))
+ fi
+} &&
+ complete -F _ldapaddmodify ldapadd ldapmodify
+
+_ldapdelete()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*H)
+ _ldap_uris
+ return
+ ;;
+ -*[fy])
+ _filedir
+ return
+ ;;
+ -*P)
+ _ldap_protocols
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") -MM -ZZ' -- "$cur"))
+ fi
+} &&
+ complete -F _ldapdelete ldapdelete
+
+_ldapcompare()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*H)
+ _ldap_uris
+ return
+ ;;
+ -*y)
+ _filedir
+ return
+ ;;
+ -*P)
+ _ldap_protocols
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") -MM -ZZ' -- "$cur"))
+ fi
+} &&
+ complete -F _ldapcompare ldapcompare
+
+_ldapmodrdn()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*H)
+ _ldap_uris
+ return
+ ;;
+ -*[fy])
+ _filedir
+ return
+ ;;
+ -*P)
+ _ldap_protocols
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") -ZZ -MM' -- "$cur"))
+ fi
+} &&
+ complete -F _ldapmodrdn ldapmodrdn
+
+_ldapwhoami()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*H)
+ _ldap_uris
+ return
+ ;;
+ -*[fy])
+ _filedir
+ return
+ ;;
+ -*P)
+ _ldap_protocols
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") -MM -ZZ' -- "$cur"))
+ fi
+} &&
+ complete -F _ldapwhoami ldapwhoami
+
+_ldappasswd()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*H)
+ _ldap_uris
+ return
+ ;;
+ -*[tTy])
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") -MM -ZZ' -- "$cur"))
+ fi
+} &&
+ complete -F _ldappasswd ldappasswd
+
+# ex: filetype=sh
diff --git a/completions/ldapvi b/completions/ldapvi
new file mode 100644
index 0000000..cb01ac8
--- /dev/null
+++ b/completions/ldapvi
@@ -0,0 +1,51 @@
+# bash completion for ldapvi -*- shell-script -*-
+
+_ldapvi()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --host | -!(-*)h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --sasl-mech | -!(-*)Y)
+ COMPREPLY=($(compgen -W 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5
+ PLAIN ANONYMOUS' -- "$cur"))
+ return
+ ;;
+ --bind)
+ COMPREPLY=($(compgen -W 'simple sasl' -- "$cur"))
+ return
+ ;;
+ --bind-dialog)
+ COMPREPLY=($(compgen -W 'never auto always' -- "$cur"))
+ return
+ ;;
+ --scope)
+ COMPREPLY=($(compgen -W 'base one sub' -- "$cur"))
+ return
+ ;;
+ --deref)
+ COMPREPLY=($(compgen -W 'never searching finding always' \
+ -- "$cur"))
+ return
+ ;;
+ --encoding)
+ COMPREPLY=($(compgen -W 'ASCII UTF-8 binary' -- "$cur"))
+ return
+ ;;
+ --tls)
+ COMPREPLY=($(compgen -W 'never allow try strict' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+} &&
+ complete -F _ldapvi ldapvi
+
+# ex: filetype=sh
diff --git a/completions/lftp b/completions/lftp
new file mode 100644
index 0000000..72dedb4
--- /dev/null
+++ b/completions/lftp
@@ -0,0 +1,28 @@
+# lftp(1) completion -*- shell-script -*-
+
+_lftp()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -!(-*)f)
+ _filedir
+ return
+ ;;
+ --help | --version | -!(-*)[chveups])
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -W '$("$1" -c "bookmark list" 2>/dev/null)' -- "$cur"))
+ _known_hosts_real -- "$cur"
+} &&
+ complete -F _lftp lftp
+
+# ex: filetype=sh
diff --git a/completions/lftpget b/completions/lftpget
new file mode 100644
index 0000000..d21622e
--- /dev/null
+++ b/completions/lftpget
@@ -0,0 +1,14 @@
+# lftpget(1) completion -*- shell-script -*-
+
+_lftpget()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-c -d -v' -- "$cur"))
+ fi
+} &&
+ complete -F _lftpget lftpget
+
+# ex: filetype=sh
diff --git a/completions/lilo b/completions/lilo
new file mode 100644
index 0000000..af8539a
--- /dev/null
+++ b/completions/lilo
@@ -0,0 +1,66 @@
+# bash completion for lilo(8) -*- shell-script -*-
+
+_lilo_labels()
+{
+ COMPREPLY=($(compgen -W "$(awk -F= '$1 ~ /^[ \t]*label$/ {print $2}' \
+ ${1:-/etc/lilo.conf} 2>/dev/null | command sed -e 's/\"//g')" \
+ -- "$cur"))
+}
+
+_lilo()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -C | -i | -m | -s | -S)
+ _filedir
+ return
+ ;;
+ -r)
+ _filedir -d
+ return
+ ;;
+ -I | -D | -R)
+ # label completion
+ local i conf
+ for i in "${!words[@]}"; do
+ if [[ ${words[i]} == -C ]]; then
+ conf=${words[i + 1]}
+ break
+ fi
+ done
+ _lilo_labels $conf
+ return
+ ;;
+ -A | -b | -M | -u | -U)
+ # device completion
+ cur=${cur:=/dev/}
+ _filedir
+ return
+ ;;
+ -T)
+ # topic completion
+ COMPREPLY=($(compgen -W 'help ChRul EBDA geom geom= table=
+ video' -- "$cur"))
+ return
+ ;;
+ -B)
+ _filedir bmp
+ return
+ ;;
+ -E)
+ _filedir '@(bmp|dat)'
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ # relevant options completion
+ COMPREPLY=($(compgen -W '-A -B -b -c -C -d -E -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
+
+# ex: filetype=sh
diff --git a/completions/links b/completions/links
new file mode 100644
index 0000000..e0c28e2
--- /dev/null
+++ b/completions/links
@@ -0,0 +1,100 @@
+# bash completion for links -*- shell-script -*-
+
+_links()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ case $prev in
+ -html-t-text-color | -html-t-link-color)
+ COMPREPLY=($(compgen -W '{0..15}' -- "$cur"))
+ return
+ ;;
+ -http.fake-firefox | -html-[gt]-ignore-document-color)
+ COMPREPLY=($(compgen -W '0 1' -- "$cur"))
+ return
+ ;;
+ --help | -help | -mode | -display | -source | -dump | -width | -max-connections | \
+ -max-connections-to-host | -retries | -receive-timeout | \
+ -unrestartable-receive-timeout | -*-size | -*-proxy | \
+ -append-text-to-dns-lookups | -ssl.client-cert-passwd | -http.fake-* | \
+ -http.extra-header | -ftp.anonymous-passwd | -*-color | -*-gamma | \
+ -bfu-aspect | -html-image-scale | -html-margin)
+ return
+ ;;
+ -lookup)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -driver)
+ local drivers=$("$1" -driver foo 2>&1 |
+ command sed -ne '$!d' -e '/^[a-z0-9, ]\{1,\}$/s/,/ /gp')
+ [[ $drivers ]] || drivers='x svgalib fb directfb pmshell atheos'
+ COMPREPLY=($(compgen -W "$drivers" -- "$cur"))
+ return
+ ;;
+ -codepage | -bookmarks-codepage | -http-assume-codepage)
+ _xfunc iconv _iconv_charsets
+ return
+ ;;
+ -download-dir)
+ _filedir -d
+ return
+ ;;
+ -bind-address)
+ _ip_addresses
+ return
+ ;;
+ -bind-address-ipv6)
+ _ip_addresses -6
+ __ltrim_colon_completions "$cur"
+ return
+ ;;
+ -async-dns | -download-utime | -aggressive-cache | -only-proxies | \
+ -http-bugs.* | -http.do-not-track | -ftp.use-* | -ftp.fast | -ftp.set-iptos | \
+ -smb.allow-hyperlinks-to-smb | -save-url-history | -dither-letters | \
+ -dither-images | -overwrite-instead-of-scroll | -html-*)
+ COMPREPLY=($(compgen -W '0 1' -- "$cur"))
+ return
+ ;;
+ -address-preference | -http.referer)
+ COMPREPLY=($(compgen -W '{0..4}' -- "$cur"))
+ return
+ ;;
+ -ssl-certificates | -display-optimize | -gamma-correction)
+ COMPREPLY=($(compgen -W '{0..2}' -- "$cur"))
+ return
+ ;;
+ -ssl.client-cert-key)
+ _filedir '@(key|pem)'
+ return
+ ;;
+ -ssl.client-cert-crt)
+ _filedir '@(c?(e)rt|cer|pem|der)'
+ return
+ ;;
+ -bookmarks-file)
+ _filedir html
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" |
+ command grep -vF -- "->")' -- "$cur"))
+ return
+ fi
+
+ local dir
+ for dir in .links .links2; do
+ if [[ -r ~/$dir/links.his ]]; then
+ COMPREPLY+=($(compgen -W '$(cat ~/$dir/links.his)' -- "$cur"))
+ __ltrim_colon_completions "$cur"
+ fi
+ done
+ _filedir '@(htm|html)'
+
+} &&
+ complete -F _links links links2
+
+# ex: filetype=sh
diff --git a/completions/lintian b/completions/lintian
new file mode 100644
index 0000000..9343832
--- /dev/null
+++ b/completions/lintian
@@ -0,0 +1,176 @@
+# bash completion for lintian(1) and lintian-info(1) -*- shell-script -*-
+
+_lintian_tags()
+{
+ local match search tags
+
+ tags=$(awk '/^Tag/ { print $2 }' /usr/share/lintian/checks/*.desc)
+ if [[ $cur == *, ]]; then
+ search=${cur//,/ }
+ for item in $search; do
+ match=$(command grep -nE "^Tag: $item$" \
+ /usr/share/lintian/checks/*.desc | cut -d: -f1)
+ tags=$(command sed -e "s/\<$item\>//g" <<<$tags)
+ done
+ COMPREPLY+=($(compgen -W "$tags"))
+ elif [[ $cur == *,* ]]; then
+ COMPREPLY+=($(compgen -P "${cur%,*}," -W "$tags" -- "${cur##*,}"))
+ else
+ COMPREPLY+=($(compgen -W "$tags" -- "$cur"))
+ fi
+}
+
+_lintian_checks()
+{
+ local match search todisable checks
+
+ checks=$(awk '/^(Check-Script|Abbrev)/ { print $2 }' \
+ /usr/share/lintian/checks/*.desc)
+ if [[ $cur == *, ]]; then
+ search=${cur//,/ }
+ for item in $search; do
+ match=$(command grep -nE "^(Check-Script|Abbrev): $item$" \
+ /usr/share/lintian/checks/*.desc | cut -d: -f1)
+ todisable=$(awk '/^(Check-Script|Abbrev)/ { print $2 }' $match)
+ for name in $todisable; do
+ checks=$(command sed -e "s/\<$name\>//g" <<<$checks)
+ done
+ done
+ COMPREPLY+=($(compgen -W "$checks"))
+ elif [[ $cur == *,* ]]; then
+ COMPREPLY+=($(compgen -P "${cur%,*}," -W "$checks" -- "${cur##*,}"))
+ else
+ COMPREPLY+=($(compgen -W "$checks" -- "$cur"))
+ fi
+}
+
+_lintian_infos()
+{
+ local match search infos
+
+ infos=$(awk '/^Collector/ { print $2 }' \
+ /usr/share/lintian/collection/*.desc)
+ if [[ $cur == *, ]]; then
+ search=${cur//,/ }
+ for item in $search; do
+ match=$(command grep -nE "^Collector: $item$" \
+ /usr/share/lintian/collection/*.desc | cut -d: -f1)
+ infos=$(command sed -e "s/\<$item\>//g" <<<$infos)
+ done
+ COMPREPLY+=($(compgen -W "$infos"))
+ elif [[ $cur == *,* ]]; then
+ COMPREPLY+=($(compgen -P "${cur%,*}," -W "$infos" -- "${cur##*,}"))
+ else
+ COMPREPLY+=($(compgen -W "$infos" -- "$cur"))
+ fi
+}
+
+_lintian()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local lint_actions general_opts behaviour_opts configuration_opts
+
+ lint_actions="--setup-lab --remove-lab --check --check-part --tags
+ --tags-from-file --ftp-master-rejects --dont-check-part --unpack
+ --remove"
+ general_opts="--help --version --print-version --verbose --debug --quiet"
+ behaviour_opts="--info --display-info --display-experimental --pedantic
+ --display-level --suppress-tags --suppress-tags-from-file --no-override
+ --show-overrides --color --unpack-info --md5sums --checksums
+ --allow-root --fail-on-warnings --keep-lab"
+ configuration_opts="--cfg --lab --archivedir --dist --area --section --arch
+ --root"
+
+ if [[ $prev == -* ]]; then
+ case $prev in
+ -C | --check-part | -X | --dont-check-part)
+ _lintian_checks
+ ;;
+ -T | --tags | --suppress-tags)
+ _lintian_tags
+ ;;
+ --tags-from-file | --suppress-tags-from-file | --cfg | -p | \
+ --packages-file)
+ _filedir
+ ;;
+ --lab | --archivedir | --dist | --root)
+ _filedir -d
+ ;;
+ --color)
+ COMPREPLY=($(compgen -W "never always auto html" -- "$cur"))
+ ;;
+ -U | --unpack-info)
+ _lintian_infos
+ ;;
+ --area | --section)
+ COMPREPLY=($(compgen -W "main contrib non-free" -- "$cur"))
+ ;;
+ --arch) ;;
+
+ esac
+ fi
+
+ case "$cur" in
+ --*)
+ COMPREPLY=($(compgen -W "$lint_actions $general_opts
+ $behaviour_opts $configuration_opts" -- "$cur"))
+ ;;
+ *,)
+ # If we're here, the user is trying to complete on
+ # --action tag,tag,<TAB>
+ # Only few actions permit that, re-complete them now.
+ case "$prev" in
+ -C | --check-part | -X | --dont-check-part)
+ _lintian_checks
+ ;;
+ -T | --tags | --suppress-tags)
+ _lintian_tags
+ ;;
+ -U | --unpack-info)
+ _lintian_infos
+ ;;
+ esac
+ ;;
+ *)
+ # in Ubuntu, dbgsym packages end in .ddeb, lintian >= 2.57.0 groks
+ _filedir '@(?(u|d)deb|changes|dsc|buildinfo)'
+ ;;
+ esac
+ return 0
+} &&
+ complete -F _lintian lintian
+
+_lintian_info()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ --help | --profile)
+ return
+ ;;
+ -t | --tags)
+ _lintian_tags
+ return
+ ;;
+ --include-dir)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ case "$cur" in
+ --*)
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ ;;
+ *)
+ _filedir
+ ;;
+ esac
+ return 0
+} &&
+ complete -F _lintian_info lintian-info
+
+# ex: filetype=sh
diff --git a/completions/lisp b/completions/lisp
new file mode 100644
index 0000000..098567b
--- /dev/null
+++ b/completions/lisp
@@ -0,0 +1,22 @@
+# -*- shell-script -*-
+# bash programmable completion for various Common Lisp implementations by
+# Nikodemus Siivola <nikodemus@random-state.net>
+
+_lisp()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # 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
+
+} &&
+ complete -F _lisp -o default lisp
+
+# ex: filetype=sh
diff --git a/completions/list_admins b/completions/list_admins
new file mode 100644
index 0000000..5708179
--- /dev/null
+++ b/completions/list_admins
@@ -0,0 +1,17 @@
+# mailman list_admins completion -*- shell-script -*-
+
+_list_admins()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--all-vhost --all --help' -- "$cur"))
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+
+} &&
+ complete -F _list_admins list_admins
+
+# ex: filetype=sh
diff --git a/completions/list_lists b/completions/list_lists
new file mode 100644
index 0000000..c5b9ba7
--- /dev/null
+++ b/completions/list_lists
@@ -0,0 +1,21 @@
+# mailman list_lists completion -*- shell-script -*-
+
+_mailman_lists()
+{
+ COMPREPLY=($(compgen -W '$(list_lists -b 2>/dev/null)' -- "$cur"))
+}
+
+_list_lists()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--advertised --virtual-host-overview --bare
+ --help' -- "$cur"))
+ fi
+
+} &&
+ complete -F _list_lists list_lists
+
+# ex: filetype=sh
diff --git a/completions/list_members b/completions/list_members
new file mode 100644
index 0000000..639344c
--- /dev/null
+++ b/completions/list_members
@@ -0,0 +1,36 @@
+# mailman list_members completion -*- shell-script -*-
+
+_list_members()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -o | --output)
+ _filedir
+ return
+ ;;
+ -d | --digest)
+ COMPREPLY=($(compgen -W 'mime plain' -- "$cur"))
+ return
+ ;;
+ -n | --nomail)
+ COMPREPLY=($(compgen -W 'byadmin byuser bybounce unknown' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--output --regular --digest --nomail
+ --fullnames --preserve --help' -- "$cur"))
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+
+} &&
+ complete -F _list_members list_members
+
+# ex: filetype=sh
diff --git a/completions/list_owners b/completions/list_owners
new file mode 100644
index 0000000..445be0b
--- /dev/null
+++ b/completions/list_owners
@@ -0,0 +1,18 @@
+# mailman list_owners completion -*- shell-script -*-
+
+_list_owners()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--with-listnames --moderators --help' \
+ -- "$cur"))
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+
+} &&
+ complete -F _list_owners list_owners
+
+# ex: filetype=sh
diff --git a/completions/locale-gen b/completions/locale-gen
new file mode 100644
index 0000000..4068201
--- /dev/null
+++ b/completions/locale-gen
@@ -0,0 +1,32 @@
+# locale-gen(8) completion -*- shell-script -*-
+
+_locale_gen()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | -h)
+ return
+ ;;
+ --aliases)
+ _filedir alias
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ COMPREPLY=($(compgen -W \
+ '$(awk "{ print \$1 }" /usr/share/i18n/SUPPORTED 2>/dev/null)' \
+ -- "$cur"))
+} &&
+ complete -F _locale_gen locale-gen
+
+# ex: filetype=sh
diff --git a/completions/lpq b/completions/lpq
new file mode 100644
index 0000000..36729d2
--- /dev/null
+++ b/completions/lpq
@@ -0,0 +1,28 @@
+# lpq(1) completion -*- shell-script -*-
+
+_lpq()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -P)
+ COMPREPLY=($(compgen -W "$(lpstat -a 2>/dev/null | cut -d' ' -f1)" -- "$cur"))
+ return
+ ;;
+ -U)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == - ]]; then
+ COMPREPLY=($(compgen -W '-E -P -U -a -h -l' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _lpq lpq
+
+# ex: filetype=sh
diff --git a/completions/lpr b/completions/lpr
new file mode 100644
index 0000000..554f053
--- /dev/null
+++ b/completions/lpr
@@ -0,0 +1,33 @@
+# lpr(1) completion -*- shell-script -*-
+
+_lpr()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -P)
+ COMPREPLY=($(compgen -W "$(lpstat -a 2>/dev/null | cut -d' ' -f1)" -- "$cur"))
+ return
+ ;;
+ -U)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ -o)
+ COMPREPLY=($(compgen -W "media= landscape orientation-requested= sides= fitplot number-up= scaling= cpi= lpi= page-bottom= page-top= page-left= page-right=" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ ;;
+ esac
+
+ if [[ $cur == - ]]; then
+ COMPREPLY=($(compgen -W '-E -H -C -J -T -P -U -h -l -m -o -p -q -r' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _lpr lpr
+
+# ex: filetype=sh
diff --git a/completions/lrzip b/completions/lrzip
new file mode 100644
index 0000000..eb2904c
--- /dev/null
+++ b/completions/lrzip
@@ -0,0 +1,52 @@
+# lrzip(1) completion -*- shell-script -*-
+
+_lrzip()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local xspec="*.lrz"
+
+ case $prev in
+ -*@([wSm]|[Vh?]*))
+ return
+ ;;
+ -*d)
+ xspec="!"$xspec
+ ;;
+ -*o)
+ _filedir
+ return
+ ;;
+ -*O)
+ _filedir -d
+ return
+ ;;
+ -*L)
+ COMPREPLY=($(compgen -W '{1..9}' -- "$cur"))
+ return
+ ;;
+ -*N)
+ COMPREPLY=($(compgen -W '{-20..19}' -- "$cur"))
+ return
+ ;;
+ -*p)
+ COMPREPLY=($(compgen -W "{1..$(_ncpus)}" -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _tilde "$cur" || return
+
+ local IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -X "$xspec" -- "$cur") $(compgen -d -- "$cur"))
+} &&
+ complete -F _lrzip lrzip
+
+# ex: filetype=sh
diff --git a/completions/lsof b/completions/lsof
new file mode 100644
index 0000000..eb1e967
--- /dev/null
+++ b/completions/lsof
@@ -0,0 +1,56 @@
+# lsof(8) completion -*- shell-script -*-
+
+_lsof()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -'?' | -h | +c | -c | -d | -F | -i | +r | -r | -s | -S | -T)
+ return
+ ;;
+ -A | -k | -m | +m | -o)
+ _filedir
+ return
+ ;;
+ +d | +D)
+ _filedir -d
+ return
+ ;;
+ -D)
+ COMPREPLY=($(compgen -W '? b i r u' -- "$cur"))
+ return
+ ;;
+ -f)
+ COMPREPLY=($(compgen -W 'c f g G n' -- "$cur"))
+ return
+ ;;
+ -g)
+ # TODO: handle ^foo exclusions, comma separated lists
+ _pgids
+ return
+ ;;
+ -p)
+ # TODO: handle ^foo exclusions, comma separated lists
+ _pids
+ return
+ ;;
+ -u)
+ # TODO: handle ^foo exclusions, comma separated lists
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == [-+]* ]]; then
+ COMPREPLY=($(compgen -W '-h -a -A -b -c +c -C +d -d +D -D +f -f -F -g
+ -i -k -l +L -L +m -m +M -M -n -N -o -O -p -P +r -r -R -s -S -T -t
+ -u -U -v -V +w -w -x -X -z -Z' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _lsof lsof
+
+# ex: filetype=sh
diff --git a/completions/lspci b/completions/lspci
new file mode 100644
index 0000000..d50783c
--- /dev/null
+++ b/completions/lspci
@@ -0,0 +1,41 @@
+# lspci(8) completion -*- shell-script -*-
+
+_lspci()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*[sDO])
+ return
+ ;;
+ -*i)
+ _filedir ids
+ return
+ ;;
+ -*p)
+ _filedir pcimap
+ return
+ ;;
+ -*A)
+ COMPREPLY+=($(compgen -W '$($1 -A help | command grep -vF :)' \
+ -- "$cur"))
+ return
+ ;;
+ -*H)
+ COMPREPLY+=($(compgen -W "1 2" -- "$cur"))
+ return
+ ;;
+ -*F)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+} &&
+ complete -F _lspci lspci
+
+# ex: filetype=sh
diff --git a/completions/lsscsi b/completions/lsscsi
new file mode 100644
index 0000000..bcbc430
--- /dev/null
+++ b/completions/lsscsi
@@ -0,0 +1,27 @@
+# lsscsi(8) completion -*- shell-script -*-
+
+_lsscsi()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | -!(-*)[hV]*)
+ return
+ ;;
+ --sysfsroot | -!(-*)y)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _lsscsi lsscsi
+
+# ex: filetype=sh
diff --git a/completions/lsusb b/completions/lsusb
new file mode 100644
index 0000000..63cff54
--- /dev/null
+++ b/completions/lsusb
@@ -0,0 +1,20 @@
+# lsusb(8) completion -*- shell-script -*-
+
+_lsusb()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | -!(-*)@([sD]|[hV]*))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+} &&
+ complete -F _lsusb lsusb
+
+# ex: filetype=sh
diff --git a/completions/lua b/completions/lua
new file mode 100644
index 0000000..3c4df90
--- /dev/null
+++ b/completions/lua
@@ -0,0 +1,23 @@
+# lua(1) completion -*- shell-script -*-
+
+_lua()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -e | -l | -v | -)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$(_parse_help "$1")" -- "$cur"))
+ return
+ fi
+
+ _filedir 'l@(ua|?(ua)c)'
+} &&
+ complete -F _lua lua
+
+# ex: filetype=sh
diff --git a/completions/luac b/completions/luac
new file mode 100644
index 0000000..c763deb
--- /dev/null
+++ b/completions/luac
@@ -0,0 +1,27 @@
+# luac(1) completion -*- shell-script -*-
+
+_luac()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -v | -)
+ return
+ ;;
+ -o)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$(_parse_help "$1")" -- "$cur"))
+ return
+ fi
+
+ _filedir lua
+} &&
+ complete -F _luac luac
+
+# ex: filetype=sh
diff --git a/completions/luseradd b/completions/luseradd
new file mode 100644
index 0000000..4d66385
--- /dev/null
+++ b/completions/luseradd
@@ -0,0 +1,40 @@
+# luseradd(1) and lusermod(1) completion -*- shell-script -*-
+
+_luseradd()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --usage | --gecos | --uid | --login | --plainpassword | --password | \
+ --commonname | --givenname | --surname | --roomnumber | --telephonenumber | \
+ --homephone | -!(-*)@([culPp]|[?]*))
+ return
+ ;;
+ --directory | --skeleton | -!(-*)[dk])
+ _filedir -d
+ return
+ ;;
+ --shell | -!(-*)s)
+ _shells
+ return
+ ;;
+ --gid | -!(-*)g)
+ _gids
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ [[ ${1##*/} == luseradd ]] || COMPREPLY=($(compgen -u -- "$cur"))
+} &&
+ complete -F _luseradd luseradd lusermod
+
+# ex: filetype=sh
diff --git a/completions/luserdel b/completions/luserdel
new file mode 100644
index 0000000..e36bda9
--- /dev/null
+++ b/completions/luserdel
@@ -0,0 +1,23 @@
+# luserdel(1) completion -*- shell-script -*-
+
+_luserdel()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --usage | -!(-*)[?]*)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -u -- "$cur"))
+} &&
+ complete -F _luserdel luserdel
+
+# ex: filetype=sh
diff --git a/completions/lvm b/completions/lvm
new file mode 100644
index 0000000..e70ecc3
--- /dev/null
+++ b/completions/lvm
@@ -0,0 +1,861 @@
+# bash completion for lvm -*- shell-script -*-
+
+_lvm_filedir()
+{
+ cur=${cur:-/dev/}
+ _filedir
+}
+
+_lvm_volumegroups()
+{
+ COMPREPLY=($(compgen -W "$(vgscan 2>/dev/null |
+ command sed -n -e 's|.*Found.*"\(.*\)".*$|\1|p')" -- "$cur"))
+}
+
+_lvm_physicalvolumes_all()
+{
+ COMPREPLY=($(compgen -W "$(pvscan 2>/dev/null |
+ command sed -n -e 's|^.*PV \([^ ]*\) .*|\1|p')" -- "$cur"))
+}
+
+_lvm_physicalvolumes()
+{
+ COMPREPLY=($(compgen -W "$(pvscan 2>/dev/null |
+ command sed -n -e 's|^.*PV \(.*\) VG.*$|\1|p')" -- "$cur"))
+}
+
+_lvm_logicalvolumes()
+{
+ COMPREPLY=($(compgen -W "$(lvscan 2>/dev/null |
+ command sed -n -e "s|^.*'\(.*\)'.*$|\1|p")" -- "$cur"))
+ if [[ $cur == /dev/mapper/* ]]; then
+ _filedir
+ local i
+ for i in "${!COMPREPLY[@]}"; do
+ [[ ${COMPREPLY[i]} == */control ]] && unset 'COMPREPLY[i]'
+ done
+ fi
+}
+
+_lvm_units()
+{
+ COMPREPLY=($(compgen -W 'h s b k m g t H K M G T' -- "$cur"))
+}
+
+_lvm_sizes()
+{
+ COMPREPLY=($(compgen -W 'k K m M g G t T' -- "$cur"))
+}
+
+# @param $1 glob matching args known to take an argument
+_lvm_count_args()
+{
+ args=0
+ local offset=1
+ if [[ ${words[0]} == lvm ]]; then
+ offset=2
+ fi
+ local i prev=${words[offset - 1]}
+ for ((i = offset; i < cword; i++)); do
+ # shellcheck disable=SC2053
+ if [[ ${words[i]} != -* && $prev != $1 ]]; then
+ ((args++))
+ fi
+ prev=${words[i]}
+ done
+}
+
+_lvmdiskscan()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ fi
+} &&
+ complete -F _lvmdiskscan lvmdiskscan
+
+_pvscan()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ fi
+} &&
+ complete -F _pvscan pvscan
+
+_pvs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --options | --sort | -!(-*)[oO])
+ 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
+ ;;
+ --units)
+ _lvm_units
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_physicalvolumes_all
+ fi
+} &&
+ complete -F _pvs pvs
+
+_pvdisplay()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --units)
+ _lvm_units
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_physicalvolumes_all
+ fi
+} &&
+ complete -F _pvdisplay pvdisplay
+
+_pvchange()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | --allocatable | -!(-*)[Ax])
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_physicalvolumes_all
+ fi
+} &&
+ complete -F _pvchange pvchange
+
+_pvcreate()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --restorefile)
+ _filedir
+ return
+ ;;
+ --metadatatype | -!(-*)M)
+ COMPREPLY=($(compgen -W '1 2' -- "$cur"))
+ return
+ ;;
+ --metadatacopies)
+ COMPREPLY=($(compgen -W '0 1 2' -- "$cur"))
+ return
+ ;;
+ --metadatasize | --setphysicalvolumesize)
+ _lvm_sizes
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_filedir
+ fi
+} &&
+ complete -F _pvcreate pvcreate
+
+_pvmove()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --name | -!(-*)n)
+ _lvm_logicalvolumes
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_physicalvolumes
+ fi
+} &&
+ complete -F _pvmove pvmove
+
+_pvremove()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_physicalvolumes_all
+ fi
+} &&
+ complete -F _pvremove pvremove
+
+_vgscan()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ fi
+} &&
+ complete -F _vgscan vgscan
+
+_vgs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --options | --sort | -!(-*)[oO])
+ 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
+ ;;
+ --units)
+ _lvm_units
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgs vgs
+
+_vgdisplay()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --units)
+ _lvm_units
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgdisplay vgdisplay
+
+_vgchange()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --available | --autobackup | --resizeable | -!(-*)[aAx])
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgchange vgchange
+
+_vgcreate()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --metadatatype | -!(-*)M)
+ COMPREPLY=($(compgen -W '1 2' -- "$cur"))
+ return
+ ;;
+ --physicalextentsize | -!(-*)s)
+ _lvm_sizes
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ local args
+ _lvm_count_args '@(-A|--autobackup|-M|--metadatatype|-s|--physicalextentsize)'
+ if ((args == 0)); then
+ _lvm_volumegroups
+ else
+ _lvm_physicalvolumes_all
+ fi
+ fi
+} &&
+ complete -F _vgcreate vgcreate
+
+_vgremove()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgremove vgremove
+
+_vgrename()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgrename vgrename
+
+_vgreduce()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+
+ else
+ local args
+ _lvm_count_args '@(-A|--autobackup)'
+ if ((args == 0)); then
+ _lvm_volumegroups
+ else
+ _lvm_physicalvolumes
+ fi
+ fi
+} &&
+ complete -F _vgreduce vgreduce
+
+_vgextend()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --size | -!(-*)L)
+ _lvm_sizes
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ local args
+ _lvm_count_args '@(-A|--autobackup|-L|--size)'
+ if ((args == 0)); then
+ _lvm_volumegroups
+ else
+ _lvm_physicalvolumes_all
+ fi
+ fi
+} &&
+ complete -F _vgextend vgextend
+
+_vgport()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgport vgimport vgexport
+
+_vgck()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgck vgck
+
+_vgconvert()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --metadatatype | -!(-*)M)
+ COMPREPLY=($(compgen -W '1 2' -- "$cur"))
+ return
+ ;;
+ --metadatacopies)
+ COMPREPLY=($(compgen -W '0 1 2' -- "$cur"))
+ return
+ ;;
+ --metadatasize)
+ _lvm_sizes
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgconvert vgconvert
+
+_vgcfgbackup()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --file | -!(-*)f)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgcfgbackup vgcfgbackup
+
+_vgcfgrestore()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --file | -!(-*)f)
+ _filedir
+ return
+ ;;
+ --metadatatype | -!(-*)M)
+ COMPREPLY=($(compgen -W '1 2' -- "$cur"))
+ return
+ ;;
+ --name | -!(-*)n)
+ _lvm_volumegroups
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgcfgrestore vgcfgrestore
+
+_vgmerge()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgmerge vgmerge
+
+_vgsplit()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --metadatatype | -!(-*)M)
+ COMPREPLY=($(compgen -W '1 2' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ local args
+ _lvm_count_args '@(-A|--autobackup|-M|--metadatatype)'
+ if ((args == 0 || args == 1)); then
+ _lvm_volumegroups
+ else
+ _lvm_physicalvolumes
+ fi
+ fi
+} &&
+ complete -F _vgsplit vgsplit
+
+_vgmknodes()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_volumegroups
+ fi
+} &&
+ complete -F _vgmknodes vgmknodes
+
+_lvscan()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ fi
+} &&
+ complete -F _lvscan lvscan
+
+_lvs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --options | --sort | -!(-*)[oO])
+ 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
+ ;;
+ --units)
+ _lvm_units
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_logicalvolumes
+ fi
+} &&
+ complete -F _lvs lvs
+
+_lvdisplay()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --units)
+ _lvm_units
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_logicalvolumes
+ fi
+} &&
+ complete -F _lvdisplay lvdisplay
+
+_lvchange()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --available | --autobackup | --contiguous | --persistent | -!(-*)[aACM])
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --permission | -!(-*)p)
+ COMPREPLY=($(compgen -W 'r rw' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_logicalvolumes
+ fi
+} &&
+ complete -F _lvchange lvchange
+
+_lvcreate()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | --contiguous | --persistent | --zero | -!(-*)[ACMZ])
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --size | -!(-*)L)
+ _lvm_sizes
+ return
+ ;;
+ --permission | -!(-*)p)
+ COMPREPLY=($(compgen -W 'r rw' -- "$cur"))
+ return
+ ;;
+ --name | -!(-*)n)
+ _lvm_logicalvolumes
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ local args
+ _lvm_count_args '@(-A|-C|-M|-Z|--autobackup|--contiguous|--persistent|--zero|-L|--size|-p|--permission|-n|--name)'
+ if ((args == 0)); then
+ _lvm_volumegroups
+ else
+ _lvm_physicalvolumes
+ fi
+ fi
+} &&
+ complete -F _lvcreate lvcreate
+
+_lvremove()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_logicalvolumes
+ fi
+} &&
+ complete -F _lvremove lvremove
+
+_lvrename()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_logicalvolumes
+ fi
+} &&
+ complete -F _lvrename lvrename
+
+_lvreduce()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --size | -!(-*)L)
+ _lvm_sizes
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _lvm_logicalvolumes
+ fi
+} &&
+ complete -F _lvreduce lvreduce
+
+_lvresize()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --size | -!(-*)L)
+ _lvm_sizes
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ local args
+ _lvm_count_args '@(-A|--autobackup|-L|--size)'
+ if ((args == 0)); then
+ _lvm_logicalvolumes
+ else
+ _lvm_physicalvolumes
+ fi
+ fi
+} &&
+ complete -F _lvresize lvresize
+
+_lvextend()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --autobackup | -!(-*)A)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --size | -!(-*)L)
+ _lvm_sizes
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ local args
+ _lvm_count_args '@(-A|--autobackup|-L|--size)'
+ if ((args == 0)); then
+ _lvm_logicalvolumes
+ else
+ _lvm_physicalvolumes
+ fi
+ fi
+} &&
+ complete -F _lvextend lvextend
+
+_lvm()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 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 "${words[1]}" in
+ pvchange | pvcreate | pvdisplay | pvmove | pvremove | pvresize | pvs | pvscan | \
+ vgcfgbackup | vgcfgrestore | vgchange | vgck | vgconvert | vgcreate | \
+ vgdisplay | vgexport | vgextend | vgimport | vgmerge | vgmknodes | vgreduce | \
+ vgremove | vgrename | vgs | vgscan | vgsplit | lvchange | lvcreate | lvdisplay | \
+ lvextend | lvreduce | lvremove | lvrename | lvresize | lvscan)
+ _${words[1]}
+ ;;
+ esac
+ fi
+} &&
+ complete -F _lvm lvm
+
+# ex: filetype=sh
diff --git a/completions/lz4 b/completions/lz4
new file mode 100644
index 0000000..f297b5d
--- /dev/null
+++ b/completions/lz4
@@ -0,0 +1,52 @@
+# lz4 completion -*- shell-script -*-
+
+_lz4()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -b)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -X '-*#*' -W \
+ '$(_parse_help "$1" -h) -B{4..7} -i{1..9}' -- "$cur"))
+ return
+ fi
+
+ local args word xspec="*.?(t)lz4"
+ _count_args
+ ((args > 2)) && return
+
+ for word in "${words[@]}"; do
+ case $word in
+ -*[dt]*)
+ case $args in
+ 1) xspec="!"$xspec ;;
+ 2) [[ $word == *t* ]] && return ;;
+ esac
+ break
+ ;;
+ -z)
+ case $args in
+ 1) xspec= ;;
+ 2) xspec="!"$xspec ;;
+ esac
+ break
+ ;;
+ esac
+ done
+
+ _tilde "$cur" || return
+
+ local IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -X "$xspec" -- "$cur") $(compgen -d -- "$cur"))
+} &&
+ complete -F _lz4 lz4 lz4c
+
+# ex: filetype=sh
diff --git a/completions/lzip b/completions/lzip
new file mode 100644
index 0000000..05f169c
--- /dev/null
+++ b/completions/lzip
@@ -0,0 +1,47 @@
+# lzip(1) completion -*- shell-script -*-
+
+_lzip()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local decompress=false
+
+ case $prev in
+ --help | --version | --member-size | --match-length | --dictionary-size | \
+ --volume-size | --data-size | -!(-*)@([bmsSB]|[hV]*))
+ return
+ ;;
+ --decompress-!(-*)d)
+ decompress=true
+ ;;
+ --threads-!(-*)n)
+ COMPREPLY=($(compgen -W "{1..$(_ncpus)}" -- "$cur"))
+ return
+ ;;
+ --output-!(-*)o)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") {-1..-9}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ if $decompress; then
+ _filedir lz
+ return
+ fi
+
+ local IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -X "*.lz" -- "$cur") $(compgen -d -- "$cur"))
+} &&
+ complete -F _lzip clzip lzip pdlzip plzip
+
+# ex: filetype=sh
diff --git a/completions/lzma b/completions/lzma
new file mode 100644
index 0000000..34fba89
--- /dev/null
+++ b/completions/lzma
@@ -0,0 +1,34 @@
+# lzma(1) completion -*- shell-script -*-
+# by Per Øyvind Karlsen <peroyvind@mandriva.org>
+
+_lzma()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") -{1..9}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ local IFS=$'\n' xspec="*.@(lzma|tlz)"
+
+ if [[ $prev == --* ]]; then
+ [[ $prev == --@(decompress|list|test) ]] && xspec="!"$xspec
+ [[ $prev == --compress ]] && xspec=
+ elif [[ $prev == -* ]]; then
+ [[ $prev == -*[dt]* ]] && xspec="!"$xspec
+ [[ $prev == -*z* ]] && xspec=
+ fi
+
+ _tilde "$cur" || return
+
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -X "$xspec" -- "$cur") $(compgen -d -- "$cur"))
+} &&
+ complete -F _lzma lzma
+
+# ex: filetype=sh
diff --git a/completions/lzop b/completions/lzop
new file mode 100644
index 0000000..2642742
--- /dev/null
+++ b/completions/lzop
@@ -0,0 +1,59 @@
+# lzop(1) completion -*- shell-script -*-
+
+_lzop()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --output | -!(-*)o)
+ _filedir
+ return
+ ;;
+ --path)
+ _filedir -d
+ return
+ ;;
+ --suffix | -!(-*)S)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-1 -2 -3 -4 -5 -6 -7 -8 -9 -P
+ --fast --best --decompress --extract --test --list --ls --info
+ --sysinfo --license --help --version --stdout --output --path
+ --force --no-checksum --no-name --name --no-mode --no-time --suffix
+ --keep --delete --crc32 --no-warn --ignore-warn --quiet --verbose
+ --no-stdin --filter --checksum --no-color --mono --color' \
+ -- "$cur"))
+ return
+ fi
+
+ local xspec="*.?(t)lzo"
+ case $prev in
+ --decompress | --uncompress | --extract | --list | --ls | --info | --test)
+ xspec="!"$xspec
+ ;;
+ --force)
+ xspec=
+ ;;
+ --*) ;;
+
+ -*f*)
+ xspec=
+ ;;
+ -*[dltx]*)
+ xspec="!"$xspec
+ ;;
+ esac
+
+ _tilde "$cur" || return
+
+ local IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -X "$xspec" -- "$cur") $(compgen -d -- "$cur"))
+} &&
+ complete -F _lzop lzop
+
+# ex: filetype=sh
diff --git a/completions/macof b/completions/macof
new file mode 100644
index 0000000..ad29f58
--- /dev/null
+++ b/completions/macof
@@ -0,0 +1,22 @@
+# macof completion -*- shell-script -*-
+
+_macof()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -i)
+ _available_interfaces -a
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ fi
+
+} &&
+ complete -F _macof macof
+
+# ex: filetype=sh
diff --git a/completions/mailmanctl b/completions/mailmanctl
new file mode 100644
index 0000000..3bbc2f2
--- /dev/null
+++ b/completions/mailmanctl
@@ -0,0 +1,18 @@
+# mailmanctl completion -*- shell-script -*-
+
+_mailmanctl()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--no-restart --run-as-user
+ --stale-lock-cleanup --quiet --help' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'start stop restart reopen' -- "$cur"))
+ fi
+
+} &&
+ complete -F _mailmanctl mailmanctl
+
+# ex: filetype=sh
diff --git a/completions/make b/completions/make
new file mode 100644
index 0000000..96517c2
--- /dev/null
+++ b/completions/make
@@ -0,0 +1,170 @@
+# bash completion for GNU make -*- shell-script -*-
+
+_make_target_extract_script()
+{
+ local mode="$1"
+ shift
+
+ local prefix="$1"
+ local prefix_pat=$(command sed 's/[][\,.*^$(){}?+|/]/\\&/g' <<<"$prefix")
+ local basename=${prefix##*/}
+ local dirname_len=$((${#prefix} - ${#basename}))
+
+ if [[ $mode == -d ]]; then
+ # display mode, only output current path component to the next slash
+ local output="\2"
+ else
+ # completion mode, output full path to the next slash
+ local output="\1\2"
+ fi
+
+ cat <<EOF
+ 1,/^# * Make data base/ d; # skip any makefile output
+ /^# * Finished Make data base/,/^# * Make data base/{
+ d; # skip any makefile output
+ }
+ /^# * Variables/,/^# * Files/ d; # skip until files section
+ /^# * Not a target/,/^$/ d; # skip not target blocks
+ /^${prefix_pat}/,/^$/! d; # skip anything user dont want
+
+ # The stuff above here describes lines that are not
+ # explicit targets or not targets other than special ones
+ # The stuff below here decides whether an explicit target
+ # should be output.
+
+ /^# * File is an intermediate prerequisite/ {
+ s/^.*$//;x; # unhold target
+ d; # delete line
+ }
+
+ /^$/ { # end of target block
+ x; # unhold target
+ /^$/d; # dont print blanks
+ s|^\(.\{${dirname_len}\}\)\(.\{${#basename}\}[^:/]*/\{0,1\}\)[^:]*:.*$|${output}|p;
+ d; # hide any bugs
+ }
+
+ # This pattern includes a literal tab character as \t is not a portable
+ # representation and fails with BSD sed
+ /^[^# :%]\{1,\}:/ { # found target block
+ /^\.PHONY:/ d; # special target
+ /^\.SUFFIXES:/ d; # special target
+ /^\.DEFAULT:/ d; # special target
+ /^\.PRECIOUS:/ d; # special target
+ /^\.INTERMEDIATE:/ d; # special target
+ /^\.SECONDARY:/ d; # special target
+ /^\.SECONDEXPANSION:/ d; # special target
+ /^\.DELETE_ON_ERROR:/ d; # special target
+ /^\.IGNORE:/ d; # special target
+ /^\.LOW_RESOLUTION_TIME:/ d; # special target
+ /^\.SILENT:/ d; # special target
+ /^\.EXPORT_ALL_VARIABLES:/ d; # special target
+ /^\.NOTPARALLEL:/ d; # special target
+ /^\.ONESHELL:/ d; # special target
+ /^\.POSIX:/ d; # special target
+ /^\.NOEXPORT:/ d; # special target
+ /^\.MAKE:/ d; # special target
+EOF
+
+ # don't complete with hidden targets unless we are doing a partial completion
+ if [[ -z ${prefix_pat} || ${prefix_pat} == */ ]]; then
+ cat <<EOF
+ /^${prefix_pat}[^a-zA-Z0-9]/d; # convention for hidden tgt
+EOF
+ fi
+
+ cat <<EOF
+ h; # hold target
+ d; # delete line
+ }
+
+EOF
+}
+
+_make()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local makef makef_dir=("-C" ".") i
+
+ case $prev in
+ --file | --makefile | --old-file | --assume-old | --what-if | --new-file | \
+ --assume-new | -!(-*)[foW])
+ _filedir
+ return
+ ;;
+ --include-dir | --directory | -!(-*)[ICm])
+ _filedir -d
+ return
+ ;;
+ -!(-*)E)
+ COMPREPLY=($(compgen -v -- "$cur"))
+ return
+ ;;
+ --eval | -!(-*)[DVx])
+ return
+ ;;
+ --jobs | -!(-*)j)
+ COMPREPLY=($(compgen -W "{1..$(($(_ncpus) * 2))}" -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ local opts="$(_parse_help "$1")"
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ elif [[ $cur == *=* ]]; then
+ prev=${cur%%=*}
+ cur=${cur#*=}
+ local diropt
+ [[ ${prev,,} == *dir?(ectory) ]] && diropt=-d
+ _filedir $diropt
+ else
+ # before we check for makefiles, see if a path was specified
+ # with -C/--directory
+ for ((i = 1; i < ${#words[@]}; i++)); do
+ if [[ ${words[i]} == -@(C|-directory) ]]; then
+ # eval for tilde expansion
+ eval "makef_dir=( -C \"${words[i + 1]}\" )"
+ break
+ fi
+ done
+
+ # before we scan for targets, see if a Makefile name was
+ # specified with -f/--file/--makefile
+ for ((i = 1; i < ${#words[@]}; i++)); do
+ if [[ ${words[i]} == -@(f|-?(make)file) ]]; then
+ # eval for tilde expansion
+ eval "makef=( -f \"${words[i + 1]}\" )"
+ break
+ fi
+ done
+
+ # recognise that possible completions are only going to be displayed
+ # so only the base name is shown
+ local mode=--
+ if ((COMP_TYPE != 9)); then
+ mode=-d # display-only mode
+ fi
+
+ local IFS=$' \t\n' script=$(_make_target_extract_script $mode "$cur")
+ COMPREPLY=($(LC_ALL=C \
+ $1 -npq __BASH_MAKE_COMPLETION__=1 \
+ ${makef+"${makef[@]}"} "${makef_dir[@]}" .DEFAULT 2>/dev/null |
+ command sed -ne "$script"))
+
+ if [[ $mode != -d ]]; then
+ # Completion will occur if there is only one suggestion
+ # so set options for completion based on the first one
+ [[ ${COMPREPLY-} == */ ]] && compopt -o nospace
+ fi
+
+ fi
+} &&
+ complete -F _make make gmake gnumake pmake colormake bmake
+
+# ex: filetype=sh
diff --git a/completions/makepkg b/completions/makepkg
new file mode 100644
index 0000000..23ac784
--- /dev/null
+++ b/completions/makepkg
@@ -0,0 +1,48 @@
+# makepkg completion -*- shell-script -*-
+
+# Slackware Linux variant
+_makepkg_slackware()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ -l | --linkadd | -c | --chown)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W \
+ '$($1 | command sed -e "s/^options://" | _parse_help -)' \
+ -- "$cur"))
+ return
+ fi
+
+ _filedir
+}
+
+_makepkg_bootstrap()
+{
+ local fname help
+
+ # Use --help to detect variant; the Slackware one starts making
+ # a package for unknown args, including --version :P
+ help=$("$1" --help 2>&1)
+ case ${help,,} in
+ *slackware*)
+ fname=_makepkg_slackware
+ ;;
+ *)
+ fname=_minimal
+ ;;
+ esac
+
+ unset -f _makepkg_bootstrap
+ complete -F $fname makepkg
+ $fname
+} &&
+ complete -F _makepkg_bootstrap makepkg
+
+# ex: filetype=sh
diff --git a/completions/man b/completions/man
new file mode 100644
index 0000000..81d06f5
--- /dev/null
+++ b/completions/man
@@ -0,0 +1,101 @@
+# man(1) completion -*- shell-script -*-
+
+_man()
+{
+ local cur prev words cword split
+ _init_completion -s -n : || return
+
+ local comprsuffix=".@([glx]z|bz2|lzma|Z)"
+ local manext="@([0-9lnp]|[0-9][px]|man|3?(gl|pm))?($comprsuffix)"
+ local mansect="@([0-9lnp]|[0-9][px]|3?(gl|pm))"
+
+ case $prev in
+ --config-file | -!(-*)C)
+ _filedir conf
+ return
+ ;;
+ --local-file | -!(-*)l)
+ _filedir "$manext"
+ return
+ ;;
+ --manpath | -!(-*)M)
+ _filedir -d
+ return
+ ;;
+ --pager | -!(-*)P)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ --preprocessor | -!(-*)p)
+ COMPREPLY=($(compgen -W 'e p t g r v' -- "$cur"))
+ return
+ ;;
+ --locale | --systems | --extension | --prompt | --recode | --encoding | \
+ -!(-*)[LmerRE])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1" -h)
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ # file based completion if parameter looks like a path
+ if [[ $cur == @(*/|[.~])* ]]; then
+ _filedir "$manext"
+ return
+ fi
+
+ local manpath=$(manpath 2>/dev/null || command man -w 2>/dev/null)
+ [[ -z $manpath ]] && manpath="/usr/share/man:/usr/local/share/man"
+
+ # determine manual section to search
+ local sect
+ # shellcheck disable=SC2053
+ [[ $prev == $mansect ]] && sect=$prev || sect='*'
+
+ _expand || return
+
+ manpath=$manpath:
+ if [[ -n $cur ]]; then
+ manpath="${manpath//://*man$sect/$cur* } ${manpath//://*cat$sect/$cur* }"
+ else
+ manpath="${manpath//://*man$sect/ } ${manpath//://*cat$sect/ }"
+ fi
+
+ local IFS=$' \t\n' reset=$(shopt -p failglob)
+ shopt -u failglob
+ # redirect stderr for when path doesn't exist
+ COMPREPLY=($(eval command ls "$manpath" 2>/dev/null))
+ $reset
+
+ if ((${#COMPREPLY[@]} != 0)); then
+ # weed out directory path names and paths to man pages
+ COMPREPLY=(${COMPREPLY[@]##*/?(:)})
+ # strip suffix from man pages
+ COMPREPLY=(${COMPREPLY[@]%$comprsuffix})
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]%.*}' -- "${cur//\\\\/}"))
+ fi
+
+ # shellcheck disable=SC2053
+ 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 i start=${#COMPREPLY[@]}
+ _filedir "$manext"
+ for ((i = start; i < ${#COMPREPLY[@]}; i++)); do
+ [[ ${COMPREPLY[i]} == */* ]] || COMPREPLY[i]=./${COMPREPLY[i]}
+ done
+ fi
+
+ __ltrim_colon_completions "$cur"
+} &&
+ complete -F _man man apropos whatis
+
+# ex: filetype=sh
diff --git a/completions/mc b/completions/mc
new file mode 100644
index 0000000..cf38821
--- /dev/null
+++ b/completions/mc
@@ -0,0 +1,29 @@
+# bash completion for mc -*- shell-script -*-
+
+_mc()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --edit | --view | --ftplog | --printwd | -!(-*)[evlP])
+ _filedir
+ return
+ ;;
+ --help | --help-* | --version | --colors | --debuglevel | -!(-*)[hVCD])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help-all)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _filedir -d
+ fi
+} &&
+ complete -F _mc mc
+
+# ex: filetype=sh
diff --git a/completions/mcrypt b/completions/mcrypt
new file mode 100644
index 0000000..0c3ab5e
--- /dev/null
+++ b/completions/mcrypt
@@ -0,0 +1,67 @@
+# mcrypt(1) completion -*- shell-script -*-
+# by Ariel Fermani <the_end@bbs.frc.utn.edu.ar>
+
+_mcrypt()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -g | --openpgp-z)
+ COMPREPLY=($(compgen -W '{0..9}' -- "$cur"))
+ return
+ ;;
+ -o | --keymode)
+ COMPREPLY=($(compgen -W '$($1 --list-keymodes 2>/dev/null )' \
+ -- "$cur"))
+ return
+ ;;
+ -m | --mode)
+ COMPREPLY=($(compgen -W "$($1 --list 2>/dev/null | cut -d: -f2-)" \
+ -- "$cur"))
+ return
+ ;;
+ -a | --algorithm)
+ COMPREPLY=($(compgen -W "$($1 --list 2>/dev/null |
+ awk '{print $1}')" -- "$cur"))
+ return
+ ;;
+ -h | --hash)
+ COMPREPLY=($(compgen -W '$($1 --list-hash 2>/dev/null | \
+ command sed -e 1d)' -- "$cur"))
+ return
+ ;;
+ -k | -s | --key | --keysize)
+ return
+ ;;
+ -f | -c | --keyfile | --config)
+ _filedir
+ return
+ ;;
+ --algorithms-directory | --modes-directory)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ elif [[ ${words[0]} == mdecrypt ]]; then
+ _filedir nc
+ else
+ local i decrypt=0
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ if [[ ${words[i]} == -@(d|-decrypt) ]]; then
+ _filedir nc
+ decrypt=1
+ break
+ fi
+ done
+ if ((decrypt == 0)); then
+ _filedir
+ fi
+ fi
+} &&
+ complete -F _mcrypt mcrypt mdecrypt
+
+# ex: filetype=sh
diff --git a/completions/mdadm b/completions/mdadm
new file mode 100644
index 0000000..37effd9
--- /dev/null
+++ b/completions/mdadm
@@ -0,0 +1,149 @@
+# bash completion for mdadm -*- shell-script -*-
+
+_mdadm_raid_level()
+{
+ local mode
+
+ for ((i = 1; i < cword; i++)); do
+ case ${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 < cword; i++)); do
+ if [[ ${words[i]} == -@(l|-level) ]]; then
+ level=${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 words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --config | --bitmap | --backup-file | -!(-*)[cb])
+ _filedir
+ return
+ ;;
+ --level | -!(-*)l)
+ _mdadm_raid_level
+ return
+ ;;
+ --layout | --parity | -!(-*)p)
+ _mdadm_raid_layout
+ return
+ ;;
+ --auto | -!(-*)a)
+ _mdadm_auto_flag
+ return
+ ;;
+ --update | -!(-*)U)
+ _mdadm_update_flag
+ return
+ ;;
+ esac
+
+ $split && return
+
+ local options='--help --help-options --version --verbose --quiet --brief
+ --force --config= --scan --metadata= --homehost='
+
+ if [[ $cur == -* ]]; then
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W "$options --assemble --build --create
+ --monitor --grow" -- "$cur"))
+ else
+ case ${words[cword - 1]} in
+ --assemble | -!(-*)A*)
+ COMPREPLY=($(compgen -W "$options --uuid= --super-minor=
+ --name= --force --run --no-degraded --auto= --bitmap=
+ --backup-file= --update= --auto-update-homehost" \
+ -- "$cur"))
+ ;;
+ --build | --create | --grow | -!(-*)[BCG]*)
+ COMPREPLY=($(compgen -W "$options --raid-devices=
+ --spare-devices= --size= --chunk= --rounding= --level=
+ --layout= --parity= --bitmap= --bitmap-chunk=
+ --write-mostly --write-behind= --assume-clean
+ --backup-file= --name= --run --force --auto=" \
+ -- "$cur"))
+ ;;
+ --follow | --monitor | -!(-*)F)
+ COMPREPLY=($(compgen -W "$options --mail --program
+ --alert --syslog --delay --daemonise --pid-file
+ --oneshot --test" -- "$cur"))
+
+ ;;
+ /dev/* | --add | --fail | --remove)
+ COMPREPLY=($(compgen -W "$options --add --re-add
+ --remove --fail --set-faulty" -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W "$options --query --detail
+ --examine --sparc2.2 --examine-bitmap --run --stop
+ --readonly --readwrite --zero-superblock --test" \
+ -- "$cur"))
+ ;;
+ esac
+ fi
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ cur=${cur:=/dev/}
+ _filedir
+ fi
+} &&
+ complete -F _mdadm mdadm
+
+# ex: filetype=sh
diff --git a/completions/mdtool b/completions/mdtool
new file mode 100644
index 0000000..428e33b
--- /dev/null
+++ b/completions/mdtool
@@ -0,0 +1,62 @@
+# mdtool completion -*- shell-script -*-
+
+_mdtool()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local command i
+
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ if [[ ${words[i]} == @(build|generate-makefiles|setup) ]]; then
+ command=${words[i]}
+ break
+ fi
+ done
+
+ if [[ -v 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
+ ;;
+ "generate-makefiles")
+ compopt -o filenames
+ COMPREPLY=($(compgen -o filenames -G"*.mds" -- "$cur"))
+ if [[ $prev == *mds ]]; then
+ COMPREPLY=($(compgen -W '--simple-makefiles --s --d:' \
+ -- "$cur"))
+ fi
+ return
+ ;;
+ "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
+ ;;
+ esac
+ fi
+
+ COMPREPLY=($(compgen -W 'gsetup build dbgen project-export
+ generate-makefiles gettext-update setup -q' -- "$cur"))
+
+} &&
+ complete -F _mdtool mdtool
+
+# ex: filetype=sh
diff --git a/completions/medusa b/completions/medusa
new file mode 100644
index 0000000..4512987
--- /dev/null
+++ b/completions/medusa
@@ -0,0 +1,30 @@
+# bash completion for medusa -*- shell-script -*-
+
+_medusa()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*[HUPCO])
+ _filedir
+ return
+ ;;
+ -*M)
+ COMPREPLY=($(compgen -W "$($1 -d | awk '/^ +\+/ {print $2}' |
+ command sed -e 's/\.mod$//')"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+} &&
+ complete -F _medusa medusa
+
+# ex: filetype=sh
diff --git a/completions/mii-diag b/completions/mii-diag
new file mode 100644
index 0000000..c433a7a
--- /dev/null
+++ b/completions/mii-diag
@@ -0,0 +1,26 @@
+# mii-diag(8) completion -*- shell-script -*-
+
+_mii_diag()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -F | -A | --advertise | --fixed-speed)
+ COMPREPLY=($(compgen -W '100baseT4 100baseTx 100baseTx-FD
+ 100baseTx-HD 10baseT 10baseT-FD 10baseT-HD' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ _available_interfaces -a
+ fi
+} &&
+ complete -F _mii_diag -o default mii-diag
+
+# ex: filetype=sh
diff --git a/completions/mii-tool b/completions/mii-tool
new file mode 100644
index 0000000..1b80202
--- /dev/null
+++ b/completions/mii-tool
@@ -0,0 +1,32 @@
+# mii-tool(8) completion -*- shell-script -*-
+
+_mii_tool()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --force | -!(-*)F)
+ COMPREPLY=($(compgen -W '100baseTx-FD 100baseTx-HD 10baseT-FD
+ 10baseT-HD' -- "$cur"))
+ return
+ ;;
+ --advertise | -!(-*)A)
+ COMPREPLY=($(compgen -W '100baseT4 100baseTx-FD 100baseTx-HD
+ 10baseT-FD 10baseT-HD' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _available_interfaces -a
+ fi
+} &&
+ complete -F _mii_tool -o default mii-tool
+
+# ex: filetype=sh
diff --git a/completions/minicom b/completions/minicom
new file mode 100644
index 0000000..57510e9
--- /dev/null
+++ b/completions/minicom
@@ -0,0 +1,40 @@
+# bash completion for minicom -*- shell-script -*-
+
+_minicom()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --attrib | --color | -!(-*)[ac])
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ --script | --capturefile | -!(-*)[SC])
+ _filedir
+ return
+ ;;
+ --ptty | -!(-*)p)
+ COMPREPLY=($(printf '%s\n' /dev/tty*))
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]} ${COMPREPLY[@]#/dev/}' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ COMPREPLY=(
+ $(printf '%s\n' /etc/minirc.* /etc/minicom/minirc.* ~/.minirc.* |
+ command sed -e '/\*$/d' -e 's/^.*minirc\.//' |
+ command grep "^${cur}"))
+} &&
+ complete -F _minicom -o default minicom
+
+# ex: filetype=sh
diff --git a/completions/mkinitrd b/completions/mkinitrd
new file mode 100644
index 0000000..bcb7e07
--- /dev/null
+++ b/completions/mkinitrd
@@ -0,0 +1,50 @@
+# bash completion for mkinitrd -*- shell-script -*-
+
+_mkinitrd()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --preload | --with | --builtin)
+ _modules
+ return
+ ;;
+ --fstab | --dsdt)
+ _filedir
+ return
+ ;;
+ --net-dev)
+ _available_interfaces
+ return
+ ;;
+ esac
+
+ $split && return
+
+ 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"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ local args
+ _count_args
+
+ case $args in
+ 1)
+ _filedir
+ ;;
+ 2)
+ _kernel_versions
+ ;;
+ esac
+ fi
+
+} &&
+ complete -F _mkinitrd mkinitrd
+
+# ex: filetype=sh
diff --git a/completions/mktemp b/completions/mktemp
new file mode 100644
index 0000000..e063810
--- /dev/null
+++ b/completions/mktemp
@@ -0,0 +1,29 @@
+# mktemp(1) completion -*- shell-script -*-
+
+_mktemp()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --help | --version | --suffix)
+ return
+ ;;
+ --tmpdir | -!(-*)p)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ [[ $opts ]] || opts="-d -u -q -p -t" # non-GNU fallback
+ COMPREPLY=($(compgen -W "$opts" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _mktemp mktemp
+
+# ex: filetype=sh
diff --git a/completions/mmsitepass b/completions/mmsitepass
new file mode 100644
index 0000000..49daae6
--- /dev/null
+++ b/completions/mmsitepass
@@ -0,0 +1,15 @@
+# mailman mmsitepass completion -*- shell-script -*-
+
+_mmsitepass()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--listcreator --help' -- "$cur"))
+ fi
+
+} &&
+ complete -F _mmsitepass mmsitepass
+
+# ex: filetype=sh
diff --git a/completions/modinfo b/completions/modinfo
new file mode 100644
index 0000000..009bcf3
--- /dev/null
+++ b/completions/modinfo
@@ -0,0 +1,47 @@
+# Linux modinfo(8) completion -*- shell-script -*-
+
+_modinfo()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --field | -!(-*)F)
+ COMPREPLY=($(compgen -W 'alias author depends description
+ filename firmware license parm srcversion staging vermagic
+ version' -- "${cur,,}"))
+ return
+ ;;
+ --set-version | -!(-*)k)
+ _kernel_versions
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ local i version=$(uname -r)
+ for ((i = ${#words[@]} - 1; i > 0; i--)); do
+ if [[ ${words[i]} == -@(!(-*)k*|-set-version) ]]; then
+ version=${words[i + 1]}
+ break
+ fi
+ done
+
+ # do filename completion if we're giving a path to a module
+ if [[ $cur == @(*/|[.~])* ]]; then
+ _filedir '@(?(k)o?(.[gx]z))'
+ else
+ _modules $version
+ fi
+} &&
+ complete -F _modinfo modinfo
+
+# ex: filetype=sh
diff --git a/completions/modprobe b/completions/modprobe
new file mode 100644
index 0000000..36cb588
--- /dev/null
+++ b/completions/modprobe
@@ -0,0 +1,123 @@
+# Linux modprobe(8) completion -*- shell-script -*-
+
+_modprobe()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case "$prev" in
+ --help | --version | -!(-*)[hV])
+ return
+ ;;
+ --config | -!(-*)C)
+ _filedir
+ return
+ ;;
+ --dirname | --type | -!(-*)[dt])
+ _filedir -d
+ return
+ ;;
+ --set-version | -!(-*)S)
+ _kernel_versions
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ if [[ ! ${COMPREPLY-} ]]; then
+ COMPREPLY=($(compgen -W '-a --all -b --use-blacklist -C --config
+ -c --showconfig --dump-modversions -d --dirname --first-time
+ --force-vermagic --force-modversion -f --force -i
+ --ignore-install --ignore-remove -l --list -n --dry-run -q
+ --quiet -R --resolve-alias -r --remove -S --set-version
+ --show-depends -s --syslog -t --type -V --version -v
+ --verbose' -- "$cur"))
+ fi
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ local i mode=insert module="" version=$(uname -r)
+ for ((i = 1; i < cword; i++)); do
+ case "${words[i]}" in
+ --remove | -!(-*)r*)
+ mode=remove
+ ;;
+ --list | -!(-*)l*)
+ mode=list
+ ;;
+ --dump-modversions)
+ mode="file"
+ ;;
+ --set-version | -!(-*)S)
+ version=${words[i + 1]} # -S is not $prev and not $cur
+ ;;
+ --config | --dirname | --type | -!(-*)[Cdt])
+ ((i++)) # skip option and its argument
+ ;;
+ -*)
+ # skip all other options
+ ;;
+ *)
+ [[ -z $module ]] && module=${words[i]}
+ ;;
+ esac
+ done
+
+ case $mode in
+ remove)
+ _installed_modules "$cur"
+ ;;
+ list)
+ # no completion available
+ ;;
+ file)
+ _filedir
+ ;;
+ insert)
+ # do filename completion if we're giving a path to a module
+ if [[ $cur == @(*/|[.~])* ]]; then
+ _filedir '@(?(k)o?(.[gx]z))'
+ elif [[ -n $module ]]; then
+ # do module parameter completion
+ if [[ $cur == *=* ]]; then
+ prev=${cur%%=*}
+ cur=${cur#*=}
+ if PATH="$PATH:/sbin" modinfo -p "$module" 2>/dev/null |
+ command grep -q "^$prev:.*(bool)"; then
+ local choices="on off"
+ [[ $cur ]] && choices="1 0 y Y n N on off"
+ COMPREPLY=($(compgen -W "$choices" -- "$cur"))
+ fi
+ else
+ COMPREPLY=($(compgen -S = -W "$(PATH="$PATH:/sbin" \
+ modinfo -p "$module" 2>/dev/null |
+ awk -F: '!/^[ \t]/ { print $1 }')" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+ else
+ _modules $version
+ if [[ ${COMPREPLY-} ]]; then
+ # filter out already installed modules
+ local -a mods=("${COMPREPLY[@]}")
+ _installed_modules "$cur"
+ for i in "${!mods[@]}"; do
+ for module in "${COMPREPLY[@]}"; do
+ if [[ ${mods[i]} == "$module" ]]; then
+ unset 'mods[i]'
+ break
+ fi
+ done
+ done
+ COMPREPLY=("${mods[@]}")
+ fi
+ fi
+ ;;
+ esac
+} &&
+ complete -F _modprobe modprobe
+
+# ex: filetype=sh
diff --git a/completions/monodevelop b/completions/monodevelop
new file mode 100644
index 0000000..1c5b5ba
--- /dev/null
+++ b/completions/monodevelop
@@ -0,0 +1,19 @@
+# monodevelop completion -*- shell-script -*-
+
+_monodevelop()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _filedir
+ fi
+} &&
+ complete -F _monodevelop monodevelop
+
+# ex: filetype=sh
diff --git a/completions/mplayer b/completions/mplayer
new file mode 100644
index 0000000..d71ebb8
--- /dev/null
+++ b/completions/mplayer
@@ -0,0 +1,287 @@
+# mplayer(1) completion -*- shell-script -*-
+
+_mplayer_options_list()
+{
+ cur=${cur%\\}
+ COMPREPLY=($(compgen -W "$($1 -noconfig all $2 help 2>/dev/null |
+ command sed -e '/^Available/,/^$/!d' -e '/^Available/d' | awk '{print $1}' |
+ command sed -e 's/:$//' -e 's/^'${2#-}'$//' -e 's/<.*//')" -- "$cur"))
+}
+
+_mplayer()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local cmd=${words[0]} i j k=0
+
+ case $prev in
+ -[av][cfo] | -[av]fm | -vop | -fstype | -demuxer | -o[av]c | -of | -profile | \
+ -audio-demuxer | -sub-demuxer)
+ _mplayer_options_list $cmd $prev
+ return
+ ;;
+ -show-profile)
+ _mplayer_options_list $cmd -profile
+ return
+ ;;
+ -audiofile | -audio-file)
+ _filedir '@(mp3|mpg|og[ag]|w?(a)v|mid|flac|mka|ac3|ape)'
+ return
+ ;;
+ -font | -subfont)
+ if [[ $prev == -font ]]; then
+ _filedir '@(desc|ttf)'
+ else
+ _filedir ttf
+ fi
+ local IFS=$'\n'
+ COMPREPLY+=($(compgen -W '$(fc-list 2>/dev/null)' -- "$cur"))
+ return
+ ;;
+ -sub | -sub-file)
+ _filedir '@(srt|sub|txt|utf|rar|mpsub|smi|js|ssa|ass)'
+ return
+ ;;
+ -vobsub)
+ _filedir '@(idx|ifo|sub)'
+ local IFS=$'\n'
+ COMPREPLY=($(for i in "${COMPREPLY[@]}"; do
+ if [[ -f $i && -r $i ]]; then
+ printf '%s\n' ${i%.*}
+ else
+ printf '%s\n' $i
+ fi
+ done))
+ return
+ ;;
+ -subcp | -msgcharset)
+ local cp
+ cp=($(iconv --list 2>/dev/null | command sed -e "s@//@@;" 2>/dev/null))
+ if [[ $cur == "${cur,,}" ]]; then
+ COMPREPLY=($(compgen -W '${cp[@],,}' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W '${cp[@]^^}' -- "$cur"))
+ fi
+ return
+ ;;
+ -ifo)
+ _filedir ifo
+ return
+ ;;
+ -cuefile)
+ _filedir '@(bin|cue)'
+ return
+ ;;
+ -skin)
+ # if you don't have installed mplayer in /usr you
+ # may want to set the MPLAYER_SKINS_DIR global variable
+ local -a dirs
+ if [[ -n $MPLAYER_SKINS_DIR ]]; then
+ dirs=($MPLAYER_SKINS_DIR)
+ else
+ dirs=(/usr/share/mplayer/skins /usr/local/share/mplayer/skins)
+ fi
+
+ local IFS=$'\n'
+ for i in ~/.mplayer/skins "${dirs[@]}"; do
+ if [[ -d $i && -r $i ]]; then
+ for j in $(compgen -d -- $i/$cur); do
+ COMPREPLY[k++]=${j#$i/}
+ done
+ fi
+ done
+ return
+ ;;
+ -cdrom-device)
+ _cd_devices
+ _dvd_devices
+ return
+ ;;
+ -dvd-device)
+ _dvd_devices
+ _filedir iso
+ return
+ ;;
+ -bluray-device)
+ _filedir -d
+ return
+ ;;
+ -mixer | -dvdauth | -fb | -zrdev)
+ cur=${cur:=/dev/}
+ _filedir
+ return
+ ;;
+ -edl | -edlout | -lircconf | -menu-cfg | -playlist | -csslib | -dumpfile | \
+ -subfile | -aofile | -fbmodeconfig | -include | -o | -dvdkey | -passlogfile)
+ _filedir
+ return
+ ;;
+ -autoq | -autosync | -loop | -menu-root | -speed | -sstep | -aid | -alang | \
+ -bandwidth | -bluray-angle | -bluray-chapter | -cache | -chapter | -dvd-speed | \
+ -dvdangle | -fps | -frames | -mc | -passwd | -user | -sb | -srate | -ss | -vcd | \
+ -vi | -vid | -vivo | -ffactor | -sid | -slang | -spualign | -spuaa | -spugauss | \
+ -vobsubid | -delay | -bpp | -brightness | -contrast | -dfbopts | -display | \
+ -fbmode | -geometry | -guiwid | -hue | -icelayer | -screen[wh] | -wid | \
+ -monitor-dotclock | -monitor-[hv]freq | -panscan | \
+ -saturation | -xineramascreen | -zrcrop | -zrnorm | -zrquality | \
+ -zr[xy]doff | -zr[vh]dec | -pp | -x | -y | -xy | -z | -stereo | \
+ -audio-density | -audio-delay | -audio-preload | -endpos | -osdlevel | \
+ -ffourcc | -sws | -skiplimit | -format | -ofps | -aadriver | \
+ -aaosdcolor | -aasubcolor | -vobsubout | -vobsuboutid | -vobsuboutindex | \
+ -sub-bg-alpha | -sub-bg-color | -subdelay | -subfps | -subpos | \
+ -subalign | -subwidth | -subfont-blur | -subfont-outline | \
+ -subfont-autoscale | -subfont-encoding | -subfont-osd-scale | \
+ -subfont-text-scale)
+ return
+ ;;
+ -channels)
+ COMPREPLY=($(compgen -W '2 4 6 8' -- "$cur"))
+ return
+ ;;
+ -aspect | -monitoraspect)
+ COMPREPLY=($(compgen -W '1:1 3:2 4:3 5:4 14:9 14:10 16:9 16:10
+ 2.35:1' -- "$cur"))
+ __ltrim_colon_completions "$cur"
+ return
+ ;;
+ -lavdopts)
+ COMPREPLY=($(compgen -W 'bitexact bug= debug= ec= er= fast gray
+ idct= lowres= sb= st= skiploopfilter= skipidct= skipframe=
+ threads= vismv= vstats' -- "$cur"))
+ return
+ ;;
+ -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
+ ;;
+ -ssf)
+ COMPREPLY=($(compgen -W 'lgb= cgb= ls= cs= chs= cvs=' -- "$cur"))
+ return
+ ;;
+ -jpeg)
+ COMPREPLY=($(compgen -W 'noprogressive progressive nobaseline
+ baseline optimize= smooth= quality= outdir=' -- "$cur"))
+ return
+ ;;
+ -xvidopts)
+ COMPREPLY=($(compgen -W 'dr2 nodr2' -- "$cur"))
+ return
+ ;;
+ -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
+ ;;
+ -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
+ ;;
+ -info)
+ COMPREPLY=($(compgen -W 'name= artist= genre= subject=
+ copyright= srcform= comment= help' -- "$cur"))
+ return
+ ;;
+ -lameopts)
+ COMPREPLY=($(compgen -W 'vbr= abr cbr br= q= aq= ratio= vol=
+ mode= padding= fast preset= help' -- "$cur"))
+ return
+ ;;
+ -rawaudio)
+ COMPREPLY=($(compgen -W 'on channels= rate= samplesize= format=' \
+ -- "$cur"))
+ return
+ ;;
+ -rawvideo)
+ COMPREPLY=($(compgen -W 'on fps= sqcif qcif cif 4cif pal ntsc w=
+ h= y420 yv12 yuy2 y8 format= size=' -- "$cur"))
+ return
+ ;;
+ -aop)
+ COMPREPLY=($(compgen -W 'list= delay= format= fout= volume= mul=
+ softclip' -- "$cur"))
+ return
+ ;;
+ -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
+ ;;
+ -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
+ ;;
+ -mf)
+ COMPREPLY=($(compgen -W 'on w= h= fps= type=' -- "$cur"))
+ return
+ ;;
+ -cdda)
+ COMPREPLY=($(compgen -W 'speed= paranoia= generic-dev=
+ sector-size= overlap= toc-bias toc-offset= skip noskip' \
+ -- "$cur"))
+ return
+ ;;
+ -input)
+ COMPREPLY=($(compgen -W 'conf= ar-delay ar-rate keylist cmdlist
+ js-dev file' -- "$cur"))
+ return
+ ;;
+ -af-adv)
+ COMPREPLY=($(compgen -W 'force= list=' -- "$cur"))
+ return
+ ;;
+ -noconfig)
+ COMPREPLY=($(compgen -W 'all gui system user' -- "$cur"))
+ return
+ ;;
+ -*)
+ # Assume arg is required for everything else except options
+ # for which -list-options says Type is Flag or Print.
+ $cmd -noconfig all -list-options 2>/dev/null |
+ while read -r i j k; do
+ if [[ $i == "${prev#-}" ]]; then
+ [[ ${j,,} != @(flag|print) ]] && return 1
+ break
+ fi
+ done || return
+ ;;
+ esac
+
+ case $cur in
+ -*)
+ COMPREPLY=($(compgen -W '$($cmd -noconfig all -list-options 2>/dev/null | \
+ command sed -ne "1,/^[[:space:]]*Name/d" \
+ -e "s/^[[:space:]]*/-/" -e "s/[[:space:]:].*//" \
+ -e "/^-\(Total\|.*\*\)\{0,1\}$/!p")' -- "$cur"))
+ ;;
+ *)
+ _filedir '@(m?(j)p?(e)g|M?(J)P?(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]|fxm|FXM|viv|VIV|rm?(j)|RM?(J)|ra?(m)|RA?(M)|yuv|YUV|mov|MOV|qt|QT|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|og[gmavx]|OG[GMAVX]|w?(a)v|W?(A)V|dump|DUMP|mk[av]|MK[AV]|aac|AAC|m2v|M2V|dv|DV|rmvb|RMVB|mid|MID|t[ps]|T[PS]|3g[p2]|3gpp?(2)|mpc|MPC|flac|FLAC|vro|VRO|divx|DIVX|aif?(f)|AIF?(F)|m2t?(s)|M2T?(S)|mts|MTS|vdr|VDR|xvid|XVID|ape|APE|gif|GIF|nut|NUT|bik|BIK|web[am]|WEB[AM]|amr|AMR|awb|AWB|iso|ISO|opus|OPUS|m[eo]d|M[EO]D|xm|XM|it|IT|s[t3]m|S[T3]M|mtm|MTM|w64|W64)?(.@(crdownload|part))'
+ ;;
+ esac
+
+} &&
+ complete -F _mplayer mplayer mplayer2 mencoder gmplayer kplayer
+
+# ex: filetype=sh
diff --git a/completions/mr b/completions/mr
new file mode 100644
index 0000000..930e3c9
--- /dev/null
+++ b/completions/mr
@@ -0,0 +1,91 @@
+# mr completion -*- shell-script -*-
+
+_mr()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local help commands options
+
+ help="$(PERLDOC_PAGER=cat PERLDOC=-otext "${1}" help 2>/dev/null)"
+
+ commands="$(
+ printf %s "$help" | while read -r _ options cmd _; do
+ [[ $options != "[options]" ]] || printf "%s\n" "$cmd"
+ done
+ )"
+ # Split [online|offline] and remove `action` placeholder.
+ commands="${commands//@(action|[\[\|\]])/$'\n'}"
+ # Add standard aliases.
+ commands="${commands} ci co ls"
+
+ # Determine if user has entered an `mr` command. Used to block top-level
+ # (option and command) completions.
+ local cmd i
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ if [[ $commands == *"${words[i]}"* ]]; then
+ cmd="${words[i]}"
+ break
+ fi
+ done
+
+ # Complete options for specific commands.
+ if [[ -v cmd ]]; then
+ case $cmd in
+ bootstrap)
+ _filedir
+ # Also complete stdin (-) as a potential bootstrap source.
+ if [[ -z ${cur} || $cur == - ]] && [[ $prev != - ]]; then
+ COMPREPLY+=(-)
+ fi
+ return
+ ;;
+ clean)
+ if [[ ${cur} == -* ]]; then
+ COMPREPLY=($(compgen -W '-f' -- "${cur}"))
+ fi
+ return
+ ;;
+ commit | ci | record)
+ if [[ ${cur} == -* ]]; then
+ COMPREPLY=($(compgen -W '-m' -- "${cur}"))
+ fi
+ return
+ ;;
+ run)
+ COMPREPLY=($(compgen -c -- "${cur}"))
+ return
+ ;;
+ *)
+ # Do not complete any other command.
+ return
+ ;;
+ esac
+ fi
+
+ # Complete top-level options and commands.
+ case $prev in
+ --config | -!(-*)c)
+ _filedir
+ return
+ ;;
+ --directory | -!(-*)d)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ options="$(printf '%s\n' "$help" | _parse_help -)"
+ # Remove short options (all have compatible long options).
+ options="${options//-[a-z]$'\n'/}"
+ # Remove deprecated options.
+ options="${options//--path/}"
+ COMPREPLY=($(compgen -W "${options}" -- "${cur}"))
+ else
+ COMPREPLY=($(compgen -W "${commands}" -- "${cur}"))
+ fi
+} &&
+ complete -F _mr mr
+
+# ex: filetype=sh
diff --git a/completions/msynctool b/completions/msynctool
new file mode 100644
index 0000000..4de37f5
--- /dev/null
+++ b/completions/msynctool
@@ -0,0 +1,42 @@
+# bash completion for msynctool -*- shell-script -*-
+
+_msynctool()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $words in
+ --configure)
+ COMPREPLY=($(compgen -W "$($1 --showgroup \
+ $prev | awk '/^Member/ {print $2}' | command sed \
+ -e 's/:$//')" -- "$cur"))
+ return
+ ;;
+ --addmember)
+ COMPREPLY=($(compgen -W '$($1 --listplugins \
+ | command sed -e 1d)' -- "$cur"))
+ return
+ ;;
+ esac
+
+ case $prev in
+ --configure | --addgroup | --delgroup | --showgroup | --sync | --addmember)
+ COMPREPLY=($(compgen -W '$($1 --listgroups \
+ | command sed -e 1d)' -- "$cur"))
+ return
+ ;;
+ --showformats | --filter-objtype | --slow-sync)
+ COMPREPLY=($(compgen -W '$($1 --listobjects \
+ | command sed -e 1d)' -- "$cur"))
+ return
+ ;;
+ 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
+
+# ex: filetype=sh
diff --git a/completions/mtx b/completions/mtx
new file mode 100644
index 0000000..b5c270b
--- /dev/null
+++ b/completions/mtx
@@ -0,0 +1,44 @@
+# mtx completion -*- shell-script -*-
+# by Jon Middleton <jjm@ixtab.org.uk>
+
+_mtx()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local options tapes drives
+
+ options="-f nobarcode invert noattach --version inquiry noattach \
+ inventory status load unload eepos first last next"
+
+ tapes=$(mtx status 2>/dev/null |
+ awk '/Storage Element [0-9]+:Full/ { printf "%s ", $3 }')
+ tapes=${tapes//:Full/}
+
+ drives=$(mtx status 2>/dev/null |
+ awk '/Data Transfer Element [0-9]+:(Full|Empty)/ { printf "%s ", $4 }')
+ drives=${drives//:Full/}
+ drives=${drives//:Empty/}
+
+ if ((cword > 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
+} &&
+ complete -F _mtx mtx
+
+# ex: filetype=sh
diff --git a/completions/munin-node-configure b/completions/munin-node-configure
new file mode 100644
index 0000000..39d8d64
--- /dev/null
+++ b/completions/munin-node-configure
@@ -0,0 +1,33 @@
+# munin-node-configure completion -*- shell-script -*-
+
+_munin_node_configure()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --config)
+ _filedir
+ return
+ ;;
+ --servicedir | --libdir)
+ _filedir -d
+ return
+ ;;
+ --snmp)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --snmpversion)
+ COMPREPLY=($(compgen -W '1 2c 3' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+} &&
+ complete -F _munin_node_configure munin-node-configure
+
+# ex: filetype=sh
diff --git a/completions/munin-run b/completions/munin-run
new file mode 100644
index 0000000..97e526a
--- /dev/null
+++ b/completions/munin-run
@@ -0,0 +1,28 @@
+# munin-run completion -*- shell-script -*-
+
+_munin_run()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --config | --sconffile)
+ _filedir
+ return
+ ;;
+ --servicedir | --sconfdir)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W \
+ '$(command ls /etc/munin/plugins 2>/dev/null)' -- "$cur"))
+ fi
+} &&
+ complete -F _munin_run munin-run
+
+# ex: filetype=sh
diff --git a/completions/munin-update b/completions/munin-update
new file mode 100644
index 0000000..8766eae
--- /dev/null
+++ b/completions/munin-update
@@ -0,0 +1,27 @@
+# munin-update completion -*- shell-script -*-
+
+_munin_update()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --config)
+ _filedir
+ return
+ ;;
+ --host)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--force-root --noforce-root --service --host
+ --config --help --debug --nodebug --fork --nofork --stdout
+ --nostdout --timeout' -- "$cur"))
+ fi
+} &&
+ complete -F _munin_update munin-update
+
+# ex: filetype=sh
diff --git a/completions/munindoc b/completions/munindoc
new file mode 100644
index 0000000..5c7644a
--- /dev/null
+++ b/completions/munindoc
@@ -0,0 +1,13 @@
+# munindoc completion -*- shell-script -*-
+
+_munindoc()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ COMPREPLY=($(compgen -W \
+ '$(command ls /usr/share/munin/plugins 2>/dev/null)' -- "$cur"))
+} &&
+ complete -F _munindoc munindoc
+
+# ex: filetype=sh
diff --git a/completions/mussh b/completions/mussh
new file mode 100644
index 0000000..c2f7a52
--- /dev/null
+++ b/completions/mussh
@@ -0,0 +1,52 @@
+# mussh(1) completion -*- shell-script -*-
+
+_mussh()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | -V | -m | -t)
+ return
+ ;;
+ -d)
+ COMPREPLY=($(compgen -W '{0..2}' -- "$cur"))
+ return
+ ;;
+ -v)
+ COMPREPLY=($(compgen -W '{0..3}' -- "$cur"))
+ return
+ ;;
+ -i | -H | -C)
+ _filedir
+ return
+ ;;
+ -o | -po)
+ _xfunc ssh _ssh_options
+ return
+ ;;
+ -l | -L)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ -s)
+ _shells
+ return
+ ;;
+ -p | -h)
+ [[ $cur == *@* ]] && _user_at_host || _known_hosts_real -a -- "$cur"
+ return
+ ;;
+ -c)
+ compopt -o filenames
+ COMPREPLY+=($(compgen -c -- "$cur"))
+ return
+ ;;
+ esac
+
+ [[ $cur != -* ]] ||
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _mussh mussh
+
+# ex: filetype=sh
diff --git a/completions/mutt b/completions/mutt
new file mode 100644
index 0000000..1161487
--- /dev/null
+++ b/completions/mutt
@@ -0,0 +1,160 @@
+# mutt completion -*- shell-script -*-
+#
+# 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.
+
+# @param $1 (cur) Current word to complete
+_muttaddr()
+{
+ _muttaliases "$1"
+ _muttquery "$1"
+
+ COMPREPLY+=($(compgen -u -- "$1"))
+}
+
+# Find muttrc to use
+# @output muttrc filename
+_muttrc()
+{
+ # Search COMP_WORDS for '-F muttrc' or '-Fmuttrc' argument
+ set -- "${words[@]}"
+ while (($# > 0)); do
+ if [[ $1 == -F* ]]; then
+ if ((${#1} > 2)); then
+ muttrc="$(dequote "${1:2}")"
+ else
+ shift
+ [[ $1 ]] && muttrc="$(dequote "$1")"
+ fi
+ break
+ fi
+ shift
+ done
+
+ if [[ ! -v muttrc ]]; then
+ if [[ -f ~/.${muttcmd}rc ]]; then
+ muttrc=\~/.${muttcmd}rc
+ elif [[ -f ~/.${muttcmd}/${muttcmd}rc ]]; then
+ muttrc=\~/.${muttcmd}/${muttcmd}rc
+ fi
+ fi
+ printf "%s" "${muttrc-}"
+}
+
+# Recursively build list of sourced config files
+# @param $1 List of config files found so far
+# @param $2 Config file to process
+# @output List of config files
+_muttconffiles()
+{
+ local file sofar
+ local -a newconffiles
+
+ sofar=" $1 "
+ shift
+ while [[ ${1-} ]]; do
+ newconffiles=($(command sed -n 's|^source[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' "$(eval printf %s $1)"))
+ for file in ${newconffiles+"${newconffiles[@]}"}; do
+ __expand_tilde_by_ref file
+ [[ ! -f $file || $sofar == *\ $file\ * ]] && continue
+ sofar+=" $file"
+ sofar=" $(eval _muttconffiles \"$sofar\" $file) "
+ done
+ shift
+ done
+ printf '%s\n' $sofar
+}
+
+# @param $1 (cur) Current word to complete
+_muttaliases()
+{
+ local cur=$1 muttrc muttcmd=${words[0]}
+ local -a conffiles aliases
+
+ muttrc=$(_muttrc)
+ [[ -z $muttrc ]] && return
+
+ conffiles=($(eval _muttconffiles $muttrc $muttrc))
+ # shellcheck disable=SC2046
+ aliases=("$(command sed -n 's|^alias[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' \
+ $(eval echo "${conffiles[@]}"))")
+ COMPREPLY+=($(compgen -W "${aliases[*]}" -- "$cur"))
+}
+
+# @param $1 (cur) Current word to complete
+_muttquery()
+{
+ local cur=$1 querycmd muttcmd=${words[0]}
+ local -a queryresults
+
+ querycmd="$($muttcmd -Q query_command 2>/dev/null | command sed -e 's|^query_command=\"\(.*\)\"$|\1|' -e 's|%s|'$cur'|')"
+ if [[ -z $cur || -z $querycmd ]]; then
+ queryresults=()
+ else
+ __expand_tilde_by_ref querycmd
+ queryresults=($($querycmd |
+ command sed -n '2,$s|^\([^[:space:]]\{1,\}\).*|\1|p'))
+ fi
+
+ COMPREPLY+=($(compgen -W "${queryresults[*]}" -- "$cur"))
+}
+
+# @param $1 (cur) Current word to complete
+_muttfiledir()
+{
+ local cur=$1 folder muttrc spoolfile muttcmd=${words[0]}
+
+ muttrc=$(_muttrc)
+ if [[ $cur == [=+]* ]]; then
+ folder="$($muttcmd -F "$muttrc" -Q folder 2>/dev/null | command sed -e 's|^folder=\"\(.*\)\"$|\1|')"
+ : folder:=~/Mail
+
+ # Match any file in $folder beginning with $cur
+ # (minus the leading '=' sign).
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -- "$folder/${cur:1}"))
+ COMPREPLY=(${COMPREPLY[@]#$folder/})
+ return
+ elif [[ $cur == !* ]]; then
+ spoolfile="$($muttcmd -F "$muttrc" -Q spoolfile 2>/dev/null |
+ command sed -e 's|^spoolfile=\"\(.*\)\"$|\1|')"
+ [[ -n $spoolfile ]] && eval cur="${cur/^!/$spoolfile}"
+ fi
+ _filedir
+}
+
+_mutt()
+{
+ local cur prev words cword
+ _init_completion -n =+! || return
+
+ 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
+ ;;
+ *)
+ case $prev in
+ -*[afFHi])
+ _muttfiledir "$cur"
+ return
+ ;;
+ -*A)
+ _muttaliases "$cur"
+ return
+ ;;
+ -*[emQshpRvyzZ])
+ return
+ ;;
+ *)
+ _muttaddr "$cur"
+ return
+ ;;
+ esac
+ ;;
+ esac
+} &&
+ complete -F _mutt -o default mutt muttng
+
+# ex: filetype=sh
diff --git a/completions/mypy b/completions/mypy
new file mode 100644
index 0000000..534d575
--- /dev/null
+++ b/completions/mypy
@@ -0,0 +1,57 @@
+# mypy completion -*- shell-script -*-
+
+_mypy()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ [[ $cword -gt 2 && ${words[cword - 2]} == --shadow-file ]] &&
+ prev=--shadow-file # hack; takes two args
+
+ case $prev in
+ --help | --version | --python-version | --platform | --always-true | \
+ --always-false | --find-occurrences | --package | --command | -!(-*)[hVpc])
+ return
+ ;;
+ --config-file)
+ _filedir
+ return
+ ;;
+ --follow-imports)
+ COMPREPLY=($(compgen -W 'normal silent skip error' -- "$cur"))
+ return
+ ;;
+ --python-executable)
+ COMPREPLY=($(compgen -c -- "${cur:-py}"))
+ return
+ ;;
+ --*-dir | --*-report)
+ _filedir -d
+ return
+ ;;
+ --custom-typing | --module | -!(-*)m)
+ _xfunc python _python_modules
+ return
+ ;;
+ --shadow-file)
+ _filedir '@(py|pyi)'
+ return
+ ;;
+ --junit-xml)
+ _filedir xml
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir '@(py|pyi)'
+} &&
+ complete -F _mypy mypy
+
+# ex: filetype=sh
diff --git a/completions/mysql b/completions/mysql
new file mode 100644
index 0000000..9363133
--- /dev/null
+++ b/completions/mysql
@@ -0,0 +1,99 @@
+# mysql(1) completion -*- shell-script -*-
+
+_mysql_character_sets()
+{
+ local IFS=$' \t\n' reset=$(shopt -p failglob)
+ shopt -u failglob
+ local -a charsets=(/usr/share/m{ariadb,ysql}/charsets/*.xml)
+ $reset
+ charsets=("${charsets[@]##*/}")
+ charsets=("${charsets[@]%%?(Index|\*).xml}" utf8)
+ COMPREPLY+=($(compgen -W '${charsets[@]}' -- "$cur"))
+}
+
+_mysql()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --user | -!(-*)u)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ --database | -!(-*)D)
+ COMPREPLY=($(compgen -W "$(mysqlshow 2>/dev/null | command sed -ne '2d' -e 's/^|.\([^|]*\)|.*/\1/p')" -- "$cur"))
+ return
+ ;;
+
+ --host | -!(-*)h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --default-character-set)
+ _mysql_character_sets
+ return
+ ;;
+
+ --character-sets-dir | --ssl-capath)
+ _filedir -d
+ return
+ ;;
+ --socket | -!(-*)S)
+ _filedir sock
+ return
+ ;;
+ --protocol)
+ COMPREPLY=($(compgen -W 'tcp socket pipe memory' -- "$cur"))
+ return
+ ;;
+ --defaults-file | --defaults-extra-file | --tee)
+ _filedir
+ return
+ ;;
+ --ssl-ca | --ssl-cert)
+ _filedir '@(pem|cer|c?(e)rt)'
+ return
+ ;;
+ --ssl-key)
+ _filedir '@(pem|key)'
+ return
+ ;;
+ --port | --set-variable | --ssl-cipher | --connect_timeout | \
+ --max_allowed_packet | --prompt | --net_buffer_length | --select_limit | \
+ --max_join_size | --server-arg | --debug | --delimiter | --execute | --pager | \
+ -!(-*)[Pe])
+ return
+ ;;
+ --help | --version | -!(-*)[?IV])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ case $cur in
+ --*)
+ local help=$(_parse_help "$1")
+ help+=" --skip-comments --skip-ssl"
+
+ COMPREPLY=($(compgen -W "$help" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ ;;
+
+ # only complete long options
+ -)
+ compopt -o nospace
+ COMPREPLY=(--)
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W \
+ "$(mysqlshow 2>/dev/null | command sed -ne '2d' -e 's/^|.\([^|]*\)|.*/\1/p')" \
+ -- "$cur"))
+} &&
+ complete -F _mysql mysql
+
+# ex: filetype=sh
diff --git a/completions/mysqladmin b/completions/mysqladmin
new file mode 100644
index 0000000..5329534
--- /dev/null
+++ b/completions/mysqladmin
@@ -0,0 +1,63 @@
+# bash completion for mysqladmin -*- shell-script -*-
+
+_mysqladmin()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --user | -!(-*)u)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ --host | -!(-*)h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --character-sets-dir | --ssl-capath)
+ _filedir -d
+ return
+ ;;
+ --default-character-set)
+ _xfunc mysql _mysql_character_sets
+ return
+ ;;
+ --socket | -!(-*)S)
+ _filedir sock
+ return
+ ;;
+ --defaults-file | --defaults-extra-file)
+ _filedir
+ return
+ ;;
+ --ssl-ca | --ssl-cert)
+ _filedir '@(pem|cer|c?(e)rt)'
+ return
+ ;;
+ --ssl-key)
+ _filedir '@(pem|key)'
+ return
+ ;;
+ --count | --port | --set-variable | --sleep | --ssl-cipher | --wait | \
+ --connect_timeout | --shutdown_timeout | -!(-*)[cPOiw])
+ return
+ ;;
+ --help | --version | -!(-*)[?V])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+
+ COMPREPLY+=($(compgen -W 'create debug drop extended-status flush-hosts
+ flush-logs flush-status flush-tables flush-threads flush-privileges
+ kill password old-password ping processlist reload refresh shutdown
+ status start-slave stop-slave variables version' -- "$cur"))
+
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _mysqladmin mysqladmin
+
+# ex: filetype=sh
diff --git a/completions/nc b/completions/nc
new file mode 100644
index 0000000..6fb0994
--- /dev/null
+++ b/completions/nc
@@ -0,0 +1,51 @@
+# nc(1) completion -*- shell-script -*-
+
+_nc()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ case $prev in
+ -*[hIiMmOPpqVWw])
+ return
+ ;;
+ -*s)
+ if [[ ${words[*]} == *-6* ]]; then
+ _ip_addresses -6
+ __ltrim_colon_completions "$cur"
+ else
+ _ip_addresses
+ fi
+ return
+ ;;
+ -*T)
+ COMPREPLY=($(compgen -W 'critical inetcontrol lowcost lowdelay
+ netcontrol throughput reliability ef af{11..43} cs{0..7}' \
+ -- "$cur"))
+ return
+ ;;
+ -*X)
+ COMPREPLY=($(compgen -W '4 5 connect' -- "$cur"))
+ return
+ ;;
+ -*x)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ return
+ fi
+
+ # Complete 1st non-option arg only
+ local args
+ _count_args "" "-*[IiMmOPpqsTVWwXx]"
+ ((args == 1)) || return
+
+ _known_hosts_real -- "$cur"
+} &&
+ complete -F _nc nc
+
+# ex: filetype=sh
diff --git a/completions/ncftp b/completions/ncftp
new file mode 100644
index 0000000..c3f2cf1
--- /dev/null
+++ b/completions/ncftp
@@ -0,0 +1,27 @@
+# bash completion for ncftp -*- shell-script -*-
+
+_ncftp()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -u | -p | -P | -j | -F)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ return
+ fi
+
+ if [[ $cword -eq 1 && -f ~/.ncftp/bookmarks ]]; then
+ COMPREPLY=($(compgen -W '$(command sed -ne "s/^\([^,]\{1,\}\),.*$/\1/p" \
+ ~/.ncftp/bookmarks)' -- "$cur"))
+ fi
+
+} &&
+ complete -F _ncftp -o default ncftp
+
+# ex: filetype=sh
diff --git a/completions/nethogs b/completions/nethogs
new file mode 100644
index 0000000..5cd3650
--- /dev/null
+++ b/completions/nethogs
@@ -0,0 +1,26 @@
+# bash completion for nethogs(8) -*- shell-script -*-
+
+_nethogs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ -d)
+ # expect integer value
+ COMPREPLY+=($(compgen -W '{0..9}'))
+ compopt -o nospace
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" -h)' -- "$cur"))
+ return
+ fi
+
+ _available_interfaces -a
+} &&
+ complete -F _nethogs nethogs
+
+# ex: filetype=sh
diff --git a/completions/newlist b/completions/newlist
new file mode 100644
index 0000000..f1f6cf8
--- /dev/null
+++ b/completions/newlist
@@ -0,0 +1,25 @@
+# mailman newlist completion -*- shell-script -*-
+
+_newlist()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -l | --language | -u | --urlhost | -e | --emailhost | --help)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+} &&
+ complete -F _newlist newlist
+
+# ex: filetype=sh
diff --git a/completions/newusers b/completions/newusers
new file mode 100644
index 0000000..890a5fc
--- /dev/null
+++ b/completions/newusers
@@ -0,0 +1,30 @@
+# newusers(8) completion -*- shell-script -*-
+
+_newusers()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -c | --crypt)
+ COMPREPLY=($(compgen -W 'DES MD5 NONE SHA256 SHA512' -- "$cur"))
+ return
+ ;;
+ -s | --sha-rounds)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _newusers newusers
+
+# ex: filetype=sh
diff --git a/completions/ngrep b/completions/ngrep
new file mode 100644
index 0000000..7d16c8d
--- /dev/null
+++ b/completions/ngrep
@@ -0,0 +1,38 @@
+# ngrep(8) completion -*- shell-script -*-
+
+_ngrep()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | -V | -n | -A | -s | -S | -c | -P)
+ return
+ ;;
+ -I | -O)
+ _filedir 'pcap?(ng)'
+ return
+ ;;
+ -d)
+ _available_interfaces -a
+ COMPREPLY+=($(compgen -W 'any' -- "$cur"))
+ return
+ ;;
+ -W)
+ COMPREPLY=($(compgen -W 'normal byline single none' -- "$cur"))
+ return
+ ;;
+ -F)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ return
+ fi
+} &&
+ complete -F _ngrep ngrep
+
+# ex: filetype=sh
diff --git a/completions/nmap b/completions/nmap
new file mode 100644
index 0000000..482148e
--- /dev/null
+++ b/completions/nmap
@@ -0,0 +1,56 @@
+# bash completion for nmap -*- shell-script -*-
+
+_nmap()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -iL | -oN | -oX | -oS | -oG | ---excludefile | --resume | --stylesheet)
+ _filedir
+ return
+ ;;
+ -oA | --datadir)
+ _filedir -d
+ return
+ ;;
+ -e)
+ _available_interfaces -a
+ return
+ ;;
+ -b | --dns-servers)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ # strip everything following a :, inclusive
+ # strip everything following a =, exclusive
+ # expand -X; -Y to -X -Y
+ # expand -X/-Y/-Z to -X -Y -Z
+ # expand -X/Y/Z to -X -Y -Z
+ # expand --foo/bar to --foo --bar
+ # strip everything following a non-option name or = char
+ # TODO: should expand -T<0-5> to -T0 ... -T5
+ COMPREPLY=($(compgen -W "$(
+ "$1" --help 2>&1 | command sed \
+ -e "s/:.*$//" \
+ -e "s/=.*$/=/" \
+ -e "s/;[[:space:]]*-/ -/g" \
+ -e "s/\/-/ -/g" \
+ -e "/^[[:space:]]*-[^-]/s/\/\([^-]\)/ -\1/g" \
+ -e "/^[[:space:]]*--/s/\/\([^-]\)/ --\1/g" \
+ -e "s/[^[:space:]a-zA-Z0-9=-].*$//"
+ )" \
+ -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _known_hosts_real -- "$cur"
+ fi
+} &&
+ complete -F _nmap nmap
+
+# ex: filetype=sh
diff --git a/completions/nproc b/completions/nproc
new file mode 100644
index 0000000..50273f0
--- /dev/null
+++ b/completions/nproc
@@ -0,0 +1,23 @@
+# nproc(1) completion -*- shell-script -*-
+
+_nproc()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | --ignore)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _nproc nproc
+
+# ex: filetype=sh
diff --git a/completions/nslookup b/completions/nslookup
new file mode 100644
index 0000000..3341b1f
--- /dev/null
+++ b/completions/nslookup
@@ -0,0 +1,86 @@
+# bash completion for nslookup -*- shell-script -*-
+
+_bind_queryclass()
+{
+ COMPREPLY+=($(compgen -W 'IN CH HS ANY' -- "$cur"))
+}
+
+_bind_querytype()
+{
+ # https://en.wikipedia.org/wiki/List_of_DNS_record_types
+ COMPREPLY+=($(compgen -W 'A AAAA AFSDB APL CERT CNAME DHCID DLV DNAME
+ DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR
+ RRSIG RP SIG SOA SPF SRV SSHFP TXT' -- "$cur"))
+}
+
+_nslookup()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ case $cur in
+ -class=* | -cl=*)
+ cur=${cur#*=}
+ _bind_queryclass
+ return
+ ;;
+ -querytype=* | -type=* | -q=* | -ty=*)
+ cur=${cur#*=}
+ _bind_querytype
+ return
+ ;;
+ -?*=*)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-all -class= -debug -nodebug -d2 -nod2
+ -domain= -search -nosearch -port= -querytype= -recurse -norecurse
+ -retry= -timeout= -vc -novc -fail -nofail' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ local args
+ _count_args =
+ if ((args <= 2)); then
+ _known_hosts_real -- "$cur"
+ [[ $args -eq 1 && $cur == @(|-) ]] && COMPREPLY+=(-)
+ fi
+} &&
+ complete -F _nslookup nslookup
+
+_host()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -c)
+ _bind_queryclass
+ return
+ ;;
+ -t)
+ _bind_querytype
+ return
+ ;;
+ -m)
+ COMPREPLY=($(compgen -W 'trace record usage' -- "$cur"))
+ return
+ ;;
+ -N | -R | -W)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ _known_hosts_real -- "$cur"
+} &&
+ complete -F _host host
+
+# ex: filetype=sh
diff --git a/completions/nsupdate b/completions/nsupdate
new file mode 100644
index 0000000..68df333
--- /dev/null
+++ b/completions/nsupdate
@@ -0,0 +1,40 @@
+# bash completion for nsupdate(1) -*- shell-script -*-
+
+_nsupdate()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*[VLprtu])
+ return
+ ;;
+ -*k)
+ _filedir key
+ return
+ ;;
+ -*R)
+ cur=${cur:=/dev/}
+ _filedir
+ return
+ ;;
+ -*y)
+ if [[ $cur == h* ]]; then
+ COMPREPLY=($(compgen -W "hmac-{md5,sha{1,224,256,384,512}}" \
+ -S : -- "$cur"))
+ [[ ${COMPREPLY-} == *: ]] && compopt -o nospace
+ fi
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _nsupdate nsupdate
+
+# ex: filetype=sh
diff --git a/completions/ntpdate b/completions/ntpdate
new file mode 100644
index 0000000..f6ee8f5
--- /dev/null
+++ b/completions/ntpdate
@@ -0,0 +1,35 @@
+# bash completion for ntpdate -*- shell-script -*-
+
+_ntpdate()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*k)
+ _filedir
+ return
+ ;;
+ -*U)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ -*p)
+ COMPREPLY=($(compgen -W '{1..8}' -- "$cur"))
+ return
+ ;;
+
+ -*[aeot])
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ else
+ _known_hosts_real -- "$cur"
+ fi
+} &&
+ complete -F _ntpdate ntpdate
+
+# ex: filetype=sh
diff --git a/completions/oggdec b/completions/oggdec
new file mode 100644
index 0000000..97bde20
--- /dev/null
+++ b/completions/oggdec
@@ -0,0 +1,38 @@
+# bash completion for oggdec(1) -*- shell-script -*-
+
+_oggdec()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | -!(-*)[hV]*)
+ return
+ ;;
+ --bits | -!(-*)b)
+ COMPREPLY=($(compgen -W "8 16" -- "$cur"))
+ return
+ ;;
+ --endianness | --sign | -!(-*)[es])
+ COMPREPLY=($(compgen -W "0 1" -- "$cur"))
+ return
+ ;;
+ --output | -!(-*)o)
+ _filedir wav
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir ogg
+} &&
+ complete -F _oggdec oggdec
+
+# ex: filetype=sh
diff --git a/completions/op b/completions/op
new file mode 100644
index 0000000..31d6475
--- /dev/null
+++ b/completions/op
@@ -0,0 +1,59 @@
+# op (1Password CLI) completion -*- shell-script -*-
+
+_op_commands()
+{
+ "$@" --help 2>/dev/null |
+ awk '/^(Available |Sub)commands/{flag=1;next}/^ /&&flag{print $1}'
+}
+
+_op_command_options()
+{
+ case $cur in
+ -*)
+ for i in "${!words[@]}"; do
+ [[ ${words[i]} == -* || $i -eq 0 ]] && unset "words[i]"
+ done
+ COMPREPLY=($(compgen -W \
+ '$(_parse_usage "$1" "${words[*]} --help") --help' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return 0
+ ;;
+ esac
+ return 1
+}
+
+_op()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local command i
+ for ((i = 1; i < cword; i++)); do
+ case ${words[i]} in
+ --help | --version) return ;;
+ -*) ;;
+ *)
+ command=${words[i]}
+ break
+ ;;
+ esac
+ done
+
+ if [[ ! -v command && $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ [[ -v command ]] && _op_command_options "$1" && return
+
+ if [[ ! -v command || $command == "$prev" ]]; then
+ COMPREPLY=($(compgen -W '$(_op_commands "$1" ${command-})' -- "$cur"))
+ [[ ${COMPREPLY-} ]] && return
+ fi
+
+ # TODO specific command and subcommand completions
+} &&
+ complete -F _op op
+
+# ex: filetype=sh
diff --git a/completions/openssl b/completions/openssl
new file mode 100644
index 0000000..dd77092
--- /dev/null
+++ b/completions/openssl
@@ -0,0 +1,138 @@
+# bash completion for openssl -*- shell-script -*-
+
+_openssl_sections()
+{
+ local config f
+
+ # check if a specific configuration file is used
+ for ((i = 2; i < cword; i++)); do
+ if [[ ${words[i]} == -config ]]; then
+ config=${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
+
+ COMPREPLY=($(compgen -W "$(awk '/\[.*\]/ {print $2}' $config)" -- "$cur"))
+}
+
+_openssl_digests()
+{
+ "$1" dgst -h 2>&1 |
+ awk '/^-.*[ \t]to use the .* message digest algorithm/ { print $1 }'
+ local -a digests=($("$1" help 2>&1 |
+ command sed -ne '/^Message Digest commands/,/^[[:space:]]*$/p' |
+ command sed -e 1d))
+ printf "%s\n" "${digests[@]/#/-}"
+}
+
+_openssl()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local commands command options formats
+
+ 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
+ sha224 sha256 sha384 sha512 genpkey pkey pkeyparam pkeyutl'
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W "$commands" -- "$cur"))
+ else
+ command=${words[1]}
+ case $prev in
+ -CA | -CAfile | -CAkey | -CAserial | -cert | -certfile | -config | -content | \
+ -dcert | -dkey | -dhparam | -extfile | -in | -inkey | -kfile | -key | -keyout | \
+ -out | -oid | -paramfile | -peerkey | -prvrify | -rand | -recip | -revoke | \
+ -sess_in | -sess_out | -spkac | -sigfile | -sign | -signkey | -signer | \
+ -signature | -ss_cert | -untrusted | -verify | -writerand)
+ _filedir
+ return
+ ;;
+ -outdir | -CApath)
+ _filedir -d
+ return
+ ;;
+ -name | -crlexts | -extensions)
+ _openssl_sections
+ return
+ ;;
+ -inform | -outform | -keyform | -certform | -CAform | -CAkeyform | -dkeyform | \
+ -dcertform | -peerform)
+ formats='DER PEM'
+ case $command in
+ x509)
+ formats+=" NET"
+ ;;
+ smime)
+ formats+=" SMIME"
+ ;;
+ pkeyutl)
+ formats+=" ENGINE"
+ ;;
+ esac
+ COMPREPLY=($(compgen -W "$formats" -- "$cur"))
+ return
+ ;;
+ -connect)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -starttls)
+ COMPREPLY=($(compgen -W '
+ smtp pop3 imap ftp xmpp xmpp-server telnet irc mysql
+ postgres lmtp nntp sieve ldap
+ ' -- "$cur"))
+ return
+ ;;
+ -cipher)
+ COMPREPLY=($(IFS=: compgen -W "$($1 ciphers)" -- "$cur"))
+ return
+ ;;
+ -kdf)
+ COMPREPLY=($(compgen -W 'TLS1-PRF HKDF' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ # possible options for the command
+ options=$(_parse_help "$1" "$command -help" 2>/dev/null)
+ case $command in
+ dgst | req | x509) options+=" $(_openssl_digests $1)" ;;
+ 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 -o default openssl
+
+# ex: filetype=sh
diff --git a/completions/opera b/completions/opera
new file mode 100644
index 0000000..f2bc8c3
--- /dev/null
+++ b/completions/opera
@@ -0,0 +1,47 @@
+# opera(1) completion -*- shell-script -*-
+
+_opera()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ ?(-)-widget | ?(-)-urllist | ?(-)-uiparserlog | ?(-)-uiwidgetsparserlog | \
+ ?(-)-profilinglog)
+ _filedir
+ return
+ ;;
+ ?(-)-[psb]d)
+ _filedir -d
+ return
+ ;;
+ ?(-)-remote)
+ COMPREPLY=($(compgen -W 'openURL\\( openFile\\( openM2\\(
+ openComposer\\( addBookmark\\( raise\\(\\) lower\\(\\)' \
+ -- "$cur"))
+ [[ ${COMPREPLY-} == *\( ]] && compopt -o nospace
+ return
+ ;;
+ ?(-)-windowname)
+ COMPREPLY=($(compgen -W 'first last opera{1..9}' -- "$cur"))
+ return
+ ;;
+ ?(-)-geometry | ?(-)-window | ?(-)-display | ?(-)-urllistloadtimeout | \
+ ?(-)-delaycustomizations | ?(-)-dialogtest | ?(-)-inidialogtest | \
+ ?(-)-gputest)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir '@(?([xX]|[sS])[hH][tT][mM]?([lL]))'
+} &&
+ complete -F _opera opera
+
+# ex: filetype=sh
diff --git a/completions/optipng b/completions/optipng
new file mode 100644
index 0000000..0f6b40e
--- /dev/null
+++ b/completions/optipng
@@ -0,0 +1,52 @@
+# optipng(1) completion -*- shell-script -*-
+
+_optipng()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -'?' | -h | --help | -f)
+ return
+ ;;
+ -o)
+ COMPREPLY=($(compgen -W '{0..7}' -- "$cur"))
+ return
+ ;;
+ -out | -log)
+ _filedir
+ return
+ ;;
+ -dir)
+ _filedir -d
+ return
+ ;;
+ -i)
+ COMPREPLY=($(compgen -W '0 1' -- "$cur"))
+ return
+ ;;
+ -zc | -zm)
+ COMPREPLY=($(compgen -W '{1..9}' -- "$cur"))
+ return
+ ;;
+ -zw)
+ COMPREPLY=($(compgen -W '256 512 1k 2k 4k 8k 16k 32k' \
+ -- "$cur"))
+ return
+ ;;
+ -strip)
+ COMPREPLY=($(compgen -W 'all' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir '@(png|bmp|gif|pnm|tif?(f))'
+} &&
+ complete -F _optipng optipng
+
+# ex: filetype=sh
diff --git a/completions/p4 b/completions/p4
new file mode 100644
index 0000000..ed5f20c
--- /dev/null
+++ b/completions/p4
@@ -0,0 +1,51 @@
+# Perforce completion -*- shell-script -*-
+# by Frank Cusack <frank@google.com>
+
+_p4()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local p4commands p4filetypes
+
+ # rename isn't really a command
+ p4commands="$(p4 help commands 2>/dev/null | awk 'NF>3 {print $1}')"
+ p4filetypes="ctext cxtext ktext kxtext ltext tempobj ubinary \
+ uresource uxbinary xbinary xltext xtempobj xtext \
+ text binary resource"
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W "$p4commands" -- "$cur"))
+ elif ((cword == 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 ((cword > 2)); then
+ case $prev in
+ -t)
+ case ${words[cword - 2]} in
+ add | edit | reopen)
+ COMPREPLY=($(compgen -W "$p4filetypes" -- "$cur"))
+ ;;
+ *) ;;
+
+ esac
+ ;;
+ *) ;;
+
+ esac
+ fi
+
+} &&
+ complete -F _p4 -o default p4 g4
+
+# ex: filetype=sh
diff --git a/completions/pack200 b/completions/pack200
new file mode 100644
index 0000000..1a6ded7
--- /dev/null
+++ b/completions/pack200
@@ -0,0 +1,74 @@
+# pack200(1) completion -*- shell-script -*-
+
+_pack200()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -S | --segment-limit | -P | --pass-file | -C | --class-attribute | \
+ -F | --field-attribute | -M | --method-attribute | -D | --code-attribute | \
+ '-?' | -h | --help | -V | --version | -J)
+ return
+ ;;
+ -E | --effort)
+ COMPREPLY=($(compgen -W '{0..9}' -- "$cur"))
+ return
+ ;;
+ -H | --deflate-hint)
+ COMPREPLY=($(compgen -W 'true false keep' -- "$cur"))
+ return
+ ;;
+ -m | --modification-time)
+ COMPREPLY=($(compgen -W 'latest keep' -- "$cur"))
+ return
+ ;;
+ -U | --unknown-attribute)
+ COMPREPLY=($(compgen -W 'error strip pass' -- "$cur"))
+ return
+ ;;
+ -f | --config-file)
+ _filedir properties
+ return
+ ;;
+ -l | --log-file)
+ COMPREPLY=($(compgen -W '-' -- "$cur"))
+ _filedir log
+ return
+ ;;
+ -r | --repack)
+ _filedir jar
+ return
+ ;;
+ esac
+
+ $split && return
+
+ # Check if a pack or a jar was already given.
+ local i pack=false jar=false
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ case ${words[i]} in
+ *.pack | *.pack.gz) pack=true ;;
+ *.jar) jar=true ;;
+ esac
+ done
+
+ if ! $pack; then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--no-gzip --gzip --strip-debug
+ --no-keep-file-order --segment-limit= --effort= --deflate-hint=
+ --modification-time= --pass-file= --unknown-attribute=
+ --class-attribute= --field-attribute= --method-attribute=
+ --code-attribute= --config-file= --verbose --quiet --log-file=
+ --help --version -J --repack' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _filedir 'pack?(.gz)'
+ fi
+ elif ! $jar; then
+ _filedir jar
+ fi
+} &&
+ complete -F _pack200 pack200
+
+# ex: filetype=sh
diff --git a/completions/passwd b/completions/passwd
new file mode 100644
index 0000000..652a41e
--- /dev/null
+++ b/completions/passwd
@@ -0,0 +1,24 @@
+# passwd(1) completion -*- shell-script -*-
+
+_passwd()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --minimum | --maximum | --warning | --inactive | --help | --usage | -!(-*)[nxwi?])
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ return
+ fi
+
+ _allowed_users
+} &&
+ complete -F _passwd passwd
+
+# ex: filetype=sh
diff --git a/completions/patch b/completions/patch
new file mode 100644
index 0000000..e883d9c
--- /dev/null
+++ b/completions/patch
@@ -0,0 +1,70 @@
+# patch(1) completion -*- shell-script -*-
+
+_patch()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --strip | --ifdef | --prefix | --basename-prefix | --suffix | --get | \
+ -!(-*)[pDBYzg])
+ return
+ ;;
+ --fuzz | -!(-*)F)
+ COMPREPLY=($(compgen -W '{0..3}' -- "$cur"))
+ return
+ ;;
+ --input | -!(-*)i)
+ _filedir '@(?(d)patch|dif?(f))'
+ return
+ ;;
+ --output | --reject-file | -!(-*)[or])
+ [[ ! $cur || $cur == - ]] && COMPREPLY=(-)
+ _filedir
+ return
+ ;;
+ --quoting-style)
+ COMPREPLY=($(compgen -W 'literal shell shell-always c escape' \
+ -- "$cur"))
+ return
+ ;;
+ --version-control | -!(-*)V)
+ COMPREPLY=($(compgen -W 'simple numbered existing' -- "$cur"))
+ return
+ ;;
+ --directory | -!(-*)d)
+ _filedir -d
+ return
+ ;;
+ --reject-format)
+ COMPREPLY=($(compgen -W 'context unified' -- "$cur"))
+ return
+ ;;
+ --read-only)
+ COMPREPLY=($(compgen -W 'ignore warn fail' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ local args
+ _count_args
+ case $args in
+ 1)
+ _filedir
+ ;;
+ 2)
+ _filedir '@(?(d)patch|dif?(f))'
+ ;;
+ esac
+} &&
+ complete -F _patch patch
+
+# ex: filetype=sh
diff --git a/completions/pdftotext b/completions/pdftotext
new file mode 100644
index 0000000..a3501ba
--- /dev/null
+++ b/completions/pdftotext
@@ -0,0 +1,39 @@
+# bash completion for pdftotext(1) -*- shell-script -*-
+
+_pdftotext()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | -help | --help | -'?' | -f | -l | -r | -x | -y | -W | -H | -fixed | -opw | -upw)
+ return
+ ;;
+ -enc)
+ COMPREPLY=($(compgen -W '$("$1" -listenc 2>/dev/null |
+ command sed -e 1d)' -- "$cur"))
+ return
+ ;;
+ -eol)
+ COMPREPLY=($(compgen -W "unix dos mac" -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* && ${prev,,} != *.pdf ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ case ${prev,,} in
+ - | *.txt) ;;
+ *.pdf)
+ COMPREPLY=($(compgen -W '-' -- "$cur"))
+ _filedir txt
+ ;;
+ *) _filedir pdf ;;
+ esac
+} &&
+ complete -F _pdftotext pdftotext
+
+# ex: filetype=sh
diff --git a/completions/perl b/completions/perl
new file mode 100644
index 0000000..9823d73
--- /dev/null
+++ b/completions/perl
@@ -0,0 +1,146 @@
+# bash completion for perl -*- shell-script -*-
+
+_perl_helper()
+{
+ COMPREPLY=($(compgen -P "$prefix" -W \
+ "$(${2:-perl} ${BASH_SOURCE[0]%/*}/../helpers/perl $1 $cur)" \
+ -- "$cur"))
+ [[ $1 == functions ]] || __ltrim_colon_completions "$prefix$cur"
+}
+
+_perl()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local prefix="" temp optPrefix optSuffix
+
+ # If option not followed by whitespace, reassign prev and cur
+ if [[ $cur == -?* ]]; then
+ temp=$cur
+ prev=${temp:0:2}
+ cur=${temp:2}
+ if [[ $prev == -d && $cur == t* ]]; then
+ prev=-dt
+ cur=${cur:1}
+ fi
+ optPrefix=-P$prev
+ optSuffix=-S/
+ prefix=$prev
+
+ case $prev in
+ -*[DeEiFl])
+ return
+ ;;
+ -*[Ix])
+ local IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=($(compgen -d $optPrefix $optSuffix -- "$cur"))
+ return
+ ;;
+ -*[mM])
+ temp="${cur#-}"
+ prefix+="${cur%$temp}"
+ cur="$temp"
+ _perl_helper modules $1
+ return
+ ;;
+ -*V)
+ if [[ $cur == :* ]]; then
+ temp="${cur##+(:)}"
+ prefix+="${cur%$temp}"
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -P "$prefix" -W \
+ '$($1 -MConfig -e "print join \"\\n\",
+ keys %Config::Config" 2>/dev/null)' -- "$temp"))
+ __ltrim_colon_completions "$prefix$temp"
+ fi
+ return
+ ;;
+ -*d | -*dt)
+ if [[ $cur == :* ]]; then
+ temp="${cur#:}"
+ prefix="$prefix${cur%$temp}"
+ cur="Devel::$temp"
+ _perl_helper modules $1
+ fi
+ ;;
+ esac
+
+ # Unlike other perl options, having a space between the `-e' and
+ # `-E' options and their arguments, e.g. `perl -e "exit 2"', is
+ # valid syntax. However, the argument is neither a filename nor a
+ # directory, but one line of perl program, thus do not suggest
+ # _filedir completion.
+ elif [[ $prev == -e ]] || [[ $prev == -E ]]; then
+ return
+
+ # Likewise, `-I' also accepts a space between option and argument
+ # and it takes a directory as value.
+ elif [[ $prev == -I ]]; then
+ local IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=($(compgen -d ${optPrefix-} ${optSuffix-} -- "$cur"))
+ return
+
+ elif [[ $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 perl
+
+_perldoc()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local prefix="" temp
+
+ # 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
+
+ local perl="${1%doc}"
+ [[ $perl == "$1" ]] || ! type $perl &>/dev/null && perl=
+
+ case $prev in
+ -*[hVnoMwL])
+ return
+ ;;
+ -*d)
+ _filedir
+ return
+ ;;
+ -*f)
+ _perl_helper functions $perl
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ else
+ # return available modules (unless it is clearly a file)
+ if [[ $cur != @(*/|[.~])* ]]; then
+ _perl_helper perldocs $perl
+ if [[ $cur == p* ]]; then
+ COMPREPLY+=($(compgen -W \
+ '$(PERLDOC_PAGER=cat "$1" -u perl | \
+ command sed -ne "/perl.*Perl overview/,/perlwin32/p" | \
+ awk "\$NF=2 && \$1 ~ /^perl/ { print \$1 }")' \
+ -- "$cur"))
+ fi
+ fi
+ _filedir 'p@([lm]|od)'
+ fi
+} &&
+ complete -F _perldoc -o bashdefault perldoc
+
+# ex: filetype=sh
diff --git a/completions/perlcritic b/completions/perlcritic
new file mode 100644
index 0000000..7843549
--- /dev/null
+++ b/completions/perlcritic
@@ -0,0 +1,51 @@
+# perlcritic(1) completion -*- shell-script -*-
+
+_perlcritic()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | --top | --include | --exclude | --single-policy | \
+ --colo?(u)r-severity-* | --program-extensions | -[?HVs])
+ return
+ ;;
+ --severity)
+ COMPREPLY=($(compgen -W "{1..5} brutal cruel harsh stern gentle" \
+ -- "$cur"))
+ return
+ ;;
+ --profile | -p)
+ _filedir perlcriticrc
+ return
+ ;;
+ --theme)
+ COMPREPLY=($(compgen -W '$("$1" --list-themes 2>/dev/null)' \
+ -- "$cur"))
+ return
+ ;;
+ --profile-strictness)
+ COMPREPLY=($(compgen -W 'warn fatal quiet' -- "$cur"))
+ return
+ ;;
+ --verbose)
+ COMPREPLY=($(compgen -W '{1..11}' -- "$cur"))
+ return
+ ;;
+ --pager)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir 'p[lm]'
+} &&
+ complete -F _perlcritic perlcritic
+
+# ex: filetype=sh
diff --git a/completions/perltidy b/completions/perltidy
new file mode 100644
index 0000000..4404cf8
--- /dev/null
+++ b/completions/perltidy
@@ -0,0 +1,55 @@
+# perltidy(1) completion -*- shell-script -*-
+
+_perltidy()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ case $prev in
+ -h | --help)
+ return
+ ;;
+ -o)
+ _filedir
+ return
+ ;;
+ esac
+
+ case $cur in
+ -pro=*)
+ cur="${cur#*=}"
+ _filedir
+ return
+ ;;
+ -ole=*)
+ COMPREPLY=($(compgen -W 'dos win mac unix' -- "${cur#*=}"))
+ return
+ ;;
+ -bt=* | -pt=* | -sbt=* | -bvt=* | -pvt=* | -sbvt=* | -bvtc=* | -pvtc=* | -sbvtc=* | \
+ -cti=* | -kbl=* | -vt=*)
+ COMPREPLY=($(compgen -W '0 1 2' -- "${cur#*=}"))
+ return
+ ;;
+ -vtc=*)
+ COMPREPLY=($(compgen -W '0 1' -- "${cur#*=}"))
+ return
+ ;;
+ -cab=*)
+ COMPREPLY=($(compgen -W '0 1 2 3' -- "${cur#*=}"))
+ return
+ ;;
+ -*=)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _filedir 'p[lm]|t'
+ fi
+} &&
+ complete -F _perltidy perltidy
+
+# ex: filetype=sh
diff --git a/completions/pgrep b/completions/pgrep
new file mode 100644
index 0000000..62dbb65
--- /dev/null
+++ b/completions/pgrep
@@ -0,0 +1,62 @@
+# pgrep(1) and pkill(1) completion -*- shell-script -*-
+
+_pgrep()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --delimiter | --pgroup | --session | --terminal | -!(-*)[cdgJMNstTz])
+ return
+ ;;
+ --signal)
+ _signals
+ return
+ ;;
+ --pidfile | -!(-*)F)
+ _filedir
+ return
+ ;;
+ --group | -!(-*)G)
+ _gids
+ return
+ ;;
+ -j)
+ COMPREPLY=($(compgen -W 'any none' -- "$cur"))
+ return
+ ;;
+ --parent | --ns | -!(-*)P)
+ _pids
+ return
+ ;;
+ --euid | --uid | -!(-*)[uU])
+ _uids
+ return
+ ;;
+ --nslist)
+ local prefix=
+ [[ $cur == *,* ]] && prefix="${cur%,*},"
+ COMPREPLY=(
+ $(IFS="$IFS," compgen -W '$($1 --help 2>&1 |
+ command sed -ne "s/^[[:space:]]*Available namespaces://p")' \
+ -- "${cur##*,}"))
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local help=$(_parse_help "$1")
+ [[ $help ]] || help='$("$1" --usage 2>&1 |
+ command sed -e "s/\[-signal\]//" -e "s/\[-SIGNAL\]//" |
+ _parse_usage -)'
+ COMPREPLY=($(compgen -W "$help" -- "$cur"))
+ [[ $cword -eq 1 && $1 == *pkill ]] && _signals -
+ return
+ fi
+
+ _pnames -s
+} &&
+ complete -F _pgrep pgrep pkill
+
+# ex: filetype=sh
diff --git a/completions/pidof b/completions/pidof
new file mode 100644
index 0000000..a11b432
--- /dev/null
+++ b/completions/pidof
@@ -0,0 +1,27 @@
+# pidof(8) completion -*- shell-script -*-
+
+_pidof()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | -V | --version | -!(-*)[hV]*)
+ return
+ ;;
+ --omit-pid | -!(-*)o)
+ _pids
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _pnames
+} &&
+ complete -F _pidof pidof
+
+# ex: filetype=sh
diff --git a/completions/pine b/completions/pine
new file mode 100644
index 0000000..319c8d5
--- /dev/null
+++ b/completions/pine
@@ -0,0 +1,32 @@
+# pine/alpine completion -*- shell-script -*-
+
+_pine()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -help | -d | -f | -c | -I | -n | -url | -copy_pinerc | -copy_abook)
+ return
+ ;;
+ -attach | -attachlist | -attach_and_delete | -p | -P | -pinerc | -passfile | -x)
+ _filedir
+ return
+ ;;
+ -sort)
+ COMPREPLY=($(compgen -W 'arrival subject threaded orderedsubject
+ date from size score to cc' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W '$(awk "{print \$1}" ~/.addressbook \
+ 2>/dev/null)' -- "$cur"))
+ fi
+} &&
+ complete -F _pine pine alpine
+
+# ex: filetype=sh
diff --git a/completions/ping b/completions/ping
new file mode 100644
index 0000000..446f026
--- /dev/null
+++ b/completions/ping
@@ -0,0 +1,71 @@
+# ping(8) completion -*- shell-script -*-
+
+_ping()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ local ipvx
+
+ case $prev in
+ -*[cFGghilmPpstVWwz])
+ return
+ ;;
+ -*I)
+ _available_interfaces -a
+ return
+ ;;
+ -*M)
+ # Path MTU strategy in Linux, mask|time in FreeBSD
+ local opts="do want dont"
+ [[ $OSTYPE == *bsd* ]] && opts="mask time"
+ COMPREPLY=($(compgen -W '$opts' -- "$cur"))
+ return
+ ;;
+ -*N)
+ if [[ $cur != *= ]]; then
+ COMPREPLY=($(compgen -W 'name ipv6 ipv6-global ipv6-sitelocal
+ ipv6-linklocal ipv6-all ipv4 ipv4-all subject-ipv6=
+ subject-ipv4= subject-name= subject-fqdn=' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+ return
+ ;;
+ -*Q)
+ # TOS in Linux, "somewhat quiet" (no args) in FreeBSD
+ if [[ $OSTYPE != *bsd* ]]; then
+ COMPREPLY=($(compgen -W '{0..7}' -- "$cur"))
+ return
+ fi
+ ;;
+ -*S)
+ # Socket sndbuf in Linux, source IP in FreeBSD
+ [[ $OSTYPE == *bsd* ]] && _ip_addresses
+ return
+ ;;
+ -*T)
+ # Timestamp option in Linux, TTL in FreeBSD
+ [[ $OSTYPE == *bsd* ]] ||
+ COMPREPLY=($(compgen -W 'tsonly tsandaddr' -- "$cur"))
+ return
+ ;;
+ -*4*)
+ ipvx=-4
+ ;;
+ -*6*)
+ ipvx=-6
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ return
+ fi
+
+ [[ $1 == *6 ]] && ipvx=-6
+ _known_hosts_real ${ipvx-} -- "$cur"
+} &&
+ complete -F _ping ping ping6
+
+# ex: filetype=sh
diff --git a/completions/pkg-config b/completions/pkg-config
new file mode 100644
index 0000000..b9db167
--- /dev/null
+++ b/completions/pkg-config
@@ -0,0 +1,45 @@
+# bash completion for pkgconfig -*- shell-script -*-
+
+_pkg_config()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --define-variable | --atleast-version | --atleast-pkgconfig-version | \
+ --exact-version | --max-version)
+ # argument required but no completions available
+ return
+ ;;
+ --variable)
+ local word
+ for word in "${words[@]:1}"; do
+ if [[ $word != -* ]]; then
+ COMPREPLY=($(compgen -W \
+ '$("$1" $word --print-variables 2>/dev/null)' \
+ -- "$cur"))
+ break
+ fi
+ done
+ return
+ ;;
+ -\? | --help | --version | --usage)
+ # all other arguments are noop with these
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ COMPREPLY=($(compgen -W "$($1 --list-all \
+ 2>/dev/null | awk '{print $1}')" -- "$cur"))
+ _filedir pc
+ fi
+} &&
+ complete -F _pkg_config pkg-config
+
+# ex: filetype=sh
diff --git a/completions/pkg-get b/completions/pkg-get
new file mode 100644
index 0000000..72bd0a0
--- /dev/null
+++ b/completions/pkg-get
@@ -0,0 +1,72 @@
+# pkg-get.completion completion -*- shell-script -*-
+#
+# Copyright 2006 Yann Rouillard <yann@opencsw.org>
+
+_pkg_get_get_catalog_file()
+{
+ local url="$1"
+ local catalog_file i conffile
+
+ for file in /etc/opt/csw/pkg-get.conf /opt/csw/etc/pkg-get.conf /etc/pkg-get.conf; do
+ if [[ -f $file ]]; then
+ conffile="$file"
+ break
+ fi
+ done
+ conffile="${conffile:-/opt/csw/etc/pkg-get.conf}"
+
+ if [[ -z $url ]]; then
+ url=$(awk -F= ' $1=="url" { print $2 }' $conffile)
+ fi
+
+ catalog_file="${url##*//}"
+ catalog_file="${catalog_file%%/*}"
+ catalog_file="/var/pkg-get/catalog-$catalog_file"
+
+ echo "$catalog_file"
+} &&
+ _pkg_get()
+ {
+ local cur prev file catalog_file url command
+ COMPREPLY=()
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ prev="${COMP_WORDS[COMP_CWORD - 1]}"
+
+ if [[ ${prev} == "-s" ]]; then
+ return 1
+ fi
+
+ local i=${#COMP_WORDS[*]}
+ while ((i > 0)); do
+ if [[ ${COMP_WORDS[--i]} == -s ]]; then
+ url="${COMP_WORDS[i + 1]}"
+ fi
+ if [[ ${COMP_WORDS[i]} == @(-[aDdiUu]|available|describe|download|install|list|updatecatalog|upgrade) ]]; then
+ command="${COMP_WORDS[i]}"
+ fi
+ done
+
+ if [[ -v command ]]; then
+ if [[ $command == @(-[Ddi]|describe|download|install) ]]; then
+ catalog_file=$(_pkg_get_get_catalog_file "$url")
+ if [[ -f $catalog_file ]]; then
+ local packages_list=$(awk ' $0 ~ /BEGIN PGP SIGNATURE/ { exit } $1 ~ /^Hash:/ || $1 ~ /^ *(-|#|$)/ { next } { print $1 }' $catalog_file)
+ COMPREPLY=($(compgen -W "${packages_list}" -- ${cur}))
+ fi
+ fi
+ return
+ fi
+
+ if [[ ${cur} == -* ]]; then
+ local opts="-c -d -D -f -i -l -s -S -u -U -v"
+ COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+ return
+ fi
+
+ local commands="available describe download install list \
+ updatecatalog upgrade"
+ COMPREPLY=($(compgen -W "${commands}" -- ${cur}))
+ } &&
+ complete -F _pkg_get pkg-get
+
+# ex: filetype=sh
diff --git a/completions/pkg_delete b/completions/pkg_delete
new file mode 100644
index 0000000..2abb671
--- /dev/null
+++ b/completions/pkg_delete
@@ -0,0 +1,18 @@
+# bash completion for *BSD package management tools -*- shell-script -*-
+
+_pkg_delete()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local pkgdir=${PKG_DBDIR:-/var/db/pkg}/
+
+ [[ $prev == -o || $prev == -p || $prev == -W ]] && return
+
+ COMPREPLY=($(compgen -d -- "$pkgdir$cur"))
+ ((${#COMPREPLY[@]} == 0)) || COMPREPLY=(${COMPREPLY[@]#$pkgdir})
+
+} &&
+ complete -F _pkg_delete -o dirnames pkg_delete pkg_info pkg_deinstall
+
+# ex: filetype=sh
diff --git a/completions/pkgadd b/completions/pkgadd
new file mode 100644
index 0000000..3f5b6a1
--- /dev/null
+++ b/completions/pkgadd
@@ -0,0 +1,62 @@
+# pkgadd completion -*- shell-script -*-
+#
+# Copyright 2006 Yann Rouillard <yann@opencsw.org>
+
+_pkgadd()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ # if a device directory was given
+ # we must complete with the package
+ # available in this directory
+ local device=/var/spool/pkg
+ local i=$cword
+ while ((i-- > 0)); do
+ case "${words[i]}" in
+ -d)
+ device="${words[i + 1]}"
+ break
+ ;;
+ esac
+ done
+
+ case $prev in
+ -d)
+ _filedir pkg
+ _filedir -d
+ ;;
+ -a | -r | -V)
+ _filedir
+ ;;
+ -k | -s | -R)
+ _filedir -d
+ ;;
+ -P | -x) ;;
+
+ *)
+ if [[ ${cur} == -* ]]; then
+ local opts="-a -A -d -k -n -M -P -r -R -s -v -V -x"
+ COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+ else
+ local pkginst_list
+ if [[ -d $device ]]; then
+ local -a tmplist
+ for filedir in $(/bin/ls -1 $device); do
+ if [[ -d "$device/$filedir" ]] && [[ -f "$device/$filedir/pkginfo" ]]; then
+ tmplist+=(${tmplist[@]:-} "$filedir")
+ fi
+ done
+ pkginst_list="${tmplist[*]}"
+ else
+ pkginst_list="$(strings "$(dequote $device)" |
+ command grep ^PKG= | sort -u | cut -d= -f2)"
+ fi
+ COMPREPLY=($(compgen -W "$pkginst_list" -- ${cur}))
+ fi
+ ;;
+ esac
+} &&
+ complete -F _pkgadd pkgadd
+
+# ex: filetype=sh
diff --git a/completions/pkgrm b/completions/pkgrm
new file mode 100644
index 0000000..2449d34
--- /dev/null
+++ b/completions/pkgrm
@@ -0,0 +1,46 @@
+# pkgrm completion -*- shell-script -*-
+#
+# Copyright 2006 Yann Rouillard <yann@opencsw.org>
+
+_pkgrm()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # if a spool directory was given
+ # we must complete with the package
+ # available in this directory
+ local spool=/var/sadm/pkg
+ local i=$cword
+ while ((i-- > 0)); do
+ ((i--))
+ case "${words[i]}" in
+ -s)
+ spool="${words[i + 1]}"
+ break
+ ;;
+ esac
+ done
+
+ case $prev in
+ -a | -V)
+ _filedir
+ ;;
+ -s | -R)
+ _filedir -d
+ ;;
+ -Y) ;;
+
+ *)
+ if [[ ${cur} == -* ]]; then
+ local opts="-a -A -n -M -R -s -v -V -Y"
+ COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+ else
+ COMPREPLY=($(compgen -W "$(/bin/ls -1 $spool)" -- ${cur}))
+ fi
+ ;;
+ esac
+} &&
+ complete -F _pkgrm pkgrm
+
+# ex: filetype=sh
diff --git a/completions/pkgtool b/completions/pkgtool
new file mode 100644
index 0000000..951bae4
--- /dev/null
+++ b/completions/pkgtool
@@ -0,0 +1,35 @@
+# Slackware Linux pkgtool completion -*- shell-script -*-
+
+_pkgtool()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ --source_dir | --target_dir)
+ _filedir -d
+ return
+ ;;
+ --sets)
+ # argument required but no completions available
+ return
+ ;;
+ --source_device)
+ COMPREPLY=($(compgen -f -d -- "${cur:-/dev/}"))
+ return
+ ;;
+ --tagfile)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--sets --ignore-tagfiles --tagfile
+ --source-mounted --source_dir --target_dir --source_device' \
+ -- "$cur"))
+ fi
+} &&
+ complete -F _pkgtool pkgtool
+
+# ex: filetype=sh
diff --git a/completions/pkgutil b/completions/pkgutil
new file mode 100644
index 0000000..91d8748
--- /dev/null
+++ b/completions/pkgutil
@@ -0,0 +1,95 @@
+# pkgutil completion -*- shell-script -*-
+# Copyright 2006 Yann Rouillard <yann@opencsw.org>
+
+_pkgutil_url2catalog()
+{
+ local filename="$1"
+
+ filename="${filename##*://}"
+ filename="${filename//\//_}"
+ filename="/var/opt/csw/pkgutil/catalog.${filename}_$(uname -p)_$(uname -r)"
+
+ echo "$filename"
+}
+
+_pkgutil()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local command catalog_files configuration_files
+ declare -a configuration_files=("/opt/csw/etc/pkgutil.conf" "/etc/opt/csw/pkgutil.conf")
+ declare -a catalog_files=()
+
+ local i=$cword
+ while ((i-- > 1)); do
+ if [[ ${words[i]} == -@(t|-temp) ]]; then
+ local url="${words[i + 1]}"
+ local catalog=$(_pkgutil_url2catalog "$url")
+ catalog_files=("$catalog")
+ elif [[ ${words[i]} == --config ]]; then
+ configuration_files=("$(dequote ${words[i + 1]})")
+ elif [[ ${words[i]} == -@([iurdacUS]|-install|-upgrade|-remove|-download|-available|-compare|-catalog|-stream) ]]; then
+ command="${words[i]}"
+ fi
+ done
+
+ if [[ $prev == -@([WPR]|-workdir|-pkgdir|-rootpath) ]]; then
+ _filedir -d
+ return
+ fi
+
+ if [[ $prev == -@(o|-output|-config) ]]; then
+ _filedir
+ return
+ fi
+
+ if [[ $prev == -@(p|-param) ]]; then
+ compopt -o nospace
+ COMPREPLY=($(compgen -W "mirror: pkgaddopts: pkgrmopts: wgetopts: use_gpg: use_md5: pkgliststyle: maxpkglist: noncsw: stop_on_hook_soft_error: exclude_pattern: gpg_homedir: root_path: deptree_filter_common: show_current: catalog_not_cached: catalog_update:" -- $cur))
+ return
+ fi
+
+ if [[ $prev == @(-T|--target) ]]; then
+ # Work-around bash_completion issue where bash interprets a colon
+ # as a separator, borrowed from maven completion code which borrowed
+ # it from darcs completion code :)
+ local colonprefixes=${cur%"${cur##*:}"}
+ COMPREPLY=($(compgen -W "sparc:5.9 sparc:5.10 sparc:5.11 i386:5.9 i386:5.10 i386:5.11" -- $cur))
+ local i=${#COMPREPLY[*]}
+ while ((i-- > 0)); do
+ COMPREPLY[i]=${COMPREPLY[i]#"$colonprefixes"}
+ done
+ return
+ fi
+
+ if [[ -v command && $cur != -* ]]; then
+
+ local mirrors mirror_url
+ mirrors=$(awk -F= ' $1 ~ /^ *mirror *$/ { print $2 }' "${configuration_files[@]}")
+ mirrors=${mirrors:-http://mirror.opencsw.org/opencsw/testing}
+ for mirror_url in $mirrors; do
+ local catalog=$(_pkgutil_url2catalog "$mirror_url")
+ catalog_files=("${catalog_files[@]}" "$catalog")
+ done
+
+ if [[ $command == -@([dius]|-download|-install|-upgrade|-stream) ]]; then
+ local packages_list=$(awk ' $0 ~ /BEGIN PGP SIGNATURE/ { exit } $1 ~ /^Hash:/ || $1 ~ /^ *(-|#|$)/ { next } { print $1 }' "${catalog_files[@]}")
+ COMPREPLY=($(compgen -W "${packages_list}" -- $cur))
+
+ elif [[ $command == @(-r|--remove) ]]; then
+ local packages_list=$(pkginfo | awk ' $2 ~ /^CSW/ { printf ("%s|",$2) }')
+ packages_list=${packages_list%|}
+ packages_list=$(nawk " \$3 ~ /^$packages_list\$/ { print \$1 }" "${catalog_files[@]}")
+ COMPREPLY=($(compgen -W "${packages_list}" -- $cur))
+ fi
+ return
+ fi
+
+ local commands="-i --install -u --upgrade -r --remove -d --download -U --catalog -a --available --describe -c --compare -C --compare-diff -A --compare-avail -e --email -t --temp -x --exclude -W --workdir -P --pkgdir -R --rootpath --config -y --yes -f --force -n --nomod -N --nodeps -D --debug --trace -h --help -v --version -V --syscheck -l --list -L --listfile -F --findfile --deptree --extract -s --stream -o --output -T --target --single -p --param --parse --cleanup --catinfo"
+ COMPREPLY=($(compgen -W "${commands}" -- $cur))
+
+} &&
+ complete -F _pkgutil pkgutil
+
+# ex: filetype=sh
diff --git a/completions/plague-client b/completions/plague-client
new file mode 100644
index 0000000..4e98206
--- /dev/null
+++ b/completions/plague-client
@@ -0,0 +1,14 @@
+# bash completion for plague-client -*- shell-script -*-
+
+_plague_client()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ ((cword == 1)) &&
+ COMPREPLY=($(compgen -W 'build detail finish help is_paused kill list
+ list_builders pause requeue unpause update_builders' -- "$cur"))
+} &&
+ complete -F _plague_client plague-client
+
+# ex: filetype=sh
diff --git a/completions/pm-hibernate b/completions/pm-hibernate
new file mode 100644
index 0000000..ea3b0aa
--- /dev/null
+++ b/completions/pm-hibernate
@@ -0,0 +1,12 @@
+# bash completion for pm-utils -*- shell-script -*-
+
+_pm_action()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ COMPREPLY=($(compgen -W "--help $(_parse_help "$1")" -- "$cur"))
+} &&
+ complete -F _pm_action pm-hibernate pm-suspend pm-suspend-hybrid
+
+# ex: filetype=sh
diff --git a/completions/pm-is-supported b/completions/pm-is-supported
new file mode 100644
index 0000000..adc7fde
--- /dev/null
+++ b/completions/pm-is-supported
@@ -0,0 +1,13 @@
+# pm-is-supported(1) completion -*- shell-script -*-
+
+_pm_is_supported()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ COMPREPLY=($(compgen -W '--help --suspend --hibernate --suspend-hybrid' \
+ -- "$cur"))
+} &&
+ complete -F _pm_is_supported pm-is-supported
+
+# ex: filetype=sh
diff --git a/completions/pm-powersave b/completions/pm-powersave
new file mode 100644
index 0000000..affb195
--- /dev/null
+++ b/completions/pm-powersave
@@ -0,0 +1,12 @@
+# pm-powersave(8) completion -*- shell-script -*-
+
+_pm_powersave()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ COMPREPLY=($(compgen -W "true false" -- "$cur"))
+} &&
+ complete -F _pm_powersave pm-powersave
+
+# ex: filetype=sh
diff --git a/completions/pngfix b/completions/pngfix
new file mode 100644
index 0000000..64b5481
--- /dev/null
+++ b/completions/pngfix
@@ -0,0 +1,36 @@
+# pngfix completion -*- shell-script -*-
+
+_pngfix()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --suffix | --prefix)
+ return
+ ;;
+ --output)
+ _filedir
+ return
+ ;;
+ --strip)
+ COMPREPLY=($(IFS='|' compgen -W '$("$1" --help 2>&1 |
+ command sed -ne "s/.*--strip=\[\([^]]*\)\].*/\1/p")' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir png
+} &&
+ complete -F _pngfix pngfix
+
+# ex: filetype=sh
diff --git a/completions/portinstall b/completions/portinstall
new file mode 100644
index 0000000..8033740
--- /dev/null
+++ b/completions/portinstall
@@ -0,0 +1,31 @@
+# bash completion for FreeBSD portinstall -*- shell-script -*-
+
+_portinstall()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local portsdir indexfile
+ local -a COMPREPLY2
+
+ portsdir=${PORTSDIR:-/usr/ports}/
+
+ # 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 && -f $indexfile ]] ||
+ indexfile=$portsdir/INDEX
+
+ [[ $prev == -l || $prev == -L || $prev == -o ]] && return
+
+ COMPREPLY=($(command grep -E "^$cur" 2>/dev/null <$indexfile |
+ cut -d'|' -f1))
+ COMPREPLY2=($(command grep -E "^[^\|]+\|$portsdir$cur" 2>/dev/null \
+ <$indexfile | cut -d'|' -f2))
+ COMPREPLY2=(${COMPREPLY2[@]#$portsdir})
+ COMPREPLY+=("${COMPREPLY2[@]}")
+
+} &&
+ complete -F _portinstall -o dirnames portinstall
+
+# ex: filetype=sh
diff --git a/completions/portsnap b/completions/portsnap
new file mode 100644
index 0000000..a2f0a93
--- /dev/null
+++ b/completions/portsnap
@@ -0,0 +1,25 @@
+# bash completion for Portsnap -*- shell-script -*-
+
+[[ $OSTYPE == *freebsd* ]] || return 1
+
+_portsnap()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -d | -p)
+ _filedir -d
+ return
+ ;;
+ -l | -f)
+ _filedir
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W "fetch cron extract update" -- $cur))
+} &&
+ complete -F _portsnap portsnap
+
+# ex: filetype=sh
diff --git a/completions/portupgrade b/completions/portupgrade
new file mode 100644
index 0000000..ffe6305
--- /dev/null
+++ b/completions/portupgrade
@@ -0,0 +1,19 @@
+# bash completion for FreeBSD portupgrade -*- shell-script -*-
+
+_portupgrade()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ [[ $prev == -l || $prev == -L || $prev == -o ]] && return
+
+ local pkgdir=${PKG_DBDIR:-/var/db/pkg}/
+
+ COMPREPLY=($(compgen -d -- "$pkgdir$cur"))
+ COMPREPLY=(${COMPREPLY[@]#$pkgdir})
+ COMPREPLY=(${COMPREPLY[@]%-*})
+
+} &&
+ complete -F _portupgrade -o dirnames portupgrade
+
+# ex: filetype=sh
diff --git a/completions/postcat b/completions/postcat
new file mode 100644
index 0000000..a58b0e5
--- /dev/null
+++ b/completions/postcat
@@ -0,0 +1,39 @@
+# postcat(1) completion -*- shell-script -*-
+
+_postcat()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -c)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ local idx qfile=0
+ for idx in "${words[@]}"; do
+ [[ $idx == -q ]] && qfile=1 && break
+ done
+ if ((qfile == 1)); then
+ local len=${#cur} pval
+ for pval in $(mailq 2>/dev/null |
+ command sed -e '1d; $d; /^[^0-9A-Z]/d; /^$/d; s/[* !].*$//'); do
+ if [[ $cur == "${pval:0:len}" ]]; then
+ COMPREPLY+=($pval)
+ fi
+ done
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _postcat postcat
+
+# ex: filetype=sh
diff --git a/completions/postconf b/completions/postconf
new file mode 100644
index 0000000..4cb324c
--- /dev/null
+++ b/completions/postconf
@@ -0,0 +1,39 @@
+# postconf(1) completion -*- shell-script -*-
+
+_postconf()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local eqext
+
+ case $prev in
+ -b | -t)
+ _filedir
+ return
+ ;;
+ -c)
+ _filedir -d
+ return
+ ;;
+ -e)
+ cur=${cur#[\"\']}
+ eqext='='
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ local len=${#cur} pval
+ for pval in $(/usr/sbin/postconf 2>/dev/null | cut -d ' ' -f 1); do
+ if [[ $cur == "${pval:0:len}" ]]; then
+ COMPREPLY+=("$pval${eqext-}")
+ fi
+ done
+} &&
+ complete -F _postconf postconf
+
+# ex: filetype=sh
diff --git a/completions/postfix b/completions/postfix
new file mode 100644
index 0000000..f960550
--- /dev/null
+++ b/completions/postfix
@@ -0,0 +1,33 @@
+# postfix(1) completion -*- shell-script -*-
+
+_postfix()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -c)
+ _filedir -d
+ return
+ ;;
+ -D)
+ COMPREPLY=($(compgen -W 'start' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(
+ compgen -W \
+ '$(_bashcomp_try_faketty "$1" --help 2>&1 | _parse_usage -)' \
+ -- "$cur"
+ ))
+ return
+ fi
+
+ COMPREPLY=($(compgen -W 'check start stop abort flush reload status
+ set-permissions upgrade-configuration' -- "$cur"))
+} &&
+ complete -F _postfix postfix
+
+# ex: filetype=sh
diff --git a/completions/postmap b/completions/postmap
new file mode 100644
index 0000000..35c4ada
--- /dev/null
+++ b/completions/postmap
@@ -0,0 +1,41 @@
+# postalias(1) and postmap(1) completion -*- shell-script -*-
+
+_postmap()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -c)
+ _filedir -d
+ return
+ ;;
+ -[dq])
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ if [[ $cur == *:* ]]; then
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -- "${cur#*:}"))
+ else
+ local len=${#cur} pval
+ for pval in $(/usr/sbin/postconf -m 2>/dev/null); do
+ if [[ $cur == "${pval:0:len}" ]]; then
+ COMPREPLY+=("$pval:")
+ fi
+ done
+ if [[ ! ${COMPREPLY-} ]]; then
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -- "$cur"))
+ fi
+ fi
+} &&
+ complete -F _postmap postmap postalias
+
+# ex: filetype=sh
diff --git a/completions/postsuper b/completions/postsuper
new file mode 100644
index 0000000..559449a
--- /dev/null
+++ b/completions/postsuper
@@ -0,0 +1,56 @@
+# postsuper(1) completion -*- shell-script -*-
+
+_postsuper()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local pval len
+
+ case $prev in
+ -c)
+ _filedir -d
+ return
+ ;;
+ -[dr])
+ len=${#cur}
+ for pval in ALL $(mailq 2>/dev/null |
+ command sed -e '1d; $d; /^[^0-9A-Z]/d; /^$/d; s/[* !].*$//'); do
+ if [[ $cur == "${pval:0:len}" ]]; then
+ COMPREPLY+=($pval)
+ fi
+ done
+ return
+ ;;
+ -h)
+ len=${#cur}
+ for pval in ALL $(mailq 2>/dev/null |
+ command sed -e '1d; $d; /^[^0-9A-Z]/d; /^$/d; s/[* ].*$//; /!$/d'); do
+ if [[ $cur == "${pval:0:len}" ]]; then
+ COMPREPLY+=($pval)
+ fi
+ done
+ return
+ ;;
+ -H)
+ len=${#cur}
+ for pval in ALL $(mailq 2>/dev/null |
+ command sed -e '1d; $d; /^[^0-9A-Z]/d; /^$/d; /^[0-9A-Z]*[* ]/d; s/!.*$//'); do
+ if [[ $cur == "${pval:0:len}" ]]; then
+ COMPREPLY+=($pval)
+ fi
+ done
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -W 'hold incoming active deferred' -- "$cur"))
+} &&
+ complete -F _postsuper postsuper
+
+# ex: filetype=sh
diff --git a/completions/povray b/completions/povray
new file mode 100644
index 0000000..56dfd94
--- /dev/null
+++ b/completions/povray
@@ -0,0 +1,64 @@
+# povray completion -*- shell-script -*-
+# by "David Necas (Yeti)" <yeti@physics.muni.cz>
+
+_povray()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local povcur=$cur pfx oext defoext
+ defoext=png # default output extension, if cannot be determined FIXME
+
+ _expand || return
+
+ case $povcur in
+ [-+]I*)
+ cur="${povcur#[-+]I}" # to confuse _filedir
+ pfx="${povcur%"$cur"}"
+ _filedir pov
+ COMPREPLY=(${COMPREPLY[@]/#/$pfx})
+ return
+ ;;
+ [-+]O*)
+ # guess what output file type user may want
+ case $(
+ IFS=$'\n'
+ command grep '^[-+]F' <<<"${words[*]}"
+ ) in
+ [-+]FN) oext=png ;;
+ [-+]FP) oext=ppm ;;
+ [-+]F[CT]) oext=tga ;;
+ *) oext=$defoext ;;
+ esac
+ # complete filename corresponding to previously specified +I
+ COMPREPLY=($(
+ IFS=$'\n'
+ command grep '^[-+]I' <<<"${words[*]}"
+ ))
+ COMPREPLY=(${COMPREPLY[@]#[-+]I})
+ COMPREPLY=(${COMPREPLY[@]/%.pov/.$oext})
+ cur="${povcur#[-+]O}" # to confuse _filedir
+ pfx="${povcur%"$cur"}"
+ _filedir $oext
+ COMPREPLY=(${COMPREPLY[@]/#/$pfx})
+ return
+ ;;
+ *.ini\[ | *.ini\[*[^]]) # sections in .ini files
+ cur="${povcur#*\[}"
+ pfx="${povcur%\["$cur"}" # prefix == filename
+ [[ -r $pfx ]] || return
+ COMPREPLY=($(command 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
+ ;;
+ *)
+ _filedir '@(ini|pov)'
+ return
+ ;;
+ esac
+} &&
+ complete -F _povray povray xpovray spovray
+
+# ex: filetype=sh
diff --git a/completions/prelink b/completions/prelink
new file mode 100644
index 0000000..1c39611
--- /dev/null
+++ b/completions/prelink
@@ -0,0 +1,42 @@
+# prelink(8) completion -*- shell-script -*-
+
+_prelink()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -'?' | --help | --usage | -V | --version | -r | --reloc-only)
+ return
+ ;;
+ -b | --black-list | --dynamic-linker | --undo-output)
+ _filedir
+ return
+ ;;
+ -c | --config-file)
+ _filedir conf
+ return
+ ;;
+ -C | --cache)
+ _filedir cache
+ return
+ ;;
+ --ld-library-path)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _prelink prelink
+
+# ex: filetype=sh
diff --git a/completions/printenv b/completions/printenv
new file mode 100644
index 0000000..3553e83
--- /dev/null
+++ b/completions/printenv
@@ -0,0 +1,23 @@
+# printenv(1) completion -*- shell-script -*-
+
+_printenv()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -v -- "$cur"))
+} &&
+ complete -F _printenv printenv
+
+# ex: filetype=sh
diff --git a/completions/protoc b/completions/protoc
new file mode 100644
index 0000000..fdd77be
--- /dev/null
+++ b/completions/protoc
@@ -0,0 +1,63 @@
+# protoc completion -*- shell-script -*-
+
+_protoc()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --version | -h | --help | --encode | --decode)
+ return
+ ;;
+ --descriptor_set_out)
+ _filedir
+ return
+ ;;
+ --error_format)
+ COMPREPLY=($(compgen -W 'gcc msvs' -- "$cur"))
+ return
+ ;;
+ --plugin)
+ if [[ $cur != *=* ]]; then
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ fi
+ return
+ ;;
+ --proto_path | --*_out)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ case $cur in
+ -o*)
+ cur=${cur:2}
+ _filedir
+ COMPREPLY=("${COMPREPLY[@]/#/-o}")
+ return
+ ;;
+ -I*)
+ cur=${cur:2}
+ _filedir -d
+ COMPREPLY=("${COMPREPLY[@]/#/-I}")
+ return
+ ;;
+ -*)
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ local i
+ for i in "${!COMPREPLY[@]}"; do
+ [[ ${COMPREPLY[i]} == -oFILE ]] && unset 'COMPREPLY[i]'
+ done
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ ;;
+ esac
+
+ _filedir proto
+} &&
+ complete -F _protoc protoc
+
+# ex: filetype=sh
diff --git a/completions/psql b/completions/psql
new file mode 100644
index 0000000..4bc6049
--- /dev/null
+++ b/completions/psql
@@ -0,0 +1,188 @@
+# bash completion for Postgresql -*- shell-script -*-
+
+_pg_databases()
+{
+ # -w was introduced in 8.4, https://launchpad.net/bugs/164772
+ # "Access privileges" in output may contain linefeeds, hence the NF > 1
+ COMPREPLY=($(compgen -W "$(psql -XAtqwlF $'\t' 2>/dev/null |
+ awk 'NF > 1 { print $1 }')" -- "$cur"))
+}
+
+_pg_users()
+{
+ # -w was introduced in 8.4, https://launchpad.net/bugs/164772
+ COMPREPLY=($(compgen -W "$(psql -XAtqwc 'select usename from pg_user' \
+ template1 2>/dev/null)" -- "$cur"))
+ ((${#COMPREPLY[@]} == 0)) && COMPREPLY=($(compgen -u -- "$cur"))
+}
+
+# createdb(1) completion
+#
+_createdb()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --host | -!(-*)h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --username | --owner | -!(-*)[UO])
+ _pg_users
+ return
+ ;;
+ --help | --version | --port | --tablespace | --encoding | --template | -!(-*)[pDET])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _pg_databases
+ fi
+} &&
+ complete -F _createdb createdb
+
+# createuser(1) completion
+#
+_createuser()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | --port | --connection-limit | -!(-*)[pc])
+ return
+ ;;
+ --host | -!(-*)h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --username | -!(-*)U)
+ _pg_users
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _createuser createuser
+
+# dropdb(1) completion
+#
+_dropdb()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --host | -!(-*)h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --username | -!(-*)U)
+ _pg_users
+ return
+ ;;
+ --help | --version)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _pg_databases
+ fi
+} &&
+ complete -F _dropdb dropdb
+
+# dropuser(1) completion
+#
+_dropuser()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | --port | -!(-*)p)
+ return
+ ;;
+ --host | -!(-*)h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --username | -!(-*)U)
+ _pg_users
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _pg_users
+ fi
+} &&
+ complete -F _dropuser dropuser
+
+# psql(1) completion
+#
+_psql()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --host | -!(-*)h)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --username | -!(-*)U)
+ _pg_users
+ return
+ ;;
+ --dbname | -!(-*)d)
+ _pg_databases
+ return
+ ;;
+ --output | --file | --log-file | -!(-*)[ofL])
+ _filedir
+ return
+ ;;
+ --help | --version | --command | --field-separator | --port | --pset | \
+ --record-separator | --table-attr | --set | --variable | -!(-*)[?VcFpPRTv])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ # return list of available options
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ # return list of available databases
+ _pg_databases
+ fi
+} &&
+ complete -F _psql psql
+
+# ex: filetype=sh
diff --git a/completions/puppet b/completions/puppet
new file mode 100644
index 0000000..e8767de
--- /dev/null
+++ b/completions/puppet
@@ -0,0 +1,338 @@
+# bash completion for puppet -*- shell-script -*-
+
+_puppet_logdest()
+{
+ if [[ -z $cur ]]; then
+ COMPREPLY=($(compgen -W 'syslog console /' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'syslog console' -- "$cur"))
+ _filedir
+ fi
+}
+
+_puppet_digest()
+{
+ COMPREPLY=($(compgen -W 'MD5 MD2 SHA1 SHA256' -- "$cur"))
+}
+
+_puppet_certs()
+{
+ local puppetca="puppet cert"
+ PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type puppetca &>/dev/null &&
+ puppetca=puppetca
+
+ if [[ $1 == --all ]]; then
+ cert_list=$($puppetca --list --all | command sed -e 's/^[+-]\{0,1\}\s*\(\S\+\)\s\+.*$/\1/')
+ else
+ cert_list=$($puppetca --list)
+ fi
+ COMPREPLY+=($(compgen -W "$cert_list" -- "$cur"))
+}
+
+_puppet_types()
+{
+ puppet_types=$(puppet describe --list | command sed -e 's/^\(\S\{1,\}\).*$/\1/')
+ COMPREPLY+=($(compgen -W "$puppet_types" -- "$cur"))
+}
+
+_puppet_references()
+{
+ local puppetdoc="puppet doc"
+ PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type puppetdoc &>/dev/null &&
+ puppetdoc=puppetdoc
+
+ puppet_doc_list=$($puppetdoc --list | command sed -e 's/^\(\S\{1,\}\).*$/\1/')
+ COMPREPLY+=($(compgen -W "$puppet_doc_list" -- "$cur"))
+}
+
+_puppet_subcmd_opts()
+{
+ # puppet cmd help is somewhat slow, avoid if possible
+ [[ -z $cur || $cur == -* ]] &&
+ COMPREPLY+=($(compgen -W \
+ '$(_parse_usage "$1" "help $2")' -- "$cur"))
+}
+
+_puppet()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local subcommand action
+
+ case $prev in
+ -h | --help | -V | --version)
+ return
+ ;;
+ esac
+
+ case ${words[0]} in
+ puppetmasterd)
+ subcommand=master
+ ;;
+ puppetd)
+ subcommand=agent
+ ;;
+ puppetca)
+ subcommand=cert
+ ;;
+ ralsh)
+ subcommand=resource
+ ;;
+ puppetrun)
+ subcommand=kick
+ ;;
+ puppetqd)
+ subcommand=queue
+ ;;
+ filebucket)
+ subcommand=filebucket
+ ;;
+ puppetdoc)
+ subcommand=doc
+ ;;
+ pi)
+ subcommand=describe
+ ;;
+ puppet)
+ case ${words[1]} in
+ agent | apply | cert | describe | doc | filebucket | kick | master | parser | queue | resource)
+ subcommand=${words[1]}
+ ;;
+ *.pp | *.rb)
+ subcommand=apply
+ ;;
+ *)
+ COMPREPLY=($(compgen -W 'agent apply cert describe doc
+ filebucket kick master parser queue resource' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ esac
+
+ case $subcommand in
+ agent)
+ case $prev in
+ --certname)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --digest)
+ _puppet_digest
+ return
+ ;;
+ --fqdn)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -l | --logdest)
+ _puppet_logdest
+ return
+ ;;
+ --masterport)
+ COMPREPLY=($(compgen -W '8140' -- "$cur"))
+ return
+ ;;
+ -w | --waitforcert)
+ COMPREPLY=($(compgen -W '0 15 30 60 120' -- "$cur"))
+ return
+ ;;
+ *)
+ _puppet_subcmd_opts "$1" $subcommand
+ # _parse_usage doesn't grok [-D|--daemonize|--no-daemonize]
+ COMPREPLY+=($(compgen -W '--no-daemonize' -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ apply)
+ case $prev in
+ --catalog)
+ COMPREPLY=($(compgen -W '-' -- "$cur"))
+ _filedir json
+ return
+ ;;
+ --execute)
+ return
+ ;;
+ -l | --logdest)
+ _puppet_logdest
+ return
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ _puppet_subcmd_opts "$1" $subcommand
+ else
+ _filedir
+ fi
+ return
+ ;;
+ esac
+ ;;
+ cert)
+ case $prev in
+ --digest)
+ _puppet_digest
+ return
+ ;;
+ *)
+ action=$prev
+ COMPREPLY=($(compgen -W '--digest --debug --help --verbose --version' \
+ -- "$cur"))
+ case $action in
+ fingerprint | list | verify | --fingerprint | --list | --verify)
+ COMPREPLY+=($(compgen -W '--all' -- "$cur"))
+ _puppet_certs --all
+ return
+ ;;
+ generate | --generate)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ clean | print | revoke | --clean | --print | --revoke)
+ _puppet_certs --all
+ return
+ ;;
+ sign | --sign)
+ COMPREPLY+=($(compgen -W '--all' -- "$cur"))
+ _puppet_certs
+ return
+ ;;
+ *)
+ COMPREPLY+=($(compgen -W 'clean fingerprint generate
+ list print revoke sign verify reinventory' -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ describe)
+ _puppet_subcmd_opts "$1" $subcommand
+ if [[ $cur != -* ]]; then
+ _puppet_types
+ fi
+ return
+ ;;
+ doc)
+ case $prev in
+ -o | --outputdir)
+ _filedir -d
+ return
+ ;;
+ -m | --mode)
+ COMPREPLY=($(compgen -W 'text trac pdf rdoc' -- "$cur"))
+ return
+ ;;
+ -r | --reference)
+ _puppet_references
+ return
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ _puppet_subcmd_opts "$1" $subcommand
+ else
+ _filedir
+ fi
+ return
+ ;;
+ esac
+ ;;
+ filebucket)
+ case $prev in
+ -s | --server)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -b | --bucket)
+ _filedir -d
+ return
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ _puppet_subcmd_opts "$1" $subcommand
+ else
+ COMPREPLY=($(compgen -W 'backup get restore' \
+ -- "$cur"))
+ _filedir
+ fi
+ return
+ ;;
+ esac
+ ;;
+ kick)
+ case $prev in
+ -c | --class)
+ return
+ ;;
+ --host)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -t | --tag)
+ return
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ _puppet_subcmd_opts "$1" $subcommand
+ else
+ _known_hosts_real -- "$cur"
+ fi
+ return
+ ;;
+ esac
+ ;;
+ master)
+ case $prev in
+ -l | --logdest)
+ _puppet_logdest
+ return
+ ;;
+ *)
+ _puppet_subcmd_opts "$1" $subcommand
+ # _parse_usage doesn't grok [-D|--daemonize|--no-daemonize]
+ COMPREPLY+=($(compgen -W '--no-daemonize' -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ parser)
+ action=$prev
+ case $action in
+ validate)
+ _filedir pp
+ return
+ ;;
+ *)
+ COMPREPLY=($(compgen -W 'validate' -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ queue)
+ case $prev in
+ -l | --logdest)
+ _puppet_logdest
+ return
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ _puppet_subcmd_opts "$1" $subcommand
+ else
+ _filedir
+ fi
+ return
+ ;;
+ esac
+ ;;
+ resource | *)
+ _puppet_subcmd_opts "$1" $subcommand
+ return
+ ;;
+ esac
+} &&
+ complete -F _puppet puppetmasterd puppetd puppetca ralsh puppetrun puppetqd filebucket puppetdoc puppet
+
+# ex: filetype=sh
diff --git a/completions/pv b/completions/pv
new file mode 100644
index 0000000..99933f2
--- /dev/null
+++ b/completions/pv
@@ -0,0 +1,31 @@
+# pv(1) completion -*- shell-script -*-
+
+_pv()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | --last-written | --format | --delay-start | --interval | \
+ --width | --height | --name | --rate-limit | --buffer-size | -!(-*)[hVAFDiwHNLB])
+ return
+ ;;
+ --remote | -!(-*)R)
+ _pids
+ return
+ ;;
+ --pidfile | --watchfd | -!(-*)[Pd])
+ _filedir pid
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ _filedir
+ fi
+} &&
+ complete -F _pv pv
+
+# ex: filetype=sh
diff --git a/completions/pwck b/completions/pwck
new file mode 100644
index 0000000..fa07b0e
--- /dev/null
+++ b/completions/pwck
@@ -0,0 +1,18 @@
+# pwck(8) completion -*- shell-script -*-
+
+_pwck()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _pwck pwck
+
+# ex: filetype=sh
diff --git a/completions/pwd b/completions/pwd
new file mode 100644
index 0000000..b9c4fbc
--- /dev/null
+++ b/completions/pwd
@@ -0,0 +1,20 @@
+# pwd(1) completion -*- shell-script -*-
+
+_pwd()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version)
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} ]] ||
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+} &&
+ complete -F _pwd pwd
+
+# ex: filetype=sh
diff --git a/completions/pwdx b/completions/pwdx
new file mode 100644
index 0000000..25a1a1e
--- /dev/null
+++ b/completions/pwdx
@@ -0,0 +1,24 @@
+# pwdx(1) completion -*- shell-script -*-
+
+_pwdx()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | --help | -V | --version)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local help='$(_parse_help "$1")'
+ [[ $help ]] || help=-V
+ COMPREPLY=($(compgen -W "$help" -- "$cur"))
+ else
+ _pids
+ fi
+} &&
+ complete -F _pwdx pwdx
+
+# ex: filetype=sh
diff --git a/completions/pwgen b/completions/pwgen
new file mode 100644
index 0000000..50d31d5
--- /dev/null
+++ b/completions/pwgen
@@ -0,0 +1,28 @@
+# pwgen(1) completion -*- shell-script -*-
+
+_pwgen()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --num-passwords | --help | -!(-*)[Nh])
+ return
+ ;;
+ --sha1 | -!(-*)H)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+} &&
+ complete -F _pwgen pwgen
+
+# ex: filetype=sh
diff --git a/completions/pycodestyle b/completions/pycodestyle
new file mode 100644
index 0000000..dec6f37
--- /dev/null
+++ b/completions/pycodestyle
@@ -0,0 +1,34 @@
+# pycodestyle completion -*- shell-script -*-
+
+_pycodestyle()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -h | --help | --version)
+ return
+ ;;
+ --format)
+ COMPREPLY=($(compgen -W 'default pylint' -- "$cur"))
+ return
+ ;;
+ --config)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir py
+} &&
+ complete -F _pycodestyle pycodestyle
+
+# ex: filetype=sh
diff --git a/completions/pydoc b/completions/pydoc
new file mode 100644
index 0000000..e7b1178
--- /dev/null
+++ b/completions/pydoc
@@ -0,0 +1,42 @@
+# pydoc completion -*- shell-script -*-
+
+_pydoc()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -k | -p)
+ return
+ ;;
+ -w)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W \
+ '$("$1" | command sed -e "s/^pydoc3\{0,1\} //" | _parse_help -)' \
+ -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -W 'keywords topics modules' -- "$cur"))
+
+ if [[ $cur != @(.|*/)* ]]; then
+ local python=python
+ [[ ${1##*/} == *3* ]] && python=python3
+ _xfunc python _python_modules $python
+ fi
+
+ # Note that we don't do "pydoc modules" as it is known to hang on
+ # some systems; _python_modules tends to work better and faster.
+ COMPREPLY+=($(compgen -W \
+ '$($1 keywords topics | command sed -e /^Here/d)' -- "$cur"))
+
+ _filedir py
+} &&
+ complete -F _pydoc pydoc pydoc3
+
+# ex: filetype=sh
diff --git a/completions/pydocstyle b/completions/pydocstyle
new file mode 100644
index 0000000..acbf1ec
--- /dev/null
+++ b/completions/pydocstyle
@@ -0,0 +1,35 @@
+# bash completion for pydocstyle -*- shell-script -*-
+
+_pydocstyle()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | --match | --ignore-decorators | --select | --ignore | \
+ --add-select | --add-ignore | -!(-*)h)
+ return
+ ;;
+ --config)
+ _filedir xml
+ return
+ ;;
+ --convention)
+ COMPREPLY=($(compgen -W "pep257 numpy" -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir py
+} &&
+ complete -F _pydocstyle pydocstyle
+
+# ex: filetype=sh
diff --git a/completions/pyflakes b/completions/pyflakes
new file mode 100644
index 0000000..0a4e977
--- /dev/null
+++ b/completions/pyflakes
@@ -0,0 +1,23 @@
+# pyflakes(1) completion -*- shell-script -*-
+
+_pyflakes()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | --help | --version)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir py
+} &&
+ complete -F _pyflakes pyflakes
+
+# ex: filetype=sh
diff --git a/completions/pylint b/completions/pylint
new file mode 100644
index 0000000..8726f8b
--- /dev/null
+++ b/completions/pylint
@@ -0,0 +1,87 @@
+# pylint(1) completion -*- shell-script -*-
+
+_pylint()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local python=python
+ [[ ${1##*/} == *3* ]] && python=python3
+
+ case $prev in
+ --version | --help | --long-help | --help-msg | --init-hook | --ignore | --enable | \
+ --evaluation | --max-line-length | --max-module-lines | \
+ --indent-string | --min-similarity-lines | --max-args | \
+ --ignored-argument-names | --max-locals | --max-returns | --max-branchs | \
+ --max-statements | --max-parents | --max-attributes | --min-public-methods | \
+ --max-public-methods | --required-attributes | --bad-functions | \
+ --module-rgx | --const-rgx | --class-rgx | --function-rgx | --method-rgx | \
+ --attr-rgx | --argument-rgx | --variable-rgx | --inlinevar-rgx | --good-names | \
+ --bad-names | --no-docstring-rgx | --dummy-variables-rgx | \
+ --additional-builtins | --notes | --ignored-classes | --generated-members | \
+ --overgeneral-exceptions | --ignore-iface-methods | \
+ --defining-attr-methods | --valid-classmethod-first-arg | \
+ --valid-metaclass-classmethod-first-arg | -!(-*)[he])
+ return
+ ;;
+ --disable | -!(-*)d)
+ COMPREPLY=($(compgen -W 'all' -- "$cur"))
+ return
+ ;;
+ --rcfile)
+ _filedir
+ return
+ ;;
+ --persistent | --include-ids | --symbols | --files-output | --reports | \
+ --comment | --ignore-comments | --ignore-docstrings | --ignore-imports | \
+ --init-import | --ignore-mixin-members | --zope | --suggestion-mode | \
+ -!(-*)[isr])
+ COMPREPLY=($(compgen -W 'yes no' -- "$cur"))
+ return
+ ;;
+ --load-plugins | --deprecated-modules)
+ local prefix=
+ [[ $cur == *,* ]] && prefix="${cur%,*},"
+ cur="${cur##*,}"
+ _xfunc python _python_modules $python
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ return
+ ;;
+ --jobs | -!(-*)j)
+ COMPREPLY=($(compgen -W "{1..$(_ncpus)}" -- "$cur"))
+ return
+ ;;
+ --confidence)
+ local prefix=
+ [[ $cur == *,* ]] && prefix="${cur%,*},"
+ COMPREPLY=($(compgen -W "HIGH INFERENCE INFERENCE_FAILURE
+ UNDEFINED" -- "${cur##*,}"))
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ return
+ ;;
+ --format | -!(-*)f)
+ COMPREPLY=($(compgen -W 'text parseable colorized json msvs' \
+ -- "$cur"))
+ return
+ ;;
+ --import-graph | --ext-import-graph | --int-import-graph)
+ _filedir dot
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W \
+ '$(_parse_help "$1" --long-help)' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ [[ $cur == @(.|*/)* ]] || _xfunc python _python_modules $python
+ _filedir py
+} &&
+ complete -F _pylint pylint pylint-2 pylint-3
+
+# ex: filetype=sh
diff --git a/completions/pytest b/completions/pytest
new file mode 100644
index 0000000..7457a84
--- /dev/null
+++ b/completions/pytest
@@ -0,0 +1,134 @@
+# bash completion for pytest(1) -*- shell-script -*-
+
+_pytest()
+{
+ local cur prev words cword split
+ _init_completion -s -n : || return
+
+ case $prev in
+ --help | --maxfail | --report | --junit-prefix | --doctest-glob | -!(-*)[hkmorp])
+ return
+ ;;
+ --import-mode)
+ COMPREPLY=($(compgen -W "prepend append" -- "$cur"))
+ return
+ ;;
+ --capture)
+ COMPREPLY=($(compgen -W "fd sys no tee-sys" -- "$cur"))
+ return
+ ;;
+ --lfnf | --last-failed-no-failures)
+ COMPREPLY=($(compgen -W "all none" -- "$cur"))
+ return
+ ;;
+ --tb)
+ COMPREPLY=($(compgen -W "auto long short line native no" \
+ -- "$cur"))
+ return
+ ;;
+ --show-capture)
+ COMPREPLY=($(compgen -W "no stdout stderr log all" -- "$cur"))
+ return
+ ;;
+ --color)
+ COMPREPLY=($(compgen -W "yes no auto" -- "$cur"))
+ return
+ ;;
+ --pastebin)
+ COMPREPLY=($(compgen -W "failed all" -- "$cur"))
+ return
+ ;;
+ --junit-xml)
+ _filedir xml
+ return
+ ;;
+ --result-log | --log-file)
+ _filedir log
+ return
+ ;;
+ --ignore)
+ _filedir
+ return
+ ;;
+ --confcutdir | --basetemp | --rsyncdir | --rootdir)
+ _filedir -d
+ return
+ ;;
+ --doctest-report)
+ COMPREPLY=($(compgen -W "none cdiff ndiff udiff only_first_failure" -- "$cur"))
+ return
+ ;;
+ --assert)
+ COMPREPLY=($(compgen -W "plain reinterp rewrite" -- "$cur"))
+ return
+ ;;
+ --genscript)
+ _filedir py
+ return
+ ;;
+ --pythonwarnings | -!(-*)W)
+ _xfunc python _python_warning_actions
+ return
+ ;;
+ --numprocesses | -!(-*)n)
+ COMPREPLY=($(compgen -W "{1..$(_ncpus)} auto" -- "$cur"))
+ return
+ ;;
+ --dist)
+ local modes=$("$1" --dist=nonexistent-distmode 2>&1 |
+ command sed -e 's/[^[:space:][:alnum:]-]\{1,\}//g' \
+ -ne 's/.*choose from //p')
+ COMPREPLY=($(compgen -W '$modes' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ if [[ $cur == *.py::*:* ]]; then
+ local file=${cur/.py:*/.py}
+ local class=${cur#*.py::} in_class=false
+ local line
+ class=${class%%:*}
+ while IFS= read -r line; do
+ if [[ $line =~ ^class[[:space:]]+${class}[[:space:]:\(] ]]; then
+ in_class=true
+ elif [[ $line =~ ^class[[:space:]] ]]; then
+ in_class=false
+ fi
+ if $in_class && [[ $line =~ ^[[:space:]]+(async[[:space:]]+)?def[[:space:]]+(test_[A-Za-z0-9_]+) ]]; then
+ COMPREPLY+=(${BASH_REMATCH[2]})
+ fi
+ done 2>/dev/null <"$file"
+ ((!${#COMPREPLY[@]})) ||
+ COMPREPLY=($(compgen -P "$file::$class::" -W '${COMPREPLY[@]}' \
+ -- "${cur##*:?(:)}"))
+ __ltrim_colon_completions "$cur"
+ return
+ elif [[ $cur == *.py:* ]]; then
+ local file="${cur/.py:*/.py}" line
+ while IFS= read -r line; do
+ if [[ $line =~ ^class[[:space:]]+(Test[A-Za-z0-9_]+) ]]; then
+ COMPREPLY+=(${BASH_REMATCH[1]})
+ elif [[ $line =~ ^(async[[:space:]]+)?def[[:space:]]+(test_[A-Za-z0-9_]+) ]]; then
+ COMPREPLY+=(${BASH_REMATCH[2]})
+ fi
+ done 2>/dev/null <"$file"
+ ((!${#COMPREPLY[@]})) ||
+ COMPREPLY=($(compgen -P "$file::" -W '${COMPREPLY[@]}' \
+ -- "${cur##*.py:?(:)}"))
+ __ltrim_colon_completions "$cur"
+ return
+ fi
+
+ _filedir py
+} &&
+ complete -F _pytest pytest pytest-2 pytest-3 py.test py.test-2 py.test-3
+
+# ex: filetype=sh
diff --git a/completions/python b/completions/python
new file mode 100644
index 0000000..d50c18f
--- /dev/null
+++ b/completions/python
@@ -0,0 +1,67 @@
+# bash completion for python -*- shell-script -*-
+
+_python_modules()
+{
+ COMPREPLY+=($(compgen -W \
+ "$(${1:-python} ${BASH_SOURCE[0]%/*}/../helpers/python $cur \
+ 2>/dev/null)" -- "$cur"))
+}
+
+_python_warning_actions()
+{
+ COMPREPLY+=($(compgen -W "ignore default all module once error" \
+ ${prefix:+-P "$prefix"} -- "$cur"))
+}
+
+_python()
+{
+ local cur prev words cword prefix
+ _init_completion || return
+
+ case $cur in
+ -[QWX]?*)
+ prefix=${cur:0:2}
+ prev=$prefix
+ cur=${cur:2}
+ ;;
+ esac
+
+ case $prev in
+ --help | --version | -!(-*)[?hVcX])
+ return
+ ;;
+ -!(-*)m)
+ _python_modules "$1"
+ return
+ ;;
+ -!(-*)Q)
+ COMPREPLY=($(compgen -W "old new warn warnall" -P "$prefix" \
+ -- "$cur"))
+ return
+ ;;
+ -!(-*)W)
+ _python_warning_actions
+ return
+ ;;
+ --jit)
+ # TODO: quite a few others, parse from "--jit help" output?
+ COMPREPLY=($(compgen -W "help off" -- "$cur"))
+ return
+ ;;
+ !(?(*/)python*([0-9.])|?(*/)pypy*([0-9.])|-?))
+ [[ $cword -lt 2 || ${words[cword - 2]} != -[QWX] ]] && _filedir
+ ;;
+ esac
+
+ # if -c or -m is already given, complete all kind of files.
+ if [[ ${words[*]::cword} == *\ -[cm]\ * ]]; then
+ _filedir
+ elif [[ $cur != -* ]]; then
+ _filedir 'py?([cowz])'
+ else
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ fi
+} &&
+ complete -F _python python python2 python2.7 python3 python3.{3..8} pypy pypy3 micropython
+
+# ex: filetype=sh
diff --git a/completions/pyvenv b/completions/pyvenv
new file mode 100644
index 0000000..527a384
--- /dev/null
+++ b/completions/pyvenv
@@ -0,0 +1,25 @@
+# bash completion for pyvenv -*- shell-script -*-
+
+_pyvenv()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -h | --help)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ _longopt "$1"
+ return
+ fi
+
+ _filedir -d
+} &&
+ complete -F _pyvenv pyvenv pyvenv-3.{4..8}
+
+# ex: filetype=sh
diff --git a/completions/qdbus b/completions/qdbus
new file mode 100644
index 0000000..5b5a5e3
--- /dev/null
+++ b/completions/qdbus
@@ -0,0 +1,14 @@
+# Qt qdbus, dcop completion -*- shell-script -*-
+
+_qdbus()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ [[ -n $cur ]] && unset "words[$((${#words[@]} - 1))]"
+ COMPREPLY=($(compgen -W '$(command ${words[@]} 2>/dev/null | \
+ command sed "s/(.*)//")' -- "$cur"))
+} &&
+ complete -F _qdbus qdbus dcop
+
+# ex: filetype=sh
diff --git a/completions/qemu b/completions/qemu
new file mode 100644
index 0000000..8382981
--- /dev/null
+++ b/completions/qemu
@@ -0,0 +1,108 @@
+# bash completion for qemu -*- shell-script -*-
+
+_qemu()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -fd[ab] | -hd[abcd] | -cdrom | -option-rom | -kernel | -initrd | -bootp | -pidfile | \
+ -loadvm | -mtdblock | -sd | -pflash | -bios)
+ _filedir
+ return
+ ;;
+ -tftp | -smb | -L | -chroot)
+ _filedir -d
+ return
+ ;;
+ -boot)
+ COMPREPLY=($(compgen -W 'a c d n' -- "$cur"))
+ return
+ ;;
+ -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
+ ;;
+ -soundhw)
+ COMPREPLY=($(compgen -W "$($1 -soundhw help | awk \
+ '/^[[:lower:]]/ {print $1}') all" -- "$cur"))
+ return
+ ;;
+ -machine | -M)
+ COMPREPLY=($(compgen -W "$($1 $prev help | awk \
+ '/^[[:lower:]]/ {print $1}')" -- "$cur"))
+ return
+ ;;
+ -cpu)
+ COMPREPLY=($(compgen -W "$($1 -cpu help | awk '{print $2}')" \
+ -- "$cur"))
+ return
+ ;;
+ -usbdevice)
+ COMPREPLY=($(compgen -W 'mouse tablet disk: host: serial: braille
+ net' -- "$cur"))
+ return
+ ;;
+ -net)
+ COMPREPLY=($(compgen -W 'nic user tap socket vde none dump' \
+ -- "$cur"))
+ return
+ ;;
+ -serial | -parallel | -monitor)
+ COMPREPLY=($(compgen -W 'vc pty none null /dev/ file: stdio pipe:
+ COM udp: tcp: telnet: unix: mon: braille' -- "$cur"))
+ return
+ ;;
+ -redir)
+ COMPREPLY=($(compgen -S":" -W 'tcp udp' -- "$cur"))
+ return
+ ;;
+ -bt)
+ COMPREPLY=($(compgen -W 'hci vhci device' -- "$cur"))
+ return
+ ;;
+ -vga)
+ COMPREPLY=($(compgen -W 'cirrus std vmware xenfb none' -- "$cur"))
+ return
+ ;;
+ -drive)
+ COMPREPLY=($(compgen -S"=" -W 'file if bus unit index media cyls
+ snapshot cache format serial addr' -- "$cur"))
+ return
+ ;;
+ -balloon)
+ COMPREPLY=($(compgen -W 'none virtio' -- "$cur"))
+ return
+ ;;
+ -smbios)
+ COMPREPLY=($(compgen -W 'file type' -- "$cur"))
+ return
+ ;;
+ -watchdog)
+ COMPREPLY=($(compgen -W "$($1 -watchdog help 2>&1 |
+ awk '{print $1}')" -- "$cur"))
+ return
+ ;;
+ -watchdog-action)
+ COMPREPLY=($(compgen -W 'reset shutdown poweroff pause debug
+ none' -- "$cur"))
+ return
+ ;;
+ -runas)
+ _allowed_users
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help) -fd{a,b}
+ -hd{a..d}' -- "$cur"))
+ else
+ _filedir
+ fi
+} &&
+ complete -F _qemu qemu qemu-kvm qemu-system-i386 qemu-system-x86_64
+
+# ex: filetype=sh
diff --git a/completions/qrunner b/completions/qrunner
new file mode 100644
index 0000000..3919ea2
--- /dev/null
+++ b/completions/qrunner
@@ -0,0 +1,18 @@
+# mailman qrunner completion -*- shell-script -*-
+
+_qrunner()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--runner --once --list --verbose --subproc
+ --help' -- "$cur"))
+ fi
+
+} &&
+ complete -F _qrunner qrunner
+
+# ex: filetype=sh
diff --git a/completions/querybts b/completions/querybts
new file mode 100644
index 0000000..edeba96
--- /dev/null
+++ b/completions/querybts
@@ -0,0 +1,40 @@
+# querybts completion -*- shell-script -*-
+
+_querybts()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --bts | -!(-*)B)
+ COMPREPLY=($(compgen -W "debian guug kde mandrake help" \
+ -- "$cur"))
+ return
+ ;;
+ --ui | --interface | -!(-*)u)
+ COMPREPLY=($(compgen -W "newt text gnome" -- "$cur"))
+ return
+ ;;
+ --mbox-reader-cmd)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ COMPREPLY=($(compgen -W '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 $(_xfunc apt-cache _apt_cache_packages)' -- "$cur"))
+ fi
+} &&
+ complete -F _querybts querybts
+
+# ex: filetype=sh
diff --git a/completions/quota b/completions/quota
new file mode 100644
index 0000000..f5f9cc8
--- /dev/null
+++ b/completions/quota
@@ -0,0 +1,191 @@
+# bash completion for quota-tools -*- shell-script -*-
+
+_user_or_group()
+{
+ local i
+
+ # complete on groups if -g was given
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == -@(g|-group) ]]; then
+ COMPREPLY=($(compgen -g -- "$cur"))
+ return
+ fi
+ done
+
+ # otherwise complete on users
+ COMPREPLY=($(compgen -u -- "$cur"))
+}
+
+_quota_parse_help()
+{
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+}
+
+_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 words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -F | --format)
+ _quota_formats
+ return
+ ;;
+ -h | --help | -V | --version)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ _quota_parse_help "$1"
+ else
+ _user_or_group
+ fi
+} &&
+ complete -F _quota -o default quota
+
+_setquota()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -F | --format)
+ _quota_formats
+ return
+ ;;
+ -p | --prototype)
+ _user_or_group
+ return
+ ;;
+ -h | --help | -V | --version)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ _quota_parse_help "$1"
+ else
+ local args
+ _count_args
+
+ case $args in
+ 1)
+ _user_or_group
+ ;;
+ 2)
+ _filesystems
+ ;;
+ esac
+
+ fi
+} &&
+ complete -F _setquota -o default setquota
+
+_edquota()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -F | --format)
+ _quota_formats
+ return
+ ;;
+ -f | --filesystem)
+ _filesystems
+ return
+ ;;
+ -p | --prototype)
+ _user_or_group
+ return
+ ;;
+ -h | --help | -V | --version)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ _quota_parse_help "$1"
+ else
+ _user_or_group
+ fi
+} &&
+ complete -F _edquota -o default edquota
+
+_quotacheck()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -F | --format)
+ _quota_formats
+ return
+ ;;
+ -h | --help | -V | --version)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ _quota_parse_help "$1"
+ else
+ _filesystems
+ fi
+} &&
+ complete -F _quotacheck -o default quotacheck repquota
+
+_quotaon()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -F | --format)
+ _quota_formats
+ return
+ ;;
+ -x | --xfs-command)
+ COMPREPLY=($(compgen -W 'delete enforce' -- "$cur"))
+ return
+ ;;
+ -h | --help | -V | --version)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ _quota_parse_help "$1"
+ else
+ _filesystems
+ fi
+} &&
+ complete -F _quotaon -o default quotaon quotaoff
+
+# ex: filetype=sh
diff --git a/completions/radvdump b/completions/radvdump
new file mode 100644
index 0000000..850628f
--- /dev/null
+++ b/completions/radvdump
@@ -0,0 +1,22 @@
+# radvdump(8) completion -*- shell-script -*-
+
+_radvdump()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | --help | -v | --version)
+ return
+ ;;
+ -d | --debug)
+ COMPREPLY=($(compgen -W '{1..4}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+} &&
+ complete -F _radvdump radvdump
+
+# ex: filetype=sh
diff --git a/completions/rcs b/completions/rcs
new file mode 100644
index 0000000..c04d89d
--- /dev/null
+++ b/completions/rcs
@@ -0,0 +1,36 @@
+# bash completion for rcs -*- shell-script -*-
+
+_rcs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local file dir i
+
+ file=${cur##*/}
+ dir=${cur%/*}
+
+ # deal with relative directory
+ [[ $file == "$dir" ]] && dir=.
+
+ COMPREPLY=($(compgen -f -- "$dir/RCS/$file"))
+
+ for i in ${!COMPREPLY[*]}; do
+ file=${COMPREPLY[i]##*/}
+ dir=${COMPREPLY[i]%RCS/*}
+ COMPREPLY[i]=$dir$file
+ done
+
+ COMPREPLY+=($(compgen -G "$dir/$file*,v"))
+
+ for i in ${!COMPREPLY[*]}; 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 && $1 == *ci ]] && _filedir || _filedir -d
+} &&
+ complete -F _rcs ci co rlog rcs rcsdiff
+
+# ex: filetype=sh
diff --git a/completions/rdesktop b/completions/rdesktop
new file mode 100644
index 0000000..54c1ae6
--- /dev/null
+++ b/completions/rdesktop
@@ -0,0 +1,57 @@
+# bash completion for rdesktop -*- shell-script -*-
+
+_rdesktop()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ case $prev in
+ -*k)
+ COMPREPLY=($(command ls \
+ /usr/share/rdesktop/keymaps 2>/dev/null |
+ command grep -E -v '(common|modifiers)'))
+ COMPREPLY+=($(command ls $HOME/.rdesktop/keymaps 2>/dev/null))
+ COMPREPLY+=($(command ls ./keymaps 2>/dev/null))
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]}' -- "$cur"))
+ return
+ ;;
+ -*a)
+ COMPREPLY=($(compgen -W '8 15 16 24' -- "$cur"))
+ return
+ ;;
+ -*x)
+ COMPREPLY=($(compgen -W 'broadband modem lan' -- "$cur"))
+ return
+ ;;
+ -*r)
+ case $cur in
+ sound:*)
+ COMPREPLY=($(compgen -W 'local off remote' \
+ -- "${cur#sound:}"))
+ ;;
+ *:*) ;;
+
+ *)
+ COMPREPLY=($(compgen -W 'comport: disk: lptport:
+ printer: sound: lspci scard' -- "$cur"))
+ [[ ${COMPREPLY-} == *: ]] && compopt -o nospace
+ ;;
+ esac
+ return
+ ;;
+ -*[udscpngSTX])
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts=($(_parse_help "$1"))
+ COMPREPLY=($(compgen -W '${opts[@]%:}' -- "$cur"))
+ else
+ _known_hosts_real -- "$cur"
+ fi
+
+} &&
+ complete -F _rdesktop rdesktop
+
+# ex: filetype=sh
diff --git a/completions/remove_members b/completions/remove_members
new file mode 100644
index 0000000..db7ad0b
--- /dev/null
+++ b/completions/remove_members
@@ -0,0 +1,27 @@
+# mailman remove_members completion -*- shell-script -*-
+
+_remove_members()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -f | --file)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--file --all --fromall --nouserack
+ --noadminack --help' -- "$cur"))
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+
+} &&
+ complete -F _remove_members remove_members
+
+# ex: filetype=sh
diff --git a/completions/removepkg b/completions/removepkg
new file mode 100644
index 0000000..a56beb0
--- /dev/null
+++ b/completions/removepkg
@@ -0,0 +1,25 @@
+# Slackware Linux removepkg completion -*- shell-script -*-
+
+_removepkg()
+{
+ local cur prev words cword
+ _init_completion || return
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-copy -keep -preserve -warn' -- "$cur"))
+ return
+ fi
+
+ if [[ $cur == */* ]]; then
+ _filedir
+ return
+ fi
+
+ local root=${ROOT:-/}
+ COMPREPLY=($(
+ cd "$root/var/log/packages" 2>/dev/null || return 1
+ compgen -f -- "$cur"
+ ))
+} &&
+ complete -F _removepkg removepkg
+
+# ex: filetype=sh
diff --git a/completions/reportbug b/completions/reportbug
new file mode 100644
index 0000000..69b12e9
--- /dev/null
+++ b/completions/reportbug
@@ -0,0 +1,96 @@
+# bash completion for (Debian) reportbug -*- shell-script -*-
+
+_reportbug()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --class | --header | --pseudo-header | --mirror | --list-cc | --subject | \
+ --http_proxy | --proxy | --email | --realname | --smtpuser | --smtppasswd | \
+ --replyto | --reply-to | --justification | --package-version | --body | \
+ --body-file | --timeout | --max-attachment-size | --envelope-from | \
+ -!(-*)[CHPsjV])
+ return
+ ;;
+ --filename | --include | --mta | --output | --attach | -[fioA])
+ _filedir
+ return
+ ;;
+ --keyid | -!(-*)K)
+ COMPREPLY=($(compgen -W '$(IFS=: ; \
+ gpg --list-keys --with-colons 2>/dev/null \
+ | while read -ra row ; do
+ [[ "${row[0]}" == [ps]ub && ${row[11]} == *s* ]] && \
+ printf "%s\n" "${row[4]}"
+ done)' -- "$cur"))
+ return
+ ;;
+ --bts | -!(-*)B)
+ COMPREPLY=($(compgen -W "debian guug kde mandrake help" -- \
+ "$cur"))
+ return
+ ;;
+ --editor | --mua | --mbox-reader-cmd | -!(-*)e)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ --mode)
+ COMPREPLY=($(compgen -W "novice standard expert" -- "$cur"))
+ return
+ ;;
+ --severity | -!(-*)S)
+ COMPREPLY=($(compgen -W "grave serious important normal minor
+ wishlist" -- "$cur"))
+ return
+ ;;
+ --ui | --interface | -!(-*)u)
+ COMPREPLY=($(compgen -W "newt text gnome" -- "$cur"))
+ return
+ ;;
+ --type | -!(-*)t)
+ COMPREPLY=($(compgen -W "gnats debbugs" -- "$cur"))
+ return
+ ;;
+ --tag | -!(-*)T)
+ 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
+ ;;
+ --from-buildd)
+ COMPREPLY=($(compgen -S "_" -W '$(apt-cache dumpavail | \
+ command grep "^Source: $cur" | sort -u | cut -f2 -d" ")'))
+ return
+ ;;
+ --smtphost)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --draftpath)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == -*= ]] && compopt -o nospace
+ return
+ fi
+
+ COMPREPLY=($(compgen -W '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 $(_xfunc apt-cache _apt_cache_packages)' -- "$cur"))
+ _filedir
+} &&
+ complete -F _reportbug reportbug
+
+# ex: filetype=sh
diff --git a/completions/resolvconf b/completions/resolvconf
new file mode 100644
index 0000000..b407488
--- /dev/null
+++ b/completions/resolvconf
@@ -0,0 +1,21 @@
+# bash completion for resolvconf -*- shell-script -*-
+
+_resolvconf()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -a | -d)
+ _available_interfaces
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-a -d -u' -- "$cur"))
+ fi
+} &&
+ complete -F _resolvconf resolvconf
+
+# ex: filetype=sh
diff --git a/completions/ri b/completions/ri
new file mode 100644
index 0000000..9c34b27
--- /dev/null
+++ b/completions/ri
@@ -0,0 +1,120 @@
+# ri completion for Ruby documentation -*- shell-script -*-
+# 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+=(
+ "$(ri "${classes[@]}" 2>/dev/null | ruby -ane \
+ 'if /^'"$regex"' methods:/.../^------------------|^$/ and \
+ /^ / then print $_.split(/, |,$/).grep(/^[^\[]*$/).join("\n"); \
+ end' 2>/dev/null | sort -u)")
+ else
+ # older versions of ri didn't distinguish between class/module and
+ # instance methods
+ COMPREPLY+=(
+ "$(ruby -W0 $ri_path "${classes[@]}" 2>/dev/null | 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 prev words cword split
+ _init_completion -s -n : || return
+
+ case $prev in
+ --help | --width | -!(-*)[hw])
+ return
+ ;;
+ --format | -!(-*)f)
+ COMPREPLY=($(compgen -W 'ansi bs html rdoc' -- "$cur"))
+ return
+ ;;
+ --doc-dir | -!(-*)d)
+ _filedir -d
+ return
+ ;;
+ --dump)
+ _filedir ri
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ local class method prefix ri_path ri_version ri_major separator IFS
+ local -a classes
+
+ 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_version =~ ri[[:space:]]v?([0-9]+) ]] && ri_major=${BASH_REMATCH[1]}
+
+ # 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
+ fi
+
+ if [[ $ri_version == integrated ]]; then
+ # integrated ri from Ruby 1.9
+ classes=($(ri -c 2>/dev/null | ruby -ne 'if /^\s*$/..$stdin.eof then \
+ if /^ +[A-Z]/ then print; end; end' 2>/dev/null))
+ elif [[ $ri_major && $ri_major -ge 3 ]]; then
+ classes=($(ri -l 2>/dev/null))
+ 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"))
+ __ltrim_colon_completions "$cur"
+
+ if [[ $cur == [A-Z]* ]]; then
+ # we're completing on class or module alone
+ return
+ fi
+
+ # we're completing on methods
+ method=$cur
+ _ri_get_methods
+} &&
+ complete -F _ri ri
+
+# ex: filetype=sh
diff --git a/completions/rmlist b/completions/rmlist
new file mode 100644
index 0000000..0cc473a
--- /dev/null
+++ b/completions/rmlist
@@ -0,0 +1,17 @@
+# mailman rmlist completion -*- shell-script -*-
+
+_rmlist()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--archives --help' -- "$cur"))
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+
+} &&
+ complete -F _rmlist rmlist
+
+# ex: filetype=sh
diff --git a/completions/rmmod b/completions/rmmod
new file mode 100644
index 0000000..7ec29e6
--- /dev/null
+++ b/completions/rmmod
@@ -0,0 +1,24 @@
+# Linux rmmod(8) completion. -*- shell-script -*-
+# This completes on a list of all currently installed kernel modules.
+
+_rmmod()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | --help | -V | --version)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _installed_modules "$cur"
+} &&
+ complete -F _rmmod rmmod
+
+# ex: filetype=sh
diff --git a/completions/route b/completions/route
new file mode 100644
index 0000000..f9b3196
--- /dev/null
+++ b/completions/route
@@ -0,0 +1,30 @@
+# Linux route(8) completion -*- shell-script -*-
+
+[[ $OSTYPE == *linux* ]] || return 1
+
+_route()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $prev == dev ]]; then
+ _available_interfaces
+ return
+ fi
+
+ # Remove already given options from completions
+ local opt found i
+ for opt in add del -host -net netmask metric mss window irtt reject mod \
+ dyn reinstate dev default gw; do
+ found=false
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ [[ ${words[i]} == "$opt" ]] && found=true && break
+ done
+ $found || COMPREPLY+=("$opt")
+ done
+
+ COMPREPLY=($(compgen -W '"${COMPREPLY[@]}"' -- "$cur"))
+} &&
+ complete -F _route route
+
+# ex: filetype=sh
diff --git a/completions/rpcdebug b/completions/rpcdebug
new file mode 100644
index 0000000..6e2b88c
--- /dev/null
+++ b/completions/rpcdebug
@@ -0,0 +1,46 @@
+# bash completion for rpcdebug -*- shell-script -*-
+
+_rpcdebug_flags()
+{
+ local i module
+
+ for ((i = 1; i < ${#words[@]}; i++)); do
+ if [[ ${words[i]} == -m ]]; then
+ module=${words[i + 1]}
+ break
+ fi
+ done
+
+ if [[ -n $module ]]; then
+ COMPREPLY=($(compgen -W "$(rpcdebug -vh 2>&1 |
+ command sed -ne 's/^'$module'[[:space:]]\{1,\}//p')" -- "$cur"))
+ fi
+}
+
+_rpcdebug()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*s)
+ _rpcdebug_flags
+ return
+ ;;
+ -*c)
+ _rpcdebug_flags
+ return
+ ;;
+ -*m)
+ COMPREPLY=($(compgen -W 'rpc nfs nfsd nlm' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" -h) -s -c' -- "$cur"))
+ fi
+} &&
+ complete -F _rpcdebug rpcdebug
+
+# ex: filetype=sh
diff --git a/completions/rpm b/completions/rpm
new file mode 100644
index 0000000..8299a37
--- /dev/null
+++ b/completions/rpm
@@ -0,0 +1,302 @@
+# bash completion for rpm -*- shell-script -*-
+
+# helper functions
+
+_rpm_installed_packages()
+{
+ if [[ -r /var/log/rpmpkgs && \
+ /var/log/rpmpkgs -nt /var/lib/rpm/Packages ]]; then
+ # using RHL 7.2 or later - this is quicker than querying the DB
+ COMPREPLY=($(compgen -W "$(command sed -ne \
+ 's|^\([^[:space:]]\{1,\}\)-[^[:space:]-]\{1,\}-[^[:space:]-]\{1,\}\.rpm$|\1|p' \
+ /var/log/rpmpkgs)" -- "$cur"))
+ elif type rpmqpack &>/dev/null; then
+ # SUSE's rpmqpack is faster than rpm -qa
+ COMPREPLY=($(compgen -W '$(rpmqpack)' -- "$cur"))
+ else
+ COMPREPLY=($(${1:-rpm} -qa --nodigest --nosignature \
+ --queryformat='%{NAME} ' "$cur*" 2>/dev/null))
+ fi
+}
+
+_rpm_groups()
+{
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W "$(${1:-rpm} -qa --nodigest --nosignature \
+ --queryformat='%{GROUP}\n' 2>/dev/null)" -- "$cur"))
+}
+
+_rpm_macros()
+{
+ # get a list of macros
+ COMPREPLY=($(compgen -W "$(${1:-rpm} --showrc | command sed -ne \
+ 's/^-\{0,1\}[0-9]\{1,\}[:=][[:space:]]\{1,\}\([^[:space:](]\{3,\}\).*/%\1/p')" \
+ -- "$cur"))
+}
+
+_rpm_buildarchs()
+{
+ COMPREPLY=($(compgen -W "$(${1:-rpm} --showrc | command sed -ne \
+ 's/^\s*compatible\s\s*build\s\s*archs\s*:\s*\(.*\)/\1/ p')" \
+ -- "$cur"))
+}
+
+# rpm(8) completion
+#
+_rpm()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ if ((cword == 1)); then
+ # first parameter on line
+ case $cur in
+ --*)
+ COMPREPLY=($(compgen -W '--help --version --initdb
+ --checksig --addsign --delsign --rebuilddb --showrc
+ --setperms --setugids --eval --install --upgrade --query
+ --freshen --erase --verify --querytags --import' \
+ -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W '-e -E -F -i -q -t -U -V' -- "$cur"))
+ ;;
+ esac
+ return
+ fi
+
+ case $prev in
+ --dbpath | --excludepath | --prefix | --relocate | --root | -!(-*)r)
+ _filedir -d
+ return
+ ;;
+ --eval | -!(-*)E)
+ _rpm_macros $1
+ return
+ ;;
+ --pipe)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ --rcfile)
+ _filedir
+ return
+ ;;
+ --specfile)
+ # complete on .spec files
+ _filedir spec
+ return
+ ;;
+ --whatenhances | --whatprovides | --whatrecommends | --whatrequires | \
+ --whatsuggests | --whatsupplements)
+ if [[ $cur == */* ]]; then
+ _filedir
+ else
+ # complete on capabilities
+ local IFS=$'\n' fmt
+ case $prev in
+ *enhances) fmt="%{ENHANCENAME}" ;;
+ *provides) fmt="%{PROVIDENAME}" ;;
+ *recommends) fmt="%{RECOMMENDNAME}" ;;
+ *requires) fmt="%{REQUIRENAME}" ;;
+ *suggests) fmt="%{SUGGESTNAME}" ;;
+ *supplements) fmt="%{SUPPLEMENTNAME}" ;;
+ esac
+ COMPREPLY=($(compgen -W "$($1 -qa --nodigest --nosignature \
+ --queryformat=\"$fmt\\n\" 2>/dev/null |
+ command grep -vF '(none)')" -- "$cur"))
+ fi
+ return
+ ;;
+ --define | --fileid | --hdrid | --pkgid | -!(-*)D)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ $split && return
+
+ # options common to all modes
+ local opts="--define= --eval= --macros= --nodigest --nosignature --rcfile=
+ --quiet --pipe --verbose"
+
+ case ${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 '[rs]pm'
+ fi
+ ;;
+ -e | --erase)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --allmatches --noscripts
+ --notriggers --nodeps --test --repackage" -- "$cur"))
+ else
+ _rpm_installed_packages $1
+ fi
+ ;;
+ -q* | --query)
+ # options common to all query types
+ opts+=" --changelog --configfiles --conflicts --docfiles --dump
+ --enhances --filesbypkg --filecaps --fileclass --filecolor
+ --fileprovide --filerequire --filesbypkg --info --list
+ --obsoletes --pipe --provides --queryformat= --requires
+ --scripts --suggests --triggers --xml --recommends
+ --supplements --filetriggers --licensefiles"
+
+ if [[ ${words[*]} == *\ -@(*([^ -])f|-file )* ]]; then
+ # -qf completion
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --dbpath --fscontext
+ --last --root --state" -- "$cur"))
+ else
+ _filedir
+ fi
+ elif [[ ${words[*]} == *\ -@(*([^ -])g|-group )* ]]; then
+ # -qg completion
+ _rpm_groups $1
+ elif [[ ${words[*]} == *\ -@(*([^ -])p|-package )* ]]; then
+ # -qp; uninstalled package completion
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --ftpport --ftpproxy
+ --httpport --httpproxy --nomanifest" -- "$cur"))
+ else
+ _filedir '[rs]pm'
+ fi
+ else
+ # -q; installed package completion
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --all --file --fileid
+ --dbpath --fscontext --ftswalk --group --hdrid --last
+ --package --pkgid --root= --specfile --state
+ --triggeredby --whatenhances --whatprovides
+ --whatrecommends --whatrequires --whatsuggests
+ --whatsupplements" \
+ -- "$cur"))
+ elif [[ ${words[*]} != *\ -@(*([^ -])a|-all )* ]]; then
+ _rpm_installed_packages $1
+ fi
+ fi
+ ;;
+ -K* | --checksig)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --nopgp --nogpg --nomd5" \
+ -- "$cur"))
+ else
+ _filedir '[rs]pm'
+ fi
+ ;;
+ -[Vy]* | --verify)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts --root= --dbpath --nodeps
+ --nogroup --nolinkto --nomode --nomtime --nordev --nouser
+ --nofiles --noscripts --nomd5 --querytags --specfile
+ --whatenhances --whatprovides --whatrecommends
+ --whatrequires --whatsuggests --whatsupplements" \
+ -- "$cur"))
+ # check whether we're doing file completion
+ elif [[ ${words[*]} == *\ -@(*([^ -])f|-file )* ]]; then
+ _filedir
+ elif [[ ${words[*]} == *\ -@(*([^ -])g|-group )* ]]; then
+ _rpm_groups $1
+ elif [[ ${words[*]} == *\ -@(*([^ -])p|-package )* ]]; then
+ _filedir '[rs]pm'
+ else
+ _rpm_installed_packages $1
+ fi
+ ;;
+ --resign | --addsign | --delsign)
+ _filedir '[rs]pm'
+ ;;
+ --setperms | --setgids)
+ _rpm_installed_packages $1
+ ;;
+ --import | --dbpath | --root)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--import --dbpath --root=' \
+ -- "$cur"))
+ else
+ _filedir
+ fi
+ ;;
+ esac
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _rpm rpm
+
+_rpmbuild()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local rpm="${1%build*}"
+ [[ $rpm == "$1" ]] || ! type $rpm &>/dev/null && rpm=
+
+ case $prev in
+ --buildroot | --root | --dbpath | -!(-*)r)
+ _filedir -d
+ return
+ ;;
+ --target)
+ _rpm_buildarchs $rpm
+ return
+ ;;
+ --eval | -!(-*)E)
+ _rpm_macros $rpm
+ return
+ ;;
+ --macros | --rcfile)
+ _filedir
+ return
+ ;;
+ --buildpolicy)
+ local cfgdir=$($rpm --eval '%{_rpmconfigdir}' 2>/dev/null)
+ if [[ $cfgdir ]]; then
+ COMPREPLY=($(compgen -W "$(command ls $cfgdir 2>/dev/null |
+ command sed -ne 's/^brp-//p')" -- "$cur"))
+ fi
+ ;;
+ --define | --with | --without | -!(-*)D)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$(_parse_help "$1")" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ # Figure out file extensions to complete
+ local word ext
+ for word in "${words[@]}"; do
+ case $word in
+ -b? | --clean | --nobuild)
+ ext=spec
+ break
+ ;;
+ -t? | --tarbuild)
+ ext='@(t?(ar.)@([gx]z|bz?(2))|tar?(.@(lzma|Z)))'
+ break
+ ;;
+ --rebuild | --recompile)
+ ext='@(?(no)src.r|s)pm'
+ break
+ ;;
+ esac
+ done
+ [[ -n $ext ]] && _filedir $ext
+} &&
+ complete -F _rpmbuild rpmbuild rpmbuild-md5
+
+# ex: filetype=sh
diff --git a/completions/rpm2tgz b/completions/rpm2tgz
new file mode 100644
index 0000000..5ddcfd5
--- /dev/null
+++ b/completions/rpm2tgz
@@ -0,0 +1,17 @@
+# Slackware rpm2tgz completion -*- shell-script -*-
+
+_rpm2tgz()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-s -S -n -r -d -c' -- "$cur"))
+ return
+ fi
+
+ _filedir "rpm"
+} &&
+ complete -F _rpm2tgz rpm2tgz rpm2txz rpm2targz
+
+# ex: filetype=sh
diff --git a/completions/rpmcheck b/completions/rpmcheck
new file mode 100644
index 0000000..cf4ed95
--- /dev/null
+++ b/completions/rpmcheck
@@ -0,0 +1,24 @@
+# bash completion for rpmcheck -*- shell-script -*-
+
+_rpmcheck()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -base)
+ _filedir
+ return
+ ;;
+ 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
+
+# ex: filetype=sh
diff --git a/completions/rrdtool b/completions/rrdtool
new file mode 100644
index 0000000..dcb9ce6
--- /dev/null
+++ b/completions/rrdtool
@@ -0,0 +1,17 @@
+# bash completion for rrdtool -*- shell-script -*-
+
+_rrdtool()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((${#words[@]} == 2)); then
+ COMPREPLY=($(compgen -W 'create update updatev graph dump restore
+ last lastupdate first info fetch tune resize xport' -- "$cur"))
+ else
+ _filedir rrd
+ fi
+} &&
+ complete -F _rrdtool rrdtool
+
+# ex: filetype=sh
diff --git a/completions/rsync b/completions/rsync
new file mode 100644
index 0000000..0bf5389
--- /dev/null
+++ b/completions/rsync
@@ -0,0 +1,86 @@
+# bash completion for rsync -*- shell-script -*-
+
+_rsync()
+{
+ local cur prev words cword split
+ _init_completion -s -n : || return
+
+ case $prev in
+ --config | --password-file | --include-from | --exclude-from | --files-from | \
+ --log-file | --write-batch | --only-write-batch | --read-batch)
+ compopt +o nospace
+ _filedir
+ return
+ ;;
+ --temp-dir | --compare-dest | --backup-dir | --partial-dir | --copy-dest | \
+ --link-dest | -!(-*)T)
+ compopt +o nospace
+ _filedir -d
+ return
+ ;;
+ --rsh | -!(-*)e)
+ compopt +o nospace
+ COMPREPLY=($(compgen -W 'rsh ssh' -- "$cur"))
+ return
+ ;;
+ --compress-level)
+ compopt +o nospace
+ COMPREPLY=($(compgen -W '{1..9}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ _expand || return
+
+ case $cur in
+ -*)
+ COMPREPLY=($(compgen -W '--verbose --quiet --no-motd --checksum
+ --archive --recursive --relative --no-implied-dirs
+ --backup --backup-dir= --suffix= --update --inplace --append
+ --append-verify --dirs --old-dirs --links --copy-links
+ --copy-unsafe-links --safe-links --copy-dirlinks
+ --keep-dirlinks --hard-links --perms --executability --chmod=
+ --acls --xattrs --owner --group --devices --copy-devices
+ --specials --times --omit-dir-times --super --fake-super
+ --sparse --dry-run --whole-file --no-whole-file
+ --one-file-system --block-size= --rsh= --rsync-path=
+ --existing --ignore-existing --remove-source-files --delete
+ --delete-before --delete-during --delete-delay --delete-after
+ --delete-excluded --ignore-errors --force --max-delete=
+ --max-size= --min-size= --partial --partial-dir=
+ --delay-updates --prune-empty-dirs --numeric-ids --timeout=
+ --contimeout= --ignore-times --size-only --modify-window=
+ --temp-dir= --fuzzy --compare-dest= --copy-dest= --link-dest=
+ --compress --compress-level= --skip-compress= --cvs-exclude
+ --filter= --exclude= --exclude-from= --include= --include-from=
+ --files-from= --from0 --protect-args --address= --port=
+ --sockopts= --blocking-io --no-blocking-io --stats
+ --8-bit-output --human-readable --progress --itemize-changes
+ --out-format= --log-file= --log-file-format= --password-file=
+ --list-only --bwlimit= --write-batch= --only-write-batch=
+ --read-batch= --protocol= --iconv= --ipv4 --ipv6 --version
+ --help --daemon --config= --no-detach' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] || compopt +o nospace
+ ;;
+ *:*)
+ # find which remote shell is used
+ local i shell=ssh
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == -@(e|-rsh) ]]; then
+ shell=${words[i + 1]}
+ break
+ fi
+ done
+ [[ $shell == ssh ]] && _xfunc ssh _scp_remote_files
+ ;;
+ *)
+ _known_hosts_real -c -a -- "$cur"
+ _xfunc ssh _scp_local_files
+ ;;
+ esac
+} &&
+ complete -F _rsync -o nospace rsync
+
+# ex: filetype=sh
diff --git a/completions/sbcl b/completions/sbcl
new file mode 100644
index 0000000..22a93e4
--- /dev/null
+++ b/completions/sbcl
@@ -0,0 +1,21 @@
+# -*- shell-script -*-
+# bash programmable completion for various Common Lisp implementations by
+# Nikodemus Siivola <nikodemus@random-state.net>
+
+_sbcl()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # 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
+} &&
+ complete -F _sbcl sbcl sbcl-mt
+
+# ex: filetype=sh
diff --git a/completions/sbopkg b/completions/sbopkg
new file mode 100644
index 0000000..16bd58f
--- /dev/null
+++ b/completions/sbopkg
@@ -0,0 +1,73 @@
+# bash completion for sbopkg(8) -*- shell-script -*-
+
+_sbopkg()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ [[ ${COMPREPLY-} ]] && return
+ fi
+
+ case "$prev" in
+ -e)
+ COMPREPLY=($(compgen -W 'ask continue stop' -- "$cur"))
+ return
+ ;;
+ -f)
+ _filedir
+ return
+ ;;
+ -d)
+ _filedir -d
+ return
+ ;;
+ -V)
+ COMPREPLY=($(compgen -W "?
+ $(sbopkg -V '?' 2>&1 | cut -s -f1)" -- "$cur"))
+ return
+ ;;
+ -i | -b) ;;
+
+ *)
+ return
+ ;;
+ esac
+
+ local i config
+ config="/etc/sbopkg/sbopkg.conf"
+ for ((i = ${#words[@]} - 1; i > 0; i--)); do
+ if [[ ${words[i]} == -f ]]; then
+ config="${words[i + 1]}"
+ __expand_tilde_by_ref config
+ break
+ fi
+ done
+
+ [[ -r $config ]] || return
+ . $config
+
+ for ((i = 1; i < ${#words[@]}; i++)); do
+ case "${words[i]}" in
+ -V)
+ REPO_NAME="${words[i + 1]%%/*}"
+ REPO_BRANCH="${words[i + 1]#*/}"
+ ;;
+ -d)
+ REPO_ROOT="${words[i + 1]}"
+ ;;
+ esac
+ done
+ [[ -r $REPO_ROOT/$REPO_NAME/$REPO_BRANCH/SLACKBUILDS.TXT ]] || return
+
+ COMPREPLY=($(command sed -ne "/^SLACKBUILD NAME: $cur/{s/^SLACKBUILD NAME: //;p}" \
+ $REPO_ROOT/$REPO_NAME/$REPO_BRANCH/SLACKBUILDS.TXT)
+ $(
+ cd $QUEUEDIR
+ compgen -f -X "!*.sqf" -- "$cur"
+ ))
+} &&
+ complete -F _sbopkg sbopkg
+
+# ex: filetype=sh
diff --git a/completions/screen b/completions/screen
new file mode 100644
index 0000000..651ca2c
--- /dev/null
+++ b/completions/screen
@@ -0,0 +1,123 @@
+# bash completion for screen -*- shell-script -*-
+
+_screen_sessions()
+{
+ local sessions=($(command screen -ls | command sed -ne \
+ 's|^\t\{1,\}\([0-9]\{1,\}\.[^\t]\{1,\}\).*'"$1"'.*$|\1|p'))
+ if [[ $cur == +([0-9])?(.*) ]]; then
+ # Complete sessions including pid prefixes
+ COMPREPLY=($(compgen -W '${sessions[@]}' -- "$cur"))
+ else
+ # Create unique completions, dropping pids where possible
+ local -A res
+ local i tmp
+ for i in "${sessions[@]}"; do
+ res[${i/#+([0-9])./}]+=" $i"
+ done
+ for i in "${!res[@]}"; do
+ [[ ${res[i]} == \ *\ * ]] && tmp+=" ${res[i]}" || tmp+=" $i"
+ done
+ COMPREPLY=($(compgen -W '$tmp' -- "$cur"))
+ fi
+} &&
+ _screen()
+ {
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ if [[ $cur == /dev* ]]; then
+ COMPREPLY=($(compgen -W "$(
+ shopt -s nullglob
+ printf '%s\n' \
+ /dev/serial/by-id/* /dev/ttyUSB* /dev/ttyACM* 2>/dev/null
+ )" \
+ -- "$cur"))
+ return
+ fi
+ if [[ $cur == //* ]]; then
+ COMPREPLY=($(compgen -W '//telnet' -- "$cur"))
+ return
+ fi
+ fi
+
+ case ${words[1]} in
+ /dev*)
+ if ((cword == 2)); then
+ COMPREPLY=($(compgen -W '110 300 600 1200 2400 4800 9600 \
+ 14400 19200 38400 57600 115200 128000 256000' -- "$cur"))
+ # TODO more, comma separated options
+ fi
+ return
+ ;;
+ //telnet)
+ ((cword == 2)) && _known_hosts_real -- "$cur"
+ return
+ ;;
+ esac
+
+ if ((cword > 2)); then
+ case ${words[cword - 2]} in
+ -*[dD])
+ _screen_sessions
+ return
+ ;;
+ esac
+ fi
+
+ local i
+ for ((i = 1; i <= cword; i++)); do
+ case ${words[i]} in
+ -*[rRdDxscTehpSt])
+ ((i++))
+ continue
+ ;;
+ -*)
+ continue
+ ;;
+ esac
+
+ _command_offset $i
+ return
+ done
+
+ case $prev in
+ -*[rR])
+ # list detached
+ _screen_sessions 'Detached'
+ return
+ ;;
+ -*[dD])
+ # list attached
+ _screen_sessions 'Attached'
+ return
+ ;;
+ -*x)
+ # list both
+ _screen_sessions
+ return
+ ;;
+ -*s)
+ _shells
+ return
+ ;;
+ -*c)
+ _filedir
+ return
+ ;;
+ -T)
+ _terms
+ return
+ ;;
+ -*[ehpSt])
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+ } &&
+ complete -F _screen screen
+
+# ex: filetype=sh
diff --git a/completions/scrub b/completions/scrub
new file mode 100644
index 0000000..bbb37be
--- /dev/null
+++ b/completions/scrub
@@ -0,0 +1,36 @@
+# scrub(1) completion -*- shell-script -*-
+
+_scrub()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --version | --help | --blocksize | --device-size | --dirent | -!(-*)[vhbsD])
+ return
+ ;;
+ --pattern | -!(-*)p)
+ COMPREPLY=($(compgen -W '$("$1" --help 2>&1 |
+ awk "/^Available/{flag=1;next}/^ /&&flag{print \$1}")' \
+ -- "$cur"))
+ return
+ ;;
+ --freespace | -!(-*)X)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _scrub scrub
+
+# ex: filetype=sh
diff --git a/completions/secret-tool b/completions/secret-tool
new file mode 100644
index 0000000..5462fc0
--- /dev/null
+++ b/completions/secret-tool
@@ -0,0 +1,50 @@
+# bash completion for secret-tool(1) -*- shell-script -*-
+
+_secret_tool()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ $split && return
+
+ local -i i
+ local mode word
+ for i in ${!words[*]}; do
+ if [[ $i -gt 0 && ${words[i]} != -* ]]; then
+ ((i != cword)) && mode=${words[i]}
+ break
+ fi
+ done
+ if [[ ! -v mode ]]; then
+ local -a modes
+ modes=($("$1" nonexistent-mode 2>&1 |
+ while read -r first second third rest; do
+ if [[ $first == "${1##*/}" ]]; then
+ printf "%s\n" "$second"
+ elif [[ $first == usage: && $second == "${1##*/}" ]]; then
+ printf "%s\n" "$third"
+ fi
+ done))
+ COMPREPLY=($(compgen -W '${modes[@]}' -- "$cur"))
+ return
+ fi
+
+ case $mode in
+ store)
+ if [[ ${words[*]} != *\ --label[\ =]* ]]; then
+ COMPREPLY=($(compgen -W "--label=" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+ ;;
+ search)
+ local -A opts=([--all]="" [--unlock]="")
+ for word in "${words[@]:2}"; do
+ [[ $word ]] && unset opts["$word"]
+ done
+ COMPREPLY=($(compgen -W '${opts[@]}' -- "$cur"))
+ ;;
+ esac
+} &&
+ complete -F _secret_tool secret-tool
+
+# ex: filetype=sh
diff --git a/completions/sh b/completions/sh
new file mode 100644
index 0000000..5624ffa
--- /dev/null
+++ b/completions/sh
@@ -0,0 +1,36 @@
+# POSIX sh(1) completion -*- shell-script -*-
+
+_sh()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -c)
+ return
+ ;;
+ -o | +o)
+ COMPREPLY=($(compgen -W 'allexport errexit ignoreeof monitor
+ noclobber noglob noexec nolog notify nounset verbose vi
+ xtrace' -- "$cur"))
+ return
+ ;;
+ esac
+
+ local opts="-a -b -C -e -f -h -i -m -n -o -u -v -x"
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "$opts -c -s" -- "$cur"))
+ return
+ elif [[ $cur == +* ]]; then
+ COMPREPLY=($(compgen -W "${opts//-/+}" -- "$cur"))
+ return
+ fi
+
+ local args ext=
+ _count_args "" "@(-c|[-+]o)"
+ ((args == 1)) && ext="sh"
+ _filedir $ext
+} &&
+ complete -F _sh sh
+
+# ex: filetype=sh
diff --git a/completions/shellcheck b/completions/shellcheck
new file mode 100644
index 0000000..6421d7b
--- /dev/null
+++ b/completions/shellcheck
@@ -0,0 +1,63 @@
+# bash completion for shellcheck(1) -*- shell-script -*-
+
+_shellcheck_optarg()
+{
+ local args=$("$1" --help 2>&1 |
+ command sed -e 's/,/ /g' -ne 's/^.*'$2'\>.*(\([^)]*\)).*/\1/p')
+ COMPREPLY+=($(compgen -W '$args' -- "$cur"))
+}
+
+_shellcheck()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --version | -!(-*)V*)
+ return
+ ;;
+ --exclude | --include | -!(-*)[ei])
+ return
+ ;;
+ --format | -!(-*)f)
+ local args=$("$1" --format=nonexistent-format /dev/null 2>&1 |
+ command sed -ne '/^Supported formats/,//p' |
+ command sed -ne '/^[[:space:]]/p')
+ COMPREPLY=($(compgen -W '$args' -- "$cur"))
+ return
+ ;;
+ --color | -!(-*)C)
+ _shellcheck_optarg "$1" --color
+ return
+ ;;
+ --shell | -!(-*)s)
+ _shellcheck_optarg "$1" --shell
+ return
+ ;;
+ --enable | -!(-*)o)
+ COMPREPLY=($(compgen -W 'all' -- "$cur")) # TODO others?
+ return
+ ;;
+ --source-path | -!(-*)P)
+ _filedir -d
+ COMPREPLY+=($(compgen -W 'SCRIPTDIR' -- "$cur"))
+ return
+ ;;
+ --wiki-link-count | -!(-*)W)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _shellcheck shellcheck
+
+# ex: filetype=sh
diff --git a/completions/sitecopy b/completions/sitecopy
new file mode 100644
index 0000000..8515687
--- /dev/null
+++ b/completions/sitecopy
@@ -0,0 +1,50 @@
+# sitecopy(1) completion -*- shell-script -*-
+# Copyright 2003 Eelco Lempsink <eelcolempsink@gmx.net>
+# 2011 Raphaël Droz <raphael.droz+floss@gmail.com>
+# License: GNU GPL v2 or later
+
+_sitecopy()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --debug | -!(-*)d)
+ COMPREPLY=($(compgen -W "socket files rcfile ftp http httpbody
+ rsh sftp xml xmlparse cleartext" -- "$cur"))
+ compopt -o nospace
+ return
+ ;;
+ --logfile | --rcfile | -!(-*)[gr])
+ _filedir
+ return
+ ;;
+ --storepath | -!(-*)p)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ case $cur in
+ --*)
+ COMPREPLY=($(compgen -W "$(_parse_help $1)" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ ;;
+
+ # only complete long options
+ -)
+ compopt -o nospace
+ COMPREPLY=(--)
+ return
+ ;;
+ esac
+
+ if [[ -r ~/.sitecopyrc ]]; then
+ COMPREPLY=($(compgen -W "$($1 -v |
+ command sed -n '/^Site:/s/Site: //p')" -- "$cur"))
+ fi
+} &&
+ complete -F _sitecopy -o default sitecopy
+
+# ex: filetype=sh
diff --git a/completions/slackpkg b/completions/slackpkg
new file mode 100644
index 0000000..1d87928
--- /dev/null
+++ b/completions/slackpkg
@@ -0,0 +1,112 @@
+# bash completion for slackpkg(8) -*- shell-script -*-
+# options list is based on `grep '\-.*\=.*)' /usr/sbin/slackpkg | cut -f1 -d\)`
+
+_slackpkg()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ local split=false
+ if [[ $cur == -?*=* ]]; then
+ prev="${cur%%?(\\)=*}"
+ cur="${cur#*=}"
+ split=true
+ fi
+
+ case "$prev" in
+ -delall | -checkmd5 | -checkgpg | -checksize | -postinst | -onoff | -download_all | \
+ -dialog | -batch | -only_new_dotnew | -use_includes | -spinning)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ -default_answer)
+ COMPREPLY=($(compgen -W 'yes no' -- "$cur"))
+ return
+ ;;
+ -dialog_maxargs | -mirror)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ compopt -o nospace
+ COMPREPLY=($(compgen -W '-delall= -checkmd5= -checkgpg=
+ -checksize= -postinst= -onoff= -download_all= -dialog=
+ -dialog_maxargs= -batch= -only_new_dotnew= -use_includes=
+ -spinning= -default_answer= -mirror=' -- "$cur"))
+ return
+ fi
+
+ local confdir="/etc/slackpkg"
+ local config="$confdir/slackpkg.conf"
+
+ [[ -r $config ]] || return
+ . "$config"
+
+ local i action
+ for ((i = 1; i < ${#words[@]}; i++)); do
+ if [[ ${words[i]} != -* ]]; then
+ action="${words[i]}"
+ break
+ fi
+ done
+
+ case "$action" in
+ generate-template | search | file-search)
+ # argument required but no completions available
+ return
+ ;;
+ install-template | remove-template)
+ if [[ -e $confdir/templates ]]; then
+ COMPREPLY=($(
+ cd "$confdir/templates"
+ compgen -f -X "!*.template" -- "$cur"
+ ))
+ COMPREPLY=(${COMPREPLY[@]%.template})
+ fi
+ return
+ ;;
+ remove)
+ _filedir
+ COMPREPLY+=($(compgen -W 'a ap d e f k kde kdei l n t tcl x
+ xap xfce y' -- "$cur"))
+ COMPREPLY+=($(
+ cd /var/log/packages
+ compgen -f -- "$cur"
+ ))
+ return
+ ;;
+ install | reinstall | upgrade | blacklist | download)
+ _filedir
+ COMPREPLY+=($(compgen -W 'a ap d e f k kde kdei l n t tcl x
+ xap xfce y' -- "$cur"))
+ COMPREPLY+=($(cut -f 6 -d\ "${WORKDIR}/pkglist" 2>/dev/null |
+ command grep "^$cur"))
+ return
+ ;;
+ info)
+ COMPREPLY=($(cut -f 6 -d\ "${WORKDIR}/pkglist" 2>/dev/null |
+ command grep "^$cur"))
+ return
+ ;;
+ update)
+ # we should complete the same as the next `list` + "gpg"
+ COMPREPLY=($(compgen -W 'gpg' -- "$cur"))
+ ;&
+ *)
+ COMPREPLY+=($(compgen -W 'install reinstall upgrade remove
+ blacklist download update install-new upgrade-all
+ clean-system new-config check-updates help generate-template
+ install-template remove-template search file-search info' -- \
+ "$cur"))
+ return
+ ;;
+ esac
+
+} &&
+ complete -F _slackpkg slackpkg
+
+# ex: filetype=sh
diff --git a/completions/slapt-get b/completions/slapt-get
new file mode 100644
index 0000000..14c2dbe
--- /dev/null
+++ b/completions/slapt-get
@@ -0,0 +1,86 @@
+# slapt-get(8) completion -*- shell-script -*-
+
+_slapt_get()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ --config | -c)
+ _filedir
+ return
+ ;;
+ --retry | --search)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help)' -- "$cur"))
+ if [[ ${COMPREPLY-} ]]; then
+ [[ $COMPREPLY == *= ]] && compopt -o nospace
+ return
+ fi
+ fi
+
+ local i t
+ # search for last action (--install|--install-set|--remove|--show|--filelist)
+ for ((i = ${#words[@]} - 1; i > 0; i--)); do
+ if [[ ${words[i]} == --show ]]; then
+ t="all"
+ break
+ elif [[ ${words[i]} == -@(i|-install) ]]; then
+ t="avl"
+ break
+ elif [[ ${words[i]} == --install-set ]]; then
+ t="set"
+ break
+ elif [[ ${words[i]} == --@(remove|filelist) ]]; then
+ t="ins"
+ break
+ fi
+ done
+
+ local config="/etc/slapt-get/slapt-getrc" # default config location
+ # search for config
+ for ((i = ${#words[@]} - 1; i > 0; i--)); do
+ if [[ ${words[i]} == -@(c|-config) ]]; then
+ config="${words[i + 1]}"
+ __expand_tilde_by_ref config
+ break
+ fi
+ done
+ [[ -r $config ]] || return
+
+ case $t in
+ all) # --show
+ # slapt-get will fail to search for "^name-version"
+ # it can search for names only
+ local name=${cur%%-*}
+ COMPREPLY=($(LC_ALL=C "$1" -c "$config" --search "^$name" \
+ 2>/dev/null | LC_ALL=C command sed -ne "/^$cur/{s/ .*$//;p}"))
+ return
+ ;;
+ avl) # --install|-i|
+ COMPREPLY=($(LC_ALL=C "$1" -c "$config" --available \
+ 2>/dev/null | LC_ALL=C command sed -ne "/^$cur/{s/ .*$//;p}"))
+ return
+ ;;
+ ins) # --remove|--filelist
+ COMPREPLY=($(
+ cd /var/log/packages
+ compgen -f -- "$cur"
+ ))
+ return
+ ;;
+ set) # --install-set
+ COMPREPLY=($(compgen -W 'a ap d e f k kde kdei l n t tcl x
+ xap xfce y' -- "$cur"))
+ return
+ ;;
+ esac
+} &&
+ complete -F _slapt_get slapt-get
+
+# ex: filetype=sh
diff --git a/completions/slapt-src b/completions/slapt-src
new file mode 100644
index 0000000..1e3828c
--- /dev/null
+++ b/completions/slapt-src
@@ -0,0 +1,68 @@
+# slapt-src(8) completion -*- shell-script -*-
+
+_slapt_src()
+{
+ local cur prev words cword split
+ _init_completion -s -n : || return
+
+ case "$prev" in
+ --config | -c)
+ _filedir
+ return
+ ;;
+ --search | -s | --postprocess | -p)
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --help)' -- "$cur"))
+ if [[ ${COMPREPLY-} ]]; then
+ [[ $COMPREPLY == *= ]] && compopt -o nospace
+ return
+ fi
+ fi
+
+ local i t
+ # search for last action (-i|-w|-b|-f)
+ for ((i = ${#words[@]} - 1; i > 0; i--)); do
+ if [[ ${words[i]} == -@([iwfb]|-install|-show|-build|-fetch) ]]; then
+ t="all"
+ break
+ fi
+ done
+ if [[ $t != all ]]; then
+ return
+ fi
+
+ local config="/etc/slapt-get/slapt-srcrc" # default config location
+ # search for config
+ for ((i = ${#words[@]} - 1; i > 0; i--)); do
+ if [[ ${words[i]} == -@(c|-config) ]]; then
+ config="${words[i + 1]}"
+ __expand_tilde_by_ref config
+ break
+ fi
+ if [[ ${words[i]} == --config=?* ]]; then
+ config="${words[i]#*=}"
+ break
+ fi
+ done
+ [[ -r $config ]] || return
+
+ if [[ $cur == *:* ]]; then
+ local name=${cur%:*}
+ COMPREPLY=($(LC_ALL=C "$1" --config "$config" --search "^$name" \
+ 2>/dev/null | LC_ALL=C command sed -ne \
+ "/^$cur/{s/^$name:\([^ ]*\) .*$/\1/;p}"))
+ else
+ COMPREPLY=($(LC_ALL=C "$1" --config "$config" --search "^$cur" \
+ 2>/dev/null | LC_ALL=C command sed -ne "/^$cur/{s/ .*$//;p}"))
+ fi
+} &&
+ complete -F _slapt_src slapt-src
+
+# ex: filetype=sh
diff --git a/completions/smartctl b/completions/smartctl
new file mode 100644
index 0000000..ee45a7c
--- /dev/null
+++ b/completions/smartctl
@@ -0,0 +1,165 @@
+# bash completion for smartctl(8) -*- shell-script -*-
+
+_smartctl_quietmode()
+{
+ COMPREPLY=($(compgen -W 'errorsonly silent noserial' -- "$cur"))
+}
+_smartctl_device()
+{
+ case $cur in
+ areca* | 3ware* | megaraid* | cciss*)
+ # shellcheck disable=SC2054
+ COMPREPLY+=(${cur%%,*},{0..31})
+ COMPREPLY=($(compgen -W '"${COMPREPLY[@]}"' -- "$cur"))
+ ;;
+ hpt*)
+ # shellcheck disable=SC2054
+ COMPREPLY+=(hpt,{1..4}/{1..8} hpt,{1..4}/{1..8}/{1..5})
+ COMPREPLY=($(compgen -W '"${COMPREPLY[@]}"' -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W "ata scsi sat usbcypress usbjmicron
+ usbsunplus marvell areca 3ware hpt megaraid cciss auto test" \
+ -- "$cur"))
+ case "${COMPREPLY[@]}" in
+ areca | 3ware | hpt | megaraid | cciss)
+ compopt -o nospace
+ ;;
+ esac
+ ;;
+ esac
+}
+_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 background
+ sasphy sasphy,reset sataphy sataphy,reset scttemp scttempsts
+ scttemphist scterc gplog smartlog xerror xselftest' -- "$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()
+{
+ [[ $cur == @(pending|scttempint|vendor), ]] && return
+ COMPREPLY=($(compgen -W 'offline short long conveyance select,
+ select,redo select,next afterselect,on afterselect,off pending,
+ scttempint, vendor,' -- "$cur"))
+ [[ ${COMPREPLY-} == *, ]] && compopt -o nospace
+}
+_smartctl_drivedb()
+{
+ local prefix=
+ if [[ $cur == +* ]]; then
+ prefix=+
+ cur="${cur#+}"
+ fi
+ _filedir h
+ [[ -n $prefix ]] && COMPREPLY=("${COMPREPLY[@]/#/$prefix}")
+}
+
+_smartctl()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --quietmode | -!(-*)q)
+ _smartctl_quietmode
+ ;;
+ --device | -!(-*)d)
+ _smartctl_device
+ return
+ ;;
+ --tolerance | -!(-*)T)
+ _smartctl_tolerance
+ return
+ ;;
+ --badsum | -!(-*)b)
+ _smartctl_badsum
+ return
+ ;;
+ --report | -!(-*)r)
+ _smartctl_report
+ return
+ ;;
+ --nocheck | -!(-*)n)
+ _smartctl_powermode
+ return
+ ;;
+ --smart | --offlineauto | --saveauto | -!(-*)[soS])
+ _smartctl_feature
+ return
+ ;;
+ --log | -!(-*)l)
+ _smartctl_log
+ return
+ ;;
+ --vendorattribute | -!(-*)v)
+ _smartctl_vendorattribute
+ return
+ ;;
+ --firmwarebug | -!(-*)F)
+ _smartctl_firmwarebug
+ return
+ ;;
+ --presets | -!(-*)P)
+ _smartctl_presets
+ return
+ ;;
+ --drivedb | -!(-*)B)
+ _smartctl_drivedb
+ return
+ ;;
+ --test | -!(-*)t)
+ _smartctl_test
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ cur=${cur:=/dev/}
+ _filedir
+ fi
+} &&
+ complete -F _smartctl smartctl
+
+# ex: filetype=sh
diff --git a/completions/smbclient b/completions/smbclient
new file mode 100644
index 0000000..cea2107
--- /dev/null
+++ b/completions/smbclient
@@ -0,0 +1,322 @@
+# bash completion for samba -*- shell-script -*-
+
+_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 |
+ command sed -ne 's/^[[:space:]]*\\\\*\([^[:space:]]*\).*/\1/p'
+ )" -- "$cur"))
+ fi
+}
+
+_samba_debuglevel()
+{
+ COMPREPLY=($(compgen -W '{0..10}' -- "$cur"))
+}
+
+_samba_sockopts()
+{
+ COMPREPLY=($(compgen -W 'SO_KEEPALIVE SO_REUSEADDR SO_BROADCAST
+ TCP_NODELAY IPTOS_LOWDELAY IPTOS_THROUGHPUT SO_SNDBUF SO_RCVBUF
+ SO_SNDLOWAT SO_RCVLOWAT' -- "$cur"))
+}
+
+_samba_signing()
+{
+ COMPREPLY=($(compgen -W 'on off required' -- "$cur"))
+}
+
+_smbclient()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --name-resolve | -!(-*)R)
+ _samba_resolve_order
+ return
+ ;;
+ -!(-*)t)
+ COMPREPLY=($(compgen -W 'SJIS EUC JIS7 JIS8 JUNET HEX CAP' \
+ -- "$cur"))
+ return
+ ;;
+ --configfile | --authentication-file | -!(-*)[sA])
+ _filedir
+ return
+ ;;
+ --log-basename | --directory | -!(-*)[lD])
+ _filedir -d
+ return
+ ;;
+ --socket-options | -!(-*)O)
+ _samba_sockopts
+ return
+ ;;
+ -!(-*)T)
+ COMPREPLY=($(compgen -W 'c x I X F b g q r N a' -- "$cur"))
+ return
+ ;;
+ --workgroup | -!(-*)W)
+ _samba_domains
+ return
+ ;;
+ --debuglevel | -!(-*)d)
+ _samba_debuglevel
+ return
+ ;;
+ --list | -!(-*)L)
+ _samba_hosts
+ return
+ ;;
+ --signing | -!(-*)S)
+ _samba_signing
+ return
+ ;;
+ --port | --message | --ip-address | --send-buffer | --user | --netbiosname | \
+ --scope | --tar | --command | --max-protocol | -!(-*)[pMIbUniTcm])
+ return
+ ;;
+ --help | --version | -!(-*)[?V])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _smbclient smbclient
+
+_smbget()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --outputfile | --rcfile | -!(-*)[of])
+ _filedir
+ return
+ ;;
+ --debuglevel | -!(-*)d)
+ _samba_debuglevel
+ return
+ ;;
+ --workgroup | -!(-*)w)
+ _samba_domains
+ return
+ ;;
+ --username | --password | --blocksize | -!(-*)[upb])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _smbget smbget
+
+_smbcacls()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --configfile | --authentication-file | -!(-*)[As])
+ _filedir
+ return
+ ;;
+ --log-basename | -!(-*)l)
+ _filedir -d
+ return
+ ;;
+ --debuglevel | -!(-*)d)
+ _samba_debuglevel
+ return
+ ;;
+ --signing)
+ _samba_signing
+ return
+ ;;
+ --socket-options | -!(-*)O)
+ _samba_sockopts
+ return
+ ;;
+ --workgroup | -!(-*)W)
+ _samba_domains
+ return
+ ;;
+ --help | --usage | --delete | --modify | --add | --set | --chown | --chgrp | \
+ --netbiosname | --scope | --user | -!(-*)[?DMaSCGniU])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _smbcacls smbcacls
+
+_smbcquotas()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --configfile | --authentication-file | -!(-*)[sA])
+ _filedir
+ return
+ ;;
+ --log-basename | -!(-*)l)
+ _filedir -d
+ return
+ ;;
+ --debuglevel | -!(-*)d)
+ _samba_debuglevel
+ return
+ ;;
+ --signing)
+ _samba_signing
+ return
+ ;;
+ --help | --usage | --user | --set | -!(-*)[?UuS])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _smbcquotas smbcquotas
+
+_smbpasswd()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*r)
+ _samba_hosts
+ return
+ ;;
+ -*R)
+ _samba_resolve_order
+ return
+ ;;
+ -*c)
+ _filedir
+ return
+ ;;
+ -*D)
+ _samba_debuglevel
+ return
+ ;;
+ -*[Uhw])
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ fi
+} &&
+ complete -F _smbpasswd smbpasswd
+
+_smbtar()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*[rt])
+ _filedir tar
+ return
+ ;;
+ -*s)
+ _samba_hosts
+ return
+ ;;
+ -*l)
+ _samba_debuglevel
+ return
+ ;;
+ -*N)
+ _filedir
+ return
+ ;;
+ -*[pxbdu])
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+} &&
+ complete -F _smbtar smbtar
+
+_smbtree()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --configfile | --authentication-file | -!(-*)[sA])
+ _filedir
+ return
+ ;;
+ --log-basename | -!(-*)l)
+ _filedir -d
+ return
+ ;;
+ --debuglevel | -!(-*)d)
+ _samba_debuglevel
+ return
+ ;;
+ --signing | -!(-*)S)
+ _samba_signing
+ return
+ ;;
+ --help | --usage | --user | -!(-*)[?U])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _smbtree smbtree
+
+# ex: filetype=sh
diff --git a/completions/snownews b/completions/snownews
new file mode 100644
index 0000000..5b585d9
--- /dev/null
+++ b/completions/snownews
@@ -0,0 +1,15 @@
+# snownews(1) completion -*- shell-script -*-
+
+_snownews()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ # return list of available options
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ fi
+} &&
+ complete -F _snownews snownews
+
+# ex: filetype=sh
diff --git a/completions/sqlite3 b/completions/sqlite3
new file mode 100644
index 0000000..26d38a1
--- /dev/null
+++ b/completions/sqlite3
@@ -0,0 +1,38 @@
+# sqlite3(1) completion -*- shell-script -*-
+
+_sqlite3()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local dbexts='@(sqlite?(3)|?(s?(3))db)'
+
+ case $prev in
+ -help | -version | -lookaside | -mmap | -newline | -nullvalue | -pagecache | \
+ -scratch | -separator | *.$dbexts)
+ return
+ ;;
+ -init)
+ _filedir
+ return
+ ;;
+ -cmd)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ esac
+
+ [[ $cword -gt 2 && ${words[cword - 2]} == -@(lookaside|pagecache|scratch) ]] &&
+ return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ return
+ fi
+
+ _filedir "$dbexts"
+} &&
+ complete -F _sqlite3 sqlite3
+
+# ex: filetype=sh
diff --git a/completions/ss b/completions/ss
new file mode 100644
index 0000000..4a27d51
--- /dev/null
+++ b/completions/ss
@@ -0,0 +1,41 @@
+# ss(8) completion -*- shell-script -*-
+
+_ss()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | -!(-*)[hV])
+ return
+ ;;
+ --family | -!(-*)f)
+ COMPREPLY=($(compgen -W 'unix inet inet6 link netlink' \
+ -- "$cur"))
+ return
+ ;;
+ --query | -!(-*)A)
+ local prefix=
+ [[ $cur == *,* ]] && prefix="${cur%,*},"
+ COMPREPLY=($(compgen -W '$("$1" --help | \
+ command sed -e "s/|/ /g" -ne "s/.*QUERY := {\([^}]*\)}.*/\1/p")' \
+ -- "${cur##*,}"))
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ return
+ ;;
+ --diag | --filter | -!(-*)[DF])
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _ss ss
+
+# ex: filetype=sh
diff --git a/completions/ssh b/completions/ssh
new file mode 100644
index 0000000..907c039
--- /dev/null
+++ b/completions/ssh
@@ -0,0 +1,563 @@
+# ssh(1) completion -*- shell-script -*-
+
+_ssh_queries()
+{
+ COMPREPLY+=($(compgen -W \
+ "cipher cipher-auth help mac kex key key-cert key-plain key-sig
+ protocol-version compression sig
+ ciphers macs kexalgorithms pubkeyacceptedkeytypes
+ hostkeyalgorithms hostbasedkeytypes hostbasedacceptedkeytypes" \
+ -- "${cur,,}"))
+}
+
+_ssh_query()
+{
+ ${1:-ssh} -Q $2 2>/dev/null
+}
+
+_ssh_ciphers()
+{
+ local ciphers='$(_ssh_query "$1" cipher)'
+ [[ $ciphers ]] || ciphers="3des-cbc aes128-cbc aes192-cbc aes256-cbc
+ aes128-ctr aes192-ctr aes256-ctr arcfour128 arcfour256 arcfour
+ blowfish-cbc cast128-cbc"
+ COMPREPLY+=($(compgen -W "$ciphers" -- "$cur"))
+}
+
+_ssh_macs()
+{
+ local macs='$(_ssh_query "$1" mac)'
+ [[ $macs ]] || macs="hmac-md5 hmac-sha1 umac-64@openssh.com hmac-ripemd160
+ hmac-sha1-96 hmac-md5-96"
+ COMPREPLY+=($(compgen -W "$macs" -- "$cur"))
+}
+
+_ssh_options()
+{
+ local opts=(
+ AddKeysToAgent AddressFamily BatchMode BindAddress CanonicalDomains
+ CanonicalizeFallbackLocal CanonicalizeHostname CanonicalizeMaxDots
+ CanonicalizePermittedCNAMEs CASignatureAlgorithms CertificateFile
+ ChallengeResponseAuthentication CheckHostIP Ciphers ClearAllForwardings
+ Compression ConnectionAttempts ConnectTimeout ControlMaster ControlPath
+ ControlPersist DynamicForward EnableSSHKeysign EscapeChar
+ ExitOnForwardFailure FingerprintHash ForwardAgent ForwardX11
+ ForwardX11Timeout ForwardX11Trusted GatewayPorts GlobalKnownHostsFile
+ GSSAPIAuthentication GSSAPIClientIdentity GSSAPIDelegateCredentials
+ GSSAPIKeyExchange GSSAPIRenewalForcesRekey GSSAPIServerIdentity
+ GSSAPITrustDns HashKnownHosts Host HostbasedAuthentication
+ HostbasedKeyTypes HostKeyAlgorithms HostKeyAlias HostName
+ IdentitiesOnly IdentityAgent IdentityFile IgnoreUnknown Include IPQoS
+ KbdInteractiveAuthentication KbdInteractiveDevices KexAlgorithms
+ LocalCommand LocalForward LogLevel MACs
+ NoHostAuthenticationForLocalhost NumberOfPasswordPrompts
+ PasswordAuthentication PermitLocalCommand PKCS11Provider Port
+ PreferredAuthentications ProxyCommand ProxyJump ProxyUseFdpass
+ PubkeyAcceptedKeyTypes PubkeyAuthentication RekeyLimit RemoteCommand
+ RemoteForward RequestTTY RevokedHostKeys SendEnv ServerAliveCountMax
+ ServerAliveInterval SmartcardDevice StreamLocalBindMask
+ StreamLocalBindUnlink StrictHostKeyChecking SyslogFacility TCPKeepAlive
+ Tunnel TunnelDevice UpdateHostKeys UsePrivilegedPort User
+ UserKnownHostsFile VerifyHostKeyDNS VisualHostKey XAuthLocation)
+ local protocols=$(_ssh_query "$1" protocol-version)
+ if [[ -z $protocols || $protocols == *1* ]]; then
+ opts+=(Cipher CompressionLevel Protocol RhostsRSAAuthentication
+ RSAAuthentication)
+ fi
+
+ compopt -o nospace
+ local IFS=$' \t\n' reset=$(shopt -p nocasematch)
+ shopt -s nocasematch
+ local option
+ COMPREPLY=($(for option in "${opts[@]}"; do
+ [[ $option == "$cur"* ]] && printf '%s=\n' "$option"
+ done))
+ $reset
+}
+
+# Complete a ssh suboption (like ForwardAgent=y<tab>)
+# Two parameters: the string to complete including the equal sign, and
+# the ssh executable to invoke (optional).
+# Not all suboptions are completed.
+# Doesn't handle comma-separated lists.
+_ssh_suboption()
+{
+ # Split into subopt and subval
+ local prev=${1%%=*} cur=${1#*=}
+
+ case ${prev,,} in
+ batchmode | canonicaldomains | canonicalizefallbacklocal | \
+ challengeresponseauthentication | checkhostip | \
+ clearallforwardings | controlpersist | compression | enablesshkeysign | \
+ exitonforwardfailure | forwardagent | forwardx11 | forwardx11trusted | \
+ gatewayports | gssapiauthentication | gssapikeyexchange | \
+ gssapidelegatecredentials | gssapirenewalforcesrekey | gssapitrustdns | \
+ hashknownhosts | hostbasedauthentication | identitiesonly | \
+ kbdinteractiveauthentication | kbdinteractivedevices | \
+ nohostauthenticationforlocalhost | passwordauthentication | permitlocalcommand | \
+ proxyusefdpass | pubkeyauthentication | rhostsrsaauthentication | \
+ rsaauthentication | streamlocalbindunlink | \
+ tcpkeepalive | useprivilegedport | visualhostkey)
+ COMPREPLY=($(compgen -W 'yes no' -- "$cur"))
+ ;;
+ addkeystoagent)
+ COMPREPLY=($(compgen -W 'yes ask confirm no' -- "$cur"))
+ ;;
+ addressfamily)
+ COMPREPLY=($(compgen -W 'any inet inet6' -- "$cur"))
+ ;;
+ bindaddress)
+ _ip_addresses
+ ;;
+ canonicalizehostname)
+ COMPREPLY=($(compgen -W 'yes no always' -- "$cur"))
+ ;;
+ identityfile)
+ _ssh_identityfile
+ ;;
+ *file | identityagent | include | controlpath | revokedhostkeys | xauthlocation)
+ _filedir
+ ;;
+ casignaturealgorithms)
+ COMPREPLY=($(compgen -W '$(_ssh_query "$2" sig)' -- "$cur"))
+ ;;
+ cipher)
+ COMPREPLY=($(compgen -W 'blowfish des 3des' -- "$cur"))
+ ;;
+ ciphers)
+ _ssh_ciphers "$2"
+ ;;
+ controlmaster)
+ COMPREPLY=($(compgen -W 'yes ask auto autoask no' -- "$cur"))
+ ;;
+ compressionlevel)
+ COMPREPLY=($(compgen -W '{1..9}' -- "$cur"))
+ ;;
+ fingerprinthash)
+ COMPREPLY=($(compgen -W 'md5 sha256' -- "$cur"))
+ ;;
+ ipqos)
+ COMPREPLY=($(compgen -W 'af1{1..4} af2{2..3} af3{1..3} af4{1..3}
+ cs{0..7} ef lowdelay throughput reliability' -- "$cur"))
+ ;;
+ hostbasedkeytypes | hostkeyalgorithms)
+ COMPREPLY=($(compgen -W '$(_ssh_query "$2" key)' -- "$cur"))
+ ;;
+ kexalgorithms)
+ COMPREPLY=($(compgen -W '$(_ssh_query "$2" kex)' -- "$cur"))
+ ;;
+ loglevel)
+ COMPREPLY=($(compgen -W 'QUIET FATAL ERROR INFO VERBOSE DEBUG{,1,2,3}' -- "$cur"))
+ ;;
+ macs)
+ _ssh_macs "$2"
+ ;;
+ pkcs11provider)
+ _filedir so
+ ;;
+ preferredauthentications)
+ COMPREPLY=($(compgen -W 'gssapi-with-mic host-based publickey
+ keyboard-interactive password' -- "$cur"))
+ ;;
+ protocol)
+ local protocols=($(_ssh_query "$2" protocol-version))
+ [[ $protocols ]] || protocols=(1 2)
+ if ((${#protocols[@]} > 1)); then
+ COMPREPLY=($(compgen -W '${protocols[@]}' -- "$cur"))
+ fi
+ ;;
+ proxyjump)
+ _known_hosts_real -a ${configfile:+-F "$configfile"} -- "$cur"
+ ;;
+ proxycommand | remotecommand | localcommand)
+ COMPREPLY=($(compgen -c -- "$cur"))
+ ;;
+ pubkeyacceptedkeytypes)
+ COMPREPLY=($(compgen -W '$(_ssh_query "$2" key)' -- "$cur"))
+ ;;
+ requesttty)
+ COMPREPLY=($(compgen -W 'no yes force auto' -- "$cur"))
+ ;;
+ stricthostkeychecking)
+ COMPREPLY=($(compgen -W 'accept-new ask no off' -- "$cur"))
+ ;;
+ syslogfacility)
+ COMPREPLY=($(compgen -W 'DAEMON USER AUTH LOCAL{0..7}' -- "$cur"))
+ ;;
+ tunnel)
+ COMPREPLY=($(compgen -W 'yes no point-to-point ethernet' \
+ -- "$cur"))
+ ;;
+ updatehostkeys | verifyhostkeydns)
+ COMPREPLY=($(compgen -W 'yes no ask' -- "$cur"))
+ ;;
+ esac
+ return 0
+}
+
+# Try to complete -o SubOptions=
+#
+# Returns 0 if the completion was handled or non-zero otherwise.
+_ssh_suboption_check()
+{
+ # Get prev and cur words without splitting on =
+ local cureq=$(_get_cword :=) preveq=$(_get_pword :=)
+ if [[ $cureq == *=* && $preveq == -*o ]]; then
+ _ssh_suboption $cureq "$1"
+ return $?
+ fi
+ return 1
+}
+
+# Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument
+_ssh_configfile()
+{
+ set -- "${words[@]}"
+ while (($# > 0)); do
+ if [[ $1 == -F* ]]; then
+ if ((${#1} > 2)); then
+ configfile="$(dequote "${1:2}")"
+ else
+ shift
+ [[ ${1-} ]] && configfile="$(dequote "$1")"
+ fi
+ break
+ fi
+ shift
+ done
+}
+
+# With $1 set, look for public key files, else private
+# shellcheck disable=SC2120
+_ssh_identityfile()
+{
+ [[ -z $cur && -d ~/.ssh ]] && cur=~/.ssh/id
+ _filedir
+ if ((${#COMPREPLY[@]} > 0)); then
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]}' \
+ -X "${1:+!}*.pub" -- "$cur"))
+ fi
+}
+
+_ssh()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local configfile
+ _ssh_configfile
+
+ _ssh_suboption_check "$1" && return
+
+ local ipvx
+
+ case $prev in
+ -*b)
+ _ip_addresses
+ return
+ ;;
+ -*c)
+ _ssh_ciphers "$1"
+ return
+ ;;
+ -*[DeLpRW])
+ return
+ ;;
+ -*[EFS])
+ _filedir
+ return
+ ;;
+ -*i)
+ _ssh_identityfile
+ return
+ ;;
+ -*I)
+ _filedir so
+ return
+ ;;
+ -*J)
+ _known_hosts_real -a ${configfile:+-F "$configfile"} -- "$cur"
+ return
+ ;;
+ -*l)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ -*m)
+ _ssh_macs "$1"
+ return
+ ;;
+ -*O)
+ COMPREPLY=($(compgen -W 'check forward cancel exit stop' -- "$cur"))
+ return
+ ;;
+ -*o)
+ _ssh_options "$1"
+ return
+ ;;
+ -*Q)
+ _ssh_queries "$1"
+ return
+ ;;
+ -*w)
+ _available_interfaces
+ return
+ ;;
+ -*4*)
+ ipvx=-4
+ ;;
+ -*6*)
+ ipvx=-6
+ ;;
+ 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 '$(_parse_usage "$1")' -- "$cur"))
+ else
+ _known_hosts_real ${ipvx-} -a ${configfile:+-F "$configfile"} -- "$cur"
+
+ local args
+ _count_args
+ if ((args > 1)); then
+ compopt -o filenames
+ COMPREPLY+=($(compgen -c -- "$cur"))
+ fi
+ fi
+} &&
+ shopt -u hostcomplete && complete -F _ssh ssh slogin autossh sidedoor
+
+# sftp(1) completion
+#
+_sftp()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local configfile
+ _ssh_configfile
+
+ _ssh_suboption_check && return
+
+ local ipvx
+
+ case $prev in
+ -*[BDlPRs])
+ return
+ ;;
+ -*[bF])
+ _filedir
+ return
+ ;;
+ -*i)
+ _ssh_identityfile
+ return
+ ;;
+ -*c)
+ _ssh_ciphers
+ return
+ ;;
+ -*J)
+ _known_hosts_real -a ${configfile:+-F "$configfile"} -- "$cur"
+ return
+ ;;
+ -*o)
+ _ssh_options
+ return
+ ;;
+ -*S)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ -*4*)
+ ipvx=-4
+ ;;
+ -*6*)
+ ipvx=-6
+ ;;
+ 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 '$(_parse_usage "$1")' -- "$cur"))
+ else
+ _known_hosts_real ${ipvx-} -a ${configfile:+-F "$configfile"} -- "$cur"
+ fi
+} &&
+ shopt -u hostcomplete && complete -F _sftp sftp
+
+# things we want to backslash escape in scp paths
+# shellcheck disable=SC2089
+_scp_path_esc='[][(){}<>"'"'"',:;^&!$=?`\\|[:space:]]'
+
+# Complete remote files with ssh. If the first arg is -d, complete on dirs
+# only. Returns paths escaped with three backslashes.
+# shellcheck disable=SC2120
+_scp_remote_files()
+{
+ local IFS=$'\n'
+
+ # remove backslash escape from the first colon
+ cur=${cur/\\:/:}
+
+ local userhost=${cur%%?(\\):*}
+ local path=${cur#*:}
+
+ # unescape (3 backslashes to 1 for chars we escaped)
+ # shellcheck disable=SC2090
+ path=$(command sed -e 's/\\\\\\\('$_scp_path_esc'\)/\\\1/g' <<<"$path")
+
+ # default to home dir of specified user on remote host
+ if [[ -z $path ]]; then
+ path=$(ssh -o 'Batchmode yes' $userhost pwd 2>/dev/null)
+ fi
+
+ local files
+ if [[ $1 == -d ]]; then
+ # escape problematic characters; remove non-dirs
+ # shellcheck disable=SC2090
+ files=$(ssh -o 'Batchmode yes' $userhost \
+ command ls -aF1dL "$path*" 2>/dev/null |
+ command sed -e 's/'$_scp_path_esc'/\\\\\\&/g' -e '/[^\/]$/d')
+ else
+ # escape problematic characters; remove executables, aliases, pipes
+ # and sockets; add space at end of file names
+ # shellcheck disable=SC2090
+ files=$(ssh -o 'Batchmode yes' $userhost \
+ command ls -aF1dL "$path*" 2>/dev/null |
+ command sed -e 's/'$_scp_path_esc'/\\\\\\&/g' -e 's/[*@|=]$//g' \
+ -e 's/[^\/]$/& /g')
+ fi
+ COMPREPLY+=($files)
+}
+
+# This approach is used instead of _filedir to get a space appended
+# after local file/dir completions, and -o nospace retained for others.
+# If first arg is -d, complete on directory names only. The next arg is
+# an optional prefix to add to returned completions.
+_scp_local_files()
+{
+ local IFS=$'\n'
+
+ local dirsonly=false
+ if [[ ${1-} == -d ]]; then
+ dirsonly=true
+ shift
+ fi
+
+ if $dirsonly; then
+ COMPREPLY+=($(command ls -aF1dL $cur* 2>/dev/null |
+ command sed -e "s/$_scp_path_esc/\\\\&/g" -e '/[^\/]$/d' -e "s/^/${1-}/"))
+ else
+ COMPREPLY+=($(command ls -aF1dL $cur* 2>/dev/null |
+ command sed -e "s/$_scp_path_esc/\\\\&/g" -e 's/[*@|=]$//g' \
+ -e 's/[^\/]$/& /g' -e "s/^/${1-}/"))
+ fi
+}
+
+# scp(1) completion
+#
+_scp()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local configfile
+ _ssh_configfile
+
+ _ssh_suboption_check && {
+ COMPREPLY=("${COMPREPLY[@]/%/ }")
+ return
+ }
+
+ local ipvx
+
+ case $prev in
+ -*c)
+ _ssh_ciphers
+ COMPREPLY=("${COMPREPLY[@]/%/ }")
+ return
+ ;;
+ -*F)
+ _filedir
+ compopt +o nospace
+ return
+ ;;
+ -*i)
+ _ssh_identityfile
+ compopt +o nospace
+ return
+ ;;
+ -*J)
+ _known_hosts_real -a ${configfile:+-F "$configfile"} -- "$cur"
+ return
+ ;;
+ -*[lP])
+ return
+ ;;
+ -*o)
+ _ssh_options
+ return
+ ;;
+ -*S)
+ compopt +o nospace -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ -*4*)
+ ipvx=-4
+ ;;
+ -*6*)
+ ipvx=-6
+ ;;
+ esac
+
+ _expand || return
+
+ case $cur in
+ !(*:*)/* | [.~]*) ;; # looks like a path
+ *:*)
+ _scp_remote_files
+ return
+ ;;
+ esac
+
+ local prefix
+
+ if [[ $cur == -F* ]]; then
+ cur=${cur#-F}
+ prefix=-F
+ else
+ case $cur in
+ -*)
+ COMPREPLY=($(compgen -W '$(_parse_usage "${words[0]}")' \
+ -- "$cur"))
+ COMPREPLY=("${COMPREPLY[@]/%/ }")
+ return
+ ;;
+ */* | [.~]*)
+ # not a known host, pass through
+ ;;
+ *)
+ _known_hosts_real ${ipvx-} -c -a \
+ ${configfile:+-F "$configfile"} -- "$cur"
+ ;;
+ esac
+ fi
+
+ _scp_local_files "${prefix-}"
+} &&
+ complete -F _scp -o nospace scp
+
+# ex: filetype=sh
diff --git a/completions/ssh-add b/completions/ssh-add
new file mode 100644
index 0000000..d8f7492
--- /dev/null
+++ b/completions/ssh-add
@@ -0,0 +1,35 @@
+# ssh-add(1) completion -*- shell-script -*-
+
+_ssh_add()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*E)
+ COMPREPLY=($(compgen -W 'md5 sha256' -- "$cur"))
+ return
+ ;;
+ -*t)
+ return
+ ;;
+ -*T)
+ _filedir
+ return
+ ;;
+ -*[se])
+ _filedir so
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" "-\?")' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _ssh_add ssh-add
+
+# ex: filetype=sh
diff --git a/completions/ssh-copy-id b/completions/ssh-copy-id
new file mode 100644
index 0000000..f628194
--- /dev/null
+++ b/completions/ssh-copy-id
@@ -0,0 +1,32 @@
+# ssh-copy-id(1) completion -*- shell-script -*-
+
+_ssh_copy_id()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ _xfunc ssh _ssh_suboption_check "$1" && return
+
+ case $prev in
+ -i)
+ _xfunc ssh _ssh_identityfile pub
+ return
+ ;;
+ -p)
+ return
+ ;;
+ -o)
+ _xfunc ssh _ssh_options
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur"))
+ else
+ _known_hosts_real -a -- "$cur"
+ fi
+} &&
+ complete -F _ssh_copy_id ssh-copy-id
+
+# ex: filetype=sh
diff --git a/completions/ssh-keygen b/completions/ssh-keygen
new file mode 100644
index 0000000..0e629a5
--- /dev/null
+++ b/completions/ssh-keygen
@@ -0,0 +1,123 @@
+# ssh-keygen(1) completion -*- shell-script -*-
+
+_ssh_keygen()
+{
+ local cur prev words cword
+ _init_completion -n := || return
+
+ case $prev in
+ -*[aCIJjMNPSVWz])
+ return
+ ;;
+ -*b)
+ local -a sizes
+ case "${words[*]}" in
+ *" -t dsa"?( *))
+ sizes=(1024)
+ ;;
+ *" -t ecdsa"?( *))
+ sizes=(256 384 521)
+ ;;
+ *" -t rsa"?( *))
+ sizes=(1024 2048 3072 4096)
+ ;;
+ esac
+ COMPREPLY=($(compgen -W '${sizes[@]}' -- "$cur"))
+ return
+ ;;
+ -*E)
+ COMPREPLY=($(compgen -W 'md5 sha256' -- "$cur"))
+ return
+ ;;
+ -*[FR])
+ # TODO: trim this down to actual entries in known hosts files
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -*[Dw])
+ _filedir so
+ return
+ ;;
+ -*[fGKsT])
+ _filedir
+ return
+ ;;
+ -*m)
+ COMPREPLY=($(compgen -W 'PEM PKCS8 RFC4716' -- "$cur"))
+ return
+ ;;
+ -*n)
+ [[ ${words[*]} != *\ -*Y\ * ]] || return
+ local prefix=
+ [[ $cur == *,* ]] && prefix="${cur%,*},"
+ if [[ ${words[*]} == *\ -*h\ * ]]; then
+ _known_hosts_real -- "${cur##*,}"
+ else
+ COMPREPLY=($(compgen -u -- "${cur##*,}"))
+ fi
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ return
+ ;;
+ -*O)
+ if [[ $cur != *=* ]]; then
+ COMPREPLY=($(compgen -W '
+ clear critical: extension: force-command=
+ no-agent-forwarding no-port-forwarding no-pty no-user-rc
+ no-x11-forwarding permit-agent-forwarding
+ permit-port-forwarding permit-pty permit-user-rc
+ permit-X11-forwarding no-touch-required source-address=
+
+ lines= start-line= checkpoint= memory= start= generator=
+
+ application challenge= device resident user
+ write-attestation-path
+ ' -- "$cur"))
+ [[ ${COMPREPLY-} == *[:=] ]] && compopt -o nospace
+ __ltrim_colon_completions "$cur"
+ else
+ case $cur in
+ force-command=*)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "${cur#*=}"))
+ ;;
+ checkpoint=* | challenge=*)
+ cur=${cur#*=}
+ _filedir
+ ;;
+ esac
+ fi
+ return
+ ;;
+ -*r)
+ [[ ${words[*]} != *\ -*Y\ * ]] || _filedir
+ return
+ ;;
+ -*t)
+ local protocols=$(_xfunc ssh _ssh_query "$1" protocol-version)
+ local types='dsa ecdsa ecdsa-sk ed25519 ed25519-sk rsa'
+ if [[ $protocols == *1* ]]; then
+ types+=' rsa1'
+ fi
+ COMPREPLY=($(compgen -W "$types" -- "$cur"))
+ return
+ ;;
+ -*Y)
+ COMPREPLY=($(compgen -W 'find-principals check-novalidate sign
+ verify' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_usage "$1" "-?")
+ [[ -z $opts ]] && opts=$(_parse_help "$1" "-?") # OpenSSH < 7
+ COMPREPLY=($(compgen -W "$opts" -- "$cur"))
+ fi
+
+ if [[ ${words[*]} == *\ -*s\ * ]]; then
+ _filedir pub
+ fi
+} &&
+ complete -F _ssh_keygen ssh-keygen
+
+# ex: filetype=sh
diff --git a/completions/sshfs b/completions/sshfs
new file mode 100644
index 0000000..223d029
--- /dev/null
+++ b/completions/sshfs
@@ -0,0 +1,23 @@
+# sshfs(1) completion -*- shell-script -*-
+
+_sshfs()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ _expand || return
+
+ if [[ $cur == *:* ]]; then
+ _xfunc ssh _scp_remote_files -d
+ # unlike scp and rsync, sshfs works with 1 backslash instead of 3
+ COMPREPLY=("${COMPREPLY[@]//\\\\\\/\\}")
+ return
+ fi
+
+ [[ $cur == @(*/|[.~])* ]] || _known_hosts_real -c -a -- "$cur"
+
+ _xfunc ssh _scp_local_files -d
+} &&
+ complete -F _sshfs -o nospace sshfs
+
+# ex: filetype=sh
diff --git a/completions/sshmitm b/completions/sshmitm
new file mode 100644
index 0000000..ee893e5
--- /dev/null
+++ b/completions/sshmitm
@@ -0,0 +1,17 @@
+# sshmitm completion -*- shell-script -*-
+
+_sshmitm()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ else
+ _known_hosts_real -- "$cur"
+ fi
+
+} &&
+ complete -F _sshmitm sshmitm
+
+# ex: filetype=sh
diff --git a/completions/sshow b/completions/sshow
new file mode 100644
index 0000000..917444e
--- /dev/null
+++ b/completions/sshow
@@ -0,0 +1,26 @@
+# sshow completion -*- shell-script -*-
+
+_sshow()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*i)
+ _available_interfaces -a
+ return
+ ;;
+ -*p)
+ _filedir pcap
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ fi
+
+} &&
+ complete -F _sshow sshow
+
+# ex: filetype=sh
diff --git a/completions/strace b/completions/strace
new file mode 100644
index 0000000..2b46ce8
--- /dev/null
+++ b/completions/strace
@@ -0,0 +1,99 @@
+# bash completion for strace -*- shell-script -*-
+
+_strace()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ # check if we're still completing strace
+ local offset=0 i
+ for ((i = 1; i <= cword; i++)); do
+ case ${words[i]} in
+ -o | -e | -p)
+ ((i++))
+ continue
+ ;;
+ -*)
+ continue
+ ;;
+ esac
+ offset=$i
+ break
+ done
+
+ if ((offset > 0)); then
+ _command_offset $offset
+ else
+
+ case $prev in
+ -*e)
+ if [[ $cur == *=* ]]; then
+ prev=${cur/=*/}
+ cur=${cur/*=/}
+
+ case $prev in
+ trace)
+ # Import arch-specific syscalls
+ #+ -- not foolproof IMHO --David Paleino
+ local define syscall rest
+ local -A syscalls
+ while read -r define syscall rest; do
+ [[ $define == "#define" && \
+ $syscall =~ ^__NR_(.+) ]] &&
+ syscalls[${BASH_REMATCH[1]}]=1
+ done 2>/dev/null </usr/include/asm/unistd.h
+ if [[ ! $syscalls ]]; then
+ local unistd arch=$(command uname -m)
+ if [[ $arch == *86 ]]; then
+ unistd=/usr/include/asm/unistd_32.h
+ else
+ unistd=/usr/include/asm/unistd_64.h
+ fi
+ while read -r define syscall rest; do
+ [[ $define == "#define" && \
+ $syscall =~ ^__NR_(.+) ]] &&
+ syscalls[${BASH_REMATCH[1]}]=1
+ done 2>/dev/null <$unistd
+ fi
+
+ COMPREPLY=($(compgen -W '${!syscalls[@]} file
+ process network signal ipc desc all none' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+ else
+ compopt -o nospace
+ COMPREPLY=($(compgen -S"=" -W 'trace abbrev verbose raw
+ signal read write' -- "$cur"))
+ fi
+ return
+ ;;
+ -*o)
+ _filedir
+ return
+ ;;
+ -*p)
+ _pids
+ return
+ ;;
+ -*S)
+ COMPREPLY=($(compgen -W 'time calls name nothing' -- "$cur"))
+ return
+ ;;
+ -*u)
+ _allowed_users
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -c -- "$cur"))
+ fi
+ fi
+} &&
+ complete -F _strace -o default strace
+
+# ex: filetype=sh
diff --git a/completions/strings b/completions/strings
new file mode 100644
index 0000000..059f557
--- /dev/null
+++ b/completions/strings
@@ -0,0 +1,45 @@
+# strings(1) completion -*- shell-script -*-
+
+_strings()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | --bytes | -!(-*)[hvVn])
+ return
+ ;;
+ --radix | -!(-*)t)
+ COMPREPLY=($(compgen -W 'o d x' -- "$cur"))
+ return
+ ;;
+ --target | -!(-*)T)
+ COMPREPLY=($(compgen -W '$(LC_ALL=C "$1" --help 2>/dev/null | \
+ command sed -ne "s/: supported targets: \(.*\)/\1/p")' \
+ -- "$cur"))
+ return
+ ;;
+ --encoding | -!(-*)e)
+ COMPREPLY=($(compgen -W 's S b l B L' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ elif [[ $cur == @* ]]; then
+ cur=${cur:1}
+ _filedir
+ COMPREPLY=("${COMPREPLY[@]/#/@}")
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _strings strings
+
+# ex: filetype=sh
diff --git a/completions/sudo b/completions/sudo
new file mode 100644
index 0000000..c9a806b
--- /dev/null
+++ b/completions/sudo
@@ -0,0 +1,56 @@
+# bash completion for sudo(8) -*- shell-script -*-
+
+_sudo()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local i mode=normal
+ [[ $1 == *sudoedit ]] && mode=edit
+
+ [[ $mode == normal ]] &&
+ for ((i = 1; i <= cword; i++)); do
+ if [[ ${words[i]} != -* ]]; then
+ local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
+ local root_command=${words[i]}
+ _command_offset $i
+ return
+ fi
+ if [[ ${words[i]} == -@(!(-*)e*|-edit) ]]; then
+ mode=edit
+ break
+ fi
+ [[ ${words[i]} == \
+ -@(user|other-user|group|close-from|prompt|!(-*)[uUgCp]) ]] &&
+ ((i++))
+ done
+
+ case "$prev" in
+ --user | --other-user | -!(-*)[uU])
+ COMPREPLY=($(compgen -u -- "$cur"))
+ return
+ ;;
+ --group | -!(-*)g)
+ COMPREPLY=($(compgen -g -- "$cur"))
+ return
+ ;;
+ --close-from | --prompt | -!(-*)[Cp])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+ if [[ $mode == edit ]]; then
+ _filedir
+ fi
+} &&
+ complete -F _sudo sudo sudoedit
+
+# ex: filetype=sh
diff --git a/completions/svcadm b/completions/svcadm
new file mode 100644
index 0000000..5269c7b
--- /dev/null
+++ b/completions/svcadm
@@ -0,0 +1,150 @@
+# svcadm completion -*- shell-script -*-
+#
+# Copyright 2006 Yann Rouillard <yann@opencsw.org>
+
+#
+# svcadm accept any complete FMRI or abbreviated FMRI
+# - a complete FMRI is svc:/foo/bar/bar/baz
+# - abbreviated FMRI are foo/bar/bar/baz, bar/bar/baz, bar/baz or baz
+#
+# The goal of this function is to be able to propose all alternatives,
+# but to not clutter the interface with all completions, we will only
+# cut every completion alternative at the next slash.
+#
+# For example, if the user types <nothing><tab>, we will propose for svc://foo/bar/bar/baz
+# the following completion: foo/, bar/ and baz
+# If the user types <b><tab>, we will propose: bar/ and baz
+# If the user types <bar/><tab>, we will propose: bar/bar/ and bar/baz
+#
+# By default, the function proproses only abbreviated completions except if the user already
+# began to type svc:. In that case we will propose only the complete FMRI beginning with the
+# pattern
+#
+_smf_complete_fmri()
+{
+ local cur="$1" prefix="$2"
+ local cur_prefix fmri fmri_list=""
+ local exact_mode pattern
+
+ if [[ $cur == $prefix* ]]; then
+ [[ $cur == "$prefix" ]] && cur+="/"
+ pattern="$cur*"
+ exact_mode=1
+ else
+ pattern="$prefix*/$cur*"
+ fi
+
+ cur_prefix="${cur%"${cur##*/}"}"
+
+ for fmri in $(svcs -H -o FMRI "$pattern" 2>/dev/null); do
+ local fmri_part_list fmri_part
+ if [[ -z $exact_mode ]]; then
+ fmri=${fmri#$prefix/}
+
+ # we generate all possibles abbrevations for the FMRI
+ # no need to have a generic loop as we will have a finite
+ # number of components
+ local ifs="$IFS"
+ IFS="/"
+ set -- $fmri
+ IFS=$ifs
+ case $# in
+ 1) fmri_part_list=" $1" ;;
+ 2) fmri_part_list=" $2 $1/$2" ;;
+ 3) fmri_part_list=" $3 $2/$3 $1/$2/$3" ;;
+ 4) fmri_part_list=" $4 $3/$4 $2/$3/$4 $1/$2/$3/$4" ;;
+ esac
+ else
+ fmri_part_list="$fmri"
+ fi
+
+ # Here we make sure the completions begins with the pattern and
+ # we cut them at the first slash
+ for fmri_part in $fmri_part_list; do
+ [[ $fmri_part == $cur* ]] || continue
+ local first_part=${fmri_part#$cur_prefix}
+ first_part=$cur_prefix${first_part%%/*}
+ [[ $first_part != "$fmri_part" ]] && first_part+="/"
+ fmri_list+=" $first_part"
+ done
+ done
+
+ COMPREPLY=($fmri_list)
+
+ # here we want to detect if there only one completion proposed and that
+ # it ends with a slash. That means the users will still have to complete
+ # after, so we gain him one tab keystroke by immediately proposing the
+ # next completion alternatives
+ local i=${#COMPREPLY[*]}
+ if [[ $i -gt 0 && ${COMPREPLY[--i]} == */ ]]; then
+ # we have to iterate through the list as we may have duplicate
+ while ((i != 0)); do
+ [[ ${COMPREPLY[i]} != "${COMPREPLY[i - 1]}" ]] && break
+ ((i--))
+ done
+ if ((i == 0)); then
+ _smf_complete_fmri "${COMPREPLY[0]}" "$prefix"
+ return
+ fi
+ fi
+
+ # Work-around bash_completion issue where bash interprets a colon
+ # as a separator, borrowed from maven completion code which borrowed
+ # it from darcs completion code :)
+ local colonprefixes=${cur%"${cur##*:}"}
+ local i=${#COMPREPLY[*]}
+ while ((i-- > 0)); do
+ COMPREPLY[i]=${COMPREPLY[i]#"$colonprefixes"}
+ done
+}
+
+_svcadm()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ local command_list="enable disable restart refresh clear mark milestone"
+ local command i
+
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == @(enable|disable|restart|refresh|clear|mark|milestone) ]]; then
+ command=${words[i]}
+ fi
+ done
+
+ if [[ ! -v command ]]; then
+ if [[ ${cur} == -* ]]; then
+ COMPREPLY=($(compgen -W "-v" -- ${cur}))
+ else
+ COMPREPLY=($(compgen -W "$command_list" -- ${cur}))
+ fi
+ else
+ if [[ ${cur} == -* ]]; then
+ case "$command" in
+ enable)
+ COMPREPLY=($(compgen -W "-r -s -t" -- ${cur}))
+ ;;
+ disable)
+ COMPREPLY=($(compgen -W "-s -t" -- ${cur}))
+ ;;
+ mark)
+ COMPREPLY=($(compgen -W "-I -t" -- ${cur}))
+ ;;
+ milestone)
+ COMPREPLY=($(compgen -W "-d" -- ${cur}))
+ ;;
+ esac
+ else
+ if [[ $command == "mark" ]] && [[ $prev != @(degraded|maintenance) ]]; then
+ COMPREPLY=($(compgen -W "degraded maintenance" -- ${cur}))
+ elif [[ $command == "milestone" ]]; then
+ _smf_complete_fmri "${cur}" "svc:/milestone"
+ else
+ _smf_complete_fmri "${cur}" "svc:"
+ fi
+ fi
+ fi
+} &&
+ complete -F _svcadm svcadm
+
+# ex: filetype=sh
diff --git a/completions/svk b/completions/svk
new file mode 100644
index 0000000..9079df1
--- /dev/null
+++ b/completions/svk
@@ -0,0 +1,214 @@
+# svk(1) completion -*- shell-script -*-
+
+_svk()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local commands options command
+
+ 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 ((cword == 1)); then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--version' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W "$commands" -- "$cur"))
+ fi
+ else
+ case $prev in
+ -F | --file | --targets)
+ _filedir
+ return
+ ;;
+ --encoding)
+ _xfunc iconv _iconv_charsets
+ return
+ ;;
+ esac
+
+ command=${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+=" --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 "$($1 mirror --list \
+ 2>/dev/null | awk '/^\//{print $1}')" -- "$cur"))
+ ;;
+ co | checkout | push | pull)
+ if [[ $cur == //*/* ]]; then
+ path=${cur%/*}/
+ else
+ path=//
+ fi
+ COMPREPLY=($(compgen -W "$($1 list $path 2>/dev/null |
+ command sed -e 's|\(.*\)|'$path'\1|')" -- "$cur"))
+ ;;
+ *)
+ _filedir
+ ;;
+ esac
+ fi
+ fi
+} &&
+ complete -F _svk svk
+
+# ex: filetype=sh
diff --git a/completions/sync_members b/completions/sync_members
new file mode 100644
index 0000000..397f8b0
--- /dev/null
+++ b/completions/sync_members
@@ -0,0 +1,31 @@
+# mailman sync_members completion -*- shell-script -*-
+
+_sync_members()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -w | -g | -d | --welcome-msg | --goodbye-msg | --digest)
+ COMPREPLY=($(compgen -W 'y n' -- "$cur"))
+ return
+ ;;
+ --file)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--no-change --welcome-msg --goodbye-msg
+ --digest --notifyadmin --file --help' -- "$cur"))
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+
+} &&
+ complete -F _sync_members sync_members
+
+# ex: filetype=sh
diff --git a/completions/synclient b/completions/synclient
new file mode 100644
index 0000000..c4a0d42
--- /dev/null
+++ b/completions/synclient
@@ -0,0 +1,24 @@
+# bash completion for synclient(1) -*- shell-script -*-
+
+_synclient()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ case $prev in
+ -\? | -h | -V)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ elif [[ $cur != *=?* ]]; then
+ COMPREPLY=($(compgen -S = -W '$($1 -l 2>/dev/null | \
+ awk "/^[ \t]/ { print \$1 }")' -- "$cur"))
+ compopt -o nospace
+ fi
+} &&
+ complete -F _synclient synclient
+
+# ex: filetype=sh
diff --git a/completions/sysbench b/completions/sysbench
new file mode 100644
index 0000000..0af7cc3
--- /dev/null
+++ b/completions/sysbench
@@ -0,0 +1,132 @@
+# bash completion for sysbench -*- shell-script -*-
+
+_sysbench()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --num-threads | --max-requests | --max-time | --thread-stack-size | \
+ --help | --version | help | version)
+ return
+ ;;
+ --init-rng | --debug | --validate)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ --test)
+ COMPREPLY=($(compgen -W 'fileio cpu memory threads mutex oltp' \
+ -- "$cur"))
+ return
+ ;;
+ --cpu-max-prime)
+ return
+ ;;
+ --file-test-mode)
+ COMPREPLY=($(compgen -W 'seqwr seqrewr seqrd rndrd rndwr rndrw' \
+ -- "$cur"))
+ return
+ ;;
+ --file-io-mode)
+ COMPREPLY=($(compgen -W 'sync async fastmmap slowmmap' -- "$cur"))
+ return
+ ;;
+ --file-extra-flags)
+ COMPREPLY=($(compgen -W 'sync dsync direct' -- "$cur"))
+ return
+ ;;
+ --file-fsync-all | --file-fsync-end)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ --file-fsync-mode)
+ COMPREPLY=($(compgen -W 'fsync fdatasync' -- "$cur"))
+ return
+ ;;
+ --memory-scope)
+ COMPREPLY=($(compgen -W 'global local' -- "$cur"))
+ return
+ ;;
+ --memory-hugetlb)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ --memory-oper)
+ COMPREPLY=($(compgen -W 'read write none' -- "$cur"))
+ return
+ ;;
+ --memory-access-mode)
+ COMPREPLY=($(compgen -W 'seq rnd' -- "$cur"))
+ return
+ ;;
+ --oltp-test-mode)
+ COMPREPLY=($(compgen -W 'simple complex nontrx sp' -- "$cur"))
+ return
+ ;;
+ --oltp-read-only | --oltp-skip-trx | --oltp-quto-inc | --mysql-ssl)
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ --oltp-nontrx-mode)
+ COMPREPLY=($(compgen -W 'select update_key update_nokey insert
+ delete' -- "$cur"))
+ return
+ ;;
+ --oltp-dist-type)
+ COMPREPLY=($(compgen -W 'uniform gaussian special' -- "$cur"))
+ return
+ ;;
+ --db-driver)
+ COMPREPLY=($(compgen -W "$($1 --test=oltp help 2>/dev/null |
+ command sed -e '/^.*database drivers:/,/^$/!d' \
+ -ne 's/^ *\([^ ]*\) .*/\1/p')" -- "$cur"))
+ return
+ ;;
+ --db-ps-mode)
+ COMPREPLY=($(compgen -W 'auto disable' -- "$cur"))
+ return
+ ;;
+ --mysql-socket)
+ _filedir sock
+ return
+ ;;
+ --mysql-table-engine)
+ COMPREPLY=($(compgen -W 'myisam innodb bdb heap ndbcluster
+ federated' -- "$cur"))
+ return
+ ;;
+ --mysql-engine-trx)
+ COMPREPLY=($(compgen -W 'yes no auto' -- "$cur"))
+ return
+ ;;
+ --*)
+ $split && return
+ ;;
+ esac
+
+ # find out which test we're running
+ local i test
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ # TODO --test= is deprecated, bare test name preferred
+ if [[ ${words[i]} == --test* ]]; then
+ test=${words[i]#*=}
+ break
+ fi
+ done
+
+ local opts=$(_parse_help "$1")
+ if [[ -v test ]]; then
+ local help=($(_parse_help "$1" "--test=$test help"))
+ opts="${opts/--test=/} ${help[*]} prepare run cleanup help version"
+ fi
+
+ if [[ $cur == -* || ! -v test ]]; then
+ COMPREPLY=($(compgen -W "$opts" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ COMPREPLY=($(compgen -W "prepare run cleanup help version" -- "$cur"))
+ fi
+} &&
+ complete -F _sysbench sysbench
+
+# ex: filetype=sh
diff --git a/completions/sysctl b/completions/sysctl
new file mode 100644
index 0000000..005452d
--- /dev/null
+++ b/completions/sysctl
@@ -0,0 +1,31 @@
+# bash completion for sysctl -*- shell-script -*-
+
+_sysctl()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | --pattern | -!(-*)[hVr])
+ return
+ ;;
+ --load | -!(-*)[pf])
+ _filedir conf
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts="$(_parse_help "$1")"
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ else
+ local suffix=
+ [[ $prev == -w ]] && suffix="="
+ COMPREPLY=($(compgen -S "$suffix" -W \
+ "$(PATH="$PATH:/sbin" $1 -N -a 2>/dev/null)" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _sysctl sysctl
+
+# ex: filetype=sh
diff --git a/completions/tar b/completions/tar
new file mode 100644
index 0000000..04b7fc0
--- /dev/null
+++ b/completions/tar
@@ -0,0 +1,711 @@
+# bash completion for GNU tar -*- shell-script -*-
+#
+# General info
+# ============
+#
+# The "old" style arguments
+# -------------------------
+#
+# We don't "advice" the old tar option format by default for GNU tar, example:
+#
+# 'tar czfT /tmp/archive.tar patterns.txt'
+#
+# We rather advice the 'tar -czf /tmp/archive.tar -T patterns.txt' format of
+# arguments. Though, if user starts the 'first' tar argument without leading
+# dash, we treat the command line apropriately.
+#
+#
+# long/short options origin
+# -------------------------
+#
+# For GNU tar, everything is parsed from `tar --help` output so not so much
+# per-distribution work should be needed. The _parse_help does not seem to be
+# good enough so parsed here directly.
+#
+#
+# FIXME: --starting-file (-K) (should be matched for extraction only)
+# FIXME: handle already used (at least short) options
+# FIXME: Test-cases for make check.
+# - check for no global variable pollution
+# FIXME: why PS4='$BASH_SOURCE:$LINENO: ' shows sometimes negative lines?
+# FIXME: timeout on tarball listing
+# FIXME: cache 'tar --help' parsing results into global variables
+# FIXME: at least 'tar -<tab>' should show some helping text (apart from just
+# pure option advices)
+# FIXME: short option completion should be more intuitive
+# - verbose mode option should be advised multiple times
+# - mode option should be advised only once
+# - format option should be advised only once
+# ...
+
+__gtar_parse_help_opt()
+{
+ local opttype arg opt separator optvar
+ opttype=long
+ arg="$2"
+ opt="$1"
+ separator=" "
+
+ case "$opt" in
+ --*) ;;
+
+ -\?)
+ return
+ ;;
+ -*)
+ opttype=short
+ opt=${opt##-}
+ separator=
+ ;;
+ *)
+ echo "bash_completion: $FUNCNAME: unknown option $opt" >&2
+ return 1
+ ;;
+ esac
+
+ # Remove arguments.
+ opt=${opt//\[*/}
+ opt=${opt//=*/=}
+
+ # Basic sanity.
+ opt=${opt//\"*/}
+ opt=${opt//\'*/}
+ opt=${opt//\;*/}
+
+ optvar=$opttype'_arg_'$arg
+
+ eval "$optvar=\"\$$optvar$separator\"\"$opt\""
+}
+
+__gtar_parse_help_line()
+{
+ local i
+
+ for i in $1; do
+ case "$i" in
+ # regular options
+ --* | -*)
+ __gtar_parse_help_opt "$i" "$2"
+ ;;
+
+ # end once there is single non-option word
+ *)
+ break
+ ;;
+ esac
+ done
+}
+
+__gnu_tar_parse_help()
+{
+ local str line arg
+ while IFS= read line; do
+ # Ok, this requires some comment probably. The GNU help output prints
+ # options on lines beginning with spaces. After that, there is one
+ # or more options separated by ', ' separator string. We are matching
+ # like this then: ^<spaces>(<separator>?<option>)+<whatever>$
+ if [[ $line =~ \
+ ^[[:blank:]]{1,10}(((,[[:blank:]])?(--?([\]\[a-zA-Z0-9?=-]+))(,[[:space:]])?)+).*$ ]]; then
+
+ line=${BASH_REMATCH[1]}
+ str="${line//,/ }"
+
+ # Detect that all options on this line accept arguments (and whether
+ # the arguments are required or not). Note that only long option
+ # description in GNU help output mentions arguments. So the $line
+ # variable may contain e.g. '-X, --XXX[=NAME], -XXX2[=NAME]'.
+ arg=none
+ if [[ $line =~ --[A-Za-z0-9-]+(\[?)= ]]; then
+ [[ -n ${BASH_REMATCH[1]} ]] && arg=opt || arg=req
+ fi
+
+ __gtar_parse_help_line "$str" "$arg"
+ fi
+ done <<<"$(tar --help)"
+
+ long_opts="\
+ $long_arg_none $long_arg_opt $long_arg_req"
+
+ short_opts="$short_arg_none$short_arg_opt$short_arg_req"
+}
+
+# Hack: parse --warning keywords from tar's error output
+__gtar_parse_warnings()
+{
+ local line
+ LC_ALL=C tar --warning= 2>&1 | while IFS= read line; do
+ if [[ $line =~ ^[[:blank:]]*-[[:blank:]]*[\`\']([a-zA-Z0-9-]+)\'$ ]]; then
+ echo "${BASH_REMATCH[1]} no-${BASH_REMATCH[1]}"
+ fi
+ done
+}
+
+# Helper to obtain last character of string.
+__tar_last_char()
+{
+ echo "${1:$((${#1} - 1))}"
+}
+
+__tar_parse_old_opt()
+{
+ local first_word char
+
+ # current word is the first word
+ [[ $cword -eq 1 && -n $cur && ${cur:0:1} != '-' ]] &&
+ old_opt_progress=1
+
+ # check that first argument does not begin with "-"
+ first_word=${words[1]}
+ [[ -n $first_word && ${first_word:0:1} != "-" ]] &&
+ old_opt_used=1
+
+ # parse the old option (if present) contents to allow later code expect
+ # corresponding arguments
+ if ((old_opt_used == 1)); then
+ char=${first_word:0:1}
+ while [[ -n $char ]]; do
+ if __tar_is_argreq "$char"; then
+ old_opt_parsed+=("$char")
+ fi
+ first_word=${first_word##$char}
+ char=${first_word:0:1}
+ done
+ fi
+}
+
+# Make the analysis of whole command line.
+__tar_preparse_cmdline()
+{
+ local first_arg i modes="ctxurdA"
+
+ shift # progname
+
+ __tar_parse_old_opt
+
+ first_arg=1
+ for i in "$@"; do
+ case "$i" in
+ --delete | --test-label)
+ tar_mode=${i:2:100}
+ tar_mode_arg=$i
+ break
+ ;;
+ --*)
+ # skip
+ ;;
+ -*[$modes]*)
+ tar_mode=${i//[^$modes]/}
+ tar_mode=${tar_mode:0:1}
+ tar_mode_arg=$i
+ break
+ ;;
+ *[$modes]*)
+ # Only the first arg may be "MODE" without leading dash
+ if ((first_arg == 1)); then
+ tar_mode=${i//[^$modes]/}
+ tar_mode=${tar_mode:0:1}
+ tar_mode_arg=$i
+ fi
+ ;;
+ esac
+ first_arg=0
+ done
+}
+
+# Generate completions for -f/--file.
+__tar_file_option()
+{
+ local ext="$1"
+
+ case "$tar_mode" in
+ c)
+ # no need to advise user to re-write existing tarball
+ _filedir -d
+ ;;
+ *)
+ _filedir "$ext"
+ ;;
+ esac
+}
+
+# Returns truth if option requires argument. No equal sign must be pasted.
+# Accepts option in format: 'c', '-c', '--create'
+__tar_is_argreq()
+{
+ local opt
+ opt=$1
+ case "$opt" in
+ -[A-Za-z0-9?])
+ [[ $short_arg_req =~ ${opt##-} ]] && return 0
+ ;;
+ [A-Za-z0-9?])
+ [[ $short_arg_req =~ ${opt} ]] && return 0
+ ;;
+ --*)
+ [[ $long_arg_req =~ [[:blank:]]$opt=[[:blank:]] ]] && return 0
+ ;;
+ esac
+
+ return 1
+}
+
+# Called only for short parameter
+__tar_complete_mode()
+{
+ local short_modes rawopt generated \
+ allshort_raw_unused allshort_raw \
+ filler i
+
+ short_modes="ctx"
+ [[ ! -v basic_tar ]] && short_modes="ctxurdA"
+
+ # Remove prefix when needed
+ rawopt=${cur#-}
+
+ # -c -z -x ... => czx
+ allshort_raw=${short_opts//[- ]/}
+
+ # init the 'mode' option if no option is in ${cur}
+ if [[ $tar_mode == none ]]; then
+
+ # when user passed something like 'tar cf' do not put the '-' before
+ filler=
+ if [[ -z $cur && ! -v basic_tar ]]; then
+ filler=-
+ fi
+
+ generated=""
+ for ((i = 0; 1; i++)); do
+ local c="${short_modes:i:1}"
+ [[ -z $c ]] && break
+ generated+=" $filler$cur$c"
+ done
+
+ COMPREPLY=($(compgen -W "$generated"))
+ return 0
+ fi
+
+ # The last short option requires argument, like '-cf<TAB>'. Cut the
+ # completion here to enforce argument processing.
+ if ((old_opt_progress == 0)) &&
+ __tar_is_argreq "$(__tar_last_char "$cur")"; then
+ COMPREPLY=("$cur") && return 0
+ fi
+
+ allshort_raw_unused=${allshort_raw//[$rawopt]/}
+ if [[ $tar_mode != none ]]; then
+ allshort_raw_unused=${allshort_raw_unused//[$short_modes]/}
+ fi
+
+ generated=
+ for ((i = 0; 1; i++)); do
+ local c="${allshort_raw_unused:i:1}"
+ [[ -z $c ]] && break
+ generated+=" $cur$c"
+ done
+
+ COMPREPLY=($(compgen -W "$generated"))
+
+ return 0
+}
+
+__gtar_complete_lopts()
+{
+ local rv
+ COMPREPLY=($(compgen -W "$long_opts" -- "$cur"))
+ rv=$?
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return $rv
+}
+
+__gtar_complete_sopts()
+{
+ local generated short_mode_opts i c
+ short_mode_opts="ctxurdA"
+ generated=${short_opts//[$short_mode_opts]/}
+
+ for ((i = 0; 1; i++)); do
+ c="${allshort_raw_unused:i:1}"
+ [[ -z $c ]] && break
+ generated+=" $cur$c"
+ done
+
+ COMPREPLY=($(compgen -W "$generated" -- "$cur"))
+}
+
+__tar_try_mode()
+{
+ case "$cur" in
+ --*)
+ # posix tar does not support long opts
+ [[ -v basic_tar ]] && return 0
+ __gtar_complete_lopts
+ return $?
+ ;;
+
+ -*)
+ # posix tar does not support short optios
+ [[ -v basic_tar ]] && return 0
+
+ __tar_complete_mode && return 0
+ ;;
+
+ *)
+ if [[ $cword -eq 1 || $tar_mode == none ]]; then
+ __tar_complete_mode && return 0
+ fi
+ ;;
+ esac
+ return 1
+}
+
+__tar_adjust_PREV_from_old_option()
+{
+ # deal with old style arguments here
+ # $ tar cfTC # expects this sequence of arguments:
+ # $ tar cfTC ARCHIVE_FILE PATTERNS_FILE CHANGE_DIR
+ if ((old_opt_used == 1 && cword > 1 && \
+ cword < ${#old_opt_parsed[@]} + 2)); then
+ # make e.g. 'C' option from 'cffCT'
+ prev="-${old_opt_parsed[cword - 2]}"
+ fi
+}
+
+__tar_extract_like_mode()
+{
+ local i
+ for i in x d t delete; do
+ [[ $tar_mode == "$i" ]] && return 0
+ done
+ return 1
+}
+
+__tar_try_list_archive()
+{
+ local tarball tarbin untar i
+
+ __tar_extract_like_mode || return 1
+
+ # This all is just to approach directory completion from "virtual"
+ # directory structure in tarball (for which the _filedir is unusable)
+
+ set -- "${words[@]}"
+ tarbin=$1
+ untar="tf"
+ shift
+
+ for i in "$@"; do
+ if [[ $i == *.$ext ]]; then
+ tarball=$i
+ break
+ fi
+ done
+ if [[ -n $tarball ]]; then
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -o filenames -W "$(
+ $tarbin $untar "$tarball" 2>/dev/null |
+ while read line; do
+ printf "%q\n" "$(printf %q"\n" "$line")"
+ done
+ )" -- "$(printf "%q\n" "$cur")"))
+ return 0
+ fi
+}
+
+__tar_cleanup_prev()
+{
+ if [[ $prev =~ ^-[a-zA-Z0-9?]*$ ]]; then
+ # transform '-caf' ~> '-f'
+ prev="-$(__tar_last_char "$prev")"
+ fi
+}
+
+__tar_detect_ext()
+{
+ local tars='@(@(tar|gem|spkg)?(.@(Z|[bgx]z|bz2|lz?(ma|o)|zst))|t@([abglx]z|b?(z)2|zst))'
+ ext="$tars"
+
+ case "$tar_mode_arg" in
+ --*)
+ # Should never happen?
+ ;;
+ ?(-)*[cr]*f)
+ ext='@(tar|gem|spkg)'
+ case ${words[1]} in
+ *a*) ext="$tars" ;;
+ *z*) ext='t?(ar.)gz' ;;
+ *Z*) ext='ta@(r.Z|z)' ;;
+ *[jy]*) ext='t@(?(ar.)bz?(2)|b2)' ;;
+ *J*) ext='t?(ar.)xz' ;;
+ esac
+ ;;
+ +([^ZzJjy])f)
+ # Pass through using defaults above
+ ;;
+ *[Zz]*f)
+ ext='@(@(t?(ar.)|gem.|spkg.)@(gz|Z)|taz)'
+ ;;
+ *[jy]*f)
+ ext='@(@(t?(ar.)|gem.)bz?(2)|spkg|tb2)'
+ ;;
+ *[J]*f)
+ ext='@(@(tar|gem|spkg).@(lzma|xz)|t[lx]z)'
+ ;;
+ esac
+}
+
+_gtar()
+{
+ local long_opts short_opts \
+ long_arg_none="" long_arg_opt="" long_arg_req="" \
+ short_arg_none="" short_arg_opt="" short_arg_req="" \
+ tar_mode tar_mode_arg old_opt_progress=0 \
+ old_opt_used=0 old_opt_parsed=()
+
+ # Main mode, e.g. -x or -c (extract/creation)
+ local tar_mode=none
+
+ # The mode argument, e.g. -cpf or -c
+ # FIXME: handle long options
+ local tar_mode_arg=
+
+ if [[ -v BASHCOMP_TAR_OPT_DEBUG ]]; then
+ set -x
+ PS4='$BASH_SOURCE:$LINENO: '
+ fi
+
+ local cur prev words cword split
+
+ _init_completion -s || return
+
+ # Fill the {long,short}_{opts,arg*}
+ __gnu_tar_parse_help
+
+ __tar_preparse_cmdline "${words[@]}"
+
+ local ext
+
+ __tar_detect_ext
+
+ while true; do # just-for-easy-break while, not looping
+ __tar_adjust_PREV_from_old_option
+ __tar_posix_prev_handle && break
+ __tar_cleanup_prev
+
+ # Handle all options *REQUIRING* argument. Optional arguments are up to
+ # user (TODO: is there any sane way to deal with this?). This case
+ # statement successes only if there already is PREV.
+ case $prev in
+ --directory | -!(-*)C)
+ _filedir -d
+ break
+ ;;
+ --atime-preserve)
+ COMPREPLY=($(compgen -W 'replace system' -- "$cur"))
+ break
+ ;;
+ --group)
+ COMPREPLY=($(compgen -g -- "$cur"))
+ break
+ ;;
+ --owner)
+ COMPREPLY=($(compgen -u -- "$cur"))
+ break
+ ;;
+ --info-script | --new-volume-script | --rmt-command | --rsh-command | \
+ --use-compress-program | -!(-*)[FI])
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ break
+ ;;
+ --volno-file | --add-file | --files-from | --exclude-from | \
+ --index-file | --listed-incremental | -!(-*)[TXg])
+ _filedir
+ break
+ ;;
+ --format | -!(-*)H)
+ COMPREPLY=($(compgen -W 'gnu oldgnu pax posix ustar v7' \
+ -- "$cur"))
+ break
+ ;;
+ --quoting-style)
+ COMPREPLY=($(compgen -W 'literal shell shell-always c c-maybe
+ escape locale clocale' -- "$cur"))
+ break
+ ;;
+ --totals)
+ COMPREPLY=($(compgen -W 'SIGHUP SIGQUIT SIGINT SIGUSR1 SIGUSR2' \
+ -- "$cur"))
+ break
+ ;;
+ --warning)
+ COMPREPLY=($(compgen -W "$(__gtar_parse_warnings)" -- "$cur"))
+ break
+ ;;
+ --file | -!(-*)f)
+ __tar_file_option "$ext"
+ break
+ ;;
+ --*)
+ # parameter with required argument but no completion yet
+ [[ " $long_arg_req " =~ \ $prev=\ ]] && break
+
+ # parameter with optional argument passed with =, something like
+ # --occurrence=*<TAB> which is not handled above
+ [[ " $long_arg_opt " =~ \ $prev\ ]] && break
+
+ # if there is some unknown option with '=', for example
+ # (literally) user does --nonexistent=<TAB>, we do not want
+ # continue also
+ $split && break
+
+ # Most probably, when code goes here, the PREV variable contains
+ # some string from "$long_arg_none" and we want continue.
+ ;;
+ -!(-*)[a-zA-Z0-9?])
+ # argument required but no completion yet
+ [[ $short_arg_req =~ ${prev##-} ]] && break
+ ;;
+ esac
+
+ # safety belts
+ case "$cur" in
+ -[a-zA-Z0-9]=*)
+ # e.g. 'tar -c -f=sth' does not what user could expect
+ break
+ ;;
+ esac
+
+ # Handle the main operational mode of tar. We should do it as soon as
+ # possible.
+ __tar_try_mode && break
+
+ # handle others
+ case "$cur" in
+ --*)
+ __gtar_complete_lopts
+ break
+ ;;
+ -*)
+ # called only if it is *not* first parameter
+ __gtar_complete_sopts
+ break
+ ;;
+ esac
+
+ # the first argument must be "mode" argument or --param, if any of those
+ # was truth - the 'break' statement would have been already called
+ ((cword == 1)) && break
+
+ __tar_try_list_archive && break
+
+ # file completion on relevant files
+ if [[ $tar_mode != none ]]; then
+ _filedir
+ fi
+
+ break
+ done # just-for-easy-break while
+
+ if [[ -v BASHCOMP_TAR_OPT_DEBUG ]]; then
+ set +x
+ unset PS4
+ fi
+}
+
+__tar_posix_prev_handle()
+{
+ case "$prev" in
+ -f)
+ __tar_file_option "$ext"
+ return 0
+ ;;
+ -b)
+ return 0
+ ;;
+ esac
+
+ return 1
+}
+
+_posix_tar()
+{
+ local long_opts short_opts basic_tar \
+ long_arg_none="" long_arg_opt long_arg_req="" \
+ short_arg_none short_arg_opt short_arg_req \
+ tar_mode tar_mode_arg old_opt_progress=0 \
+ old_opt_used=1 old_opt_parsed=()
+
+ # Main mode, e.g. -x or -c (extract/creation)
+ local tar_mode=none
+
+ # The mode argument, e.g. -cpf or -c
+ local tar_mode_arg=
+
+ local cur prev words cword split
+
+ _init_completion -s || return
+
+ basic_tar=yes
+ tar_mode=none
+
+ # relatively compatible modes are {c,t,x}
+ # relatively compatible options {b,f,m,v,w}
+ short_arg_req="fb"
+ short_arg_none="wmv"
+ short_opts="$short_arg_req$short_arg_none"
+
+ __tar_preparse_cmdline "${words[@]}"
+
+ local ext
+
+ __tar_detect_ext
+
+ __tar_adjust_PREV_from_old_option
+
+ __tar_posix_prev_handle && return
+
+ __tar_try_mode && return
+
+ __tar_try_list_archive && return
+
+ # file completion on relevant files
+ _filedir
+}
+
+_tar()
+{
+ local cmd=${COMP_WORDS[0]} func line
+ line="$($cmd --version 2>/dev/null)"
+ case "$line" in
+ *GNU*)
+ func=_gtar
+ ;;
+ *)
+ func=_posix_tar
+ ;;
+ esac
+ $func "$@"
+
+ # Install real completion for subsequent completions
+ if [[ ${COMP_TAR_INTERNAL_PATHS-} ]]; then
+ complete -F $func -o dirnames tar
+ else
+ complete -F $func tar
+ fi
+ unset -f _tar
+}
+
+if [[ ${COMP_TAR_INTERNAL_PATHS-} ]]; then
+ complete -F _tar -o dirnames tar
+ complete -F _gtar -o dirnames gtar
+ complete -F _posix_tar -o dirnames bsdtar
+ complete -F _posix_tar -o dirnames star
+else
+ complete -F _tar tar
+ complete -F _gtar gtar
+ complete -F _posix_tar bsdtar
+ complete -F _posix_tar star
+fi
+
+# ex: filetype=sh
diff --git a/completions/tcpdump b/completions/tcpdump
new file mode 100644
index 0000000..9a7c2e9
--- /dev/null
+++ b/completions/tcpdump
@@ -0,0 +1,64 @@
+# bash completion for tcpdump -*- shell-script -*-
+
+_tcpdump()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -!(-*)[rwFV])
+ _filedir
+ return
+ ;;
+ --interface | -!(-*)i)
+ _available_interfaces -a
+ return
+ ;;
+ -!(-*)m)
+ _filedir mib
+ return
+ ;;
+ -!(-*)T)
+ COMPREPLY=($(compgen -W 'aodv carp cnfp lmp pgm pgm_zmtp1 radius
+ resp rpc rtcp rtp rtcp snmp tftp vat vxlan wb zmtp1' \
+ -- "$cur"))
+ return
+ ;;
+ -!(-*)z)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ --relinquish-privileges | -!(-*)Z)
+ _allowed_users
+ return
+ ;;
+ -!(-*)[BcCDEGMsWy])
+ return
+ ;;
+ --time-stamp-type | -!(-*)j)
+ COMPREPLY=($(compgen -W 'host host_lowprec host_hiprec adapter
+ adapter_unsynced' -- "$cur"))
+ return
+ ;;
+ --direction | -!(-*)Q)
+ COMPREPLY=($(compgen -W 'in out inout' -- "$cur"))
+ return
+ ;;
+ --time-stamp-precision)
+ COMPREPLY=($(compgen -W 'micro nano' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+
+} &&
+ complete -F _tcpdump tcpdump
+
+# ex: filetype=sh
diff --git a/completions/tcpkill b/completions/tcpkill
new file mode 100644
index 0000000..189d928
--- /dev/null
+++ b/completions/tcpkill
@@ -0,0 +1,22 @@
+# tcpkill completion -*- shell-script -*-
+
+_tcpkill()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*i)
+ _available_interfaces -a
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-i -1 -2 -3 -4 -5 -6 -7 -8 -9' -- "$cur"))
+ fi
+
+} &&
+ complete -F _tcpkill tcpkill
+
+# ex: filetype=sh
diff --git a/completions/tcpnice b/completions/tcpnice
new file mode 100644
index 0000000..c6a94d6
--- /dev/null
+++ b/completions/tcpnice
@@ -0,0 +1,22 @@
+# tcpnice completion -*- shell-script -*-
+
+_tcpnice()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*i)
+ _available_interfaces -a
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ fi
+
+} &&
+ complete -F _tcpnice tcpnice
+
+# ex: filetype=sh
diff --git a/completions/timeout b/completions/timeout
new file mode 100644
index 0000000..32ff2e3
--- /dev/null
+++ b/completions/timeout
@@ -0,0 +1,39 @@
+# timeout(1) completion -*- shell-script -*-
+
+_timeout()
+{
+ local cur prev words cword split i found=false
+ _init_completion -s || return
+
+ for ((i = 1; i <= COMP_CWORD; i++)); do
+ if [[ ${COMP_WORDS[i]} != -* && ${COMP_WORDS[i - 1]} != = ]]; then
+ if $found; then
+ _command_offset $i
+ return
+ fi
+ found=true
+ fi
+ [[ ${COMP_WORDS[i]} == -@(-kill-after|-signal|!(-*)[ks]) ]] && ((i++))
+ done
+
+ case $prev in
+ --help | --version | --kill-after | -!(-*)k)
+ return
+ ;;
+ --signal | -!(-*)s)
+ _signals
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _timeout timeout
+
+# ex: filetype=sh
diff --git a/completions/tipc b/completions/tipc
new file mode 100644
index 0000000..44ade36
--- /dev/null
+++ b/completions/tipc
@@ -0,0 +1,289 @@
+# tipc(8) completion -*- shell-script -*-
+
+_tipc_media()
+{
+ local optind=$1
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'media' -- $cur))
+ return 0
+ elif ((cword == optind + 1)); then
+ COMPREPLY=($(compgen -W 'udp eth ib' -- $cur))
+ return 0
+ fi
+
+ return 1
+}
+
+_tipc_bearer()
+{
+ local optind=$1
+ local media i
+
+ if _tipc_media $optind; then
+ return
+ fi
+
+ for ((i = 0; i < cword; i++)); do
+ if [[ ${words[i]} == 'media' ]]; then
+ media=${words[i + 1]}
+ fi
+ done
+
+ if ((cword == optind + 2)); then
+ case "$media" in
+ "udp")
+ COMPREPLY=($(compgen -W 'name' -- $cur))
+ ;;
+ "eth" | "ib")
+ COMPREPLY=($(compgen -W 'device' -- $cur))
+ ;;
+ esac
+ elif ((cword == optind + 3)); then
+ case "$media" in
+ "udp")
+ local names=$(tipc bearer list 2>/dev/null | awk -F: '/^udp:/ {print $2}')
+ COMPREPLY=($(compgen -W '$names' -- $cur))
+ ;;
+ "eth")
+ local interfaces=$(command ls /sys/class/net/)
+ COMPREPLY=($(compgen -W '$interfaces' -- $cur))
+ ;;
+ esac
+ fi
+}
+
+_tipc_link_opts()
+{
+ COMPREPLY=($(compgen -W 'priority tolerance window' -- $cur))
+}
+
+_tipc_link()
+{
+ local optind=$1
+ local filter=$2
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'link' -- $cur))
+ elif ((cword == optind + 1)); then
+ # awk drops link state and last trailing :
+ local links=$(tipc link list 2>/dev/null |
+ awk '{print substr($1, 0, length($1))}')
+ local -a exclude
+ [[ $filter == peers ]] && exclude=(-X broadcast-link)
+ COMPREPLY=($(compgen "${exclude[@]}" -W '$links' -- $cur))
+ fi
+}
+
+_tipc()
+{
+ local cur prev words cword optind i p
+ _init_completion || return
+
+ optind=1
+ COMPREPLY=()
+
+ # Flags can be placed anywhere in the commandline
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W '-h --help' -- $cur))
+ return
+ ;;
+ esac
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W 'bearer link media nametable node socket' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ bearer)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'enable disable set get list' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ enable)
+ local media params
+ ((optind++))
+
+ if ((cword < optind + 4)); then
+ _tipc_bearer $optind
+ return
+ fi
+
+ for ((i = 0; i < cword; i++)); do
+ if [[ ${words[i]} == 'media' ]]; then
+ media=${words[i + 1]}
+ fi
+ done
+ case "$media" in
+ "udp")
+ declare -a params=("localip" "localport" "remoteip"
+ "remoteport" "domain" "priority")
+ ;;
+ "eth" | "ib")
+ declare -a params=("domain" "priority")
+ ;;
+ *)
+ return
+ ;;
+ esac
+
+ # If the previous word was a known parameter, we assume a value for
+ # that key. Note that this would break if the user attempts to use
+ # a known key as value.
+ for i in "${params[@]}"; do
+ if [[ $prev == "$i" ]]; then
+ return
+ fi
+ done
+
+ # In order not to print already used options, we remove them
+ for p in "${words[@]}"; do
+ for i in "${params[@]}"; do
+ if [[ $p == "$i" ]]; then
+ params=("${params[@]/$i/}")
+ fi
+ done
+ done
+
+ COMPREPLY=($(compgen -W '${params[@]}' -- $cur))
+ ;;
+ disable)
+ ((optind++))
+
+ _tipc_bearer $optind
+ ;;
+ get)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 1)); then
+ _tipc_bearer $((optind + 1))
+ fi
+ ;;
+ set)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 2)); then
+ _tipc_bearer $((optind + 2))
+ fi
+ ;;
+ esac
+ ;;
+ link)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'get set list statistics' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ get)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 1)); then
+ _tipc_link $((optind + 1)) "peers"
+ fi
+ ;;
+ set)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 2)); then
+ _tipc_link $((optind + 2)) "peers"
+ fi
+ ;;
+ statistics)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'show reset' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ show | reset)
+ _tipc_link $((optind + 1))
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ media)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'get set list' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ get)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 1)); then
+ _tipc_media $((optind + 1))
+ fi
+ ;;
+ set)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 2)); then
+ _tipc_media $((optind + 2))
+ fi
+ ;;
+ esac
+ ;;
+ nametable)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'show' -- $cur))
+ fi
+ ;;
+ node)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'list get set' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ get | set)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'address netid' -- $cur))
+ fi
+ ;;
+ esac
+ ;;
+ socket)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'list' -- $cur))
+ fi
+ ;;
+ esac
+} &&
+ complete -F _tipc tipc
+
+# ex: filetype=sh
diff --git a/completions/tox b/completions/tox
new file mode 100644
index 0000000..0ea656e
--- /dev/null
+++ b/completions/tox
@@ -0,0 +1,51 @@
+# tox completion -*- shell-script -*-
+
+_tox()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # Complete defaults following a "--"
+ if [[ "${words[*]:0:cword} " == *\ --\ * && $cur != -- ]]; then
+ compopt -o bashdefault -o default
+ return
+ fi
+
+ case $prev in
+ --help | --version | --num | --index-url | --hashseed | --force-dep | -!(-*)[hni])
+ return
+ ;;
+ -!(-*)c)
+ _filedir ini
+ return
+ ;;
+ --installpkg | --result-json | --workdir)
+ _filedir
+ return
+ ;;
+ -!(-*)e)
+ local envs=$(
+ {
+ "$1" --listenvs-all || "$1" --listenvs
+ } 2>/dev/null
+ )
+ [[ $envs ]] || envs=$(
+ command sed -e 's/,/ /g' -ne 's/^envlist[[:space:]]*=//p' \
+ tox.ini 2>/dev/null
+ )
+ local prefix=""
+ [[ $cur == *,* ]] && prefix="${cur%,*},"
+ COMPREPLY=($(compgen -X '*[{}]*' -W "$envs ALL" -- "${cur##*,}"))
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1") --' -- "$cur"))
+ return
+ fi
+} &&
+ complete -F _tox tox
+
+# ex: filetype=sh
diff --git a/completions/tracepath b/completions/tracepath
new file mode 100644
index 0000000..176534f
--- /dev/null
+++ b/completions/tracepath
@@ -0,0 +1,26 @@
+# tracepath(8) completion -*- shell-script -*-
+
+_tracepath()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*[lmp])
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ local opts=$(_parse_help "$1")
+ COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
+ return
+ fi
+
+ local ipvx
+ [[ $1 == *6 ]] && ipvx=-6
+ _known_hosts_real ${ipvx-} -- "$cur"
+} &&
+ complete -F _tracepath tracepath tracepath6
+
+# ex: filetype=sh
diff --git a/completions/tshark b/completions/tshark
new file mode 100644
index 0000000..396fbcb
--- /dev/null
+++ b/completions/tshark
@@ -0,0 +1,136 @@
+# tshark(1) completion -*- shell-script -*-
+
+_tshark()
+{
+ local cur prev words cword prefix
+ _init_completion -n : || return
+
+ case $cur in
+ -o*)
+ prefix=-o
+ ;;
+ -X*)
+ prefix=-X
+ ;;
+ esac
+
+ case ${prefix:-$prev} in
+ --*)
+ # Fallback to completion of long options below.
+ ;;
+ -o*)
+ if [[ $cur == *:* ]]; then
+ cur=${cur#*:}
+ _filedir
+ else
+ [[ -v _tshark_prefs ]] ||
+ _tshark_prefs="$("$1" -G defaultprefs 2>/dev/null | command sed -ne 's/^#\{0,1\}\([a-z0-9_.-]\{1,\}:\).*/\1/p' |
+ tr '\n' ' ')"
+ : ${prefix:=}
+ COMPREPLY=($(compgen -P "$prefix" -W "$_tshark_prefs" \
+ -- "${cur:${#prefix}}"))
+ [[ ${COMPREPLY-} == *: ]] && compopt -o nospace
+ fi
+ return
+ ;;
+ -*[fsBDLcRNdCeEzhvoK])
+ return
+ ;;
+ -*i)
+ COMPREPLY=($(compgen -W \
+ "$("$1" -D 2>/dev/null | awk '{print $2}')" -- "$cur"))
+ return
+ ;;
+ -*y)
+ local opts i
+ for ((i = ${#words[@]} - 1; i > 0; i--)); do
+ if [[ ${words[i]} == -i ]]; then
+ opts+="-i ${words[i + 1]}"
+ break
+ fi
+ done
+ COMPREPLY=($(compgen -W "$("$1" $opts -L 2>/dev/null |
+ awk '/^ / { print $1 }')" -- "$cur"))
+ return
+ ;;
+ -*[ab])
+ COMPREPLY=($(compgen -W 'duration: filesize: files:' -- "$cur"))
+ [[ ${COMPREPLY-} == *: ]] && compopt -o nospace
+ return
+ ;;
+ -*[rH])
+ # -r accepts a lot of different file types
+ _filedir
+ return
+ ;;
+ -*w)
+ _filedir
+ [[ $cur == @(|-) ]] && COMPREPLY+=(-)
+ return
+ ;;
+ -*F)
+ COMPREPLY=($(compgen -W "$("$1" -F 2>&1 |
+ awk '/^ / { print $1 }')" -- "$cur"))
+ return
+ ;;
+ -*O)
+ local prefix=
+ [[ $cur == *,* ]] && prefix="${cur%,*},"
+ [[ -v _tshark_protocols ]] ||
+ _tshark_protocols="$("$1" -G protocols 2>/dev/null |
+ cut -f 3 | tr '\n' ' ')"
+ COMPREPLY=($(compgen -W "$_tshark_protocols" -- "${cur##*,}"))
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ return
+ ;;
+ -*T)
+ # Parse from: tshark -T . 2>&1 | awk -F \" '/^\t*"/ { print $2 }'
+ COMPREPLY=($(compgen -W \
+ 'pdml ps psml json jsonraw ek tabs text fields' -- "$cur"))
+ return
+ ;;
+ -*t)
+ # Parse from: tshark -t . 2>&1 | awk -F \" '/^\t*"/ { print $2 }'
+ COMPREPLY=($(compgen -W \
+ 'a ad adoy d dd e r u ud udoy' -- "$cur"))
+ return
+ ;;
+ -*u)
+ # TODO: could be parsed from "-u ." output
+ COMPREPLY=($(compgen -W 's hms' -- "$cur"))
+ return
+ ;;
+ -*W)
+ COMPREPLY=($(compgen -W 'n' -- "$cur"))
+ return
+ ;;
+ -*X)
+ if [[ ${cur:${#prefix}} == lua_script:* ]]; then
+ cur=${cur#*:}
+ _filedir lua
+ else
+ COMPREPLY=($(compgen -P "$prefix" -W 'lua_script:' -- \
+ "${cur:${#prefix}}"))
+ [[ ${COMPREPLY-} == *: ]] && compopt -o nospace
+ fi
+ return
+ ;;
+ -*G)
+ COMPREPLY=($(compgen -W "$("$1" -G \? 2>/dev/null |
+ awk '/^[ \t]*-G / \
+ { sub("^[[]","",$2); sub("[]]$","",$2); print $2 }')" \
+ -- "$cur"))
+ return
+ ;;
+
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h 2>/dev/null)' \
+ -- "$cur"))
+ return
+ fi
+} &&
+ complete -F _tshark tshark
+
+# ex: filetype=sh
diff --git a/completions/tsig-keygen b/completions/tsig-keygen
new file mode 100644
index 0000000..017e9d8
--- /dev/null
+++ b/completions/tsig-keygen
@@ -0,0 +1,28 @@
+# tsig-keygen(8) completion -*- shell-script -*-
+
+_tsig_keygen()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h)
+ return
+ ;;
+ -a)
+ COMPREPLY=($(compgen -W 'hmac-{md5,sha{1,224,256,384,512}}' -- "$cur"))
+ return
+ ;;
+ -r)
+ COMPREPLY=($(compgen -W keyboard -- "$cur"))
+ _filedir
+ return
+ ;;
+ esac
+
+ [[ $cur != -* ]] ||
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _tsig_keygen tsig-keygen
+
+# ex: filetype=sh
diff --git a/completions/tune2fs b/completions/tune2fs
new file mode 100644
index 0000000..66d629c
--- /dev/null
+++ b/completions/tune2fs
@@ -0,0 +1,61 @@
+# tune2fs(8) completion -*- shell-script -*-
+
+_tune2fs()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*[cCEiJLmrT])
+ return
+ ;;
+ -*e)
+ COMPREPLY=($(compgen -W 'continue remount-ro panic' -- "$cur"))
+ return
+ ;;
+ -*g)
+ _gids
+ COMPREPLY=($(compgen -g -W '${COMPREPLY[@]}' -- "$cur"))
+ return
+ ;;
+ -*M)
+ _filedir -d
+ return
+ ;;
+ -*o)
+ local -a opts=(^debug ^bsdgroups ^user_xattr ^acl ^uid16
+ ^journal_data ^journal_data_ordered ^journal_data_writeback
+ ^nobarrier ^block_validity ^discard ^nodelalloc)
+ COMPREPLY=($(compgen -W '${opts[@]} ${opts[@]#^}' -- "$cur"))
+ return
+ ;;
+ -*O)
+ local -a opts=(^dir_index ^dir_nlink ^encrypt ^extent ^extra_isize
+ ^filetype ^flex_bg ^has_journal ^huge_file ^large_file
+ ^metadata_csum ^mmp ^project ^quota ^read-only ^resize_inode
+ ^sparse_super ^uninit_bg)
+ COMPREPLY=($(compgen -W '${opts[@]} ${opts[@]#^}' -- "$cur"))
+ return
+ ;;
+ -*u)
+ _uids
+ COMPREPLY=($(compgen -u -W '${COMPREPLY[@]}' -- "$cur"))
+ return
+ ;;
+ -*U)
+ COMPREPLY=($(compgen -W 'clear random time' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ cur=${cur:=/dev/}
+ _filedir
+} &&
+ complete -F _tune2fs tune2fs
+
+# ex: filetype=sh
diff --git a/completions/ulimit b/completions/ulimit
new file mode 100644
index 0000000..e596bf7
--- /dev/null
+++ b/completions/ulimit
@@ -0,0 +1,42 @@
+# bash completion for ulimit -*- shell-script -*-
+
+_ulimit()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # TODO combined option support (-aH, -Sc etc)
+
+ local mode
+ case $prev in
+ -a)
+ COMPREPLY=($(compgen -W "-S -H" -- "$cur"))
+ return
+ ;;
+ -[SH]) ;;
+
+ -*)
+ mode=$prev
+ ;;
+ esac
+
+ if [[ ! -v mode ]]; then
+ local word
+ for word in "${words[@]}"; do
+ [[ $word == -*a* ]] && return
+ done
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+ fi
+
+ local args
+ _count_args
+ ((args == 1)) &&
+ COMPREPLY=($(compgen -W "soft hard unlimited" -- "$cur"))
+} &&
+ complete -F _ulimit ulimit
+
+# ex: filetype=sh
diff --git a/completions/unace b/completions/unace
new file mode 100644
index 0000000..7d6bd42
--- /dev/null
+++ b/completions/unace
@@ -0,0 +1,20 @@
+# unace(1) completion -*- shell-script -*-
+
+_unace()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-c -c- -f -f- -o -o- -p -y -y-' -- "$cur"))
+ else
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W 'e l t v x' -- "$cur"))
+ else
+ _filedir ace
+ fi
+ fi
+} &&
+ complete -F _unace unace
+
+# ex: filetype=sh
diff --git a/completions/unpack200 b/completions/unpack200
new file mode 100644
index 0000000..8814259
--- /dev/null
+++ b/completions/unpack200
@@ -0,0 +1,48 @@
+# unpack200(1) completion -*- shell-script -*-
+
+_unpack200()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | -!(-*)[?hVJ])
+ return
+ ;;
+ --deflate-hint | -!(-*)H)
+ COMPREPLY=($(compgen -W 'true false keep' -- "$cur"))
+ return
+ ;;
+ --log-file | -!(-*)l)
+ COMPREPLY=($(compgen -W '-' -- "$cur"))
+ _filedir log
+ return
+ ;;
+ esac
+
+ $split && return
+
+ # Check if a pack or a jar was already given.
+ local word pack=false jar=false
+ for word in "${words[@]:1}"; do
+ case $word in
+ *.pack | *.pack.gz) pack=true ;;
+ *.jar) jar=true ;;
+ esac
+ done
+
+ if ! $pack; then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--deflate-hint= --remove-pack-file
+ --verbose --quiet --log-file= --help --version' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ else
+ _filedir 'pack?(.gz)'
+ fi
+ elif ! $jar; then
+ _filedir jar
+ fi
+} &&
+ complete -F _unpack200 unpack200
+
+# ex: filetype=sh
diff --git a/completions/unrar b/completions/unrar
new file mode 100644
index 0000000..4cbac8f
--- /dev/null
+++ b/completions/unrar
@@ -0,0 +1,23 @@
+# unrar(1) completion -*- shell-script -*-
+
+_unrar()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ 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"))
+ else
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W 'e l lb lt p t v vb vt x' -- "$cur"))
+ else
+ _filedir '@(rar|exe)'
+ fi
+ fi
+
+} &&
+ complete -F _unrar unrar
+
+# ex: filetype=sh
diff --git a/completions/unshunt b/completions/unshunt
new file mode 100644
index 0000000..95a1601
--- /dev/null
+++ b/completions/unshunt
@@ -0,0 +1,17 @@
+# mailman unshunt completion -*- shell-script -*-
+
+_unshunt()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ _filedir -d
+ fi
+
+} &&
+ complete -F _unshunt unshunt
+
+# ex: filetype=sh
diff --git a/completions/update-alternatives b/completions/update-alternatives
new file mode 100644
index 0000000..25d2ce6
--- /dev/null
+++ b/completions/update-alternatives
@@ -0,0 +1,92 @@
+# bash completion for update-alternatives -*- shell-script -*-
+
+_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 < cword; i++)); do
+ if [[ ${words[i]} == --admindir ]]; then
+ admindir=${words[i + 1]}
+ break
+ fi
+ done
+ COMPREPLY=($(compgen -W '$(command ls $admindir)' -- "$cur"))
+}
+
+_update_alternatives()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --altdir | --admindir)
+ _filedir -d
+ return
+ ;;
+ --help | --usage | --version)
+ return
+ ;;
+ esac
+
+ local mode args i
+
+ # find which mode to use and how many real args used so far
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == --@(install|remove|auto|display|config|remove-all|set) ]]; then
+ mode=${words[i]}
+ args=$((cword - i))
+ break
+ fi
+ done
+
+ case ${mode-} in
+ --install)
+ case $args in
+ 1 | 3)
+ _filedir
+ ;;
+ 2)
+ _installed_alternatives
+ ;;
+ 4)
+ # priority - no completions
+ ;;
+ *)
+ case $((args % 4)) in
+ 0 | 2)
+ _filedir
+ ;;
+ 1)
+ COMPREPLY=($(compgen -W '--slave' -- "$cur"))
+ ;;
+ 3)
+ _installed_alternatives
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ --remove | --set)
+ case $args in
+ 1)
+ _installed_alternatives
+ ;;
+ 2)
+ _filedir
+ ;;
+ esac
+ ;;
+ --auto | --remove-all | --display | --config)
+ _installed_alternatives
+ ;;
+ *)
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ ;;
+ esac
+} &&
+ complete -F _update_alternatives update-alternatives alternatives
+
+# ex: filetype=sh
diff --git a/completions/update-rc.d b/completions/update-rc.d
new file mode 100644
index 0000000..9b281d5
--- /dev/null
+++ b/completions/update-rc.d
@@ -0,0 +1,58 @@
+# update-rc.d(8) completion -*- shell-script -*-
+#
+# Copyright (C) 2004 Servilio Afre Puentes <servilio@gmail.com>
+
+_update_rc_d()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local sysvdir services options
+
+ [[ -d /etc/rc.d/init.d ]] && sysvdir=/etc/rc.d/init.d ||
+ sysvdir=/etc/init.d
+
+ services=($(printf '%s ' $sysvdir/!(README*|*.sh|$_backup_glob)))
+ services=(${services[@]#$sysvdir/})
+ options=(-f -n)
+
+ if [[ $cword -eq 1 || $prev == -* ]]; then
+ COMPREPLY=($(compgen -W '${options[@]} ${services[@]}' \
+ -X '$(tr " " "|" <<<${words[@]})' -- "$cur"))
+ elif [[ $prev == ?($(tr " " "|" <<<"${services[*]}")) ]]; 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
+} &&
+ complete -F _update_rc_d update-rc.d
+
+# ex: filetype=sh
diff --git a/completions/upgradepkg b/completions/upgradepkg
new file mode 100644
index 0000000..d3ce608
--- /dev/null
+++ b/completions/upgradepkg
@@ -0,0 +1,30 @@
+# Slackware Linux upgradepkg completion -*- shell-script -*-
+
+_upgradepkg()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--dry-run --install-new --reinstall
+ --verbose' -- "$cur"))
+ return
+ fi
+
+ if [[ $cur == ?*%* ]]; then
+ prev="${cur%%?(\\)%*}"
+ cur="${cur#*%}"
+ local nofiles IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=($(compgen -P "$prev%" -f -X "!*.@(t[bgxl]z)" -- "$cur"))
+ [[ ${COMPREPLY-} ]] || nofiles=1
+ COMPREPLY+=($(compgen -P "$prev%" -S '/' -d -- "$cur"))
+ [[ -v nofiles ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir 't[bglx]z'
+} &&
+ complete -F _upgradepkg upgradepkg
+
+# ex: filetype=sh
diff --git a/completions/urlsnarf b/completions/urlsnarf
new file mode 100644
index 0000000..e327076
--- /dev/null
+++ b/completions/urlsnarf
@@ -0,0 +1,26 @@
+# urlsnarf completion -*- shell-script -*-
+
+_urlsnarf()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*i)
+ _available_interfaces -a
+ return
+ ;;
+ -*p)
+ _filedir pcap
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ fi
+
+} &&
+ complete -F _urlsnarf urlsnarf
+
+# ex: filetype=sh
diff --git a/completions/uscan b/completions/uscan
new file mode 100644
index 0000000..441bae3
--- /dev/null
+++ b/completions/uscan
@@ -0,0 +1,33 @@
+# uscan completion -*- shell-script -*-
+
+_uscan()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --package)
+ COMPREPLY=($(_xfunc apt-cache _apt_cache_src_packages))
+ return
+ ;;
+ --watchfile)
+ _filedir
+ return
+ ;;
+ --destdir)
+ _filedir -d
+ return
+ ;;
+ --timeout | --upstream-version | --download-version | --check-dirname-level | --check-dirname-regex)
+ COMPREPLY=()
+ return
+ ;;
+ esac
+
+ $split && return
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _uscan uscan
+
+# ex: filetype=sh
diff --git a/completions/useradd b/completions/useradd
new file mode 100644
index 0000000..ceeca91
--- /dev/null
+++ b/completions/useradd
@@ -0,0 +1,46 @@
+# useradd(8) completion -*- shell-script -*-
+
+_useradd()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ # TODO: if -o/--non-unique is given, could complete on existing uids
+ # with -u/--uid
+
+ case $prev in
+ --comment | --help | --expiredate | --inactive | --key | --password | --uid | \
+ --selinux-user | -!(-*)[chefKpuZ])
+ return
+ ;;
+ --base-dir | --home-dir | --skel | --root | -!(-*)[bdkR])
+ _filedir -d
+ return
+ ;;
+ --gid | -!(-*)g)
+ _gids
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]} $(compgen -g)' \
+ -- "$cur"))
+ return
+ ;;
+ --groups | -!(-*)G)
+ local prefix=
+ [[ $cur == *,* ]] && prefix="${cur%,*},"
+ COMPREPLY=($(compgen -g -- "${cur##*,}"))
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ return
+ ;;
+ --shell | -!(-*)s)
+ _shells
+ return
+ ;;
+ esac
+
+ $split && return
+
+ [[ $cur == -* ]] &&
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _useradd useradd
+
+# ex: filetype=sh
diff --git a/completions/userdel b/completions/userdel
new file mode 100644
index 0000000..ed98447
--- /dev/null
+++ b/completions/userdel
@@ -0,0 +1,27 @@
+# userdel(8) completion -*- shell-script -*-
+
+_userdel()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | -!(-*)h)
+ return
+ ;;
+ --root | -!(-*)R)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -u -- "$cur"))
+} &&
+ complete -F _userdel userdel
+
+# ex: filetype=sh
diff --git a/completions/usermod b/completions/usermod
new file mode 100644
index 0000000..77ab33c
--- /dev/null
+++ b/completions/usermod
@@ -0,0 +1,51 @@
+# usermod(8) completion -*- shell-script -*-
+
+_usermod()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ # TODO: if -o/--non-unique is given, could complete on existing uids
+ # with -u/--uid
+
+ case $prev in
+ --comment | --home | --expiredate | --inactive | --help | --login | --password | \
+ --uid | --selinux-user | -!(-*)[cdefhlpuZ])
+ return
+ ;;
+ --gid | -!(-*)g)
+ _gids
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]} $(compgen -g)' \
+ -- "$cur"))
+ return
+ ;;
+ --groups | -!(-*)G)
+ local prefix=
+ [[ $cur == *,* ]] && prefix="${cur%,*},"
+ COMPREPLY=($(compgen -g -- "${cur##*,}"))
+ ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ return
+ ;;
+ --root | -!(-*)R)
+ _filedir -d
+ return
+ ;;
+ --shell | -!(-*)s)
+ _shells
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ # TODO: -U/--unlock, -p/--password, -L/--lock mutually exclusive
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ COMPREPLY=($(compgen -u -- "$cur"))
+} &&
+ complete -F _usermod usermod
+
+# ex: filetype=sh
diff --git a/completions/valgrind b/completions/valgrind
new file mode 100644
index 0000000..f541161
--- /dev/null
+++ b/completions/valgrind
@@ -0,0 +1,111 @@
+# valgrind(1) completion -*- shell-script -*-
+
+_valgrind()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local i
+ # Note: intentionally using COMP_WORDS and COMP_CWORD instead of
+ # words and cword here due to splitting on = causing index differences
+ # (_command_offset assumes the former).
+ for ((i = 1; i <= COMP_CWORD; i++)); do
+ if [[ ${COMP_WORDS[i]} != @([-=])* && ${COMP_WORDS[i - 1]} != = ]]; then
+ _command_offset $i
+ return
+ fi
+ done
+
+ local word tool
+ for word in "${words[@]:1}"; do
+ if [[ $word == --tool=?* ]]; then
+ tool=$word
+ break
+ fi
+ done
+
+ case $prev in
+ -h | --help | --help-debug | --version)
+ return
+ ;;
+ --tool)
+ # Tools seem to be named e.g. like memcheck-amd64-linux from which
+ # we want to grab memcheck.
+ COMPREPLY=($(compgen -W '$(
+ for f in /usr{,/local}/lib{,64,exec}{/*-linux-gnu,}/valgrind/*
+ do
+ [[ $f != *.so && -x $f && $f =~ ^.*/(.*)-[^-]+-[^-]+ ]] &&
+ printf "%s\n" "${BASH_REMATCH[1]}"
+ done)' -- "$cur"))
+ return
+ ;;
+ --sim-hints)
+ COMPREPLY=($(compgen -W 'lax-ioctls enable-outer' -- "$cur"))
+ return
+ ;;
+ --soname-synonyms)
+ COMPREPLY=($(compgen -W 'somalloc' -S = -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ ;;
+ --kernel-variant)
+ COMPREPLY=($(compgen -W 'bproc' -- "$cur"))
+ return
+ ;;
+ # callgrind:
+ --callgrind-out-file)
+ _filedir
+ return
+ ;;
+ # exp-dhat:
+ --sort-by)
+ COMPREPLY=($(compgen -W 'max-bytes-live tot-bytes-allocd
+ max-blocks-live' -- "$cur"))
+ return
+ ;;
+ # massif:
+ --time-unit)
+ COMPREPLY=($(compgen -W 'i ms B' -- "$cur"))
+ return
+ ;;
+ # generic cases parsed from --help output
+ --+([-A-Za-z0-9_]))
+ local value=$($1 --help-debug ${tool-} 2>/dev/null |
+ command sed -ne "s|^[[:blank:]]*$prev=\([^[:blank:]]\{1,\}\).*|\1|p")
+ case $value in
+ \<file*\>)
+ _filedir
+ return
+ ;;
+ \<command\>)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ \<+([0-9])..+([0-9])\>)
+ COMPREPLY=($(compgen -W "{${value:1:${#value}-2}}" \
+ -- "$cur"))
+ return
+ ;;
+ # "yes", "yes|no", etc (but not "string", "STR",
+ # "hint1,hint2,...")
+ yes | +([-a-z0-9])\|+([-a-z0-9\|]))
+ COMPREPLY=($(IFS='|' compgen -W '$value' -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" "--help ${tool-}")' \
+ -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+} &&
+ complete -F _valgrind valgrind
+
+# ex: filetype=sh
diff --git a/completions/vipw b/completions/vipw
new file mode 100644
index 0000000..b3a7415
--- /dev/null
+++ b/completions/vipw
@@ -0,0 +1,22 @@
+# vipw(8) and vigr completion -*- shell-script -*-
+
+_vipw()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | -!(-*)h)
+ return
+ ;;
+ --root | -!(-*)R)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+} &&
+ complete -F _vipw vipw vigr
+
+# ex: filetype=sh
diff --git a/completions/vmstat b/completions/vmstat
new file mode 100644
index 0000000..e36934a
--- /dev/null
+++ b/completions/vmstat
@@ -0,0 +1,27 @@
+# vmstat(8) completion -*- shell-script -*-
+
+_vmstat()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --version | --partition | -!(-*)[hVcMNnwp])
+ return
+ ;;
+ --unit | -!(-*)S)
+ [[ $OSTYPE == *linux* ]] &&
+ COMPREPLY=($(compgen -W 'k K m M' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} ]] ||
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ fi
+} &&
+ complete -F _vmstat vmstat
+
+# ex: filetype=sh
diff --git a/completions/vncviewer b/completions/vncviewer
new file mode 100644
index 0000000..ba55226
--- /dev/null
+++ b/completions/vncviewer
@@ -0,0 +1,99 @@
+# bash completion for vncviewer -*- shell-script -*-
+
+_vncviewer_bootstrap()
+{
+ local fname
+ case $(_realcommand vncviewer) in
+ *xvnc4viewer) fname=_xvnc4viewer ;;
+ *tightvncviewer) fname=_tightvncviewer ;;
+ *) fname=_known_hosts ;;
+ esac
+
+ # Install real completion for subsequent completions
+ complete -F $fname vncviewer
+ $fname # Generate completions once for now
+ unset -f _vncviewer_bootstrap
+} &&
+ complete -F _vncviewer_bootstrap vncviewer
+
+_tightvncviewer()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -passwd)
+ _filedir
+ return
+ ;;
+ -encodings)
+ COMPREPLY=($(compgen -W 'copyrect tight hextile zlib corre rre
+ raw' -- "$cur"))
+ return
+ ;;
+ -via)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ 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_real -- "$cur"
+ fi
+} &&
+ complete -F _tightvncviewer tightvncviewer
+
+# NOTE: - VNC Viewer options are case insensitive.
+# Preferred case is taken from -help.
+_xvnc4viewer()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # Both single dash (-) and double dash (--) are allowed as option prefix
+ local opt=${prev/#--/-}
+ case ${opt,,} in
+ # -passwd, -PasswordFile
+ -passwd | -passwordfile)
+ _filedir
+ return
+ ;;
+ -preferredencoding)
+ COMPREPLY=($(compgen -W 'zrle hextile raw' -- "$cur"))
+ return
+ ;;
+ -via)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ 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=-
+
+ local IFS=$' \t\n' reset=$(shopt -p nocasematch)
+ shopt -s nocasematch
+ local option
+ COMPREPLY=($(for option in "${options[@]}"; do
+ [[ $dash$option == "$cur"* ]] && printf '%s\n' $dash$option
+ done))
+ $reset
+ else
+ _known_hosts_real -- "$cur"
+ fi
+} &&
+ complete -F _xvnc4viewer xvnc4viewer
+
+# ex: filetype=sh
diff --git a/completions/vpnc b/completions/vpnc
new file mode 100644
index 0000000..bbdb8ee
--- /dev/null
+++ b/completions/vpnc
@@ -0,0 +1,82 @@
+# bash completion for vpnc -*- shell-script -*-
+
+_vpnc()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --long-help | --version | --id | --username | --domain | --ifname | \
+ --application-version | --local-addr | --local-port | --udp-port | --dpd-idle | \
+ --target-network | --ifmtu)
+ return
+ ;;
+ --gateway)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --vendor)
+ COMPREPLY=($(compgen -W 'cisco netscreen' -- "$cur"))
+ return
+ ;;
+ --natt-mode)
+ COMPREPLY=($(compgen -W 'natt none force-natt cisco-udp' \
+ -- "$cur"))
+ return
+ ;;
+ --script | --pid-file | --ca-file)
+ _filedir
+ return
+ ;;
+ --dh)
+ COMPREPLY=($(compgen -W 'dh1 dh2 dh5' -- "$cur"))
+ return
+ ;;
+ --pfs)
+ COMPREPLY=($(compgen -W 'nopfs dh1 dh2 dh5 server' -- "$cur"))
+ return
+ ;;
+ --ifmode)
+ COMPREPLY=($(compgen -W 'tun tap' -- "$cur"))
+ return
+ ;;
+ --debug)
+ COMPREPLY=($(compgen -W '0 1 2 3 99' -- "$cur"))
+ return
+ ;;
+ --auth-mode)
+ COMPREPLY=($(compgen -W 'psk cert hybrid' -- "$cur"))
+ return
+ ;;
+ --ca-dir)
+ _filedir -d
+ return
+ ;;
+ --password-helper)
+ compopt -o filenames
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --long-help)' -- "$cur"))
+ elif [[ $cur == */* ]]; then
+ # explicit filename
+ _filedir conf
+ else
+ # config name, /etc/vpnc/<name>.conf
+ local IFS=$' \t\n' reset=$(shopt -p nullglob)
+ shopt -s nullglob
+ local -a configs=(/etc/vpnc/*.conf)
+ configs=("${configs[@]##*/}")
+ configs=("${configs[@]%.conf}")
+ $reset
+ IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=($(compgen -W '${configs[@]}' -- "$cur"))
+ fi
+} &&
+ complete -F _vpnc vpnc
+
+# ex: filetype=sh
diff --git a/completions/watch b/completions/watch
new file mode 100644
index 0000000..efc0a98
--- /dev/null
+++ b/completions/watch
@@ -0,0 +1,54 @@
+# watch(1) completion -*- shell-script -*-
+
+[[ $OSTYPE == *linux* ]] || return 1
+
+_watch()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local offset=0 i
+ for ((i = 1; i <= cword; i++)); do
+ case ${words[i]} in
+ --help | --version | -!(-*)h)
+ return
+ ;;
+ --interval | -!(-*)n)
+ ((i++))
+ continue
+ ;;
+ -*)
+ continue
+ ;;
+ esac
+ offset=$i
+ break
+ done
+
+ if ((offset > 0)); then
+ _command_offset $offset
+ return
+ fi
+
+ case $prev in
+ --differences | -!(-*)d)
+ [[ $cur != -* ]] &&
+ COMPREPLY=($(compgen -W 'cumulative' -- "$cur"))
+ return
+ ;;
+ --interval | -!(-*)n)
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+} &&
+ complete -F _watch watch
+
+# ex: filetype=sh
diff --git a/completions/webmitm b/completions/webmitm
new file mode 100644
index 0000000..549c5ef
--- /dev/null
+++ b/completions/webmitm
@@ -0,0 +1,17 @@
+# webmitm completion -*- shell-script -*-
+
+_webmitm()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ else
+ _known_hosts_real -- "$cur"
+ fi
+
+} &&
+ complete -F _webmitm webmitm
+
+# ex: filetype=sh
diff --git a/completions/wget b/completions/wget
new file mode 100644
index 0000000..d6a2fe9
--- /dev/null
+++ b/completions/wget
@@ -0,0 +1,174 @@
+# wget(1) completion -*- shell-script -*-
+
+_wget()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --version | --help | -!(-*)[hV])
+ return
+ ;;
+ --progress)
+ COMPREPLY=($(compgen -W 'bar dot' -- "$cur"))
+ return
+ ;;
+ --bind-address)
+ _ip_addresses
+ return
+ ;;
+ --domains | --exclude-domains | -!(-*)D)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --restrict-file-names)
+ local excludes=()
+ case $cur in
+ *unix* | *windows*)
+ excludes=(windows unix)
+ ;;&
+ *lowercase* | *uppercase*)
+ excludes+=(lowercase uppercase)
+ ;;&
+ *nocontrol*)
+ excludes+=(nocontrol)
+ ;;&
+ *ascii*)
+ excludes+=(ascii)
+ ;;
+ esac
+ local excludes_str=$(
+ export IFS='|'
+ echo "${excludes[*]}"
+ )
+
+ # prevopt is the previous options string used as a prefix
+ # to avoid COMPREPLY replacing them with the $lastopt completion
+ local lastopt=${cur/*,/} prevopt=
+ [[ $cur == *,* ]] && prevopt=${cur%,*},
+
+ COMPREPLY=($(compgen -P "$prevopt" -X "@($excludes_str)" \
+ -W 'unix windows nocontrol ascii lowercase uppercase' \
+ -- "$lastopt"))
+
+ # +o nospace when no more valid option is possible (= append a space)
+ local opt_as_arr=(${COMPREPLY[0]//,/ })
+ ((${#opt_as_arr[@]} < 4)) && compopt -o nospace
+ return
+ ;;
+ --prefer-family)
+ COMPREPLY=($(compgen -W 'IPv4 IPv6 none' -- "$cur"))
+ return
+ ;;
+ --directory-prefix | --ca-directory | --warc-tempdir | -!(-*)P)
+ _filedir -d
+ return
+ ;;
+ --output-file | --append-output | --config | --load-cookies | --save-cookies | \
+ --post-file | --certificate | --ca-certificate | --private-key | \
+ --random-file | --egd-file | --warc-file | --warc-dedup | -!(-*)[oa])
+ _filedir
+ return
+ ;;
+ --output-document | --input-file | -!(-*)[Oi])
+ _filedir && [[ $cur == - || -z $cur ]] && COMPREPLY+=(-)
+ return
+ ;;
+ --secure-protocol)
+ COMPREPLY=($(compgen -W 'auto SSLv2 SSLv3 TLSv1' -- "$cur"))
+ return
+ ;;
+ --certificate-type | --private-key-type)
+ COMPREPLY=($(compgen -W 'PEM DER' -- "$cur"))
+ return
+ ;;
+ --follow-tags | --ignore-tags)
+ local lastopt=${cur/*,/} prevopt=
+ [[ $cur == *,* ]] && prevopt=${cur%,*},
+
+ COMPREPLY=($(compgen -P "$prevopt" -W 'a abbr acronym address
+ applet area b base basefont bdo big blockquote body br button
+ caption center cite code col colgroup dd del dir div dfn dl dt
+ em fieldset font form frame frameset h6 head hr html i iframe
+ img input ins isindex kbd label legend li link map menu meta
+ noframes noscript object ol optgroup option p param pre q s
+ samp script select small span strike strong style sub sup table
+ tbody td textarea tfoot th thead title tr tt u ul var xmp' \
+ -- "$lastopt"))
+ return
+ ;;
+ --tries | --timeout | --dns-timeout | --connect-timeout | --read-timeout | \
+ --wait | --waitretry | --cut-dirs | --max-redirect | --level | -!(-*)[tTwl])
+ # expect integer number
+ COMPREPLY+=($(compgen -P "$cur" -W "{0..9}"))
+ compopt -o nospace
+ return
+ ;;
+ --quota | --limit-rate | --warc-max-size | -!(-*)Q)
+ # expect size
+ if [[ $cur == *[km] ]]; then
+ COMPREPLY=($(compgen -W "$cur"))
+ elif [[ $cur ]]; then
+ COMPREPLY=($(compgen -P "$cur" -W "{0..9} k m"))
+ compopt -o nospace
+ else
+ COMPREPLY=($(compgen -W "{0..9}"))
+ compopt -o nospace
+ fi
+ return
+ ;;
+ --user | --http-user | --proxy-user | --ftp-user)
+ COMPREPLY=($(compgen -W "$(command sed -n \
+ '/^login/s/^[[:blank:]]*login[[:blank:]]//p' ~/.netrc \
+ 2>/dev/null)" -- "$cur"))
+ return
+ ;;
+ --header)
+ COMPREPLY=($(compgen -W 'Accept Accept-Charset Accept-Encoding
+ Accept-Language Accept-Ranges Age Allow Authorization
+ Cache-Control Connection Content-Encoding Content-Language
+ Content-Length Content-Location Content-MD5 Content-Range
+ Content-Type Date ETag Expect Expires From Host If-Match
+ If-Modified-Since If-None-Match If-Range If-Unmodified-Since
+ Last-Modified Location Max-Forwards Pragma Proxy-Authenticate
+ Proxy-Authorization Range Referer Retry-After Server TE Trailer
+ Transfer-Encoding Upgrade User-Agent Vary Via Warning
+ WWW-Authenticate' -- "$cur"))
+ compopt -o nospace
+ return
+ ;;
+ --local-encoding | --remote-encoding)
+ type -P xauth &>/dev/null && _xfunc iconv _iconv_charsets
+ return
+ ;;
+ --execute | -!(-*)e)
+ return # TODO base=STR
+ ;;
+ --report-speed)
+ COMPREPLY=($(compgen -W 'bits' -- "$cur"))
+ return
+ ;;
+ --regex-type)
+ COMPREPLY=($(compgen -W 'posix' -- "$cur"))
+ return
+ ;;
+ --base | --password | --ftp-password | --http-password | --proxy-password | \
+ --default-page | --referer | --user-agent | --post-data | --warc-header | \
+ --accept | --reject | --accept-regex | --reject-regex | --include-directories | \
+ --exclude-directories | -!(-*)[BUARIX])
+ # argument required but no completions available
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+
+} &&
+ complete -F _wget wget
+
+# ex: filetype=sh
diff --git a/completions/wine b/completions/wine
new file mode 100644
index 0000000..429fede
--- /dev/null
+++ b/completions/wine
@@ -0,0 +1,20 @@
+# bash completion for wine(1) -*- shell-script -*-
+
+_wine()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--help --version' -- "$cur"))
+ [[ ${COMPREPLY-} ]] && return
+ fi
+ _filedir '@([eE][xX][eE]?(.[sS][oO])|[cC][oO][mM]|[sS][cC][rR]|[mM][sS][iI])'
+ else
+ _filedir
+ fi
+} &&
+ complete -F _wine wine wine-development wine-stable
+
+# ex: filetype=sh
diff --git a/completions/withlist b/completions/withlist
new file mode 100644
index 0000000..4142471
--- /dev/null
+++ b/completions/withlist
@@ -0,0 +1,18 @@
+# mailman withlist completion -*- shell-script -*-
+
+_withlist()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--lock --interactive --run --all --quiet
+ --help' -- "$cur"))
+ else
+ _xfunc list_lists _mailman_lists
+ fi
+
+} &&
+ complete -F _withlist withlist
+
+# ex: filetype=sh
diff --git a/completions/wodim b/completions/wodim
new file mode 100644
index 0000000..b308291
--- /dev/null
+++ b/completions/wodim
@@ -0,0 +1,96 @@
+# bash completion for cdrecord/wodim -*- shell-script -*-
+
+_cdrecord()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ local generic_options track_options track_mode
+
+ # foo=bar style option
+ if [[ $cur == *=* ]]; then
+ prev=${cur%%=*}
+ cur=${cur#*=}
+ case $prev in
+ textfile | cuefile | msifile)
+ _filedir
+ ;;
+ blank)
+ COMPREPLY=($(compgen -W 'help all fast track unreserve trtail
+ unclose session' -- "$cur"))
+ ;;
+ driveropts)
+ if [[ $cur == *=* ]]; then
+ prev=${cur%%=*}
+ cur=${cur#*=}
+ case $prev in
+ varirec)
+ COMPREPLY=($(compgen -W "-2 -1 0 1 2" -- "$cur"))
+ ;;
+ gigarec)
+ COMPREPLY=($(compgen -W "0.6 0.7 0.8 1.0 1.2 1.3
+ 1.4" -- "$cur"))
+ ;;
+ tattoofile)
+ _filedir
+ ;;
+ esac
+ else
+ COMPREPLY=($(compgen -W 'burnfree noburnfree varirec=
+ gigarec= audiomaster forcespeed noforcespeed speedread
+ nospeedread singlesession nosinglesession hidecdr
+ nohidecdr tattooinfo tattoofile=' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+ ;;
+ driver)
+ COMPREPLY=($(compgen -W "$($1 driver=help 2>&1 |
+ awk 'NR > 1 { print $1 }') help" -- "$cur"))
+ ;;
+ minbuf)
+ COMPREPLY=($(compgen -W '{25..95}' -- "$cur"))
+ ;;
+ esac
+ return
+ fi
+
+ generic_options=(-version -v -V -d -silent -force -immed -dummy -clone
+ -dao -sao -tao -raw -raw96r -raw96p -raw16 -multi -msinfo -toc -atip
+ -fix -nofix -waiti -load -lock -eject -format -setdropts -checkdrive
+ -prcap -inq -scanbus --devices -reset -abort -overburn -ignsize
+ -useinfo -packet -noclose -text "debug=" "kdebug=" "minbuf="
+ "msifile=" "speed=" "blank=" "fs=" "ts=" "dev=" "gracetime="
+ "timeout=" "driver=" "driveropts=" "defpregap=" "pktsize=" "mcn="
+ "textfile=" "cuefile=")
+ track_options=(-audio -swab -data -mode2 -xa -xa1 -xa2 -xamix -cdi
+ -isosize -pad -nopad -shorttrack -noshorttrack -preemp -nopreemp
+ -copy -nocopy -scms "isrc=" "index=" "padsize=" "pregap=" "tsize=")
+ # look if previous was either a file or a track option
+ track_mode=0
+ if ((cword > 1)); then
+ if [[ -f $prev ]]; then
+ track_mode=1
+ else
+ local opt
+ for opt in "${track_options[@]}"; do
+ if [[ $opt == "$prev" ]]; then
+ track_mode=1
+ break
+ fi
+ done
+ fi
+ fi
+
+ # files are always eligible completion
+ _filedir
+ # track options are always available
+ COMPREPLY+=($(compgen -W '${track_options[@]}' -- "$cur"))
+ # general options are no more available after file or track option
+ if ((track_mode == 0)); then
+ COMPREPLY+=($(compgen -W '${generic_options[@]}' -- "$cur"))
+ fi
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+} &&
+ complete -F _cdrecord cdrecord wodim
+
+# ex: filetype=sh
diff --git a/completions/wol b/completions/wol
new file mode 100644
index 0000000..eada070
--- /dev/null
+++ b/completions/wol
@@ -0,0 +1,42 @@
+# wol(1) completion -*- shell-script -*-
+
+_wol()
+{
+ local cur prev words cword split
+ _init_completion -s -n : || return
+
+ case $prev in
+ --version | --help | --port | --passwd | --wait | -!(-*)[Vpw])
+ return
+ ;;
+ --host | --ipaddr | -!(-*)[hi])
+ # Broadcast addresses
+ local PATH=$PATH:/sbin
+ COMPREPLY=($({
+ ip addr show || ifconfig -a
+ } 2>/dev/null |
+ command sed -ne 's/.*[[:space:]]Bcast:\([^[:space:]]*\).*/\1/p' -ne \
+ 's/.*inet.*[[:space:]]brd[[:space:]]\([^[:space:]]*\).*/\1/p' -ne \
+ 's/.*[[:space:]]broadcast[[:space:]]\{1,\}\([^[:space:]]*\).*/\1/p'))
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --file | -!(-*)f)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _mac_addresses
+} &&
+ complete -F _wol wol
+
+# ex: filetype=sh
diff --git a/completions/wsimport b/completions/wsimport
new file mode 100644
index 0000000..d5bec9f
--- /dev/null
+++ b/completions/wsimport
@@ -0,0 +1,48 @@
+# wsimport(1) completion -*- shell-script -*-
+
+_wsimport()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ case $prev in
+ -help | -version | -B | -p | -wsdllocation)
+ return
+ ;;
+ -b)
+ _filedir '@(xml|xjb)'
+ return
+ ;;
+ -catalog)
+ _filedir '@(xml|soc|catalog)'
+ return
+ ;;
+ -d | –s)
+ _filedir -d
+ return
+ ;;
+ -target)
+ COMPREPLY=($(compgen -W '2.0 2.1 2.2' -- "$cur"))
+ return
+ ;;
+ -clientjar)
+ _filedir jar
+ return
+ ;;
+ esac
+
+ if [[ $cur == -httpproxy:* ]]; then
+ _known_hosts_real -- "${cur#-httpproxy:}"
+ return
+ elif [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ [[ ${COMPREPLY-} == *: ]] && compopt -o nospace
+ __ltrim_colon_completions "$cur"
+ return
+ fi
+
+ _filedir wsdl
+} &&
+ complete -F _wsimport wsimport
+
+# ex: filetype=sh
diff --git a/completions/wtf b/completions/wtf
new file mode 100644
index 0000000..27fc10a
--- /dev/null
+++ b/completions/wtf
@@ -0,0 +1,42 @@
+# wtf completion -*- shell-script -*-
+# Raphael Droz, 25/09/2009
+
+_wtf()
+{
+ local cur prev words cword addf
+ _init_completion || return
+
+ [[ $prev == -f ]] && _filedir && return
+ [[ ${words[*]} == *\ -f* ]] && addf= || addf=-f
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($addf)
+ return
+ fi
+
+ local db
+
+ set -- "${words[@]}"
+ while (($# > 0)); do
+ if [[ $1 == -f ]]; then
+ shift
+ db=$1
+ break
+ fi
+ shift
+ done
+
+ if [[ ! -v db ]]; then
+ local f
+ for f in "${ACRONYMDB-}" /usr/share/misc/acronyms \
+ /usr/share/games/bsdgames/acronyms; do
+ [[ -f $f ]] && db="$f" && break
+ done
+ [[ -v db ]] || return
+ fi
+
+ COMPREPLY=($(compgen -W "$(cut -f 1 -s $db* 2>/dev/null) $addf" \
+ -- "${cur^^}"))
+} &&
+ complete -F _wtf wtf
+
+# ex: filetype=sh
diff --git a/completions/wvdial b/completions/wvdial
new file mode 100644
index 0000000..8667400
--- /dev/null
+++ b/completions/wvdial
@@ -0,0 +1,46 @@
+# bash completion for wvdial -*- shell-script -*-
+
+_wvdial()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --config)
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ local config i IFS=$'\n'
+
+ case $cur in
+ -*)
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ ;;
+ *)
+ # start with global and personal config files
+ config="/etc/wvdial.conf"$'\n'"$HOME/.wvdialrc"
+ # replace with command line config file if present
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == "--config" ]]; then
+ config=${words[i + 1]}
+ break
+ fi
+ done
+ # parse config files for sections and
+ # remove default section
+ COMPREPLY=($(command sed -ne "s|^\[Dialer \($cur.*\)\]$|\1|p" $config \
+ 2>/dev/null | command grep -v '^Defaults$'))
+ # escape spaces
+ COMPREPLY=(${COMPREPLY[@]// /\\ })
+ ;;
+ esac
+
+} &&
+ complete -F _wvdial wvdial
+
+# ex: filetype=sh
diff --git a/completions/xdg-mime b/completions/xdg-mime
new file mode 100644
index 0000000..74c26c4
--- /dev/null
+++ b/completions/xdg-mime
@@ -0,0 +1,74 @@
+# xdg-mime(1) completion -*- shell-script -*-
+
+_xdg_mime_mimetype()
+{
+ COMPREPLY+=($(compgen -S / -W 'application audio font image message model
+ multipart text video' -- "$cur"))
+ [[ ${COMPREPLY-} == */ ]] && compopt -o nospace
+}
+
+_xdg_mime()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local args
+ _count_args
+
+ if ((args == 1)); then
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--help --manual --version' -- "$cur"))
+ return
+ fi
+ COMPREPLY=($(compgen -W \
+ 'query default install uninstall' -- "$cur"))
+ return
+ fi
+
+ case ${words[1]} in
+ query)
+ if ((args == 2)); then
+ COMPREPLY=($(compgen -W 'filetype default' -- "$cur"))
+ return
+ fi
+ case ${words[2]} in # TODO and args == 3 (takes only one arg!)
+ filetype) _filedir ;;
+ default) _xdg_mime_mimetype ;;
+ esac
+ ;;
+ default)
+ if ((args == 2)); then
+ local IFS=$' \t\n' reset=$(shopt -p nullglob)
+ shopt -s nullglob
+ local -a desktops=(/usr/share/applications/*.desktop)
+ desktops=("${desktops[@]##*/}")
+ $reset
+ IFS=$'\n'
+ COMPREPLY=($(compgen -W '${desktops[@]}' -- "$cur"))
+ else
+ _xdg_mime_mimetype
+ fi
+ ;;
+ install)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--mode --novendor' -- "$cur"))
+ elif [[ $prev == --mode ]]; then
+ COMPREPLY=($(compgen -W 'user system' -- "$cur"))
+ else
+ _filedir xml
+ fi
+ ;;
+ uninstall)
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '--mode' -- "$cur"))
+ elif [[ $prev == --mode ]]; then
+ COMPREPLY=($(compgen -W 'user system' -- "$cur"))
+ else
+ _filedir xml
+ fi
+ ;;
+ esac
+} &&
+ complete -F _xdg_mime xdg-mime
+
+# ex: filetype=sh
diff --git a/completions/xdg-settings b/completions/xdg-settings
new file mode 100644
index 0000000..abd9246
--- /dev/null
+++ b/completions/xdg-settings
@@ -0,0 +1,31 @@
+# xdg-settings completion -*- shell-script -*-
+
+_xdg_settings()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --help | --list | --manual | --version)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$("$1" --help |
+ tr "{|" "\n" | _parse_help -)' -- "$cur"))
+ return
+ fi
+
+ local args
+ _count_args
+ if ((args == 1)); then
+ COMPREPLY=($(compgen -W "get check set" -- "$cur"))
+ elif ((args == 2)); then
+ COMPREPLY=($(compgen -W \
+ '$("$1" --list | awk "!/^Known/ { print \$1 }")' -- "$cur"))
+ fi
+} &&
+ complete -F _xdg_settings xdg-settings
+
+# ex: filetype=sh
diff --git a/completions/xfreerdp b/completions/xfreerdp
new file mode 100644
index 0000000..f17414f
--- /dev/null
+++ b/completions/xfreerdp
@@ -0,0 +1,67 @@
+# xfreerdp completion -*- shell-script -*-
+
+_xfreerdp()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ case $prev in # old/dash syntax
+ -k)
+ COMPREPLY=($(compgen -W '$("$1" --kbd-list |
+ awk "/^0x/ { print \$1 }")' -- "$cur"))
+ return
+ ;;
+ -a)
+ COMPREPLY=($(compgen -W '8 15 16 24 32' -- "$cur"))
+ return
+ ;;
+ -x)
+ COMPREPLY=($(compgen -W 'broadband modem lan' -- "$cur"))
+ return
+ ;;
+ --plugin)
+ COMPREPLY=($(compgen -W 'cliprdr rdpsnd rdpdr' -- "$cur"))
+ return
+ ;;
+ esac
+
+ case $cur in # new/slash syntax
+ /kbd:*)
+ COMPREPLY=($(compgen -W '$("$1" /kbd-list |
+ awk "/^0x/ { print \$1 }")' -- "${cur#/kbd:}"))
+ return
+ ;;
+ /bpp:*)
+ COMPREPLY=($(compgen -W '8 15 16 24 32' -- "${cur#/bpp:}"))
+ return
+ ;;
+ /*:* | /help | /version | -h | --help | --version)
+ return
+ ;;
+ esac
+
+ if [[ $cur == /* ]]; then
+ COMPREPLY=($(compgen -W '$("$1" --help |
+ awk "\$1 ~ /^\\// && \$1 !~ /^.(flag\$|option:)/ { sub(\":.*\",\":\",\$1); print \$1 }")' \
+ -- "$cur"))
+ [[ ${COMPREPLY-} == *: ]] && compopt -o nospace
+ elif [[ $cur == [+-]* ]]; then
+ local char=${cur:0:1}
+ local help="$($1 --help)"
+ if [[ $help == */help* ]]; then # new/slash syntax
+ COMPREPLY=($(compgen -W '$(awk "
+ \$1 ~ /^[+-]/ && \$1 !~ /^.toggle\$/ { sub(\"^.\",\"$char\",\$1); print \$1 }
+ " <<<"$help")' -- "$cur"))
+ else # old/dash syntax
+ COMPREPLY=($(_parse_help - <<<"$help"))
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]%:}' -- "$cur"))
+ fi
+ else
+ COMPREPLY=($(compgen -W "$(awk '{print $1}' ~/.freerdp/known_hosts \
+ 2>/dev/null)" -- "$cur"))
+ fi
+
+} &&
+ complete -F _xfreerdp xfreerdp
+
+# ex: filetype=sh
diff --git a/completions/xgamma b/completions/xgamma
new file mode 100644
index 0000000..8d77ba3
--- /dev/null
+++ b/completions/xgamma
@@ -0,0 +1,61 @@
+# bash completion for xgamma(1) -*- shell-script -*-
+
+_xgamma()
+{
+ local cur prev words cword
+ _init_completion -n : || return
+
+ case "$prev" in
+ -screen)
+ local screens=$(xrandr --query 2>/dev/null | command sed -n \
+ '/^Screen /s|^Screen \{1,\}\(.*\):.*$|\1|p' 2>/dev/null)
+ COMPREPLY=($(compgen -W "$screens" -- "$cur"))
+ return
+ ;;
+ -gamma | -rgamma | -ggamma | -bgamma)
+ # expect f.f
+ if [[ $cur && $cur != *.* ]]; then
+ COMPREPLY=(.)
+ fi
+ COMPREPLY+=($(compgen -W "{0..9}"))
+ compopt -o nospace
+ return
+ ;;
+ -display)
+ # expect hostname:displaynumber.screennumber
+ if [[ $cur == :* && $cur != :*.* ]]; then
+ # FIXME: where to get local display numbers?
+ local display=${cur#:}
+ COMPREPLY=($(compgen -W "${display:-0}."))
+ compopt -o nospace
+ elif [[ $cur == :*.* ]]; then
+ # local screen numbers
+ local t screens=$(xrandr --query 2>/dev/null | command sed -ne \
+ '/^Screen /s|^Screen \{1,\}\(.*\):.*$|\1|p' 2>/dev/null)
+ t="${cur#:}"
+ COMPREPLY=($(compgen -P "${t%.*}." -W "$screens" -- \
+ "${cur##*.}"))
+ elif [[ $cur != *:* ]]; then
+ # complete hostnames
+ _known_hosts_real -c -- "$cur"
+ if [[ ! $cur ]]; then
+ COMPREPLY+=(:)
+ fi
+ compopt -o nospace
+ fi
+ # no display completion for remote hosts
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ if [[ ${COMPREPLY-} ]]; then
+ [[ $COMPREPLY == *= ]] && compopt -o nospace
+ return
+ fi
+ fi
+} &&
+ complete -F _xgamma xgamma
+
+# ex: filetype=sh
diff --git a/completions/xhost b/completions/xhost
new file mode 100644
index 0000000..648ae4f
--- /dev/null
+++ b/completions/xhost
@@ -0,0 +1,16 @@
+# xhost(1) completion -*- shell-script -*-
+
+_xhost()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $cur in
+ +*) _known_hosts_real -p+ -- "${cur:1}" ;;
+ -*) _known_hosts_real -p- -- "${cur:1}" ;;
+ *) _known_hosts_real -- "$cur" ;;
+ esac
+} &&
+ complete -F _xhost xhost
+
+# ex: filetype=sh
diff --git a/completions/xmllint b/completions/xmllint
new file mode 100644
index 0000000..a6ef38f
--- /dev/null
+++ b/completions/xmllint
@@ -0,0 +1,53 @@
+# bash completion for xmllint(1) -*- shell-script -*-
+
+_xmllint()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -o | --output)
+ _filedir
+ return
+ ;;
+ --path | --dtdvalidfpi | --maxmem | --pattern | --xpath)
+ # argument required but no completions available
+ return
+ ;;
+ --dtdvalid)
+ _filedir 'dtd?(.gz)'
+ return
+ ;;
+ --relaxng)
+ _filedir 'rng?(.gz)'
+ return
+ ;;
+ --schema)
+ _filedir 'xsd?(.gz)'
+ return
+ ;;
+ --schematron)
+ _filedir 'sch?(.gz)'
+ return
+ ;;
+ --encode)
+ _xfunc iconv _iconv_charsets
+ return
+ ;;
+ --pretty)
+ COMPREPLY=($(compgen -W '{0..2}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ COMPREPLY=("${COMPREPLY[@]%:}")
+ return
+ fi
+
+ _filedir '@(*ml|htm|svg?(z)|xs[dl]|rng|wsdl|jnlp|tld|dbk|docbook|page)?(.gz)'
+} &&
+ complete -F _xmllint xmllint
+
+# ex: filetype=sh
diff --git a/completions/xmlwf b/completions/xmlwf
new file mode 100644
index 0000000..b397af9
--- /dev/null
+++ b/completions/xmlwf
@@ -0,0 +1,32 @@
+# bash completion for xmlwf(1) -*- shell-script -*-
+
+_xmlwf()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*d)
+ _filedir -d
+ return
+ ;;
+ -*e)
+ COMPREPLY=($(compgen -W 'US-ASCII UTF-8 UTF-16 ISO-8859-1' \
+ -- "$cur"))
+ return
+ ;;
+ -*v)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir '@(*ml|htm|svg|xs[dl]|rng|wsdl|jnlp|tld|dbk|docbook|page)'
+} &&
+ complete -F _xmlwf xmlwf
+
+# ex: filetype=sh
diff --git a/completions/xmms b/completions/xmms
new file mode 100644
index 0000000..af4aefe
--- /dev/null
+++ b/completions/xmms
@@ -0,0 +1,29 @@
+# bash completion for xmms -*- shell-script -*-
+
+_xmms()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --help | --version | -!(-*)[hv])
+ return
+ ;;
+ --toggle-shuffle | --toggle-repeat | --toggle-advance | -!(-*)[SRA])
+ COMPREPLY=($(compgen -W 'on off' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ else
+ _filedir '@(mp[23]|ogg|wav|pls|m3u|xm|mod|s[3t]m|it|mtm|ult|flac)'
+ fi
+
+} &&
+ complete -F _xmms xmms
+
+# ex: filetype=sh
diff --git a/completions/xmodmap b/completions/xmodmap
new file mode 100644
index 0000000..7cfa230
--- /dev/null
+++ b/completions/xmodmap
@@ -0,0 +1,23 @@
+# xmodmap(1) completion -*- shell-script -*-
+
+_xmodmap()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -display | -e)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -help)' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _xmodmap xmodmap
+
+# ex: filetype=sh
diff --git a/completions/xrandr b/completions/xrandr
new file mode 100644
index 0000000..16704e3
--- /dev/null
+++ b/completions/xrandr
@@ -0,0 +1,63 @@
+# bash completion for xrandr -*- shell-script -*-
+
+_xrandr()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case "$prev" in
+ -display | -d | -help | -s | --size | -r | --rate | --refresh | --screen | --fb | --fbmm | \
+ --dpi | --pos | --set | --scale | --transform | --crtc | --panning | --gamma | \
+ --newmode | --rmmode | --addmode | --delmode)
+ return
+ ;;
+ --output | --left-of | --right-of | --above | --below | --same-as)
+ local outputs=$("$1" | awk '/connected/ {print $1}')
+ COMPREPLY=($(compgen -W "$outputs" -- "$cur"))
+ return
+ ;;
+ --mode)
+ local i output
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == --output ]]; then
+ output=${words[i + 1]}
+ break
+ fi
+ done
+ if [[ -v output ]]; then
+ local modes=$("$1" | command sed -e "1,/^$output / d" \
+ -e "/connected/,$ d" \
+ -e "s/\([^[:space:]]\)[[:space:]].*/\1/")
+ COMPREPLY=($(compgen -W "$modes" -- "$cur"))
+ fi
+ return
+ ;;
+ -o | --orientation)
+ COMPREPLY=($(compgen -W 'normal inverted left right 0 1 2 3' -- \
+ "$cur"))
+ return
+ ;;
+ --reflect)
+ COMPREPLY=($(compgen -W 'normal x y xy' -- "$cur"))
+ return
+ ;;
+ --rotate)
+ COMPREPLY=($(compgen -W 'normal inverted left right' -- "$cur"))
+ return
+ ;;
+ --setprovideroutputsource | --setprovideroffloadsink)
+ local providers=$("$1" --listproviders 2>/dev/null |
+ command sed -ne 's/.* name:\([^ ]*\).*/\1/p')
+ COMPREPLY=($(compgen -W "$providers" -- "$cur"))
+ # TODO 2nd arg needed, is that a provider as well?
+ return
+ ;;
+ esac
+
+ COMPREPLY=($(compgen -W '$("$1" -help 2>&1 |
+ command sed -e "s/ or / /g" -e "s/<[^>]*>]//g" | _parse_help -)' \
+ -- "$cur"))
+} &&
+ complete -F _xrandr xrandr
+
+# ex: filetype=sh
diff --git a/completions/xrdb b/completions/xrdb
new file mode 100644
index 0000000..f46f90b
--- /dev/null
+++ b/completions/xrdb
@@ -0,0 +1,27 @@
+# xrdb(1) completion -*- shell-script -*-
+
+_xrdb()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -backup | -display | -help)
+ return
+ ;;
+ -cpp | -edit)
+ _filedir
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _xrdb xrdb
+
+# ex: filetype=sh
diff --git a/completions/xsltproc b/completions/xsltproc
new file mode 100644
index 0000000..4cb7071
--- /dev/null
+++ b/completions/xsltproc
@@ -0,0 +1,49 @@
+# xsltproc(1) completion -*- shell-script -*-
+
+_xsltproc()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --output | -o)
+ _filedir
+ return
+ ;;
+ # TODO : number only
+ --maxdepth)
+ return
+ ;;
+ --encoding)
+ # some aliases removed
+ COMPREPLY=($(compgen -X '@(UTF[1378]|8859|ISO[0-9_])*' \
+ -W "$(iconv -l | command sed -e 's/\/.*//')" -- "$cur"))
+ return
+ ;;
+ --param | --stringparam)
+ return
+ ;;
+ # not really like --writesubtree
+ --path)
+ _filedir -d
+ return
+ ;;
+ --writesubtree)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ [[ $cword -gt 2 && $(_get_cword '' 2) == --?(string)param ]] && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ COMPREPLY=("${COMPREPLY[@]%:}")
+ else
+ # TODO: 1st file xsl|xslt, 2nd XML
+ _filedir '@(xsl|xslt|xml|dbk|docbook|page)'
+ fi
+} &&
+ complete -F _xsltproc xsltproc
+
+# ex: filetype=sh
diff --git a/completions/xvfb-run b/completions/xvfb-run
new file mode 100644
index 0000000..ed2788a
--- /dev/null
+++ b/completions/xvfb-run
@@ -0,0 +1,36 @@
+# bash completion for xvfb-run -*- shell-script -*-
+
+_xvfb_run()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local i
+ for ((i = 1; i <= COMP_CWORD; i++)); do
+ if [[ ${COMP_WORDS[i]} != -* ]]; then
+ _command_offset $i
+ return
+ fi
+ [[ ${COMP_WORDS[i]} == -!(-*)[npsef] ]] && ((i++))
+ done
+
+ case $prev in
+ --help | --server-num | --xauth-protocol | --server-args | -!(-*)[hnps])
+ return
+ ;;
+ --error-file | --auth-file | -!(-*)[ef])
+ _filedir
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _xvfb_run xvfb-run
+
+# ex: filetype=sh
diff --git a/completions/xxd b/completions/xxd
new file mode 100644
index 0000000..a470bb0
--- /dev/null
+++ b/completions/xxd
@@ -0,0 +1,23 @@
+# xxd(1) completion -*- shell-script -*-
+
+_xxd()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h | -help | -c | -cols | -g | -groupsize | -l | -len | -s | -seek | -v | -version)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur"))
+ return
+ fi
+
+ _filedir
+} &&
+ complete -F _xxd xxd
+
+# ex: filetype=sh
diff --git a/completions/xz b/completions/xz
new file mode 100644
index 0000000..73958c5
--- /dev/null
+++ b/completions/xz
@@ -0,0 +1,56 @@
+# xz(1) completion -*- shell-script -*-
+
+_xz()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local xspec="*.@(xz|lzma|txz|tlz)"
+
+ case $prev in
+ --decompress | --list | --test | -!(-*)[dlt]*)
+ xspec="!"$xspec
+ ;;
+ --files | --files0)
+ _filedir
+ return
+ ;;
+ --check | -!(-*)C)
+ COMPREPLY=($(compgen -W 'crc32 crc64 sha256 none' -- "$cur"))
+ return
+ ;;
+ --format | -!(-*)F)
+ COMPREPLY=($(compgen -W 'auto xz lzma raw' -- "$cur"))
+ return
+ ;;
+ --threads | -!(-*)T)
+ COMPREPLY=($(compgen -W "{0..$(_ncpus)}" -- "$cur"))
+ return
+ ;;
+ --memlimit | --memlimit-compress | --memlimit-decompress | --memory | \
+ --suffix | --delta | --lzma1 | --lzma2 | -!(-*)[MS])
+ return
+ ;;
+ --help | --long-help | --version | --info-memory | -!(-*)[hHV])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1" --long-help) {-1..-9}' \
+ -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _tilde "$cur" || return
+
+ local IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -X "$xspec" -- "$cur") $(compgen -d -- "$cur"))
+} &&
+ complete -F _xz xz pxz
+
+# ex: filetype=sh
diff --git a/completions/xzdec b/completions/xzdec
new file mode 100644
index 0000000..993bd2b
--- /dev/null
+++ b/completions/xzdec
@@ -0,0 +1,29 @@
+# xzdec(1) completion -*- shell-script -*-
+
+_xzdec()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ --memory | -!(-*)M)
+ return
+ ;;
+ --help | --version | -!(-*)[hV])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ _filedir xz # no lzma support here as of xz 4.999.9beta
+} &&
+ complete -F _xzdec xzdec
+
+# ex: filetype=sh
diff --git a/completions/ypmatch b/completions/ypmatch
new file mode 100644
index 0000000..13249f0
--- /dev/null
+++ b/completions/ypmatch
@@ -0,0 +1,26 @@
+# bash completion for yp-tools -*- shell-script -*-
+
+_ypmatch()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local map cmd=${1##*/}
+
+ [[ $cmd == ypcat && $cword -gt 1 ]] && return
+ [[ $cmd == ypmatch && $cword -gt 2 ]] && return
+
+ if [[ $cmd == ypmatch && $cword -eq 1 && ${#words[@]} -eq 3 ]]; then
+ map=${words[2]}
+ COMPREPLY=($(compgen -W '$(ypcat $map 2>/dev/null | \
+ cut -d':' -f 1)' -- "$cur"))
+ else
+ [[ $cmd == ypmatch && $cword -ne 2 ]] && return
+ COMPREPLY=($(compgen -W \
+ '$(printf "%s\n" $(ypcat -x 2>/dev/null | \
+ cut -d"\"" -f 2))' -- "$cur"))
+ fi
+} &&
+ complete -F _ypmatch ypmatch ypcat
+
+# ex: filetype=sh
diff --git a/completions/yum-arch b/completions/yum-arch
new file mode 100644
index 0000000..883c77e
--- /dev/null
+++ b/completions/yum-arch
@@ -0,0 +1,16 @@
+# yum-arch(8) completion -*- shell-script -*-
+
+_yum_arch()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '-d -v -vv -n -c -z -s -l -q' -- "$cur"))
+ else
+ _filedir -d
+ fi
+} &&
+ complete -F _yum_arch yum-arch
+
+# ex: filetype=sh
diff --git a/completions/zopfli b/completions/zopfli
new file mode 100644
index 0000000..8c02885
--- /dev/null
+++ b/completions/zopfli
@@ -0,0 +1,29 @@
+# bash completion for zopfli -*- shell-script -*-
+
+_zopfli()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -h)
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W \
+ '$(_parse_help "$1" -h | command sed -e "s/#$//")' -- "$cur"))
+ [[ ${COMPREPLY-} == --i ]] && compopt -o nospace
+ return
+ fi
+
+ _tilde "$cur" || return
+
+ local IFS=$'\n' xspec="*.@(gz|t[ag]z)"
+ compopt -o filenames
+ COMPREPLY=($(compgen -f -X "$xspec" -- "$cur") $(compgen -d -- "$cur"))
+} &&
+ complete -F _zopfli zopfli
+
+# ex: filetype=sh
diff --git a/completions/zopflipng b/completions/zopflipng
new file mode 100644
index 0000000..4526cd9
--- /dev/null
+++ b/completions/zopflipng
@@ -0,0 +1,39 @@
+# bash completion for zopflipng -*- shell-script -*-
+
+_zopflipng()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -h | --help)
+ return
+ ;;
+ --splitting)
+ COMPREPLY=($(compgen -W '{0..3}' -- "$cur"))
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(_parse_help "$1" -h))
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]%:}' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+
+ if [[ ${words[*]} != *\ --prefix=* ]]; then
+ # 2 png args only if --prefix not given
+ local args
+ _count_args
+ ((args < 3)) && _filedir png
+ else
+ # otherwise arbitrary number of png args
+ _filedir png
+ fi
+} &&
+ complete -F _zopflipng zopflipng
+
+# ex: filetype=sh