diff options
Diffstat (limited to '')
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 |