diff options
646 files changed, 7148 insertions, 3254 deletions
@@ -1,3 +1,83 @@ +bash-completion (1.3) + + [ Guillaume Rousse ] + * added pure-perl perldoc completion helper, using work from Aristotle + Pagaltzis (pagaltzis@gmx.de) + * added completions for xfreerdp and iscsiadm + * updated xm subcommands list + + [ David Paleino ] + * Fixed "service" completion, thanks to John Hedges (Debian: #586210) + * Complete on all files for mplayer's -dvd-device + * Fixed typo in openssl completion (Debian: #609552) + + [ Ville Skyttä ] + * Activate hping2 completion also for hping and hping3. + * Add badblocks, compgen, crontab, dumpe2fs, e2freefrag, e2label, ether-wake, + filefrag, gendiff, growisofs, iftop, ip (Debian: #600617), javaws, kid3, + lrzip, lsof, mktemp, portecle, POSIX sh, sha{,224,256,384,512}sum, + sysbench, tune2fs, xmodmap, and xrdb completions. + * Add *.gif (Alioth: #312512), *.m2t (Alioth: #312770), *.3gpp, *.3gpp2, + *.awb, and *.iso (Alioth: #311420) to mplayer filename completions. + * Add "short" tarball extensions to unxz, unlzma etc completions. + * Improve /etc/init.d/*, ipmitool, jar, java, javadoc, man, mencoder, mkdir, + mplayer, pack200, povray, python, rpmbuild, sqlite3, tar, wodim, and + general help parsing completions. + * Fix p4 and povray completions (Alioth: #312625). + * Add *.xsd, *.xsl, *.rng, *.wsdl, and *.jnlp to xmllint and xmlwf filename + completions, and *.gz versions of all of the supported ones for xmllint. + * Recognize rpm query mode based on the --file, --group, --package, and + --all long options (RedHat: #630328). + * Improve rpm query option completions. + * Drop bad kompare filename completion (Alioth: #312708). + * Make _filedir and _filedir_xspec complete uppercase versions of their + filename extension arguments in addition to exact case matches. + * IPv6 known hosts completion fixes (Alioth: #312695, RedHat: #630658). + * Fixes to completions for filenames containing tabs (RedHat: #629518). + * Add *.iso (Alioth: #311420), *.m2t and *.m2ts (Alioth: #312770) to + xine-based player filename completions. + * Add /etc/ethers to MAC address completion sources. + * Add *.gem and *.spkg to tar filename completions. + * Complete known hosts from avahi-browse only if $COMP_KNOWN_HOSTS_WITH_AVAHI + is non-empty (Alioth: #312691, RedHat: #630326). + * Improve relevance of many user/group completions, depending on context. + * Remove most "-o filenames" options to "complete", turn "-o filenames" on + dynamically when needed instead. + * Add/improve various autotools completions. + * Add *.apk to unzip and jar filename completions. + * Do not load bash_completion in profile.d script if progcomp is not enabled. + * Ignore muttrc source entries that are not files (Alioth: #312881). + * Re-enable postgresql database and user completion (Alioth: #312914, + Ubuntu: #164772). + * Add *.fdf to various PDF viewer completions. + + [ Freddy Vulto ] + * Added _tilde(), fix ~username completion (Alioth: #312613, Debian: #587095) + * Speed up `compopt' availability detection + * Fix _filedir `-o filenames' detection on bash-3 (Alioth: #312646) + * Fix __reassemble_comp_words_by_ref (Alioth #312740) + + [ Anton Khirnov ] + * Improve mplayer and mencoder completions. + + [ Paul Walmsley ] + * Add *.webm to mplayer file completions (Debian: #588079). + + [ Miklos Vajna ] + * Add *.amr to mplayer file completions (Alioth: #312634). + + [ Andrej Gelenberg ] + * Add *.part (partially downloaded) to mplayer and xine-based player + completions (Alioth: #312657). + + [ Stephen Gildea ] + * Fix false posives for non-option words in _parse_help (Alioth: #312750). + + [ Andrey G. Grozin ] + * Add *.fb2 to okular filename completions. + + -- David Paleino <d.paleino@gmail.com> Sun, 06 Feb 2011 19:03:46 +0100 + bash-completion (1.2) [ David Paleino ] diff --git a/Makefile.am b/Makefile.am index 93574a71..dcecc32c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,172 +1,7 @@ -SUBDIRS = test +SUBDIRS = completions test sysconf_DATA = bash_completion -bashcompdir = $(sysconfdir)/bash_completion.d -bashcomp_DATA = contrib/abook \ - contrib/ant \ - contrib/apache2ctl \ - contrib/apt \ - contrib/apt-build \ - contrib/aptitude \ - contrib/aspell \ - contrib/autorpm \ - contrib/bash-builtins \ - contrib/bind-utils \ - contrib/bitkeeper \ - contrib/bittorrent \ - contrib/bluez \ - contrib/brctl \ - contrib/bzip2 \ - contrib/cardctl \ - contrib/cfengine \ - contrib/chkconfig \ - contrib/chsh \ - contrib/cksfv \ - contrib/clisp \ - contrib/configure \ - contrib/coreutils \ - contrib/cowsay \ - contrib/cpan2dist \ - contrib/cpio \ - contrib/cups \ - contrib/cryptsetup \ - contrib/cvs \ - contrib/cvsps \ - contrib/dd \ - contrib/dhclient \ - contrib/dict \ - contrib/dpkg \ - contrib/dselect \ - contrib/dsniff \ - contrib/findutils \ - contrib/freeciv \ - contrib/fuse \ - contrib/gcc \ - contrib/gcl \ - contrib/gdb \ - contrib/genisoimage \ - contrib/getent \ - contrib/gkrellm \ - contrib/gnatmake \ - contrib/gpg \ - contrib/gpg2 \ - contrib/gzip \ - contrib/heimdal \ - contrib/hping2 \ - contrib/iconv \ - contrib/ifupdown \ - contrib/imagemagick \ - contrib/info \ - contrib/iptables \ - contrib/ipmitool \ - contrib/ipsec \ - contrib/ipv6calc \ - contrib/isql \ - contrib/jar \ - contrib/java \ - contrib/k3b \ - contrib/kldload \ - contrib/larch \ - contrib/ldapvi \ - contrib/lftp \ - contrib/lilo \ - contrib/links \ - contrib/lintian \ - contrib/lisp \ - contrib/lvm \ - contrib/lzma \ - contrib/lzop \ - contrib/mailman \ - contrib/make \ - contrib/man \ - contrib/mc \ - contrib/mcrypt \ - contrib/mdadm \ - contrib/medusa \ - contrib/minicom \ - contrib/mkinitrd \ - contrib/module-init-tools \ - contrib/monodevelop \ - contrib/mount \ - contrib/mplayer \ - contrib/msynctool \ - contrib/mtx \ - contrib/munin-node \ - contrib/mutt \ - contrib/mysqladmin \ - contrib/ncftp \ - contrib/net-tools \ - contrib/nmap \ - contrib/ntpdate \ - contrib/openldap \ - contrib/openssl \ - contrib/p4 \ - contrib/perl \ - contrib/pine \ - contrib/pkg-config \ - contrib/pkg_install \ - contrib/pkgtools \ - contrib/pm-utils \ - contrib/portupgrade \ - contrib/postfix \ - contrib/postgresql \ - contrib/povray \ - contrib/procps \ - contrib/python \ - contrib/qdbus \ - contrib/qemu \ - contrib/quota-tools \ - contrib/rcs \ - contrib/rdesktop \ - contrib/reportbug \ - contrib/resolvconf \ - contrib/rfkill \ - contrib/ri \ - contrib/rpcdebug \ - contrib/rpm \ - contrib/rpmcheck \ - contrib/rrdtool \ - contrib/rsync \ - contrib/rtcwake \ - contrib/samba \ - contrib/sbcl \ - contrib/screen \ - contrib/service \ - contrib/shadow \ - contrib/sitecopy \ - contrib/smartctl \ - contrib/snownews \ - contrib/ssh \ - contrib/sshfs \ - contrib/strace \ - contrib/svk \ - contrib/sysctl \ - contrib/sysv-rc \ - contrib/tar \ - contrib/tcpdump \ - contrib/unace \ - contrib/unrar \ - contrib/update-alternatives \ - contrib/util-linux \ - contrib/vncviewer \ - contrib/vpnc \ - contrib/wireless-tools \ - contrib/wodim \ - contrib/wol \ - contrib/wtf \ - contrib/wvdial \ - contrib/xhost \ - contrib/xm \ - contrib/xmllint \ - contrib/xmlwf \ - contrib/xmms \ - contrib/xrandr \ - contrib/xsltproc \ - contrib/xz \ - contrib/yp-tools \ - contrib/yum-arch - profiledir = $(sysconfdir)/profile.d profile_DATA = bash_completion.sh @@ -175,6 +10,4 @@ bash_completion.sh: bash_completion.sh.in Makefile CLEANFILES = bash_completion.sh -EXTRA_DIST = CHANGES $(sysconf_DATA) $(bashcomp_DATA) bash_completion.sh.in \ - contrib/_mock contrib/_modules contrib/_subversion contrib/_yum \ - contrib/_yum-utils +EXTRA_DIST = CHANGES $(sysconf_DATA) bash_completion.sh.in diff --git a/Makefile.in b/Makefile.in index bbe6d5f3..27ad8d02 100644 --- a/Makefile.in +++ b/Makefile.in @@ -75,9 +75,8 @@ am__nobase_list = $(am__nobase_strip_setup); \ am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(bashcompdir)" "$(DESTDIR)$(profiledir)" \ - "$(DESTDIR)$(sysconfdir)" -DATA = $(bashcomp_DATA) $(profile_DATA) $(sysconf_DATA) +am__installdirs = "$(DESTDIR)$(profiledir)" "$(DESTDIR)$(sysconfdir)" +DATA = $(profile_DATA) $(sysconf_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ @@ -85,10 +84,6 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags -DEJATOOL = $(PACKAGE) -RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir -EXPECT = expect -RUNTEST = runtest DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) @@ -122,8 +117,8 @@ am__relativize = \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.bz2 distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ @@ -166,6 +161,7 @@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ +bashcompdir = @bashcompdir@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ @@ -174,6 +170,7 @@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +helpersdir = @helpersdir@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ @@ -198,180 +195,12 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = test +SUBDIRS = completions test sysconf_DATA = bash_completion -bashcompdir = $(sysconfdir)/bash_completion.d -bashcomp_DATA = contrib/abook \ - contrib/ant \ - contrib/apache2ctl \ - contrib/apt \ - contrib/apt-build \ - contrib/aptitude \ - contrib/aspell \ - contrib/autorpm \ - contrib/bash-builtins \ - contrib/bind-utils \ - contrib/bitkeeper \ - contrib/bittorrent \ - contrib/bluez \ - contrib/brctl \ - contrib/bzip2 \ - contrib/cardctl \ - contrib/cfengine \ - contrib/chkconfig \ - contrib/chsh \ - contrib/cksfv \ - contrib/clisp \ - contrib/configure \ - contrib/coreutils \ - contrib/cowsay \ - contrib/cpan2dist \ - contrib/cpio \ - contrib/cups \ - contrib/cryptsetup \ - contrib/cvs \ - contrib/cvsps \ - contrib/dd \ - contrib/dhclient \ - contrib/dict \ - contrib/dpkg \ - contrib/dselect \ - contrib/dsniff \ - contrib/findutils \ - contrib/freeciv \ - contrib/fuse \ - contrib/gcc \ - contrib/gcl \ - contrib/gdb \ - contrib/genisoimage \ - contrib/getent \ - contrib/gkrellm \ - contrib/gnatmake \ - contrib/gpg \ - contrib/gpg2 \ - contrib/gzip \ - contrib/heimdal \ - contrib/hping2 \ - contrib/iconv \ - contrib/ifupdown \ - contrib/imagemagick \ - contrib/info \ - contrib/iptables \ - contrib/ipmitool \ - contrib/ipsec \ - contrib/ipv6calc \ - contrib/isql \ - contrib/jar \ - contrib/java \ - contrib/k3b \ - contrib/kldload \ - contrib/larch \ - contrib/ldapvi \ - contrib/lftp \ - contrib/lilo \ - contrib/links \ - contrib/lintian \ - contrib/lisp \ - contrib/lvm \ - contrib/lzma \ - contrib/lzop \ - contrib/mailman \ - contrib/make \ - contrib/man \ - contrib/mc \ - contrib/mcrypt \ - contrib/mdadm \ - contrib/medusa \ - contrib/minicom \ - contrib/mkinitrd \ - contrib/module-init-tools \ - contrib/monodevelop \ - contrib/mount \ - contrib/mplayer \ - contrib/msynctool \ - contrib/mtx \ - contrib/munin-node \ - contrib/mutt \ - contrib/mysqladmin \ - contrib/ncftp \ - contrib/net-tools \ - contrib/nmap \ - contrib/ntpdate \ - contrib/openldap \ - contrib/openssl \ - contrib/p4 \ - contrib/perl \ - contrib/pine \ - contrib/pkg-config \ - contrib/pkg_install \ - contrib/pkgtools \ - contrib/pm-utils \ - contrib/portupgrade \ - contrib/postfix \ - contrib/postgresql \ - contrib/povray \ - contrib/procps \ - contrib/python \ - contrib/qdbus \ - contrib/qemu \ - contrib/quota-tools \ - contrib/rcs \ - contrib/rdesktop \ - contrib/reportbug \ - contrib/resolvconf \ - contrib/rfkill \ - contrib/ri \ - contrib/rpcdebug \ - contrib/rpm \ - contrib/rpmcheck \ - contrib/rrdtool \ - contrib/rsync \ - contrib/rtcwake \ - contrib/samba \ - contrib/sbcl \ - contrib/screen \ - contrib/service \ - contrib/shadow \ - contrib/sitecopy \ - contrib/smartctl \ - contrib/snownews \ - contrib/ssh \ - contrib/sshfs \ - contrib/strace \ - contrib/svk \ - contrib/sysctl \ - contrib/sysv-rc \ - contrib/tar \ - contrib/tcpdump \ - contrib/unace \ - contrib/unrar \ - contrib/update-alternatives \ - contrib/util-linux \ - contrib/vncviewer \ - contrib/vpnc \ - contrib/wireless-tools \ - contrib/wodim \ - contrib/wol \ - contrib/wtf \ - contrib/wvdial \ - contrib/xhost \ - contrib/xm \ - contrib/xmllint \ - contrib/xmlwf \ - contrib/xmms \ - contrib/xrandr \ - contrib/xsltproc \ - contrib/xz \ - contrib/yp-tools \ - contrib/yum-arch - profiledir = $(sysconfdir)/profile.d profile_DATA = bash_completion.sh CLEANFILES = bash_completion.sh -EXTRA_DIST = CHANGES $(sysconf_DATA) $(bashcomp_DATA) bash_completion.sh.in \ - contrib/_mock contrib/_modules contrib/_subversion contrib/_yum \ - contrib/_yum-utils - +EXTRA_DIST = CHANGES $(sysconf_DATA) bash_completion.sh.in all: all-recursive .SUFFIXES: @@ -409,26 +238,6 @@ $(top_srcdir)/configure: $(am__configure_deps) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): -install-bashcompDATA: $(bashcomp_DATA) - @$(NORMAL_INSTALL) - test -z "$(bashcompdir)" || $(MKDIR_P) "$(DESTDIR)$(bashcompdir)" - @list='$(bashcomp_DATA)'; test -n "$(bashcompdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bashcompdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(bashcompdir)" || exit $$?; \ - done - -uninstall-bashcompDATA: - @$(NORMAL_UNINSTALL) - @list='$(bashcomp_DATA)'; test -n "$(bashcompdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bashcompdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bashcompdir)" && rm -f $$files install-profileDATA: $(profile_DATA) @$(NORMAL_INSTALL) test -z "$(profiledir)" || $(MKDIR_P) "$(DESTDIR)$(profiledir)" @@ -605,38 +414,6 @@ GTAGS: distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -check-DEJAGNU: site.exp - srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \ - EXPECT=$(EXPECT); export EXPECT; \ - runtest=$(RUNTEST); \ - if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ - exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \ - if $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \ - then :; else exit_status=1; fi; \ - done; \ - else echo "WARNING: could not find \`runtest'" 1>&2; :;\ - fi; \ - exit $$exit_status -site.exp: Makefile - @echo 'Making a new site.exp file...' - @echo '## these variables are automatically generated by make ##' >site.tmp - @echo '# Do not edit here. If you wish to override these values' >>site.tmp - @echo '# edit the last section' >>site.tmp - @echo 'set srcdir $(srcdir)' >>site.tmp - @echo "set objdir `pwd`" >>site.tmp - @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp - @test ! -f site.exp || \ - sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp - @-rm -f site.bak - @test ! -f site.exp || mv site.exp site.bak - @mv site.tmp site.exp - -distclean-DEJAGNU: - -rm -f site.exp site.bak - -l='$(DEJATOOL)'; for tool in $$l; do \ - rm -f $$tool.sum $$tool.log; \ - done - distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @@ -733,7 +510,6 @@ dist-zip: distdir $(am__remove_distdir) dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) @@ -813,12 +589,11 @@ distcleancheck: distclean $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: - for dir in "$(DESTDIR)$(bashcompdir)" "$(DESTDIR)$(profiledir)" "$(DESTDIR)$(sysconfdir)"; do \ + for dir in "$(DESTDIR)$(profiledir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive @@ -854,8 +629,7 @@ clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile -distclean-am: clean-am distclean-DEJAGNU distclean-generic \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -869,7 +643,7 @@ info: info-recursive info-am: -install-data-am: install-bashcompDATA install-profileDATA +install-data-am: install-profileDATA install-dvi: install-dvi-recursive @@ -915,28 +689,26 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-bashcompDATA uninstall-profileDATA \ - uninstall-sysconfDATA +uninstall-am: uninstall-profileDATA uninstall-sysconfDATA -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ - ctags-recursive install-am install-strip tags-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-DEJAGNU check-am clean \ - clean-generic ctags ctags-recursive dist dist-all dist-bzip2 \ - dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ - distcheck distclean distclean-DEJAGNU distclean-generic \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-bashcompDATA install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-profileDATA install-ps \ - install-ps-am install-strip install-sysconfDATA installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ - pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ - uninstall-bashcompDATA uninstall-profileDATA \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-generic distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-profileDATA \ + install-ps install-ps-am install-strip install-sysconfDATA \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-profileDATA \ uninstall-sysconfDATA @@ -15,17 +15,20 @@ fi (if you happen to have *only* bash >= 3.2 installed, see further if not) If you don't have the package readily available for your distribution, or -you simply don't want to do this, put the bash_completion file somewhere -on your system and source it from either /etc/bashrc or ~/.bashrc, as -explained above. - -A more elaborate way that takes care of not loading on old, unsupported -bash versions as well as some other conditions is included in the bash -completion package as bash_completion.sh. If your system has the -/etc/profile.d directory and loads all files from it automatically, -you may place the file in it. If not, place the file somewhere on your -system and source it from /etc/bashrc or ~/.bashrc, or copy its contents -to one of those files. +you simply don't want to use one, you can install bash completion using the +standard commands for GNU autotools packages: + +./configure +make +make check # optional, requires dejagnu and tcllib +make install # as root + +These commands installs the completions and helpers, as well as a +profile.d script that loads bash_completion where appropriate. If +your system does not use the profile.d directory (usually below /etc) +mechanism, i.e. does not automatically source shell scripts in it, you +can source the $sysconfdir/profile.d/bash_completion.sh script in +/etc/bashrc or ~/.bashrc. If you're using MacOS X, /etc/bashrc is apparently not sourced at all. In that case, you should put the bash_completion file in /sw/etc and add @@ -13,8 +13,8 @@ m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, -[m4_warning([this file was generated for autoconf 2.65. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, +[m4_warning([this file was generated for autoconf 2.67. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) diff --git a/bash_completion b/bash_completion index e7a4b6ec..66019379 100644 --- a/bash_completion +++ b/bash_completion @@ -2,7 +2,7 @@ # bash_completion - programmable completion functions for bash 3.2+ # # Copyright © 2006-2008, Ian Macdonald <ian@caliban.org> -# © 2009-2010, Bash Completion Maintainers +# © 2009-2011, Bash Completion Maintainers # <bash-completion-devel@lists.alioth.debian.org> # # This program is free software; you can redistribute it and/or modify @@ -23,7 +23,7 @@ # # http://bash-completion.alioth.debian.org/ # -# RELEASE: 1.1 +# RELEASE: 1.3 if [[ $- == *v* ]]; then BASH_COMPLETION_ORIGINAL_V_VALUE="-v" @@ -70,41 +70,42 @@ complete -d pushd # START exclude -- do NOT remove this line # bzcmp, bzdiff, bz*grep, bzless, bzmore intentionally not here, see Debian: #455510 complete -f -X '!*.?(t)bz?(2)' bunzip2 bzcat pbunzip2 pbzcat -complete -f -X '!*.@(zip|ZIP|[ejw]ar|[EJW]AR|exe|EXE|pk3|wsz|zargo|xpi|sxw|o[tx]t|od[fgpst]|epub)' unzip zipinfo +complete -f -X '!*.@(zip|[ejw]ar|exe|pk3|wsz|zargo|xpi|sxw|o[tx]t|od[fgpst]|epub|apk)' unzip zipinfo complete -f -X '*.Z' compress znew # zcmp, zdiff, z*grep, zless, zmore intentionally not here, see Debian: #455510 complete -f -X '!*.@(Z|[gGd]z|t[ag]z)' gunzip zcat unpigz complete -f -X '!*.Z' uncompress # lzcmp, lzdiff intentionally not here, see Debian: #455510 -complete -f -X '!*.lzma' lzcat lzegrep lzfgrep lzgrep lzless lzmore unlzma -complete -f -X '!*.@(xz|lzma)' unxz xzcat -complete -f -X '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX)' ee -complete -f -X '!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|GIF|JPG|JP?(E)G|TIF?(F)|PNG|P[BGP]M|BMP|X[BP]M|RLE|RGB|PCX|FITS|PM)' xv qiv +complete -f -X '!*.@(tlz|lzma)' lzcat lzegrep lzfgrep lzgrep lzless lzmore unlzma +complete -f -X '!*.@(?(t)xz|tlz|lzma)' unxz xzcat +complete -f -X '!*.lrz' lrunzip +complete -f -X '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)' ee +complete -f -X '!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm)' xv qiv complete -f -X '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))' gv ggv kghostview -complete -f -X '!*.@(dvi|DVI)?(.@(gz|Z|bz2))' xdvi -complete -f -X '!*.@(dvi|DVI)?(.@(gz|Z|bz2))' kdvi -complete -f -X '!*.@(dvi|DVI)' dvips dviselect dvitype dvipdf advi dvipdfm dvipdfmx -complete -f -X '!*.@(pdf|PDF)' acroread gpdf xpdf -complete -f -X '!*.@(?(e)ps|?(E)PS|pdf|PDF)' kpdf -complete -f -X '!*.@(@(?(e)ps|?(E)PS|pdf|PDF|dvi|DVI)?(.gz|.GZ|.bz2|.BZ2)|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|fdf|FDF)' evince -complete -f -X '!*.@(okular|@(?(e|x)ps|?(E|X)PS|pdf|PDF|dvi|DVI|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|epub|EPUB|odt|ODT|fb|FB|mobi|MOBI|g3|G3|chm|CHM|fdf|FDF)?(.?(gz|GZ|bz2|BZ2)))' okular -complete -f -X '!*.@(?(e)ps|?(E)PS|pdf|PDF)' ps2pdf ps2pdf12 ps2pdf13 ps2pdf14 ps2pdfwr +complete -f -X '!*.@(dvi|DVI)?(.@(gz|Z|bz2))' xdvi kdvi +complete -f -X '!*.dvi' dvips dviselect dvitype dvipdf advi dvipdfm dvipdfmx +complete -f -X '!*.[pf]df' acroread gpdf xpdf +complete -f -X '!*.@(?(e)ps|pdf)' kpdf +complete -f -X '!*.@(@(?(e)ps|?(E)PS|[pf]df|[PF]DF|dvi|DVI)?(.gz|.GZ|.bz2|.BZ2)|cb[rz]|djv?(u)|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|fdf)' evince +complete -f -X '!*.@(okular|@(?(e|x)ps|?(E|X)PS|pdf|PDF|dvi|DVI|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|epub|EPUB|odt|ODT|fb?(2)|FB?(2)|mobi|MOBI|g3|G3|chm|CHM|fdf|FDF)?(.?(gz|GZ|bz2|BZ2)))' okular +complete -f -X '!*.@(?(e)ps|pdf)' ps2pdf ps2pdf12 ps2pdf13 ps2pdf14 ps2pdfwr complete -f -X '!*.texi*' makeinfo texi2html -complete -f -X '!*.@(?(la)tex|?(LA)TEX|texi|TEXI|dtx|DTX|ins|INS|ltx|LTX)' tex latex slitex jadetex pdfjadetex pdftex pdflatex texi2dvi -complete -f -X '!*.@(mp3|MP3)' mpg123 mpg321 madplay -complete -f -X '!*@(.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))' xine aaxine fbxine kaffeine dragon +complete -f -X '!*.@(?(la)tex|texi|dtx|ins|ltx)' tex latex slitex jadetex pdfjadetex pdftex pdflatex texi2dvi +complete -f -X '!*.mp3' mpg123 mpg321 madplay +complete -f -X '!*@(.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.part)' xine aaxine fbxine +complete -f -X '!*@(.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.part)' kaffeine dragon complete -f -X '!*.@(avi|asf|wmv)' aviplay complete -f -X '!*.@(rm?(j)|ra?(m)|smi?(l))' realplay complete -f -X '!*.@(mpg|mpeg|avi|mov|qt)' xanim -complete -f -X '!*.@(ogg|OGG|m3u|flac|spx)' ogg123 -complete -f -X '!*.@(mp3|MP3|ogg|OGG|pls|m3u)' gqmpeg freeamp +complete -f -X '!*.@(ogg|m3u|flac|spx)' ogg123 +complete -f -X '!*.@(mp3|ogg|pls|m3u)' gqmpeg freeamp complete -f -X '!*.fig' xfig -complete -f -X '!*.@(mid?(i)|MID?(I)|cmf|CMF)' playmidi -complete -f -X '!*.@(mid?(i)|MID?(I)|rmi|RMI|rcp|RCP|[gr]36|[GR]36|g18|G18|mod|MOD|xm|XM|it|IT|x3m|X3M|s[3t]m|S[3T]M|kar|KAR)' timidity -complete -f -X '!*.@(m[eo]d|M[EO]D|s[3t]m|S[3T]M|xm|XM|it|IT)' modplugplay modplug123 -complete -f -X '*.@(o|so|so.!(conf)|a|rpm|gif|GIF|jp?(e)g|JP?(E)G|mp3|MP3|mp?(e)g|MPG|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite +complete -f -X '!*.@(mid?(i)|cmf)' playmidi +complete -f -X '!*.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)' timidity +complete -f -X '!*.@(m[eo]d|s[3t]m|xm|it)' modplugplay modplug123 +complete -f -X '*.@(o|so|so.!(conf)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite complete -f -X '!*.@([eE][xX][eE]?(.[sS][oO])|[cC][oO][mM]|[sS][cC][rR])' wine -complete -f -X '!*.@(zip|ZIP|z|Z|gz|GZ|tgz|TGZ)' bzme +complete -f -X '!*.@(zip|z|gz|tgz)' bzme # konqueror not here on purpose, it's more than a web/html browser complete -f -X '!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))' netscape mozilla lynx opera galeon dillo elinks amaya firefox mozilla-firefox iceweasel google-chrome chromium-browser epiphany complete -f -X '!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|odt|ott|odm)' oowriter @@ -113,22 +114,22 @@ complete -f -X '!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|ods|ots)' oocalc complete -f -X '!*.@(sxd|std|sda|sdd|odg|otg)' oodraw complete -f -X '!*.@(sxm|smf|mml|odf)' oomath complete -f -X '!*.odb' oobase -complete -f -X '!*.rpm' rpm2cpio -complete -f -X '!*.s@(qlite?(3)|?(3)db)' sqlite3 +complete -f -X '!*.[rs]pm' rpm2cpio complete -f -X '!*.aux' bibtex complete -f -X '!*.po' poedit gtranslator kbabel lokalize complete -f -X '!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])' harbour gharbour hbpp complete -f -X '!*.[Hh][Rr][Bb]' hbrun complete -f -X '!*.ly' lilypond ly2dvi complete -f -X '!*.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))' cdiff -complete -f -X '!*.@(dif?(f)|?(d)patch)' kompare complete -f -X '!*.lyx' lyx +complete -f -X '!@(*.@(ks|jks|jceks|p12|pfx|bks|ubr|gkr|cer|crt|cert|p7b|pkipath|pem|p10|csr|crl)|cacerts)' portecle +complete -f -X '!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)' kid3 kid3-qt # FINISH exclude -- do not remove this line # start of section containing compspecs that can be handled within bash # user commands see only users -complete -u su passwd write chfn groups slay w sux +complete -u su write chfn groups slay w sux runuser # bg completes with stopped jobs complete -A stopped -P '"%' -S '"' bg @@ -310,7 +311,7 @@ __reassemble_comp_words_by_ref() { ref="$2[$j]" eval $2[$j]=\${!ref}\${COMP_WORDS[i]} # Indicate new cword - [ $i = $COMP_CWORD ] && [[ ${COMP_WORDS[i]} ]] && eval $3=$j + [[ $i == $COMP_CWORD ]] && eval $3=$j done else # No, list of word completions separators hasn't changed; @@ -464,7 +465,7 @@ _get_cword() # return previous word offset by $2 if [[ ${2//[^0-9]/} ]]; then printf "%s" "${words[cword-$2]}" - elif [[ "${#words[cword]}" -eq 0 ]] || [[ "$COMP_POINT" == "${#COMP_LINE}" ]]; then + elif [[ "${#words[cword]}" -eq 0 || "$COMP_POINT" == "${#COMP_LINE}" ]]; then printf "%s" "${words[cword]}" else local i @@ -568,16 +569,32 @@ __ltrim_colon_completions() { # $ compgen -f "a\\\\\'b/" # Good (bash-3) # a\'b/c # -# See also: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00155.html +# On bash-3, special characters need to be escaped extra. This is +# unless the first character is a single quote ('). If the single +# quote appears further down the string, bash default completion also +# fails, e.g.: +# +# $ ls 'a&b/' +# f +# $ foo 'a&b/<TAB> # Becomes: foo 'a&b/f' +# $ foo a'&b/<TAB> # Nothing happens +# +# See also: +# - http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00155.html +# - http://www.mail-archive.com/bash-completion-devel@lists.alioth.\ +# debian.org/msg01944.html # @param $1 Argument to quote # @param $2 Name of variable to return result to _quote_readline_by_ref() { if [[ ${1:0:1} == "'" ]]; then - # Quote word, leaving out first character - printf -v $2 %q "${1:1}" - if [[ ${BASH_VERSINFO[0]} -le 3 ]]; then - # Double-quote word on bash-3 + if [[ ${BASH_VERSINFO[0]} -ge 4 ]]; then + # Leave out first character + printf -v $2 %s "${1:1}" + else + # Quote word, leaving out first character + printf -v $2 %q "${1:1}" + # Double-quote word (bash-3) printf -v $2 %q ${!2} fi elif [[ ${BASH_VERSINFO[0]} -le 3 && ${1:0:1} == '"' ]]; then @@ -593,16 +610,30 @@ _quote_readline_by_ref() } # _quote_readline_by_ref() +# This function turns on "-o filenames" behavior dynamically. It is present +# for bash < 4 reasons. See http://bugs.debian.org/272660#64 for info about +# the bash < 4 compgen hack. +_compopt_o_filenames() +{ + # We test for compopt availability first because directly invoking it on + # bash < 4 at this point may cause terminal echo to be turned off for some + # reason, see https://bugzilla.redhat.com/653669 for more info. + type compopt &>/dev/null && compopt -o filenames 2>/dev/null || \ + compgen -f /non-existing-dir/ >/dev/null +} + + # This function performs file and directory completion. It's better than # simply using 'compgen -f', because it honours spaces in filenames. # @param $1 If `-d', complete only on directories. Otherwise filter/pick only -# completions with `.$1' as file extension. +# completions with `.$1' and the uppercase version of it as file +# extension. # _filedir() { - local i IFS=$'\t\n' xspec + local i IFS=$'\n' xspec - __expand_tilde_by_ref cur + _tilde "$cur" || return 0 local -a toks local quoted tmp @@ -621,68 +652,14 @@ _filedir() } )) - # On bash-3, special characters need to be escaped extra. This is - # unless the first character is a single quote ('). If the single - # quote appears further down the string, bash default completion also - # fails, e.g.: - # - # $ ls 'a&b/' - # f - # $ foo 'a&b/<TAB> # Becomes: foo 'a&b/f' - # $ foo a'&b/<TAB> # Nothing happens - # if [[ "$1" != -d ]]; then - xspec=${1:+"!*.$1"} - if [[ ${cur:0:1} == "'" && ${BASH_VERSINFO[0]} -ge 4 ]]; then - toks=( ${toks[@]-} $( - eval compgen -f -X \"\$xspec\" -- $quoted - ) ) - else - toks=( ${toks[@]-} $( - compgen -f -X "$xspec" -- $quoted - ) ) - fi - if [ ${#toks[@]} -ne 0 ]; then - # If `compopt' is available, set `-o filenames' - compopt &>/dev/null && compopt -o filenames || - # No, `compopt' isn't available; - # Is `-o filenames' set? - [[ ( - ${COMP_WORDS[0]} && - "$(complete -p ${COMP_WORDS[0]})" == *"-o filenames"* - ) ]] || { - # No, `-o filenames' isn't set; - # Emulate `-o filenames' - # NOTE: A side-effect of emulating `-o filenames' is that - # backslash escape characters are visible within the list - # of presented completions, e.g. the completions look - # like: - # - # $ foo a<TAB> - # a\ b/ a\$b/ - # - # whereas with `-o filenames' active the completions look - # like: - # - # $ ls a<TAB> - # a b/ a$b/ - # - for ((i=0; i < ${#toks[@]}; i++)); do - # If directory exists, append slash (/) - if [[ ${cur:0:1} != "'" ]]; then - [[ -d ${toks[i]} ]] && toks[i]="${toks[i]}"/ - if [[ ${cur:0:1} == '"' ]]; then - toks[i]=${toks[i]//\\/\\\\} - toks[i]=${toks[i]//\"/\\\"} - toks[i]=${toks[i]//\$/\\\$} - else - toks[i]=$(printf %q ${toks[i]}) - fi - fi - done - } - fi + # Munge xspec to contain uppercase version too + [[ ${BASH_VERSINFO[0]} -ge 4 ]] && \ + xspec=${1:+"!*.@($1|${1^^})"} || \ + xspec=${1:+"!*.@($1|$(printf %s $1 | tr '[:lower:]' '[:upper:]'))"} + toks=( ${toks[@]-} $( compgen -f -X "$xspec" -- $quoted) ) fi + [ ${#toks[@]} -ne 0 ] && _compopt_o_filenames COMPREPLY=( "${COMPREPLY[@]}" "${toks[@]}" ) } # _filedir() @@ -705,13 +682,13 @@ _split_longopt() return 1 } -# This function tries to parse the output of $command --help +# This function tries to parse the help output of the given command. +# @param $1 command +# @param $2 command options (default: --help) # _parse_help() { - local cmd - cmd=$1 - $cmd --help 2>&1 | command grep -- "^[[:space:]]*-" | tr "," " " | \ - awk '{print $1; if ($2 ~ /-.*/) { print $2 } }' | sed -e "s:=.*::g" + $1 ${2:---help} 2>&1 | sed -e '/^[[:space:]]*-/!d' -e 's|[,/]| |g' | \ + awk '{ print $1; if ($2 ~ /^-/) { print $2 } }' | sed -e 's|[<=].*||' } # This function completes on signal names @@ -746,6 +723,10 @@ _mac_addresses() "s/.*[[:space:]]\($re\)[[:space:]].*/\1/p" -ne \ "s/.*[[:space:]]\($re\)[[:space:]]*$/\1/p" ) ) + # /etc/ethers + COMPREPLY=( "${COMPREPLY[@]}" $( sed -ne \ + "s/^[[:space:]]*\($re\)[[:space:]].*/\1/p" /etc/ethers 2>/dev/null ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- "$cur" ) ) __ltrim_colon_completions "$cur" } @@ -805,7 +786,27 @@ _available_interfaces() } +# Perform tilde (~) completion +# @return True (0) if completion needs further processing, +# False (> 0) if tilde is followed by a valid username, completions +# are put in COMPREPLY and no further processing is necessary. +_tilde() { + local result=0 + # Does $1 start with tilde (~) and doesn't contain slash (/)? + if [[ ${1:0:1} == "~" && $1 == ${1//\/} ]]; then + _compopt_o_filenames + # Try generate username completions + COMPREPLY=( $( compgen -P '~' -u "${1#\~}" ) ) + result=${#COMPREPLY[@]} + fi + return $result +} + + # Expand variable starting with tilde (~) +# We want to expand ~foo/... to /home/foo/... to avoid problems when +# word-to-complete starting with a tilde is fed to commands and ending up +# quoted instead of expanded. # Only the first portion of the variable from the tilde up to the first slash # (~../) is expanded. The remainder of the variable, containing for example # a dollar sign variable ($) or asterisk (*) is not expanded. @@ -834,7 +835,7 @@ __expand_tilde_by_ref() { # becomes "~a". Double quotes allow eval. # 2: Remove * before the first slash (/), i.e. "~a/b" # becomes "b". Single quotes prevent eval. - # +-----1----+ +---2----+ + # +-----1----+ +---2----+ eval $1="${!1/%\/*}"/'${!1#*/}' else # No, $1 doesn't contain slash @@ -982,10 +983,10 @@ _installed_modules() # The : must be added manually; it will only complete usernames initially. # The legacy user.group format is not supported. # -# It assumes compopt -o filenames; but doesn't touch it. +# @param $1 If -u, only return users/groups the user has access to in +# context of current completion. _usergroup() { - local IFS=$'\n' if [[ $cur = *\\\\* || $cur = *:*:* ]]; then # Give up early on if something seems horribly wrong. return @@ -996,19 +997,61 @@ _usergroup() local prefix prefix=${cur%%*([^:])} prefix=${prefix//\\} - COMPREPLY=( $( compgen -P "$prefix" -g -- "${cur#*[:]}" ) ) + local mycur="${cur#*[:]}" + if [[ $1 == -u ]]; then + _allowed_groups "$mycur" + else + local IFS=$'\n' + COMPREPLY=( $( compgen -g -- "$mycur" ) ) + fi + COMPREPLY=( $( compgen -P "$prefix" -W "${COMPREPLY[@]}" ) ) elif [[ $cur = *:* ]]; then # Completing group after 'user:gr<TAB>'. # Reply with a list of unprefixed groups since readline with split on : # and only replace the 'gr' part - COMPREPLY=( $( compgen -g -- "${cur#*:}" ) ) + local mycur="${cur#*:}" + if [[ $1 == -u ]]; then + _allowed_groups "$mycur" + else + local IFS=$'\n' + COMPREPLY=( $( compgen -g -- "$mycur" ) ) + fi else # Completing a partial 'usernam<TAB>'. # # Don't suffix with a : because readline will escape it and add a # slash. It's better to complete into 'chown username ' than 'chown # username\:'. - COMPREPLY=( $( compgen -u -- "$cur" ) ) + if [[ $1 == -u ]]; then + _allowed_users "$cur" + else + local IFS=$'\n' + COMPREPLY=( $( compgen -u -- "$cur" ) ) + fi + fi +} + +_allowed_users() +{ + if _complete_as_root; then + local IFS=$'\n' + COMPREPLY=( $( compgen -u -- "${1:-$cur}" ) ) + else + local IFS=$'\n ' + COMPREPLY=( $( compgen -W \ + "$( id -un 2>/dev/null || whoami 2>/dev/null )" -- "${1:-$cur}" ) ) + fi +} + +_allowed_groups() +{ + if _complete_as_root; then + local IFS=$'\n' + COMPREPLY=( $( compgen -g -- "$1" ) ) + else + local IFS=$'\n ' + COMPREPLY=( $( compgen -W \ + "$( id -Gn 2>/dev/null || groups 2>/dev/null )" -- "$1" ) ) fi } @@ -1164,7 +1207,8 @@ _known_hosts() # Helper function for completing _known_hosts. # This function performs host completion based on ssh's config and known_hosts -# files, as well as hostnames reported by avahi-browse. Also hosts from +# files, as well as hostnames reported by avahi-browse if +# COMP_KNOWN_HOSTS_WITH_AVAHI is set to a non-empty value. Also hosts from # HOSTFILE (compgen -A hostname) are added, unless # COMP_KNOWN_HOSTS_WITH_HOSTFILE is set to an empty value. # Usage: _known_hosts_real [OPTIONS] CWORD @@ -1201,12 +1245,10 @@ _known_hosts_real() [ -r "$configfile" ] && config=( "${config[@]}" "$configfile" ) else - [ -r /etc/ssh/ssh_config ] && - config=( "${config[@]}" "/etc/ssh/ssh_config" ) - [ -r "${HOME}/.ssh/config" ] && - config=( "${config[@]}" "${HOME}/.ssh/config" ) - [ -r "${HOME}/.ssh2/config" ] && - config=( "${config[@]}" "${HOME}/.ssh2/config" ) + for i in /etc/ssh/ssh_config "${HOME}/.ssh/config" \ + "${HOME}/.ssh2/config"; do + [ -r $i ] && config=( "${config[@]}" "$i" ) + done fi # Known hosts files from configs @@ -1228,28 +1270,16 @@ _known_hosts_real() IFS=$OIFS fi - # Global known_hosts files - if [ -z "$configfile" ]; then - [ -r /etc/ssh/ssh_known_hosts ] && - kh=( "${kh[@]}" /etc/ssh/ssh_known_hosts ) - [ -r /etc/ssh/ssh_known_hosts2 ] && - kh=( "${kh[@]}" /etc/ssh/ssh_known_hosts2 ) - [ -r /etc/known_hosts ] && - kh=( "${kh[@]}" /etc/known_hosts ) - [ -r /etc/known_hosts2 ] && - kh=( "${kh[@]}" /etc/known_hosts2 ) - [ -d /etc/ssh2/knownhosts ] && - khd=( "${khd[@]}" /etc/ssh2/knownhosts/*pub ) - fi - - # User known_hosts files if [ -z "$configfile" ]; then - [ -r ~/.ssh/known_hosts ] && - kh=( "${kh[@]}" ~/.ssh/known_hosts ) - [ -r ~/.ssh/known_hosts2 ] && - kh=( "${kh[@]}" ~/.ssh/known_hosts2 ) - [ -d ~/.ssh2/hostkeys ] && - khd=( "${khd[@]}" ~/.ssh2/hostkeys/*pub ) + # Global and user known_hosts files + for i in /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2 \ + /etc/known_hosts /etc/known_hosts2 ~/.ssh/known_hosts \ + ~/.ssh/known_hosts2; do + [ -r $i ] && kh=( "${kh[@]}" $i ) + done + for i in /etc/ssh2/knownhosts ~/.ssh2/hostkeys; do + [ -d $i ] && khd=( "${khd[@]}" $i/*pub ) + done fi # If we have known_hosts files to use @@ -1259,16 +1289,16 @@ _known_hosts_real() awkcur=${awkcur//\./\\\.} curd=$awkcur - if [[ "$awkcur" == [0-9]*.* ]]; then - # Digits followed by a dot - just search for that - awkcur="^$awkcur.*" + if [[ "$awkcur" == [0-9]*[.:]* ]]; then + # Digits followed by a dot or a colon - just search for that + awkcur="^$awkcur[.:]*" elif [[ "$awkcur" == [0-9]* ]]; then - # Digits followed by no dot - search for digits followed - # by a dot - awkcur="^$awkcur.*\." + # Digits followed by no dot or colon - search for digits followed + # by a dot or a colon + awkcur="^$awkcur.*[.:]" elif [ -z "$awkcur" ]; then - # A blank - search for a dot or an alpha character - awkcur="[a-z.]" + # A blank - search for a dot, a colon, or an alpha character + awkcur="[a-z.:]" else awkcur="^$awkcur" fi @@ -1277,9 +1307,8 @@ _known_hosts_real() # FS needs to look for a comma separated list COMPREPLY=( "${COMPREPLY[@]}" $( awk 'BEGIN {FS=","} /^\s*[^|\#]/ {for (i=1; i<=2; ++i) { \ - gsub(" .*$", "", $i); \ - gsub("[\\[\\]]", "", $i); \ - gsub(":[0-9]+$", "", $i); \ + sub(" .*$", "", $i); \ + sub("^\\[", "", $i); sub("\\](:[0-9]+)?$", "", $i); \ if ($i ~ /'"$awkcur"'/) {print $i} \ }}' "${kh[@]}" 2>/dev/null ) ) fi @@ -1310,12 +1339,14 @@ _known_hosts_real() -S "$suffix" -W "$hosts" -- "$cur" ) ) fi - # Add hosts reported by avahi-browse, if it's available. - # The original call to avahi-browse also had "-k", to avoid lookups into - # avahi's services DB. We don't need the name of the service, and if it - # contains ";", it may mistify the result. But on Gentoo (at least), - # -k isn't available (even if mentioned in the manpage), so... - if type avahi-browse >&/dev/null; then + # Add hosts reported by avahi-browse, if desired and it's available. + if [[ ${COMP_KNOWN_HOSTS_WITH_AVAHI:-} ]] && \ + type avahi-browse &>/dev/null; then + # The original call to avahi-browse also had "-k", to avoid lookups + # into avahi's services DB. We don't need the name of the service, and + # if it contains ";", it may mistify the result. But on Gentoo (at + # least), -k wasn't available (even if mentioned in the manpage) some + # time ago, so... COMPREPLY=( "${COMPREPLY[@]}" $( \ compgen -P "$prefix$user" -S "$suffix" -W \ "$( avahi-browse -cpr _workstation._tcp 2>/dev/null | \ @@ -1342,7 +1373,7 @@ complete -F _known_hosts traceroute traceroute6 tracepath tracepath6 ping \ # _cd() { - local cur IFS=$'\t\n' i j k + local cur IFS=$'\n' i j k _get_comp_words_by_ref cur # try to allow variable completion @@ -1351,8 +1382,7 @@ _cd() return 0 fi - # Enable -o filenames option, see Debian bug #272660 - compgen -f /non-existing-dir/ >/dev/null + _compopt_o_filenames # Use standard dir completion if no CDPATH or parameter starts with /, # ./ or ../ @@ -1365,7 +1395,7 @@ _cd() local -r mark_symdirs=$(_rl_enabled mark-symlinked-directories && echo y) # we have a CDPATH, so loop on its contents - for i in ${CDPATH//:/$'\t'}; do + for i in ${CDPATH//:/$'\n'}; do # create an array of matched subdirs k="${#COMPREPLY[@]}" for j in $( compgen -d $i/$cur ); do @@ -1449,11 +1479,12 @@ _command_offset() _get_comp_words_by_ref cur if [[ $COMP_CWORD -eq 0 ]]; then + _compopt_o_filenames COMPREPLY=( $( compgen -c -- "$cur" ) ) else cmd=${COMP_WORDS[0]} - if complete -p $cmd &>/dev/null; then - cspec=$( complete -p $cmd ) + if complete -p ${cmd##*/} &>/dev/null; then + cspec=$( complete -p ${cmd##*/} ) if [ "${cspec#* -F }" != "$cspec" ]; then # complete -F <function> @@ -1475,68 +1506,74 @@ _command_offset() cspec=${cspec%% *} if [[ "$cspec" != @(dir|file)names ]]; then COMPREPLY=("${COMPREPLY[@]//\\\\:/:}") + else + _compopt_o_filenames fi fi elif [ -n "$cspec" ]; then cspec=${cspec#complete}; - cspec=${cspec%%$cmd}; + cspec=${cspec%%${cmd##*/}}; COMPREPLY=( $( eval compgen "$cspec" -- "$cur" ) ); fi + elif [ ${#COMPREPLY[@]} -eq 0 ]; then + _filedir fi fi - - [ ${#COMPREPLY[@]} -eq 0 ] && _filedir } -complete -F _command -o filenames nohup exec nice eval time ltrace then \ - else do vsound command xargs tsocks aoss padsp +complete -F _command aoss command do else eval exec ltrace nice nohup padsp \ + then time tsocks vsound xargs _root_command() { local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin + local root_command=$1 _command $1 $2 $3 } -complete -F _root_command -o filenames sudo fakeroot really gksudo gksu kdesudo +complete -F _root_command fakeroot gksu gksudo kdesudo really sudo + +# Return true if the completion should be treated as running as root +_complete_as_root() +{ + [[ $EUID -eq 0 || ${root_command:-} ]] +} _longopt() { - local cur prev + local cur prev split=false + _get_comp_words_by_ref -n = cur prev - _get_comp_words_by_ref cur prev + _split_longopt && split=true - if _split_longopt; then - case "$prev" in - *[Dd][Ii][Rr]*) - _filedir -d - ;; - *[Ff][Ii][Ll][Ee]*) - _filedir - ;; - esac - return 0 - fi + case "$prev" in + --*[Dd][Ii][Rr]*) + _filedir -d + return 0 + ;; + --*[Ff][Ii][Ll][Ee]*|--*[Pp][Aa][Tt][Hh]*) + _filedir + return 0 + ;; + esac + + $split && return 0 if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W "$( $1 --help 2>&1 | \ sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*/\1/p' | sort -u )" \ -- "$cur" ) ) - elif [[ "$1" == rmdir ]]; then + elif [[ "$1" == @(mk|rm)dir ]]; then _filedir -d else _filedir fi } # makeinfo and texi2dvi are defined elsewhere. -for i in a2ps autoconf automake bc gprof ld nm objcopy objdump readelf strip \ - bison colordiff diff patch enscript cp df dir du ln ls mkfifo mknod mv rm \ - touch vdir awk gperf grep grub indent less m4 sed shar date \ - tee who texindex cat csplit cut expand fmt fold head \ - md5sum nl od paste pr ptx sha1sum sort split tac tail tr unexpand \ - uniq wc ldd bash id irb mkdir rmdir wget curl; do - have $i && complete -F _longopt -o filenames $i -done - -# These commands do not use filenames, so '-o filenames' is not needed. -for i in env netstat seq uname units; do +for i in a2ps awk bash bc bison cat colordiff cp csplit \ + curl cut date df diff dir du enscript env expand fmt fold gperf gprof \ + grep grub head indent irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \ + mv netstat nl nm objcopy objdump od paste patch pr ptx readelf rm rmdir \ + sed seq sha{,1,224,256,384,512}sum shar sort split strip tac tail tee \ + texindex touch tr uname unexpand uniq units vdir wc wget who; do have $i && complete -F _longopt -o default $i done unset i @@ -1545,7 +1582,7 @@ _filedir_xspec() { local IFS cur xspec - IFS=$'\t\n' + IFS=$'\n' COMPREPLY=() _get_comp_words_by_ref cur @@ -1570,14 +1607,26 @@ _filedir_xspec() } )) + # Munge xspec to contain uppercase version too + eval xspec="${xspec}" + local matchop=! + if [[ $xspec == !* ]]; then + xspec=${xspec#!} + matchop=@ + fi + [[ ${BASH_VERSINFO[0]} -ge 4 ]] && \ + xspec="$matchop($xspec|${xspec^^})" || \ + xspec="$matchop($xspec|$(printf %s $xspec | tr '[:lower:]' '[:upper:]'))" + toks=( ${toks[@]-} $( - eval compgen -f -X "$xspec" -- "\$(quote_readline "\$cur")" | { + eval compgen -f -X "!$xspec" -- "\$(quote_readline "\$cur")" | { while read -r tmp; do [ -n $tmp ] && printf '%s\n' $tmp done } )) + [ ${#toks[@]} -ne 0 ] && _compopt_o_filenames COMPREPLY=( "${toks[@]}" ) } list=( $( sed -ne '/^# START exclude/,/^# FINISH exclude/p' "$BASH_COMPLETION" | \ @@ -1599,7 +1648,7 @@ list=( $( sed -ne '/^# START exclude/,/^# FINISH exclude/p' "$BASH_COMPLETION" | if [ ${#list[@]} -gt 0 ]; then eval complete -r ${list[@]} # install new compspecs - eval complete -F _filedir_xspec -o filenames "${list[@]}" + eval complete -F _filedir_xspec "${list[@]}" fi unset list @@ -1608,8 +1657,8 @@ if [[ -d $BASH_COMPLETION_COMPAT_DIR && -r $BASH_COMPLETION_COMPAT_DIR && \ -x $BASH_COMPLETION_COMPAT_DIR ]]; then for i in $(LC_ALL=C command ls "$BASH_COMPLETION_COMPAT_DIR"); do i=$BASH_COMPLETION_COMPAT_DIR/$i - [[ ${i##*/} != @(*~|*.bak|*.swp|\#*\#|*.dpkg*|*.rpm@(orig|new|save)) \ - && ( -f $i || -h $i ) && -r $i ]] && . "$i" + [[ ${i##*/} != @(*~|*.bak|*.swp|\#*\#|*.dpkg*|*.rpm@(orig|new|save)|Makefile*) \ + && -f $i && -r $i ]] && . "$i" done fi if [[ $BASH_COMPLETION_DIR != $BASH_COMPLETION_COMPAT_DIR && \ @@ -1617,8 +1666,8 @@ if [[ $BASH_COMPLETION_DIR != $BASH_COMPLETION_COMPAT_DIR && \ -x $BASH_COMPLETION_DIR ]]; then for i in $(LC_ALL=C command ls "$BASH_COMPLETION_DIR"); do i=$BASH_COMPLETION_DIR/$i - [[ ${i##*/} != @(*~|*.bak|*.swp|\#*\#|*.dpkg*|*.rpm@(orig|new|save)) \ - && ( -f $i || -h $i ) && -r $i ]] && . "$i" + [[ ${i##*/} != @(*~|*.bak|*.swp|\#*\#|*.dpkg*|*.rpm@(orig|new|save)|Makefile*) \ + && -f $i && -r $i ]] && . "$i" done fi unset i diff --git a/bash_completion.sh.in b/bash_completion.sh.in index bdddeee0..f6a983fb 100644 --- a/bash_completion.sh.in +++ b/bash_completion.sh.in @@ -4,7 +4,7 @@ # Check for recent enough version of bash. bash=${BASH_VERSION%.*}; bmajor=${bash%.*}; bminor=${bash#*.} if [ $bmajor -gt 3 ] || [ $bmajor -eq 3 -a $bminor -ge 2 ]; then - if [ -r @sysconfdir@/bash_completion ]; then + if shopt -q progcomp && [ -r @sysconfdir@/bash_completion ]; then # Source completion code. . @sysconfdir@/bash_completion fi diff --git a/completions/Makefile.am b/completions/Makefile.am new file mode 100644 index 00000000..38cd986d --- /dev/null +++ b/completions/Makefile.am @@ -0,0 +1,183 @@ +SUBDIRS = helpers +bashcomp_DATA = abook \ + ant \ + apache2ctl \ + apt \ + apt-build \ + aptitude \ + aspell \ + autoconf \ + automake \ + autorpm \ + bash-builtins \ + bind-utils \ + bitkeeper \ + bittorrent \ + bluez \ + brctl \ + bzip2 \ + cardctl \ + cfengine \ + chkconfig \ + chsh \ + cksfv \ + clisp \ + configure \ + coreutils \ + cowsay \ + cpan2dist \ + cpio \ + crontab \ + cups \ + cryptsetup \ + cvs \ + cvsps \ + dd \ + dhclient \ + dict \ + dpkg \ + dselect \ + dsniff \ + dvd+rw-tools \ + e2fsprogs \ + findutils \ + freeciv \ + freerdp \ + fuse \ + gcc \ + gcl \ + gdb \ + genisoimage \ + getent \ + gkrellm \ + gnatmake \ + gpg \ + gpg2 \ + gzip \ + heimdal \ + hping2 \ + iconv \ + iftop \ + ifupdown \ + imagemagick \ + info \ + iptables \ + ipmitool \ + iproute2 \ + ipsec \ + ipv6calc \ + isql \ + jar \ + java \ + k3b \ + kldload \ + larch \ + ldapvi \ + lftp \ + lilo \ + links \ + lintian \ + lisp \ + lrzip \ + lsof \ + lvm \ + lzma \ + lzop \ + mailman \ + make \ + man \ + mc \ + mcrypt \ + mdadm \ + medusa \ + minicom \ + mkinitrd \ + module-init-tools \ + monodevelop \ + mount \ + mplayer \ + msynctool \ + mtx \ + munin-node \ + mutt \ + mysqladmin \ + ncftp \ + net-tools \ + nmap \ + ntpdate \ + openldap \ + openssl \ + open-iscsi \ + p4 \ + perl \ + pine \ + pkg-config \ + pkg_install \ + pkgtools \ + pm-utils \ + portupgrade \ + postfix \ + postgresql \ + povray \ + procps \ + python \ + qdbus \ + qemu \ + quota-tools \ + rcs \ + rdesktop \ + reportbug \ + resolvconf \ + rfkill \ + ri \ + rpcdebug \ + rpm \ + rpmcheck \ + rrdtool \ + rsync \ + rtcwake \ + samba \ + sbcl \ + screen \ + service \ + sh \ + shadow \ + sitecopy \ + smartctl \ + snownews \ + sqlite3 \ + ssh \ + sshfs \ + strace \ + svk \ + sysbench \ + sysctl \ + sysv-rc \ + tar \ + tcpdump \ + unace \ + unrar \ + update-alternatives \ + util-linux \ + vncviewer \ + vpnc \ + wireless-tools \ + wodim \ + wol \ + wtf \ + wvdial \ + xhost \ + xm \ + xmllint \ + xmlwf \ + xmms \ + xmodmap \ + xrandr \ + xrdb \ + xsltproc \ + xz \ + yp-tools \ + yum-arch + +EXTRA_DIST = $(bashcomp_DATA) \ + _mock _modules _subversion _yum _yum-utils diff --git a/completions/Makefile.in b/completions/Makefile.in new file mode 100644 index 00000000..04f41522 --- /dev/null +++ b/completions/Makefile.in @@ -0,0 +1,734 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = completions +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(bashcompdir)" +DATA = $(bashcomp_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bashcompdir = @bashcompdir@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +helpersdir = @helpersdir@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = helpers +bashcomp_DATA = abook \ + ant \ + apache2ctl \ + apt \ + apt-build \ + aptitude \ + aspell \ + autoconf \ + automake \ + autorpm \ + bash-builtins \ + bind-utils \ + bitkeeper \ + bittorrent \ + bluez \ + brctl \ + bzip2 \ + cardctl \ + cfengine \ + chkconfig \ + chsh \ + cksfv \ + clisp \ + configure \ + coreutils \ + cowsay \ + cpan2dist \ + cpio \ + crontab \ + cups \ + cryptsetup \ + cvs \ + cvsps \ + dd \ + dhclient \ + dict \ + dpkg \ + dselect \ + dsniff \ + dvd+rw-tools \ + e2fsprogs \ + findutils \ + freeciv \ + freerdp \ + fuse \ + gcc \ + gcl \ + gdb \ + genisoimage \ + getent \ + gkrellm \ + gnatmake \ + gpg \ + gpg2 \ + gzip \ + heimdal \ + hping2 \ + iconv \ + iftop \ + ifupdown \ + imagemagick \ + info \ + iptables \ + ipmitool \ + iproute2 \ + ipsec \ + ipv6calc \ + isql \ + jar \ + java \ + k3b \ + kldload \ + larch \ + ldapvi \ + lftp \ + lilo \ + links \ + lintian \ + lisp \ + lrzip \ + lsof \ + lvm \ + lzma \ + lzop \ + mailman \ + make \ + man \ + mc \ + mcrypt \ + mdadm \ + medusa \ + minicom \ + mkinitrd \ + module-init-tools \ + monodevelop \ + mount \ + mplayer \ + msynctool \ + mtx \ + munin-node \ + mutt \ + mysqladmin \ + ncftp \ + net-tools \ + nmap \ + ntpdate \ + openldap \ + openssl \ + open-iscsi \ + p4 \ + perl \ + pine \ + pkg-config \ + pkg_install \ + pkgtools \ + pm-utils \ + portupgrade \ + postfix \ + postgresql \ + povray \ + procps \ + python \ + qdbus \ + qemu \ + quota-tools \ + rcs \ + rdesktop \ + reportbug \ + resolvconf \ + rfkill \ + ri \ + rpcdebug \ + rpm \ + rpmcheck \ + rrdtool \ + rsync \ + rtcwake \ + samba \ + sbcl \ + screen \ + service \ + sh \ + shadow \ + sitecopy \ + smartctl \ + snownews \ + sqlite3 \ + ssh \ + sshfs \ + strace \ + svk \ + sysbench \ + sysctl \ + sysv-rc \ + tar \ + tcpdump \ + unace \ + unrar \ + update-alternatives \ + util-linux \ + vncviewer \ + vpnc \ + wireless-tools \ + wodim \ + wol \ + wtf \ + wvdial \ + xhost \ + xm \ + xmllint \ + xmlwf \ + xmms \ + xmodmap \ + xrandr \ + xrdb \ + xsltproc \ + xz \ + yp-tools \ + yum-arch + +EXTRA_DIST = $(bashcomp_DATA) \ + _mock _modules _subversion _yum _yum-utils + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign completions/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign completions/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-bashcompDATA: $(bashcomp_DATA) + @$(NORMAL_INSTALL) + test -z "$(bashcompdir)" || $(MKDIR_P) "$(DESTDIR)$(bashcompdir)" + @list='$(bashcomp_DATA)'; test -n "$(bashcompdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bashcompdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(bashcompdir)" || exit $$?; \ + done + +uninstall-bashcompDATA: + @$(NORMAL_UNINSTALL) + @list='$(bashcomp_DATA)'; test -n "$(bashcompdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bashcompdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bashcompdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(bashcompdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-bashcompDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-bashcompDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-bashcompDATA install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-bashcompDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/_mock b/completions/_mock index f16f116d..fa312711 100644 --- a/contrib/_mock +++ b/completions/_mock @@ -27,7 +27,8 @@ _mock() _split_longopt && split=true case $prev in - -h|--help|--copyin|--copyout|--arch|-D|--define|--with|--without|--uniqueext|--rpmbuild_timeout|--sources|--cwd) + -h|--help|--copyin|--copyout|--arch|-D|--define|--with|--without|\ + --uniqueext|--rpmbuild_timeout|--sources|--cwd) return 0 ;; -r|--root) @@ -62,20 +63,18 @@ _mock() $split && return 0 if [[ "$cur" == -* ]] ; then - COMPREPLY=( $( compgen -W '--version --help --rebuild \ - --buildsrpm --shell --chroot --clean --init \ - --installdeps --install --update --orphanskill \ - --copyin --copyout --root --offline --no-clean \ - --cleanup-after --no-cleanup-after --arch --target \ - --define --with --without --resultdir --uniqueext \ - --configdir --rpmbuild_timeout --unpriv --cwd --spec \ - --sources --verbose --quiet --trace --enable-plugin \ - --disable-plugin --print-root-path' -- "$cur" ) ) + COMPREPLY=( $( compgen -W '--version --help --rebuild --buildsrpm + --shell --chroot --clean --init --installdeps --install --update + --orphanskill --copyin --copyout --root --offline --no-clean + --cleanup-after --no-cleanup-after --arch --target --define --with + --without --resultdir --uniqueext --configdir --rpmbuild_timeout + --unpriv --cwd --spec --sources --verbose --quiet --trace + --enable-plugin --disable-plugin --print-root-path' -- "$cur" ) ) else - _filedir '?(no)src.rpm' + _filedir '@(?(no)src.r|s)pm' fi } && -complete -F _mock -o filenames mock +complete -F _mock mock # Local variables: # mode: shell-script diff --git a/contrib/_modules b/completions/_modules index f1ad88d8..f1ad88d8 100644 --- a/contrib/_modules +++ b/completions/_modules diff --git a/completions/_subversion b/completions/_subversion new file mode 100644 index 00000000..91523d89 --- /dev/null +++ b/completions/_subversion @@ -0,0 +1,360 @@ +# Use of this file is deprecated. Upstream completion is available in +# subversion >= 0.12.0, use that instead. + +# svn completion + +have svn && +{ +_svn() +{ + local cur prev commands options command + + COMPREPLY=() + _get_comp_words_by_ref cur prev + + commands='add blame praise annotate ann cat checkout co cleanup commit \ + ci copy cp delete del remove rm diff di export help ? h import \ + info list ls lock log merge mkdir move mv rename ren \ + propdel pdel pd propedit pedit pe propget pget pg \ + proplist plist pl propset pset ps resolved revert \ + status stat st switch sw unlock update up' + + if [[ $COMP_CWORD -eq 1 ]] ; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--version' -- $cur ) ) + else + COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) + fi + else + + case $prev in + --config-dir) + _filedir -d + return 0 + ;; + -F|--file|--targets) + _filedir + return 0 + ;; + --encoding) + COMPREPLY=( $( compgen -W '$( iconv --list | \ + sed -e "s@//@@;" )' -- "$cur" ) ) + return 0 + ;; + --editor-cmd|--diff-cmd|--diff3-cmd) + COMP_WORDS=(COMP_WORDS[0] $cur) + COMP_CWORD=1 + _command + return 0 + ;; + esac + + command=${COMP_WORDS[1]} + + if [[ "$cur" == -* ]]; then + # possible options for the command + case $command in + add) + options='--auto-props --no-auto-props --force --targets + --no-ignore --non-recursive -N -q --quiet' + ;; + blame|annotate|ann|praise) + options='-r --revisions --username --password + --no-auth-cache --non-interactive -v --verbose + --incremental --xml' + ;; + cat) + options='-r --revision --username --password + --no-auth-cache --non-interactive' + ;; + checkout|co) + options='-r --revision -q --quiet -N --non-recursive + --username --password --no-auth-cache + --non-interactive --ignore-externals' + ;; + cleanup) + options='--diff3-cmd' + ;; + commit|ci) + options='-m --message -F --file --encoding --force-log -q + --quiet --non-recursive -N --targets --editor-cmd + --username --password --no-auth-cache + --non-interactive --no-unlock' + ;; + copy|cp) + options='-m --message -F --file --encoding --force-log -r + --revision -q --quiet --editor-cmd -username + --password --no-auth-cache --non-interactive' + ;; + delete|del|remove|rm) + options='--force -m --message -F --file --encoding + --force-log -q --quiet --targets --editor-cmd + --username --password --no-auth-cache + --non-interactive' + ;; + diff|di) + options='-r --revision -x --extensions --diff-cmd + --no-diff-deleted -N --non-recursive --username + --password --no-auth-cache --non-interactive + --force --old --new --notice-ancestry' + ;; + export) + options='-r --revision -q --quiet --username --password + --no-auth-cache --non-interactive -N + --non-recursive --force --native-eol + --ignore-externals' + ;; + import) + options='--auto-props --no-auto-props -m --message -F + --file --encoding --force-log -q --quiet + --non-recursive --no-ignore --editor-cmd + --username --password --no-auth-cache + --non-interactive' + ;; + info) + options='--username --password --no-auth-cache + --non-interactive -r --revision --xml --targets + -R --recursive --incremental' + ;; + list|ls) + options='-r --revision -v --verbose -R --recursive + --username --password --no-auth-cache + --non-interactive --incremental --xml' + ;; + lock) + options='-m --message -F --file --encoding --force-log + --targets --force --username --password + --no-auth-cache --non-interactive' + ;; + log) + options='-r --revision -v --verbose --targets --username + --password --no-auth-cache --non-interactive + --stop-on-copy --incremental --xml -q --quiet + --limit' + ;; + merge) + options='-r --revision -N --non-recursive -q --quiet + --force --dry-run --diff3-cmd --username + --password --no-auth-cache --non-interactive + --ignore-ancestry' + ;; + mkdir) + options='-m --message -F --file --encoding --force-log -q + --quiet --editor-cmd --username --password + --no-auth-cache --non-interactive' + ;; + move|mv|rename|ren) + options='-m --message -F --file --encoding --force-log -r + --revision -q --quiet --force --editor-cmd + --username --password --no-auth-cache + --non-interactive' + ;; + propdel|pdel|pd) + options='-q --quiet -R --recursive -r --revision --revprop + --username --password --no-auth-cache + --non-interactive' + ;; + propedit|pedit|pe) + options='-r --revision --revprop --encoding --editor-cmd + --username --password --no-auth-cache + --non-interactive --force' + ;; + propget|pget|pg) + options='-R --recursive -r --revision --revprop --strict + --username --password --no-auth-cache + --non-interactive' + ;; + proplist|plist|pl) + options='-v --verbose -R --recursive -r --revision + --revprop -q --quiet --username --password + --no-auth-cache --non-interactive' + ;; + propset|pset|ps) + options='-F --file -q --quiet --targets -R --recursive + --revprop --encoding --username --password + --no-auth-cache --non-interactive -r --revision + --force' + ;; + resolved) + options='--targets -R --recursive -q --quiet' + ;; + revert) + options='--targets -R --recursive -q --quiet' + ;; + status|stat|st) + options='-u --show-updates -v --verbose -N --non-recursive + -q --quiet --username --password --no-auth-cache + --non-interactive --no-ignore --ignore-externals + --incremental --xml' + ;; + switch|sw) + options='--relocate -r --revision -N --non-recursive -q + --quiet --username --password --no-auth-cache + --non-interactive --diff3-cmd' + ;; + unlock) + options='--targets --force --username --password + --no-auth-cache --non-interactive' + ;; + update|up) + options='-r --revision -N --non-recursive -q --quiet + --username --password --no-auth-cache + --non-interactive --diff3-cmd --ignore-externals' + ;; + esac + options="$options --help -h --config-dir" + + COMPREPLY=( $( compgen -W "$options" -- $cur ) ) + else + if [[ "$command" == @(help|h|\?) ]]; then + COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) + else + _filedir + fi + fi + fi + + return 0 +} +complete -F _svn svn + +_svnadmin() +{ + local cur prev commands options mode + + COMPREPLY=() + _get_comp_words_by_ref cur prev + + commands='create deltify dump help ? hotcopy list-dblogs list-unused-dblogs + load lslocks lstxns recover rmlocks rmtxns setlog verify' + + if [[ $COMP_CWORD -eq 1 ]] ; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--version' -- $cur ) ) + else + COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) + fi + else + case $prev in + --config-dir) + _filedir -d + return 0 + ;; + --fs-type) + COMPREPLY=( $( compgen -W 'fsfs bdb' -- $cur ) ) + return 0 + ;; + esac + + command=${COMP_WORDS[1]} + + if [[ "$cur" == -* ]]; then + # possible options for the command + case $command in + create) + options='--bdb-txn-nosync --bdb-log-keep --config-dir + --fs-type' + ;; + deltify) + options='-r --revision -q --quiet' + ;; + dump) + options='-r --revision --incremental -q --quiet --deltas' + ;; + hotcopy) + options='--clean-logs' + ;; + load) + options='--ignore-uuid --force-uuid --parent-dir -q --quiet + --use-pre-commit-hook --use-post-commit-hook' + ;; + rmtxns) + options='-q --quiet' + ;; + setlog) + options='-r --revision --bypass-hooks' + ;; + esac + + options="$options --help -h" + COMPREPLY=( $( compgen -W "$options" -- $cur ) ) + else + if [[ "$command" == @(help|h|\?) ]]; then + COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) + else + _filedir + fi + fi + fi + + return 0 +} +complete -F _svnadmin -o default svnadmin + +_svnlook() +{ + local cur prev commands options mode + + COMPREPLY=() + _get_comp_words_by_ref cur + + commands='author cat changed date diff dirs-changed help ? h history info + lock log propget pget pg proplist plist pl tree uuid youngest' + + if [[ $COMP_CWORD -eq 1 ]] ; then + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--version' -- $cur ) ) + else + COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) + fi + else + command=${COMP_WORDS[1]} + + if [[ "$cur" == -* ]]; then + # possible options for the command + case $command in + author|cat|date|dirs-changed|info|log) + options='-r --revision -t --transaction' + ;; + changed) + options='-r --revision -t --transaction --copy-info' + ;; + diff) + options='-r --revision -t --transaction --no-diff-deleted + --no-diff-added --diff-copy-from' + ;; + history) + options='-r --revision --show-ids' + ;; + propget|proplist) + options='-r --revision -t --transaction --revprop' + ;; + tree) + options='-r --revision -t --transaction --show-ids + --full-paths' + ;; + esac + + options="$options --help -h" + COMPREPLY=( $( compgen -W "$options" -- $cur ) ) + else + if [[ "$command" == @(help|h|\?) ]]; then + COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) + else + _filedir + fi + fi + fi + + return 0 +} +complete -F _svnlook -o default svnlook +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/_yum b/completions/_yum index 19b79cee..9d3cbb68 100644 --- a/contrib/_yum +++ b/completions/_yum @@ -146,7 +146,7 @@ _yum() fi } } && -complete -F _yum -o filenames yum +complete -F _yum yum # Local variables: # mode: shell-script diff --git a/contrib/_yum-utils b/completions/_yum-utils index 49a57f76..b7f6d264 100644 --- a/contrib/_yum-utils +++ b/completions/_yum-utils @@ -20,7 +20,7 @@ _repomanage() _filedir -d fi } && -complete -F _repomanage -o filenames repomanage +complete -F _repomanage repomanage # Local variables: # mode: shell-script diff --git a/contrib/abook b/completions/abook index 2a3bc4f6..f09c8b50 100644 --- a/contrib/abook +++ b/completions/abook @@ -26,13 +26,11 @@ _abook() case $prev in --informat) - [ ${BASH_VERSINFO[0]} -ge 4 ] && compopt +o filenames COMPREPLY=( $( compgen -W "$(abook --formats | \ sed -n -e 's/^\t\([a-z]*\).*/\1/p' -e '/^$/q')" -- "$cur" ) ) return 0 ;; --outformat) - [ ${BASH_VERSINFO[0]} -ge 4 ] && compopt +o filenames COMPREPLY=( $( compgen -W "$(abook --formats | \ sed -n -e '/^$/,$s/^\t\([a-z]*\).*/\1/p')" -- "$cur" ) ) return 0 @@ -53,7 +51,7 @@ _abook() ;; esac } && -complete -F _abook -o filenames abook +complete -F _abook abook # Local variables: # mode: shell-script diff --git a/contrib/ant b/completions/ant index e0d835d6..132c4390 100644 --- a/contrib/ant +++ b/completions/ant @@ -58,8 +58,7 @@ _ant() fi } have complete-ant-cmd.pl && \ - complete -C complete-ant-cmd.pl -F _ant -o filenames ant || \ - complete -F _ant -o filenames ant + complete -C complete-ant-cmd.pl -F _ant ant || complete -F _ant ant } # Local variables: diff --git a/contrib/apache2ctl b/completions/apache2ctl index 287443a2..287443a2 100644 --- a/contrib/apache2ctl +++ b/completions/apache2ctl diff --git a/contrib/apt b/completions/apt index 4010a0d5..84811ae8 100644 --- a/contrib/apt +++ b/completions/apt @@ -71,7 +71,7 @@ _apt_get() return 0 } && -complete -F _apt_get -o filenames apt-get +complete -F _apt_get apt-get # Debian apt-cache(8) completion. # @@ -146,7 +146,7 @@ _apt_cache() return 0 } && -complete -F _apt_cache -o filenames apt-cache +complete -F _apt_cache apt-cache # Local variables: # mode: shell-script diff --git a/contrib/apt-build b/completions/apt-build index 9597ae8d..d875a986 100644 --- a/contrib/apt-build +++ b/completions/apt-build @@ -55,7 +55,7 @@ _apt_build() return 0 } && -complete -F _apt_build -o filenames apt-build +complete -F _apt_build apt-build # Local variables: # mode: shell-script diff --git a/contrib/aptitude b/completions/aptitude index c00ad40e..c00ad40e 100644 --- a/contrib/aptitude +++ b/completions/aptitude diff --git a/contrib/aspell b/completions/aspell index e063f497..5254eee7 100644 --- a/contrib/aspell +++ b/completions/aspell @@ -84,7 +84,7 @@ _aspell() fi } -complete -F _aspell -o filenames aspell +complete -F _aspell aspell } # Local variables: diff --git a/completions/autoconf b/completions/autoconf new file mode 100644 index 00000000..c8f1b195 --- /dev/null +++ b/completions/autoconf @@ -0,0 +1,124 @@ +# Completions for autoconf tools + +have autoconf && +_autoconf() +{ + COMPREPLY=() + local cur prev split=false + _get_comp_words_by_ref cur prev + + _split_longopt && split=true + + case "$prev" in + --help|-h|--version|-V|--trace|-t) + return 0 + ;; + --output|-o) + _filedir + return 0 + ;; + --warnings|-W) + local cats=( cross obsolete syntax ) + COMPREPLY=( $( compgen -W \ + '${cats[@]} ${cats[@]/#/no-} all none error' -- "$cur" ) ) + return 0 + ;; + --prepend-include|-B|--include|-I) + _filedir -d + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + _longopt $1 + return + fi + + _filedir '@(ac|in)' +} && +complete -F _autoconf autoconf + +have autoreconf || have autoheader && +_autoreconf() +{ + COMPREPLY=() + local cur prev split=false + _get_comp_words_by_ref cur prev + + _split_longopt && split=true + + case "$prev" in + --help|-h|--version|-V) + return 0 + ;; + --warnings|-W) + local cats=( cross gnu obsolete override portability syntax \ + unsupported ) + COMPREPLY=( $( compgen -W \ + '${cats[@]} ${cats[@]/#/no-} all none error' -- "$cur" ) ) + return 0 + ;; + --prepend-include|-B|--include|-I) + _filedir -d + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + _longopt $1 + return 0 + fi + + if [[ $1 == autoheader ]] ; then + _filedir '@(ac|in)' + else + _filedir -d + fi +} && +complete -F _autoreconf autoreconf autoheader + +have autoscan || have autoupdate && +_autoscan() +{ + COMPREPLY=() + local cur prev split=false + _get_comp_words_by_ref cur prev + + _split_longopt && split=true + + case "$prev" in + --help|-h|--version|-V) + return 0 + ;; + --prepend-include|-B|--include|-I) + _filedir -d + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + _longopt $1 + return 0 + fi + + if [[ $1 == autoupdate ]] ; then + _filedir '@(ac|in)' + else + _filedir -d + fi +} && +complete -F _autoscan autoscan autoupdate + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/completions/automake b/completions/automake new file mode 100644 index 00000000..7ed87453 --- /dev/null +++ b/completions/automake @@ -0,0 +1,80 @@ +# Completions for automake tools + +have automake && +_automake() +{ + COMPREPLY=() + local cur prev split=false + _get_comp_words_by_ref cur prev + + _split_longopt && split=true + + case "$prev" in + --help|--version) + return 0 + ;; + --warnings|-W) + local cats=( gnu obsolete override portability syntax unsupported ) + COMPREPLY=( $( compgen -W \ + '${cats[@]} ${cats[@]/#/no-} all none error' -- "$cur" ) ) + return 0 + ;; + --libdir) + _filedir -d + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + _longopt $1 + return + fi + + _filedir +} && +complete -F _automake automake automake-1.11 + +have aclocal && +_aclocal() +{ + COMPREPLY=() + local cur prev split=false + _get_comp_words_by_ref cur prev + + _split_longopt && split=true + + case "$prev" in + --help|--print-ac-dir|--version) + return 0 + ;; + --acdir|-I) + _filedir -d + return 0 + ;; + --output) + _filedir + return 0 + ;; + --warnings|-W) + local cats=( syntax unsupported ) + COMPREPLY=( $( compgen -W \ + '${cats[@]} ${cats[@]/#/no-} all none error' -- "$cur" ) ) + return 0 + ;; + esac + + $split && return 0 + + _longopt $1 +} && +complete -F _aclocal aclocal aclocal-1.11 + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/autorpm b/completions/autorpm index 6a5f7620..6a5f7620 100644 --- a/contrib/autorpm +++ b/completions/autorpm diff --git a/contrib/bash-builtins b/completions/bash-builtins index aac75ae0..3eba8a11 100644 --- a/contrib/bash-builtins +++ b/completions/bash-builtins @@ -85,10 +85,9 @@ _complete() ;; -A) - COMPREPLY=( $( compgen -W 'alias arrayvar binding \ - builtin command directory disabled enabled \ - export file function group helptopic hostname \ - job keyword running service setopt shopt \ + COMPREPLY=( $( compgen -W 'alias arrayvar binding builtin command \ + directory disabled enabled export file function group \ + helptopic hostname job keyword running service setopt shopt \ signal stopped user variable' -- "$cur" ) ) return 0 ;; @@ -111,13 +110,14 @@ _complete() if [[ "$cur" == -* ]]; then # relevant options completion - COMPREPLY=( $( compgen -W '-a -b -c -d -e -f -g -j -k -o -s -v -u -A \ - -G -W -P -S -X -F -C' -- "$cur" ) ) + local opts="-a -b -c -d -e -f -g -j -k -o -s -u -v -A -G -W -P -S -X" + [[ $1 != compgen ]] && opts="$opts -F -C" + COMPREPLY=( $( compgen -W "$opts" -- "$cur" ) ) else COMPREPLY=( $( compgen -A command -- "$cur" ) ) fi } -complete -F _complete complete +complete -F _complete compgen complete # Local variables: # mode: shell-script diff --git a/contrib/bind-utils b/completions/bind-utils index 040d1975..040d1975 100644 --- a/contrib/bind-utils +++ b/completions/bind-utils diff --git a/contrib/bitkeeper b/completions/bitkeeper index 4c312a14..4c312a14 100644 --- a/contrib/bitkeeper +++ b/completions/bitkeeper diff --git a/contrib/bittorrent b/completions/bittorrent index 761d0836..761d0836 100644 --- a/contrib/bittorrent +++ b/completions/bittorrent diff --git a/contrib/bluez b/completions/bluez index 7a2b1e57..7a2b1e57 100644 --- a/contrib/bluez +++ b/completions/bluez diff --git a/contrib/brctl b/completions/brctl index 1be86af1..1be86af1 100644 --- a/contrib/brctl +++ b/completions/brctl diff --git a/contrib/bzip2 b/completions/bzip2 index f4902e29..7e2f9fd0 100644 --- a/contrib/bzip2 +++ b/completions/bzip2 @@ -21,7 +21,7 @@ _bzip2() return 0 fi - local IFS=$'\t\n' + local IFS=$'\n' xspec="*.bz2" if [[ "$prev" == --* ]]; then @@ -36,10 +36,11 @@ _bzip2() _expand || return 0 + _compopt_o_filenames COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ $( compgen -d -- "$cur" ) ) } && -complete -F _bzip2 -o filenames bzip2 pbzip2 +complete -F _bzip2 bzip2 pbzip2 # Local variables: # mode: shell-script diff --git a/contrib/cardctl b/completions/cardctl index 1af7491b..1af7491b 100644 --- a/contrib/cardctl +++ b/completions/cardctl diff --git a/contrib/cfengine b/completions/cfengine index 50a13840..50a13840 100644 --- a/contrib/cfengine +++ b/completions/cfengine diff --git a/contrib/chkconfig b/completions/chkconfig index 2d02e56e..2d02e56e 100644 --- a/contrib/chkconfig +++ b/completions/chkconfig diff --git a/contrib/chsh b/completions/chsh index 1af3630f..1af3630f 100644 --- a/contrib/chsh +++ b/completions/chsh diff --git a/contrib/cksfv b/completions/cksfv index 1f83824b..1f83824b 100644 --- a/contrib/cksfv +++ b/completions/cksfv diff --git a/contrib/clisp b/completions/clisp index 074f692c..074f692c 100644 --- a/contrib/clisp +++ b/completions/clisp diff --git a/contrib/configure b/completions/configure index d69f85b1..1b207692 100644 --- a/contrib/configure +++ b/completions/configure @@ -10,7 +10,7 @@ _configure() _split_longopt && split=true case $prev in - --prefix|--exec-prefix|--*dir) + --*prefix|--*dir) _filedir -d ;; esac @@ -33,7 +33,7 @@ _configure() -- "$cur" ) ) fi } -complete -F _configure -o filenames configure +complete -F _configure configure # Local variables: # mode: shell-script diff --git a/contrib/coreutils b/completions/coreutils index 65809fbb..33d58cf7 100644 --- a/contrib/coreutils +++ b/completions/coreutils @@ -41,13 +41,13 @@ _chown() _count_args : if [[ $args == 1 ]]; then - _usergroup + _usergroup -u else _filedir fi fi } && -complete -F _chown -o filenames chown +complete -F _chown chown # chgrp(1) completion @@ -84,15 +84,14 @@ _chgrp() # first parameter on line or first since an option? if [[ $COMP_CWORD -eq 1 && "$cur" != -* || "$prev" == -* ]]; then - local IFS=$'\n' - COMPREPLY=( $( compgen -g "$cur" 2>/dev/null ) ) + _allowed_groups else _filedir || return 0 fi return 0 } && -complete -F _chgrp -o filenames chgrp +complete -F _chgrp chgrp # id(1) completion # @@ -113,6 +112,34 @@ _id() } && complete -F _id id +# mktemp(1) completion +# +have mktemp && +_mktemp() +{ + COMPREPLY=() + local cur prev split=false + _get_comp_words_by_ref cur prev + + _split_longopt && split=true + + case "$prev" in + --help|--version|--suffix) + return 0 + ;; + --tmpdir|-p) + _filedir -d + return 0 + ;; + esac + + $split && return 0 + + [[ "$cur" == -* ]] && \ + COMPREPLY=( $( compgen -W '-d -u -q -p -t' -- "$cur" ) ) +} && +complete -F _mktemp mktemp + # Local variables: # mode: shell-script # sh-basic-offset: 4 diff --git a/contrib/cowsay b/completions/cowsay index c6d797aa..c6d797aa 100644 --- a/contrib/cowsay +++ b/completions/cowsay diff --git a/contrib/cpan2dist b/completions/cpan2dist index 13f568af..13f568af 100644 --- a/contrib/cpan2dist +++ b/completions/cpan2dist diff --git a/contrib/cpio b/completions/cpio index e77b4153..5ead0184 100644 --- a/contrib/cpio +++ b/completions/cpio @@ -30,6 +30,7 @@ _cpio() return 0 ;; --rsh-command) + _compopt_o_filenames COMPREPLY=( $( compgen -c -- "$cur" ) ) return 0 ;; @@ -90,7 +91,7 @@ _cpio() esac fi } -complete -F _cpio -o filenames cpio +complete -F _cpio cpio } # Local variables: diff --git a/completions/crontab b/completions/crontab new file mode 100644 index 00000000..d2ee23a0 --- /dev/null +++ b/completions/crontab @@ -0,0 +1,60 @@ +# crontab(1) completion + +have crontab && +_crontab() +{ + local cur prev + COMPREPLY=() + _get_comp_words_by_ref cur prev + + case $prev in + -u) + _allowed_users + return 0 + ;; + esac + + local i opts=" -u -l -r -e" # leading space at start is significant... + [ "$(uname -s)" = Linux ] && opts="$opts -i" + [ -e /etc/selinux ] && opts="$opts -s" + for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do + case "${COMP_WORDS[i]}" in + -l) + opts=${opts// -l -r -e/} + opts=${opts// -i/} + opts=${opts// -s/} + ;; + -e) + opts=${opts// -l -r -e/} + opts=${opts// -i/} + ;; + -r) + opts=${opts// -l -r -e/} + ;; + -u) + opts=${opts// -u/} + opts=${opts// -i/} + ;; + -i|-s) + opts=${opts// ${COMP_WORDS[i]}/} + ;; + esac + done + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '$opts' -- "$cur" ) ) + return 0 + fi + + # do filenames only if we did not have -l, -r, or -e + [[ "${COMP_LINE}" == *\ -@(l|r|e)* ]] || _filedir +} && +complete -F _crontab crontab + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/cryptsetup b/completions/cryptsetup index 5e88de34..5e88de34 100644 --- a/contrib/cryptsetup +++ b/completions/cryptsetup diff --git a/contrib/cups b/completions/cups index 80c9af54..2848c953 100644 --- a/contrib/cups +++ b/completions/cups @@ -10,7 +10,7 @@ _cancel() COMPREPLY=( $( compgen -W "$( lpstat | cut -d' ' -f1 )" -- "$cur" ) ) } && -complete -F _cancel -o filenames cancel +complete -F _cancel cancel # Local variables: # mode: shell-script diff --git a/contrib/cvs b/completions/cvs index 04837cd1..be3b1be7 100644 --- a/contrib/cvs +++ b/completions/cvs @@ -238,7 +238,7 @@ _cvs() set_prefix - if [[ "$cur" != -* ]] && [ -r ${prefix:-}CVS/Entries ]; then + if [[ "$cur" != -* && -r ${prefix:-}CVS/Entries ]]; then # if $COMP_CVS_REMOTE is not null, 'cvs commit' will # complete on remotely checked-out files (requires # passwordless access to the remote repository diff --git a/contrib/cvsps b/completions/cvsps index 257437bc..257437bc 100644 --- a/contrib/cvsps +++ b/completions/cvsps diff --git a/contrib/dd b/completions/dd index e236f85a..7b9b3ac7 100644 --- a/contrib/dd +++ b/completions/dd @@ -9,26 +9,26 @@ _dd() _get_comp_words_by_ref -n = cur case $cur in - if=*|of=*) - cur=${cur#*=} - _filedir - return 0 - ;; - conv=*) - cur=${cur#*=} - COMPREPLY=( $( compgen -W 'ascii ebcdic ibm block unblock \ - lcase notrunc ucase swab noerror sync' -- "$cur" ) ) - return 0 - ;; + if=*|of=*) + cur=${cur#*=} + _filedir + return 0 + ;; + conv=*) + cur=${cur#*=} + COMPREPLY=( $( compgen -W 'ascii ebcdic ibm block unblock lcase + notrunc ucase swab noerror sync' -- "$cur" ) ) + return 0 + ;; esac _expand || return 0 COMPREPLY=( $( compgen -W '--help --version' -- "$cur" ) \ - $( compgen -W 'bs cbs conv count ibs if obs of seek skip'\ - -S '=' -- "$cur" ) ) + $( compgen -W 'bs cbs conv count ibs if obs of seek skip' \ + -S '=' -- "$cur" ) ) } && -complete -F _dd -o nospace -o filenames dd +complete -F _dd -o nospace dd # Local variables: # mode: shell-script diff --git a/contrib/dhclient b/completions/dhclient index 3d7e1e1a..3d7e1e1a 100644 --- a/contrib/dhclient +++ b/completions/dhclient diff --git a/contrib/dict b/completions/dict index 4cfdf98f..4cfdf98f 100644 --- a/contrib/dict +++ b/completions/dict diff --git a/contrib/dpkg b/completions/dpkg index a70ccef8..0556f3d1 100644 --- a/contrib/dpkg +++ b/completions/dpkg @@ -92,7 +92,7 @@ _dpkg() } -complete -F _dpkg -o filenames dpkg dpkg-deb +complete -F _dpkg dpkg dpkg-deb } # Debian GNU dpkg-reconfigure(8) completion diff --git a/contrib/dselect b/completions/dselect index 8bea891a..3042a8d0 100644 --- a/contrib/dselect +++ b/completions/dselect @@ -27,10 +27,9 @@ _dselect() remove quit' -- "$cur" ) ) fi - return 0 } && -complete -F _dselect -o filenames dselect +complete -F _dselect dselect # Local variables: # mode: shell-script diff --git a/contrib/dsniff b/completions/dsniff index 1d3b303b..1d3b303b 100644 --- a/contrib/dsniff +++ b/completions/dsniff diff --git a/completions/dvd+rw-tools b/completions/dvd+rw-tools new file mode 100644 index 00000000..f37781ee --- /dev/null +++ b/completions/dvd+rw-tools @@ -0,0 +1,47 @@ +# dvd+rw-tools completions + +have growisofs && +_growisofs() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -version|-speed) + return 0 + ;; + -Z|-M) + compopt -o nospace &>/dev/null + _dvd_devices + return 0 + ;; + /?(r)dev/*) + if [[ $cur == =* ]] ; then + # e.g. /dev/dvd=foo.iso, /dev/dvdrw=/dev/zero + cur="${cur#=}" + _filedir + return 0 + fi + ;; + esac + + if [[ "$cur" == -* ]]; then + # TODO: mkisofs options + COMPREPLY=( $( compgen -W '-dvd-compat -overburn -speed= -Z -M' \ + -- "$cur" ) ) + [[ ${COMPREPLY[@]} == *= ]] && compopt -o nospace &>/dev/null + return 0 + fi + + _filedir +} && +complete -F _growisofs growisofs + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/completions/e2fsprogs b/completions/e2fsprogs new file mode 100644 index 00000000..50ce7885 --- /dev/null +++ b/completions/e2fsprogs @@ -0,0 +1,180 @@ +# bash completion for e2fsprogs + +have badblocks && +_badblocks() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -b|-c|-e|-d|-p|-t) + return 0 + ;; + -i|-o) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + # -w (dangerous) and -X (internal use) not here on purpose + COMPREPLY=( $( compgen -W '-b -c -e -d -f -i -n -o -p -s -t -v' \ + -- "$cur" ) ) + return 0 + fi + + cur=${cur:=/dev/} + _filedir +} && +complete -F _badblocks badblocks + + +have dumpe2fs && +_dumpe2fs() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -o|-V) + return 0 + ;; + -i) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-b -o -f -h -i -x -V' -- "$cur" ) ) + return 0 + fi + + cur=${cur:=/dev/} + _filedir +} && +complete -F _dumpe2fs dumpe2fs + + +have e2freefrag && +_e2freefrag() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -c|-h) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c -h' -- "$cur" ) ) + return 0 + fi + + cur=${cur:=/dev/} + _filedir +} && +complete -F _e2freefrag e2freefrag + + +have e2label && +_e2label() +{ + COMPREPLY=() + local cur cword + _get_comp_words_by_ref cur cword + + if [ $cword -eq 1 ]; then + cur=${cur:=/dev/} + _filedir + fi +} && +complete -F _e2label e2label + + +have filefrag && +_filefrag() +{ + COMPREPLY=() + local cur + _get_comp_words_by_ref cur + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-B -b -s -v -x' -- "$cur" ) ) + return 0 + fi + + _filedir +} && +complete -F _filefrag filefrag + + +have tune2fs && +_tune2fs() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -c|-C|-E|-i|-J|-L|-m|-r|-T) + return 0 + ;; + -e) + COMPREPLY=( $( compgen -W 'continue remount-ro panic' -- "$cur" ) ) + return 0 + ;; + -g) + _gids + COMPREPLY=( $( compgen -g -W '${COMPREPLY[@]}' -- "$cur" ) ) + return 0 + ;; + -M) + _filedir -d + ;; + -o) + local -a opts=(^debug ^bsdgroups ^user_xattr ^acl ^uid16 + ^journal_data ^journal_data_ordered ^journal_data_writeback) + COMPREPLY=( $( compgen -W '${opts[@]} ${opts[@]#^}' -- "$cur" ) ) + return 0 + ;; + -O) + local -a opts=(^dir_index ^dir_nlink ^extent ^extra_isize ^filetype + ^flex_bg ^has_journal ^huge_file ^large_file ^resize_inode + ^sparse_super ^uninit_bg) + COMPREPLY=( $( compgen -W '${opts[@]} ${opts[@]#^}' -- "$cur" ) ) + return 0 + ;; + -u) + _uids + COMPREPLY=( $( compgen -u -W '${COMPREPLY[@]}' -- "$cur" ) ) + return 0 + ;; + -U) + COMPREPLY=( $( compgen -W 'clear random time' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c -C -e -E -f -g -i -j -J -l -L -m -M -o + -O -r -T -u -U' -- "$cur" ) ) + fi + + cur=${cur:=/dev/} + _filedir +} && +complete -F _tune2fs tune2fs + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/findutils b/completions/findutils index 6af5d50b..b8aaa57a 100644 --- a/contrib/findutils +++ b/completions/findutils @@ -117,7 +117,7 @@ _find() return 0 } && -complete -F _find -o filenames find +complete -F _find find # Local variables: # mode: shell-script diff --git a/contrib/freeciv b/completions/freeciv index 602ad76a..602ad76a 100644 --- a/contrib/freeciv +++ b/completions/freeciv diff --git a/completions/freerdp b/completions/freerdp new file mode 100644 index 00000000..82a46462 --- /dev/null +++ b/completions/freerdp @@ -0,0 +1,47 @@ +# bash completion for xfreerdp + +have xfreerdp && +_xfreerdp() +{ + local cur prev + + COMPREPLY=() + _get_comp_words_by_ref cur prev + + case $prev in + -k) + COMPREPLY=( $( compgen -W "$(xfreerdp --kbd-list | \ + awk '/^0x/ {print $1}')" -- "$cur" ) ) + return 0 + ;; + -a) + COMPREPLY=( $( compgen -W '8 15 16 24 32' -- "$cur" ) ) + return 0 + ;; + -x) + COMPREPLY=( $( compgen -W 'b broadband m modem l lan' -- $cur ) ) + return 0 + ;; + --plugin) + COMPREPLY=( $( compgen -W 'cliprdr rdpsnd rdpdr' -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-u -d -s -c -p -n -t -g -a -z -f -x -O -o \ + -k --kbd-list -h --plugin --data' -- "$cur" ) ) + else + _known_hosts_real "$cur" + fi + +} && +complete -F _xfreerdp xfreerdp + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/fuse b/completions/fuse index b4d80a28..58d0c516 100644 --- a/contrib/fuse +++ b/completions/fuse @@ -25,7 +25,7 @@ _fusermount() _filedir -d fi } && -complete -F _fusermount -o filenames fusermount +complete -F _fusermount fusermount # Local variables: # mode: shell-script diff --git a/contrib/gcc b/completions/gcc index 3f5a5619..d78e3e24 100644 --- a/contrib/gcc +++ b/completions/gcc @@ -46,9 +46,9 @@ _gcc() _filedir fi } && -complete -o filenames -F _gcc gcc g++ c++ g77 gcj gpc +complete -F _gcc gcc g++ c++ g77 gcj gpc [ $USERLAND = GNU -o $UNAME = Cygwin ] && \ -[ -n "${have:-}" ] && complete -o filenames -F _gcc cc +[ -n "${have:-}" ] && complete -F _gcc cc # Local variables: # mode: shell-script diff --git a/contrib/gcl b/completions/gcl index e0931536..e0931536 100644 --- a/contrib/gcl +++ b/completions/gcl diff --git a/contrib/gdb b/completions/gdb index dc769613..f0bc42d3 100644 --- a/contrib/gdb +++ b/completions/gdb @@ -10,6 +10,7 @@ _gdb() if [ $COMP_CWORD -eq 1 ]; then local IFS + _compopt_o_filenames if [[ "$cur" == */* ]]; then # compgen -c works as expected if $cur contains any slashes. IFS=$'\n' diff --git a/contrib/genisoimage b/completions/genisoimage index 7f379041..61b18114 100644 --- a/contrib/genisoimage +++ b/completions/genisoimage @@ -66,7 +66,7 @@ _mkisofs() fi } && -complete -F _mkisofs -o filenames mkisofs genisoimage +complete -F _mkisofs mkisofs genisoimage # Local variables: # mode: shell-script diff --git a/contrib/getent b/completions/getent index 54e62ab8..54e62ab8 100644 --- a/contrib/getent +++ b/completions/getent diff --git a/contrib/gkrellm b/completions/gkrellm index 1e3925f1..13e25ada 100644 --- a/contrib/gkrellm +++ b/completions/gkrellm @@ -43,7 +43,7 @@ _gkrellm() fi } && -complete -F _gkrellm -o filenames gkrellm gkrellm2 +complete -F _gkrellm gkrellm gkrellm2 # Local variables: # mode: shell-script diff --git a/contrib/gnatmake b/completions/gnatmake index 11b04908..cdd193c1 100644 --- a/contrib/gnatmake +++ b/completions/gnatmake @@ -26,7 +26,7 @@ _gnatmake() _filedir '@(adb|ads)' fi } && -complete -F _gnatmake -o filenames gnatmake +complete -F _gnatmake gnatmake # Local variables: # mode: shell-script diff --git a/contrib/gpg b/completions/gpg index 878a800b..878a800b 100644 --- a/contrib/gpg +++ b/completions/gpg diff --git a/contrib/gpg2 b/completions/gpg2 index b99783f9..b99783f9 100644 --- a/contrib/gpg2 +++ b/completions/gpg2 diff --git a/contrib/gzip b/completions/gzip index 0951f72f..f7aec17e 100644 --- a/contrib/gzip +++ b/completions/gzip @@ -21,7 +21,7 @@ _gzip() return 0 fi - local IFS=$'\t\n' + local IFS=$'\n' xspec="*.@(gz|t[ag]z)" if [[ "$prev" == --* ]]; then @@ -40,10 +40,11 @@ _gzip() _expand || return 0 + _compopt_o_filenames COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ $( compgen -d -- "$cur" ) ) } && -complete -F _gzip -o filenames gzip pigz +complete -F _gzip gzip pigz # Local variables: # mode: shell-script diff --git a/contrib/heimdal b/completions/heimdal index c1efb110..c1efb110 100644 --- a/contrib/heimdal +++ b/completions/heimdal diff --git a/completions/helpers/Makefile.am b/completions/helpers/Makefile.am new file mode 100644 index 00000000..98fccefe --- /dev/null +++ b/completions/helpers/Makefile.am @@ -0,0 +1,3 @@ +helpers_SCRIPTS = perl + +EXTRA_DIST = $(helpers_SCRIPTS) diff --git a/completions/helpers/Makefile.in b/completions/helpers/Makefile.in new file mode 100644 index 00000000..e367369b --- /dev/null +++ b/completions/helpers/Makefile.in @@ -0,0 +1,365 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = completions/helpers +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(helpersdir)" +SCRIPTS = $(helpers_SCRIPTS) +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bashcompdir = @bashcompdir@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +helpersdir = @helpersdir@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +helpers_SCRIPTS = perl +EXTRA_DIST = $(helpers_SCRIPTS) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign completions/helpers/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign completions/helpers/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-helpersSCRIPTS: $(helpers_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(helpersdir)" || $(MKDIR_P) "$(DESTDIR)$(helpersdir)" + @list='$(helpers_SCRIPTS)'; test -n "$(helpersdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(helpersdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(helpersdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-helpersSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(helpers_SCRIPTS)'; test -n "$(helpersdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(helpersdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(helpersdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(helpersdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-helpersSCRIPTS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-helpersSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-helpersSCRIPTS install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am \ + uninstall-helpersSCRIPTS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/completions/helpers/perl b/completions/helpers/perl new file mode 100755 index 00000000..b3522ac0 --- /dev/null +++ b/completions/helpers/perl @@ -0,0 +1,88 @@ +#!/usr/bin/env perl +use strict; +use Config; +use File::Spec::Functions; + +my %seen; + +sub print_modules_real { + my ($base, $dir, $word) = @_; + + # return immediatly if potential completion doesn't match current word + # a double comparaison is used to avoid dealing with string lengths + # (the shorter being the pattern to be used as the regexp) + # word 'Fi', base 'File' -> match 'File' against 'Fi' + # word 'File::Sp', base 'File' -> match 'File::Sp' againt 'File' + return if + $base && + $word && + $base !~ /^\Q$word/ && + $word !~ /^\Q$base/; + + chdir($dir) or return; + + # print each file + foreach my $file (glob('*.pm')) { + $file =~ s/\.pm$//; + my $module = $base . $file; + next if $module !~ /^\Q$word/; + next if $seen{$module}++; + print $module . "\n"; + } + + # recurse in each subdirectory + foreach my $directory (grep { -d } glob('*')) { + my $subdir = $dir . '/' . $directory; + if ($directory =~ /^(?:[.\d]+|$Config{archname}|auto)$/) { + # exclude subdirectory name from base + print_modules_real(undef, $subdir, $word); + } else { + # add subdirectory name to base + print_modules_real($base . $directory . '::', $subdir, $word); + } + } +} + +sub print_modules { + my ($word) = @_; + + foreach my $directory (@INC) { + print_modules_real(undef, $directory, $word); + } +} + +sub print_functions { + my ($word) = @_; + + my $perlfunc; + for ( @INC, undef ) { + return if not defined; + $perlfunc = catfile $_, qw( pod perlfunc.pod ); + last if -r $perlfunc; + } + + open my $fh, '<', $perlfunc or return; + + my $nest_level = -1; + while ( <$fh> ) { + next if 1 .. /^=head2 Alphabetical Listing of Perl Functions$/; + ++$nest_level if /^=over/; + --$nest_level if /^=back/; + next if $nest_level; + next unless /^=item (-?\w+)/; + my $function = $1; + next if $function !~ /^\Q$word/; + next if $seen{$function}++; + print $function . "\n"; + } + +} + +my $type = shift; +my $word = shift; + +if ($type eq 'functions') { + print_functions($word); +} elsif ($type eq 'modules') { + print_modules($word); +} diff --git a/contrib/hping2 b/completions/hping2 index b1607f83..e2e6bf1a 100644 --- a/contrib/hping2 +++ b/completions/hping2 @@ -1,6 +1,6 @@ # bash completion for hping2 -have hping2 && +have hping || have hping2 || have hping3 && _hping2() { local cur prev @@ -44,7 +44,7 @@ _hping2() _known_hosts_real "$cur" fi } && -complete -F _hping2 hping2 hping +complete -F _hping2 hping hping2 hping3 # Local variables: # mode: shell-script diff --git a/contrib/iconv b/completions/iconv index 14b618dc..9e332004 100644 --- a/contrib/iconv +++ b/completions/iconv @@ -36,8 +36,6 @@ _iconv() fi } && complete -F _iconv -o default iconv -# Intentionally not -o filenames here, -f/-t completions may contain slashes -# and -o filenames would break them. # Local variables: # mode: shell-script diff --git a/completions/iftop b/completions/iftop new file mode 100644 index 00000000..9ec2a0d0 --- /dev/null +++ b/completions/iftop @@ -0,0 +1,35 @@ +# iftop(8) completion + +have iftop && +_iftop() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -h|-f|-F|-m) + return 0 + ;; + -i) + _available_interfaces -a + return 0 + ;; + -c) + _filedir + return 0 + ;; + esac + + COMPREPLY=( $( compgen -W '-h -n -N -p -P -b -B -i -f -F -c -m' \ + -- "$cur" ) ) +} && +complete -F _iftop iftop + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/ifupdown b/completions/ifupdown index f81e08d5..f81e08d5 100644 --- a/contrib/ifupdown +++ b/completions/ifupdown diff --git a/contrib/imagemagick b/completions/imagemagick index 5366e619..c7ba74c8 100644 --- a/contrib/imagemagick +++ b/completions/imagemagick @@ -189,7 +189,7 @@ _convert() _filedir fi } -complete -F _convert -o filenames convert +complete -F _convert convert _mogrify() { @@ -245,7 +245,7 @@ _mogrify() _filedir fi } -complete -F _mogrify -o filenames mogrify +complete -F _mogrify mogrify _display() { @@ -285,7 +285,7 @@ _display() _filedir fi } -complete -F _display -o filenames display +complete -F _display display _animate() { @@ -319,7 +319,7 @@ _animate() _filedir fi } -complete -F _animate -o filenames animate +complete -F _animate animate _identify() { @@ -344,7 +344,7 @@ _identify() _filedir fi } -complete -F _identify -o filenames identify +complete -F _identify identify _montage() { @@ -382,7 +382,7 @@ _montage() _filedir fi } -complete -F _montage -o filenames montage +complete -F _montage montage _composite() { @@ -417,7 +417,7 @@ _composite() _filedir fi } -complete -F _composite -o filenames composite +complete -F _composite composite _compare() { @@ -444,7 +444,7 @@ _compare() _filedir fi } -complete -F _compare -o filenames compare +complete -F _compare compare _conjure() { @@ -464,7 +464,7 @@ _conjure() _filedir fi } -complete -F _conjure -o filenames conjure +complete -F _conjure conjure _import() { @@ -495,7 +495,7 @@ _import() _filedir fi } -complete -F _import -o filenames import +complete -F _import import _stream() { @@ -520,7 +520,7 @@ _stream() _filedir fi } -complete -F _stream -o filenames stream +complete -F _stream stream } # Local variables: diff --git a/contrib/info b/completions/info index 55791d31..367cadef 100644 --- a/contrib/info +++ b/completions/info @@ -47,7 +47,7 @@ _info() return 0 } && -complete -F _info -o filenames info +complete -F _info info # Local variables: # mode: shell-script diff --git a/completions/ipmitool b/completions/ipmitool new file mode 100644 index 00000000..3a90eeb4 --- /dev/null +++ b/completions/ipmitool @@ -0,0 +1,214 @@ +# bash completion for ipmitool + +have ipmitool && { + +_ipmitool_singleline_help() +{ + COMPREPLY=( $( compgen -W "$( $1 $2 2>&1 | \ + sed -ne 's/[,\r]//g' -e 's/^.*[Cc]ommands://p' )" -- "$cur" ) ) +} + +_ipmitool() +{ + local cur prev + + COMPREPLY=() + _get_comp_words_by_ref cur prev + + case $prev in + -h|-V|-p|-U|-e|-k|-y|-P|-m|-b|-t|-B|-T|-l) + return 0 + ;; + -d) + COMPREPLY=( $( compgen -W "$( \ + command ls -d /dev/ipmi* /dev/ipmi/* /dev/ipmidev/* \ + 2>/dev/null | sed -ne 's/^[^0-9]*\([0-9]\{1,\}\)/\1/p' )" \ + -- "$cur" ) ) + return 0 + ;; + -I) + COMPREPLY=( $( compgen -W "$( $1 -h 2>&1 | \ + sed -e '/^Interfaces:/,/^[[:space:]]*$/!d' \ + -ne 's/^[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*/\1/p' )" \ + -- "$cur" ) ) + return 0 + ;; + -H) + _known_hosts_real "$cur" + return 0 + ;; + -f|-S|-O) + _filedir + return 0 + ;; + -C) + COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9 10 11 12 13 14' \ + -- "$cur" ) ) + return 0 + ;; + -L) + COMPREPLY=( $( compgen -W 'CALLBACK USER OPERATOR ADMINISTRATOR' \ + -- "$cur" ) ) + return 0 + ;; + -A) + COMPREPLY=( $( compgen -W 'NONE PASSWORD MD2 MD5 OEM' -- "$cur" ) ) + return 0 + ;; + -o) + COMPREPLY=( $( compgen -W "$( $1 -o list 2>&1 | \ + awk '/^[ \t]+/ { print $1 }' ) list" -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h -V -v -c -d -I -H -p -U -f -S -a \ + -e -C -k -y -L -A -P -E -K -m -b -t -B -T -l -o -O' -- "$cur" ) ) + return 0 + 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 < ${#COMP_WORDS[@]}-1; i++ )); do + [[ -n $cmd ]] && subcmd=${COMP_WORDS[i]} && break + for c in ${cmds[@]}; do + [ ${COMP_WORDS[i]} = $c ] && cmd=$c && break + done + done + + if [ -z "$cmd" ]; then + COMPREPLY=( $( compgen -W '${cmds[@]}' -- "$cur" ) ) + return 0 + 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 + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/completions/iproute2 b/completions/iproute2 new file mode 100644 index 00000000..f5d7bbd9 --- /dev/null +++ b/completions/iproute2 @@ -0,0 +1,285 @@ +# iproute2 tools completion + +have ip && +_ip() +{ + COMPREPLY=() + local cur prev words cword + _get_comp_words_by_ref cur prev words cword + + case $prev in + -V|-Version|-rc|-rcvbuf) + return 0 + ;; + -f|-family) + COMPREPLY=( $( compgen -W 'inet inet6 ipx dnet link' -- "$cur" ) ) + return 0 + ;; + -b|-batch) + _filedir + return 0 + ;; + -force) + COMPREPLY=( $( compgen -W '-batch' -- "$cur" ) ) + return 0 + ;; + esac + + local subcword cmd subcmd + for (( subcword=1; subcword < ${#words[@]}-1; subcword++ )); do + [[ ${words[subcword]} == -b?(atch) ]] && return 0 + [[ -n $cmd ]] && subcmd=${words[subcword]} && break + [[ ${words[subcword]} != -* && \ + ${words[subcword-1]} != -@(f?(amily)|rc?(vbuf)) ]] && \ + cmd=${words[subcword]} + done + + if [[ -z $cmd ]]; then + case $cur in + -*) + local c="-Version -statistics -details -resolve -family + -oneline -timestamp -batch -rcvbuf" + [[ $cword -eq 1 ]] && c="$c -force" + COMPREPLY=( $( compgen -W "$c" -- "$cur" ) ) + return 0 + ;; + *) + COMPREPLY=( $( compgen -W "help $( ip help 2>&1 | \ + sed -e '/OBJECT := /,/}/!d' \ + -e 's/.*{//' -e 's/}.*//' -e 's/|//g' )" -- "$cur" ) ) + return 0 + ;; + esac + fi + + [[ $subcmd == help ]] && return 0 + + case $cmd in + 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 -eq 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="$c up down" + COMPREPLY=( $( compgen -W "$c" -- "$cur" ) ) + ;; + esac + fi + ;; + show) + [[ $cword -eq $subcword+1 ]] && _available_interfaces + ;; + *) + [[ $cword -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'help add delete set show' \ + -- "$cur" ) ) + ;; + esac + ;; + + addr) + case $subcmd in + add|change|replace) + # TODO + ;; + del) + # TODO + ;; + show|flush) + # TODO + ;; + *) + [[ $cword -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'help add change replace del + show flush' -- "$cur" ) ) + ;; + esac + ;; + + addrlabel) + case $subcmd in + list|add|del|flush) + # TODO + ;; + *) + [[ $cword -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'help list add del flush' \ + -- "$cur" ) ) + ;; + esac + ;; + + route) + case $subcmd in + list|flush) + # TODO + ;; + get) + # TODO + ;; + add|del|change|append|replace|monitor) + # TODO + ;; + *) + [[ $cword -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'help list flush get add del + change append replace monitor' -- "$cur" ) ) + ;; + esac + ;; + + rule) + case $subcmd in + list|add|del|flush) + # TODO + ;; + *) + [[ $cword -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'help list add del flush' \ + -- "$cur" ) ) + ;; + esac + ;; + + neigh) + case $subcmd in + add|del|change|replace) + # TODO + ;; + show|flush) + # TODO + ;; + *) + [[ $cword -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'help add del change replace + show flush' -- "$cur" ) ) + ;; + esac + ;; + + ntable) + case $subcmd in + change) + # TODO + ;; + show) + # TODO + ;; + *) + [[ $cword -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'help change show' \ + -- "$cur" ) ) + ;; + esac + ;; + + tunnel) + case $subcmd in + add|change|del|show|prl|6rd) + # TODO + ;; + *) + [[ $cword -eq $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 -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'help add del show' \ + -- "$cur" ) ) + ;; + esac + ;; + + mroute) + case $subcmd in + show) + # TODO + ;; + *) + [[ $cword -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'help show' -- "$cur" ) ) + ;; + esac + ;; + + monitor) + case $subcmd in + all) ;; + *) + [[ $cword -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'help all' -- "$cur" ) ) + ;; + esac + ;; + + xfrm) + case $subcmd in + state|policy|monitor) + # TODO + ;; + *) + [[ $cword -eq $subcword ]] && \ + COMPREPLY=( $( compgen -W 'state policy monitor' \ + -- "$cur" ) ) + ;; + esac + ;; + esac +} && +complete -F _ip ip + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/ipsec b/completions/ipsec index acb8c995..acb8c995 100644 --- a/contrib/ipsec +++ b/completions/ipsec diff --git a/contrib/iptables b/completions/iptables index bd0e4622..bd0e4622 100644 --- a/contrib/iptables +++ b/completions/iptables diff --git a/contrib/ipv6calc b/completions/ipv6calc index 75f55e74..20e810df 100644 --- a/contrib/ipv6calc +++ b/completions/ipv6calc @@ -46,7 +46,7 @@ _ipv6calc() return 0 } && -complete -F _ipv6calc -o filenames ipv6calc +complete -F _ipv6calc ipv6calc # Local variables: # mode: shell-script diff --git a/contrib/isql b/completions/isql index f0ddbd75..f0ddbd75 100644 --- a/contrib/isql +++ b/completions/isql diff --git a/contrib/jar b/completions/jar index 75dcaf3e..d703019d 100644 --- a/contrib/jar +++ b/completions/jar @@ -18,14 +18,14 @@ _jar() _filedir ;; *f) - _filedir '?([ejw]ar|zip|[EJW]AR|ZIP)' + _filedir '@([ejw]ar|zip|apk)' ;; *) _filedir ;; esac } && -complete -F _jar -o filenames jar +complete -F _jar jar # Local variables: # mode: shell-script diff --git a/contrib/java b/completions/java index 76d2cd4e..460ae285 100644 --- a/contrib/java +++ b/completions/java @@ -1,13 +1,14 @@ # bash completion for java, javac and javadoc # available path elements completion -have java && { +have java || have javac || have javadoc && _java_path() { cur=${cur##*:} _filedir '@(jar|zip)' } +have java || have javadoc && { # exact classpath determination _java_find_classpath() { @@ -60,7 +61,7 @@ _java_classes() cur=${cur//.//} # parse each classpath element for classes for i in ${classpath//:/ }; do - if [[ -r $i && "$i" == *.@(jar|zip) ]]; then + if [[ "$i" == *.@(jar|zip) && -r $i ]]; then if type zipinfo &>/dev/null; then COMPREPLY=( "${COMPREPLY[@]}" $( zipinfo -1 \ "$i" "$cur*" 2>/dev/null | \ @@ -113,18 +114,20 @@ _java_packages() # convert path syntax to package syntax cur=${COMPREPLY[@]//\//.} } +} # java completion # +have java && _java() { - local cur prev i + local cur prev words cword i COMPREPLY=() - _get_comp_words_by_ref cur prev + _get_comp_words_by_ref -n : cur prev words cword - for ((i=1; i < $COMP_CWORD; i++)); do - case ${COMP_WORDS[$i]} in + for ((i=1; i < $cword; i++)); do + case ${words[$i]} in -cp|-classpath) ((i++)) # skip the classpath string. ;; @@ -139,6 +142,70 @@ _java() esac done + case $cur in + # standard option completions + -verbose:*) + COMPREPLY=( $( compgen -W 'class gc jni' -- "${cur#*:}" ) ) + return 0 + ;; + -javaagent:*) + cur=${cur#*:} + _filedir '@(jar|zip)' + return 0 + ;; + -agentpath:*) + cur=${cur#*:} + _filedir so + return 0 + ;; + # various non-standard option completions + -splash:*) + cur=${cur#*:} + _filedir '@(gif|jp?(e)g|png)' + return 0 + ;; + -Xbootclasspath*:*) + _java_path + return 0 + ;; + -Xcheck:*) + COMPREPLY=( $( compgen -W 'jni' -- "${cur#*:}" ) ) + return 0 + ;; + -Xgc:*) + COMPREPLY=( $( compgen -W 'singlecon gencon singlepar genpar' \ + -- "${cur#*:}" ) ) + return 0 + ;; + -Xgcprio:*) + COMPREPLY=( $( compgen -W 'throughput pausetime deterministic' \ + -- "${cur#*:}" ) ) + return 0 + ;; + -Xloggc:*|-Xverboselog:*) + cur=${cur#*:} + _filedir + return 0 + ;; + -Xshare:*) + COMPREPLY=( $( compgen -W 'auto off on' -- "${cur#*:}" ) ) + return 0 + ;; + -Xverbose:*) + COMPREPLY=( $( compgen -W 'memory load jni cpuinfo codegen opt + gcpause gcreport' -- "${cur#*:}" ) ) + return 0 + ;; + -Xverify:*) + COMPREPLY=( $( compgen -W 'all none remote' -- "${cur#*:}" ) ) + return 0 + ;; + # the rest that we have no completions for + -D*|-*:*) + return 0 + ;; + esac + case $prev in -cp|-classpath) _java_path @@ -147,13 +214,11 @@ _java() esac if [[ "$cur" == -* ]]; then - # relevant options completion - COMPREPLY=( $( compgen -W '-client -hotspot -server -classic \ - -classpath -D -verbose -verbose:class \ - -verbose:gc -version:jni -version \ - -showversion -help -X -jar \ - -enableassertions -disableassertions \ - -enablesystemassertions -disablesystemassertions ' -- "$cur" ) ) + # standard options + COMPREPLY=( $( compgen -W '-client -server -agentlib: -agentpath: + -classpath -D -d32 -d64 -enableassertions -disableassertions + -enablesystemassertions -disablesystemassertions -jar -javaagent: + -verbose -verbose -version -showversion -help -X' -- "$cur" ) ) else if [[ "$prev" == -jar ]]; then # jar file completion @@ -163,9 +228,13 @@ _java() _java_classes fi fi -} -complete -F _java -o filenames java -} + + [[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == -*[:=] ]] && \ + type compopt &>/dev/null && compopt -o nospace + + __ltrim_colon_completions "$cur" +} && +complete -F _java java have javadoc && _javadoc() @@ -176,11 +245,16 @@ _javadoc() _get_comp_words_by_ref cur prev case $prev in - -overview|-helpfile|-stylesheetfile) - _filedir + -overview|-helpfile) + _filedir '?(x)htm?(l)' return 0 ;; - -d) + -stylesheetfile) + _filedir css + return 0 + ;; + -d|-link|-linkoffline) + # TODO: -linkoffline takes two arguments _filedir -d return 0 ;; @@ -212,7 +286,7 @@ _javadoc() _java_packages fi } && -complete -F _javadoc -o filenames javadoc +complete -F _javadoc javadoc have javac && _javac() @@ -244,7 +318,7 @@ _javac() _filedir java fi } && -complete -F _javac -o filenames javac +complete -F _javac javac have pack200 && _pack200() @@ -284,6 +358,10 @@ _pack200() _filedir log return 0 ;; + -r|--repack) + _filedir jar + return 0 + ;; esac # Check if a pack or a jar was already given. @@ -302,7 +380,8 @@ _pack200() --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' -- "$cur" ) ) + --verbose --quiet --log-file= --help --version -J \ + --repack' -- "$cur" ) ) [[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == *= ]] && \ type compopt &>/dev/null && compopt -o nospace else @@ -413,7 +492,37 @@ _jarsigner() _filedir jar fi } && -complete -F _jarsigner -o filenames jarsigner +complete -F _jarsigner jarsigner + +have javaws && +_javaws() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -help|-license|-about|-viewer|-arg|-param|-property|-update|-umask) + return 0 + ;; + -basedir|-codebase) + _filedir -d + return 0 + ;; + -uninstall|-import) + _filedir jnlp + return 0 + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W "$( _parse_help "$1" -help ) " -- "$cur" ) ) + return 0 + fi + + _filedir jnlp +} && +complete -F _javaws javaws # Local variables: # mode: shell-script diff --git a/contrib/k3b b/completions/k3b index a2b0af6b..1965717b 100644 --- a/contrib/k3b +++ b/completions/k3b @@ -44,7 +44,7 @@ _k3b() _filedir fi } && -complete -F _k3b -o filenames k3b +complete -F _k3b k3b # Local variables: # mode: shell-script diff --git a/contrib/kldload b/completions/kldload index a230dbb5..e5bce0a3 100644 --- a/contrib/kldload +++ b/completions/kldload @@ -11,13 +11,14 @@ _kldload() [ -d $moddir ] || moddir=/boot/kernel/ _get_comp_words_by_ref cur + _compopt_o_filenames COMPREPLY=( $( compgen -f "$moddir$cur" ) ) COMPREPLY=( ${COMPREPLY[@]#$moddir} ) COMPREPLY=( ${COMPREPLY[@]%.ko} ) return 0 } -complete -F _kldload -o filenames kldload +complete -F _kldload kldload _kldunload() { @@ -26,7 +27,7 @@ _kldunload() COMPREPLY=( $( kldstat | \ sed -ne "s/^.*[ \t]\{1,\}\($cur[a-z_]\{1,\}\).ko$/\1/p" ) ) } -complete -F _kldunload -o filenames kldunload +complete -F _kldunload kldunload } diff --git a/contrib/larch b/completions/larch index e58374f7..e58374f7 100644 --- a/contrib/larch +++ b/completions/larch diff --git a/contrib/ldapvi b/completions/ldapvi index 31e26d1c..31e26d1c 100644 --- a/contrib/ldapvi +++ b/completions/ldapvi diff --git a/contrib/lftp b/completions/lftp index 15d0a977..1de87aec 100644 --- a/contrib/lftp +++ b/completions/lftp @@ -28,7 +28,8 @@ _lftp() '$( cut -f 1 -s ~/.lftp/bookmarks 2>/dev/null )' -- "$cur" ) ) _known_hosts_real "$cur" } && -complete -F _lftp -o filenames lftp +complete -F _lftp lftp + have lftpget && _lftpget() { diff --git a/contrib/lilo b/completions/lilo index ab0d9dc3..ab0d9dc3 100644 --- a/contrib/lilo +++ b/completions/lilo diff --git a/contrib/links b/completions/links index 4b5c683a..9b7b50f0 100644 --- a/contrib/links +++ b/completions/links @@ -32,7 +32,7 @@ _links() return 0 } && -complete -F _links -o filenames links +complete -F _links links # Local variables: # mode: shell-script diff --git a/contrib/lintian b/completions/lintian index a1f51546..e2237893 100644 --- a/contrib/lintian +++ b/completions/lintian @@ -181,6 +181,6 @@ _lintian_info() { return 0 } -complete -F _lintian -o filenames lintian -complete -F _lintian_info -o filenames lintian-info +complete -F _lintian lintian +complete -F _lintian_info lintian-info } diff --git a/contrib/lisp b/completions/lisp index ee43a019..ee43a019 100644 --- a/contrib/lisp +++ b/completions/lisp diff --git a/completions/lrzip b/completions/lrzip new file mode 100644 index 00000000..5cde88a8 --- /dev/null +++ b/completions/lrzip @@ -0,0 +1,64 @@ +# lrzip(1) completion + +have lrzip && +_lrzip() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + if [[ "$cur" == -* && $prev != -N ]]; then + COMPREPLY=( $( compgen -W '-w -d -o -O -S -f -D -q -L -n -l -b -g -M \ + -T -N -v -vv -V -h' -- "$cur" ) ) + return 0 + fi + + local xspec="*.lrz" + + case $prev in + -w|-S|-V|-h) + return 0 + ;; + -d) + xspec="!"$xspec + ;; + -o) + _filedir + return 0 + ;; + -O) + _filedir -d + return 0 + ;; + -L) + COMPREPLY=( $( compgen -W '1 2 3 4 5 6 7 8 9' -- "$cur" ) ) + return 0 + ;; + -T) + COMPREPLY=( $( compgen -W '1 2 3 4 5 6 7 8 9 10' -- "$cur" ) ) + return 0 + ;; + -N) + COMPREPLY=( $( compgen -W '-20 -19 -18 -17 -16 -15 -14 -13 -12 \ + -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 \ + 12 13 14 15 16 17 18 19' -- "$cur" ) ) + return 0 + ;; + esac + + _expand || return 0 + + local IFS=$'\n' + _compopt_o_filenames + COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ + $( compgen -d -- "$cur" ) ) +} && +complete -F _lrzip lrzip + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/completions/lsof b/completions/lsof new file mode 100644 index 00000000..ac010dad --- /dev/null +++ b/completions/lsof @@ -0,0 +1,64 @@ +# lsof(8) completion + +have lsof && +_lsof() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -'?'|-h|+c|-c|-d|-F|-i|+r|-r|-s|-S|-T) + return 0 + ;; + -A|-k|-m|+m|-o) + _filedir + return 0 + ;; + +d|+D) + _filedir -d + return 0 + ;; + -D) + COMPREPLY=( $( compgen -W '? b i r u' -- "$cur" ) ) + return 0 + ;; + -f) + COMPREPLY=( $( compgen -W 'c f g G n' -- "$cur" ) ) + return 0 + ;; + -g) + # TODO: handle ^foo exclusions, comma separated lists + _pgids + return 0 + ;; + -p) + # TODO: handle ^foo exclusions, comma separated lists + _pids + return 0 + ;; + -u) + # TODO: handle ^foo exclusions, comma separated lists + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + 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 0 + fi + + _filedir +} && +complete -F _lsof lsof + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/lvm b/completions/lvm index f4d3b77d..f4d3b77d 100644 --- a/contrib/lvm +++ b/completions/lvm diff --git a/contrib/lzma b/completions/lzma index a176f191..295ef37b 100644 --- a/contrib/lzma +++ b/completions/lzma @@ -16,7 +16,7 @@ _lzma() return 0 fi - local IFS=$'\t\n' + local IFS=$'\n' xspec="*.@(lzma|tlz)" if [[ "$prev" == --* ]]; then @@ -31,10 +31,11 @@ _lzma() _expand || return 0 + _compopt_o_filenames COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ $( compgen -d -- "$cur" ) ) } && -complete -F _lzma -o filenames lzma +complete -F _lzma lzma # Local variables: # mode: shell-script diff --git a/contrib/lzop b/completions/lzop index 19852b24..6d384128 100644 --- a/contrib/lzop +++ b/completions/lzop @@ -53,11 +53,12 @@ _lzop() _expand || return 0 - local IFS=$'\t\n' + local IFS=$'\n' + _compopt_o_filenames COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ $( compgen -d -- "$cur" ) ) } && -complete -F _lzop -o filenames lzop +complete -F _lzop lzop # Local variables: # mode: shell-script diff --git a/contrib/mailman b/completions/mailman index 33227897..b239cbbf 100644 --- a/contrib/mailman +++ b/completions/mailman @@ -368,7 +368,7 @@ _config_list() fi } && -complete -F _config_list -o filenames config_list +complete -F _config_list config_list # Try to detect whether this is the mailman "arch" to avoid installing # it for the coreutils/util-linux-ng one. @@ -416,7 +416,7 @@ _arch() fi } && -complete -F _arch -o filenames arch +complete -F _arch arch have cleanarch && _cleanarch() @@ -460,7 +460,7 @@ _inject() fi } && -complete -F _inject -o filenames inject +complete -F _inject inject have dumpdb && _dumpdb() @@ -478,7 +478,7 @@ _dumpdb() fi } && -complete -F _dumpdb -o filenames dumpdb +complete -F _dumpdb dumpdb have check_db && _check_db() diff --git a/contrib/make b/completions/make index e792b348..76e95284 100644 --- a/contrib/make +++ b/completions/make @@ -67,7 +67,7 @@ _make() fi } && -complete -F _make -o filenames make gmake gnumake pmake +complete -F _make make gmake gnumake pmake # Local variables: # mode: shell-script diff --git a/contrib/man b/completions/man index a3360b2e..9e5cd3a8 100644 --- a/contrib/man +++ b/completions/man @@ -11,7 +11,7 @@ _man() mansect="@([0-9lnp]|[0-9][px]|3pm)" COMPREPLY=() - _get_comp_words_by_ref cur prev + _get_comp_words_by_ref -n : cur prev if [[ "$prev" == -l ]]; then _filedir $manext @@ -66,12 +66,10 @@ _man() done fi + __ltrim_colon_completions "$cur" return 0 -} -[ $USERLAND = GNU -o $UNAME = Darwin \ - -o $UNAME = FreeBSD -o $UNAME = SunOS -o $UNAME = Cygwin \ - -o $UNAME = OpenBSD ] && \ -complete -F _man -o filenames man apropos whatis +} && +complete -F _man man apropos whatis # Local variables: # mode: shell-script diff --git a/contrib/mc b/completions/mc index 910fef13..09e9eabe 100644 --- a/contrib/mc +++ b/completions/mc @@ -36,7 +36,7 @@ _mc() _filedir -d fi } && -complete -F _mc -o filenames mc +complete -F _mc mc # Local variables: # mode: shell-script diff --git a/contrib/mcrypt b/completions/mcrypt index e777150f..32c4f89f 100644 --- a/contrib/mcrypt +++ b/completions/mcrypt @@ -58,12 +58,12 @@ _mcrypt() --list-hash --verbose --quiet --help \ --version --license' -- "$cur" ) ) elif [[ ${COMP_WORDS[0]} == mdecrypt ]]; then - _filedir '@(nc)' + _filedir nc else decrypt=0 for (( i=1; i < ${#COMP_WORDS[@]}-1; i++ )); do if [[ ${COMP_WORDS[i]} == -@(d|-decrypt) ]]; then - _filedir '@(nc)' + _filedir nc decrypt=1 break fi @@ -73,7 +73,7 @@ _mcrypt() fi fi } && -complete -o filenames -F _mcrypt mcrypt mdecrypt +complete -F _mcrypt mcrypt mdecrypt # Local variables: # mode: shell-script diff --git a/contrib/mdadm b/completions/mdadm index 9cbaad7b..9cbaad7b 100644 --- a/contrib/mdadm +++ b/completions/mdadm diff --git a/contrib/medusa b/completions/medusa index d8dcfe41..d8dcfe41 100644 --- a/contrib/medusa +++ b/completions/medusa diff --git a/contrib/minicom b/completions/minicom index 76553317..76553317 100644 --- a/contrib/minicom +++ b/completions/minicom diff --git a/contrib/mkinitrd b/completions/mkinitrd index 48893471..48893471 100644 --- a/contrib/mkinitrd +++ b/completions/mkinitrd diff --git a/contrib/module-init-tools b/completions/module-init-tools index 8c0f13ea..bf2d24d1 100644 --- a/contrib/module-init-tools +++ b/completions/module-init-tools @@ -50,7 +50,7 @@ _insmod() return 0 } && -complete -F _insmod -o filenames insmod modprobe modinfo +complete -F _insmod insmod modprobe modinfo # Local variables: # mode: shell-script diff --git a/contrib/monodevelop b/completions/monodevelop index 1aa117b0..69b23445 100644 --- a/contrib/monodevelop +++ b/completions/monodevelop @@ -50,6 +50,7 @@ _mdtool() return 0 ;; "generate-makefiles") + _compopt_o_filenames COMPREPLY=( $( compgen -o filenames -G"*.mds" -- "$cur" ) ) if [[ "$prev" == *mds ]]; then COMPREPLY=( $( compgen -W '--simple-makefiles --s --d:' \ @@ -74,7 +75,7 @@ _mdtool() return 0 } && -complete -F _mdtool -o filenames mdtool +complete -F _mdtool mdtool # Local variables: # mode: shell-script diff --git a/contrib/mount b/completions/mount index b14eef3e..b14eef3e 100644 --- a/contrib/mount +++ b/completions/mount diff --git a/contrib/mplayer b/completions/mplayer index 63af3122..39711370 100644 --- a/contrib/mplayer +++ b/completions/mplayer @@ -4,39 +4,51 @@ have mplayer && { _mplayer_options_list() { cur=${cur%\\} - COMPREPLY=( $( compgen -W "$( $1 $2 help 2>/dev/null | \ - sed -e '1,/^Available/d' | awk '{print $1}' | \ + COMPREPLY=( $( compgen -W "$( $1 -nomsgcolor -nomsgmodule $2 help 2>/dev/null | \ + sed -e '/^Available/,/^$/!d' -e '/^Available/d' | awk '{print $1}' | \ sed -e 's/:$//' -e 's/^'${2#-}'$//' -e 's/<.*//' )" -- "$cur" ) ) } _mplayer() { - local cmd cur prev skinsdir IFS=$' \t\n' i j k=0 + local cmd cur prev i j k=0 COMPREPLY=() cmd=${COMP_WORDS[0]} _get_comp_words_by_ref cur prev case $prev in - -[av][cfo]|-[av]fm|-vop|-fstype|-demuxer|-o[av]c|-of|-profile) + -[av][cfo]|-[av]fm|-vop|-fstype|-demuxer|-o[av]c|-of|-profile| \ + -audio-demuxer|-sub-demuxer) _mplayer_options_list $cmd $prev return 0 ;; + -show-profile) + _mplayer_options_list $cmd -profile + return 0 + ;; -audiofile) - _filedir '@(mp3|MP3|mpg|MPG|ogg|OGG|w?(a)v|W?(A)V|mid|MID|flac|FLAC|mka|MKA|ape|APE)' + _filedir '@(mp3|mpg|ogg|w?(a)v|mid|flac|mka|ape)' return 0 ;; - -font) - _filedir '@(desc|ttf)' + -font|-subfont) + if [ "$prev" = -font ]; then + _filedir '@(desc|ttf)' + else + _filedir ttf + fi + local IFS=$'\n' + COMPREPLY=( "${COMPREPLY[@]}" + $( compgen -W '$( fc-list 2>/dev/null )' -- "$cur" ) ) return 0 ;; -sub) - _filedir '@(srt|SRT|sub|SUB|txt|TXT|utf|UTF|rar|RAR|mpsub|smi|js|ssa|SSA|ass|ASS)' + _filedir '@(srt|sub|txt|utf|rar|mpsub|smi|js|ssa|ass)' return 0 ;; -vobsub) - _filedir '@(idx|IDX|ifo|IFO|sub|SUB)' - IFS=$'\t\n' + _filedir '@(idx|ifo|sub)' + local IFS=$'\n' COMPREPLY=( $( for i in "${COMPREPLY[@]}"; do if [[ -f $i && -r $i ]]; then printf '%s\n' ${i%.*} @@ -44,28 +56,28 @@ _mplayer() printf '%s\n' $i fi done ) ) - IFS=$' \t\n' return 0 ;; -ifo) - _filedir '@(ifo|IFO)' + _filedir ifo return 0 ;; -cuefile) - _filedir '@(bin|BIN|cue|CUE)' + _filedir '@(bin|cue)' return 0 ;; -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 - skinsdir=$MPLAYER_SKINS_DIR + dirs=($MPLAYER_SKINS_DIR) else - skinsdir=/usr/share/mplayer/Skin + dirs=(/usr/share/mplayer/skins /usr/local/share/mplayer/skins) fi - IFS=$'\t\n' - for i in ~/.mplayer/Skin $skinsdir; do + 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/} @@ -73,7 +85,6 @@ _mplayer() done fi done - IFS=$' \t\n' return 0 ;; -cdrom-device) @@ -82,7 +93,7 @@ _mplayer() return 0 ;; -dvd-device) - _dvd_devices + _filedir return 0 ;; -mixer|-dvdauth|-fb|-zrdev) @@ -97,7 +108,7 @@ _mplayer() return 0 ;; -autoq|-autosync|-loop|-menu-root|-speed|-sstep|-aid|-alang| \ - -audo-demuxer|-sub-demuxer|-demuxer|-bandwidth|-cache|-chapter| \ + -bandwidth|-cache|-chapter| \ -dvd|-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| \ @@ -115,7 +126,7 @@ _mplayer() return 0 ;; -lavdopts) - COMPREPLY=( $( compgen -W 'ec er= bug= idct= gray' -- "$cur" ) ) + COMPREPLY=( $( compgen -W 'bitexact bug= debug= ec= er= fast gray idct= lowres= sb= st= skiploopfilter= skipidct= skipframe= threads= vismv= vstats' -- "$cur" ) ) return 0 ;; -lavcopts) @@ -226,23 +237,27 @@ _mplayer() COMPREPLY=( $( compgen -W 'force= list=' -- "$cur" ) ) return 0 ;; + -noconfig) + COMPREPLY=( $( compgen -W 'all gui system user' -- "$cur" ) ) + return 0 + ;; esac case $cur in -*) - COMPREPLY=( $( compgen -W '$( $cmd -list-options 2>/dev/null | \ + COMPREPLY=( $( compgen -W '$( $cmd -nomsgcolor -nomsgmodule -list-options 2>/dev/null | \ sed -ne '1,/^[[:space:]]*Name/d' \ -e "s/^[[:space:]]*/-/" -e "s/[[:space:]:].*//" \ -e "/^-\(Total\|.*\*\)\{0,1\}$/!p" )' -- "$cur" ) ) ;; *) - _filedir '@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|ASF|vob|VOB|bin|BIN|dat|DAT|vcd|VCD|ps|PS|pes|PES|fl[iv]|FL[IV]|fxm|FXM|viv|VIV|rm?(j)|RM?(J)|ra?(m)|RA?(M)|yuv|YUV|mov|MOV|qt|QT|mp[234]|MP[234]|m4[av]|M4[AV]|og[gmavx]|OG[GMAVX]|w?(a)v|W?(A)V|dump|DUMP|mk[av]|MK[AV]|m4a|M4A|aac|AAC|m[24]v|M[24]V|dv|DV|rmvb|RMVB|mid|MID|t[ps]|T[PS]|3g[p2]|mpc|MPC|flac|FLAC|vro|VRO|divx|DIVX|aif?(f)|AIF?(F)|m2ts|M2TS|vdr|VDR|xvid|XVID|ape|APE)' + _filedir '@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|ASF|vob|VOB|bin|BIN|dat|DAT|vcd|VCD|ps|PS|pes|PES|fl[iv]|FL[IV]|fxm|FXM|viv|VIV|rm?(j)|RM?(J)|ra?(m)|RA?(M)|yuv|YUV|mov|MOV|qt|QT|mp[234]|MP[234]|m4[av]|M4[AV]|og[gmavx]|OG[GMAVX]|w?(a)v|W?(A)V|dump|DUMP|mk[av]|MK[AV]|m4a|M4A|aac|AAC|m[24]v|M[24]V|dv|DV|rmvb|RMVB|mid|MID|t[ps]|T[PS]|3g[p2]|3gpp?(2)|mpc|MPC|flac|FLAC|vro|VRO|divx|DIVX|aif?(f)|AIF?(F)|m2t?(s)|M2T?(S)|vdr|VDR|xvid|XVID|ape|APE|gif|GIF|nut|NUT|bik|BIK|webm|WEBM|amr|AMR|awb|AWB|iso|ISO)?(.part)' ;; esac return 0 } -complete -o filenames -F _mplayer mplayer mencoder gmplayer kplayer +complete -F _mplayer mplayer mencoder gmplayer kplayer } # Local variables: diff --git a/contrib/msynctool b/completions/msynctool index 3f9afb7f..3f9afb7f 100644 --- a/contrib/msynctool +++ b/completions/msynctool diff --git a/contrib/mtx b/completions/mtx index 0454f032..0454f032 100644 --- a/contrib/mtx +++ b/completions/mtx diff --git a/contrib/munin-node b/completions/munin-node index abf2b0f6..abf2b0f6 100644 --- a/contrib/munin-node +++ b/completions/munin-node diff --git a/contrib/mutt b/completions/mutt index fc12e690..e5e9d289 100644 --- a/contrib/mutt +++ b/completions/mutt @@ -37,8 +37,11 @@ _muttrc() done if [ -z "$muttrc" ]; then - [ -f ~/.${muttcmd}/${muttcmd}rc ] && muttrc="~/.${muttcmd}/${muttcmd}rc" - [ -f ~/.${muttcmd}rc ] && muttrc="~/.${muttcmd}rc" + if [ -f ~/.${muttcmd}rc ]; then + muttrc="~/.${muttcmd}rc" + elif [ -f ~/.${muttcmd}/${muttcmd}rc ]; then + muttrc="~/.${muttcmd}/${muttcmd}rc" + fi fi printf "%s" "$muttrc" } # _muttrc() @@ -58,7 +61,7 @@ _muttconffiles() while [[ "$1" ]]; do newconffiles=( $(sed -n 's|^source[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' $(eval echo $1) ) ) for file in "${newconffiles[@]}"; do - [[ ! "$file" ]] || [[ "${sofar/ ${file} / }" != "$sofar" ]] && + [[ ! -f "$file" || "${sofar/ ${file} / }" != "$sofar" ]] && continue sofar="$sofar $file" sofar=" $(eval _muttconffiles \"$sofar\" $file) " @@ -120,6 +123,7 @@ _muttfiledir() # 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 0 @@ -170,7 +174,7 @@ _mutt() ;; esac } # _mutt() -complete -F _mutt -o default -o filenames mutt muttng +complete -F _mutt -o default mutt muttng } # have mutt # Local variables: diff --git a/contrib/mysqladmin b/completions/mysqladmin index a7e002d3..c9415696 100644 --- a/contrib/mysqladmin +++ b/completions/mysqladmin @@ -60,7 +60,7 @@ _mysqladmin() kill password old-password ping processlist reload refresh shutdown \ status start-slave stop-slave variables version' -- "$cur" ) ) } && -complete -F _mysqladmin -o filenames mysqladmin +complete -F _mysqladmin mysqladmin # Local variables: # mode: shell-script diff --git a/contrib/ncftp b/completions/ncftp index b831f444..b831f444 100644 --- a/contrib/ncftp +++ b/completions/ncftp diff --git a/contrib/net-tools b/completions/net-tools index 5b86a64a..e7de2b04 100644 --- a/contrib/net-tools +++ b/completions/net-tools @@ -96,6 +96,32 @@ _route() } && complete -F _route route +have ether-wake && +_ether_wake() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref -n : cur prev + + case $prev in + -i) + _available_interfaces + return 0 + ;; + -p) + return 0 + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '-b -D -i -p -V' -- "$cur" ) ) + return 0 + fi + + _mac_addresses +} && +complete -F _ether_wake ether-wake + # Local variables: # mode: shell-script # sh-basic-offset: 4 diff --git a/contrib/nmap b/completions/nmap index 19f0a07e..19f0a07e 100644 --- a/contrib/nmap +++ b/completions/nmap diff --git a/contrib/ntpdate b/completions/ntpdate index bf004b55..bf004b55 100644 --- a/contrib/ntpdate +++ b/completions/ntpdate diff --git a/completions/open-iscsi b/completions/open-iscsi new file mode 100644 index 00000000..8c650d59 --- /dev/null +++ b/completions/open-iscsi @@ -0,0 +1,78 @@ +# iscsiadm(1) completion + +have iscsiadm && +_iscsiadm() +{ + local cur prev mode split=false + + COMPREPLY=() + _get_comp_words_by_ref cur prev + + _split_longopt && split=true + + case $prev in + -m|--mode) + COMPREPLY=( $( compgen -W 'discovery node session iface fw host' \ + -- "$cur" ) ) + return 0; + ;; + -o|--op) + COMPREPLY=( $( compgen -W 'new delete update show' -- "$cur" ) ) + return 0; + ;; + -t|--type) + COMPREPLY=( $( compgen -W 'sendtargets st slp isns fw' -- "$cur" ) ) + return 0; + ;; + -L|-U|--loginall|--logoutall) + COMPREPLY=( $( compgen -W 'all manual automatic' -- "$cur" ) ) + return 0; + ;; + esac + + $split && return 0 + + local options + if [[ $COMP_CWORD -gt 1 ]] ; then + mode=${COMP_WORDS[2]} + + case $mode 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 + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/openldap b/completions/openldap index e4bbba1f..e4bbba1f 100644 --- a/contrib/openldap +++ b/completions/openldap diff --git a/contrib/openssl b/completions/openssl index 568f2dbf..e9796e6f 100644 --- a/contrib/openssl +++ b/completions/openssl @@ -217,7 +217,7 @@ _openssl() ;; x509) options='-inform -outform -keyform -CAform -CAkeyform -in \ - -out -serial -hash -subject-hash -issuer_hash -subject \ + -out -serial -hash -subject_hash -issuer_hash -subject \ -issuer -nameopt -email -startdate -enddate -purpose \ -dates -modulus -fingerprint -alias -noout -trustout \ -clrtrust -clrreject -addtrust -addreject -setalias \ diff --git a/contrib/p4 b/completions/p4 index 0795a28e..59b02c1d 100644 --- a/contrib/p4 +++ b/completions/p4 @@ -3,10 +3,10 @@ have p4 && _p4() { - local cur prev preprev p4commands p4filetypes + local cur prev words cword p4commands p4filetypes COMPREPLY=() - _get_comp_words_by_ref cur prev preprev + _get_comp_words_by_ref cur prev words cword # rename isn't really a command p4commands="$( p4 help commands | awk 'NF>3 {print $1}' )" @@ -14,9 +14,9 @@ _p4() uresource uxbinary xbinary xltext xtempobj xtext \ text binary resource" - if [ $COMP_CWORD -eq 1 ]; then + if [ $cword -eq 1 ]; then COMPREPLY=( $( compgen -W "$p4commands" -- "$cur" ) ) - elif [ $COMP_CWORD -eq 2 ]; then + elif [ $cword -eq 2 ]; then case $prev in help) COMPREPLY=( $( compgen -W "simple commands \ @@ -29,10 +29,10 @@ _p4() *) ;; esac - elif [ $COMP_CWORD -gt 2 ]; then + elif [ $cword -gt 2 ]; then case $prev in -t) - case $preprev in + case ${words[$cword-2]} in add|edit|reopen) COMPREPLY=( $( compgen -W "$p4filetypes" -- "$cur") ) ;; diff --git a/completions/perl b/completions/perl new file mode 100644 index 00000000..843e249b --- /dev/null +++ b/completions/perl @@ -0,0 +1,131 @@ +# bash completion for perl + +have perl && +{ +_perlmodules() +{ + COMPREPLY=( $( compgen -P "$prefix" -W "$( $1 ${BASH_SOURCE[0]%/*}/helpers/perl modules $cur )" -- "$cur" ) ) + __ltrim_colon_completions "$prefix$cur" +} + +_perlfunctions() +{ + COMPREPLY=( $( compgen -P "$prefix" -W "$( ${BASH_SOURCE[0]%/*}/helpers/perl functions $cur )" -- "$cur" ) ) +} + +_perl() +{ + local cur prev prefix temp + local optPrefix optSuffix + + COMPREPLY=() + _get_comp_words_by_ref -n : cur prev + prefix="" + + # If option not followed by whitespace, reassign prev and cur + if [[ "$cur" == -?* ]]; then + temp=$cur + prev=${temp:0:2} + cur=${temp:2} + optPrefix=-P$prev + optSuffix=-S/ + prefix=$prev + fi + + case $prev in + -D|-e|-E|-i|-F|-l) + return 0 + ;; + -I|-x) + local IFS=$'\n' + _compopt_o_filenames + COMPREPLY=( $( compgen -d $optPrefix $optSuffix -- "$cur" ) ) + return 0 + ;; + -m|-M) + temp="${cur#-}" + prefix="$prefix${cur%$temp}" + cur="$temp" + _perlmodules $1 + return 0 + ;; + -V) + if [[ $cur == :* ]]; then + temp="${cur##+(:)}" + prefix="$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 0 + ;; + -d|-dt) + if [[ $cur == :* ]]; then + temp="${cur#:}" + prefix="$prefix${cur%$temp}" + cur="Devel::$temp" + _perlmodules $1 + fi + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-C -s -T -u -U -W -X -h -v -V -c -w -d \ + -D -p -n -a -F -l -0 -I -m -M -P -S -x -i -e ' -- "$cur" ) ) + else + _filedir + fi +} +complete -F _perl perl + +_perldoc() +{ + local cur prev prefix temp + + COMPREPLY=() + _get_comp_words_by_ref -n : cur prev + prefix="" + + # completing an option (may or may not be separated by a space) + if [[ "$cur" == -?* ]]; then + temp=$cur + prev=${temp:0:2} + cur=${temp:2} + prefix=$prev + fi + + # complete builtin perl functions + case $prev in + -f) + _perlfunctions "$cur" + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-h -v -t -u -m -l -F -X -f -q' -- "$cur" )) + else + # return available modules (unless it is clearly a file) + if [[ "$cur" != */* ]]; then + _perlmodules + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W \ + '$( PAGER=/bin/cat man perl | \ + sed -ne "/perl.*Perl overview/,/perlwin32/p" | \ + awk "\$NF=2 { print \$1}" | command grep perl )' -- "$cur" ) ) + fi + _filedir 'p@(l|m|od)' + fi +} +complete -F _perldoc -o bashdefault perldoc +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/pine b/completions/pine index 2f069287..2f069287 100644 --- a/contrib/pine +++ b/completions/pine diff --git a/contrib/pkg-config b/completions/pkg-config index b999bd81..b999bd81 100644 --- a/contrib/pkg-config +++ b/completions/pkg-config diff --git a/contrib/pkg_install b/completions/pkg_install index 577d9c94..577d9c94 100644 --- a/contrib/pkg_install +++ b/completions/pkg_install diff --git a/contrib/pkgtools b/completions/pkgtools index 3a5df278..3a5df278 100644 --- a/contrib/pkgtools +++ b/completions/pkgtools diff --git a/contrib/pm-utils b/completions/pm-utils index 4deb82e7..4deb82e7 100644 --- a/contrib/pm-utils +++ b/completions/pm-utils diff --git a/contrib/portupgrade b/completions/portupgrade index 5389a5ca..5389a5ca 100644 --- a/contrib/portupgrade +++ b/completions/portupgrade diff --git a/contrib/postfix b/completions/postfix index ec91c1a3..1311c987 100644 --- a/contrib/postfix +++ b/completions/postfix @@ -29,7 +29,7 @@ _postfix() COMPREPLY=( $( compgen -W 'check start stop abort flush reload status \ set-permissions upgrade-configuration' -- "$cur" ) ) } -complete -F _postfix -o filenames postfix +complete -F _postfix postfix # postalias(1) and postmap(1) # @@ -51,13 +51,14 @@ _postmap() esac if [[ $cur == -* ]]; then - COMPREPLY=( $( compgen -W '-N -f -i -n -o -p -r -v -w -c -d -q'\ + COMPREPLY=( $( compgen -W '-N -f -i -n -o -p -r -v -w -c -d -q' \ -- "$cur" ) ) return 0 fi if [[ "$cur" == *:* ]]; then - COMPREPLY=( $( compgen -f -- "${cur#*:}" ) ) + _compopt_o_filenames + COMPREPLY=( $( compgen -f -- "${cur#*:}" ) ) else len=${#cur} idx=0 @@ -68,12 +69,13 @@ _postmap() fi done if [[ $idx -eq 0 ]]; then + _compopt_o_filenames COMPREPLY=( $( compgen -f -- "$cur" ) ) fi fi return 0 } -complete -F _postmap -o filenames postmap postalias +complete -F _postmap postmap postalias # postcat(1) # @@ -116,7 +118,7 @@ _postcat() return 0 fi } -complete -F _postcat -o filenames postcat +complete -F _postcat postcat # postconf(1) # @@ -143,7 +145,7 @@ _postconf() esac if [[ $cur == -* ]]; then - COMPREPLY=( $( compgen -W '-A -a -b -c -d -e -h -m -l -n -t -v'\ + COMPREPLY=( $( compgen -W '-A -a -b -c -d -e -h -m -l -n -t -v' \ -- "$cur" ) ) return 0 fi @@ -158,7 +160,7 @@ _postconf() done return 0 } -complete -F _postconf -o filenames postconf +complete -F _postconf postconf # postsuper(1) # @@ -219,7 +221,7 @@ _postsuper() COMPREPLY=( $( compgen -W 'hold incoming active deferred' -- "$cur" ) ) } -complete -F _postsuper -o filenames postsuper +complete -F _postsuper postsuper } # Local variables: diff --git a/contrib/postgresql b/completions/postgresql index 392c9aa6..f874b67b 100644 --- a/contrib/postgresql +++ b/completions/postgresql @@ -3,19 +3,18 @@ have psql && { _pg_databases() { - return # See https://launchpad.net/bugs/164772 - COMPREPLY=( $( compgen -W "$( psql -l 2>/dev/null | \ - sed -e '1,/^-/d' -e '/^(/,$d' | \ - awk '{print $1}' )" -- "$cur" ) ) + # -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 -AtqwlF $'\t' 2>/dev/null | \ + awk 'NF > 1 { print $1 }' )" -- "$cur" ) ) } _pg_users() { - # See https://launchpad.net/bugs/164772 - #COMPREPLY=( $( psql -qtc 'select usename from pg_user' template1 2>/dev/null | \ - # command grep "^ $cur" ) ) - #[ ${#COMPREPLY[@]} -eq 0 ] && COMPREPLY=( $( compgen -u -- $cur ) ) - COMPREPLY=( $( compgen -u -- "$cur" ) ) + # -w was introduced in 8.4, https://launchpad.net/bugs/164772 + COMPREPLY=( $( compgen -W "$( psql -Atqwc 'select usename from pg_user' \ + template1 2>/dev/null )" -- "$cur" ) ) + [ ${#COMPREPLY[@]} -eq 0 ] && COMPREPLY=( $( compgen -u -- "$cur" ) ) } # createdb(1) completion @@ -151,7 +150,7 @@ _psql() _pg_databases fi } -complete -F _psql -o filenames psql +complete -F _psql psql } # Local variables: diff --git a/contrib/povray b/completions/povray index cd03b940..a843a5cb 100644 --- a/contrib/povray +++ b/completions/povray @@ -7,7 +7,7 @@ _povray() defoext=png # default output extension, if cannot be determined FIXME COMPREPLY=() - _get_comp_words_by_ref povcur prev + _get_comp_words_by_ref -c povcur prev _expand || return 0 @@ -49,12 +49,12 @@ _povray() ;; *) cur="$povcur" - _filedir '?(ini|pov)' + _filedir '@(ini|pov)' return 0 ;; esac } && -complete -F _povray -o filenames povray xpovray spovray +complete -F _povray povray xpovray spovray # Local variables: # mode: shell-script diff --git a/contrib/procps b/completions/procps index db8fc3d5..db8fc3d5 100644 --- a/contrib/procps +++ b/completions/procps diff --git a/completions/python b/completions/python new file mode 100644 index 00000000..17f96f50 --- /dev/null +++ b/completions/python @@ -0,0 +1,55 @@ +# bash completion for python + +have python && +_python() +{ + local prev cur i + + COMPREPLY=() + _get_comp_words_by_ref cur prev + + case $prev in + -'?'|-h|--help|-V|--version|-c|-m) + return 0 + ;; + -Q) + COMPREPLY=( $( compgen -W "old new warn warnall" -- "$cur" ) ) + return 0 + ;; + -W) + COMPREPLY=( $( compgen -W "ignore default all module once error" \ + -- "$cur" ) ) + return 0 + ;; + !(?(*/)python*([0-9.])|-?)) + [[ $COMP_CWORD -lt 2 || ${COMP_WORDS[COMP_CWORD-2]} != -@(Q|W) ]] \ + && _filedir + ;; + esac + + + # if '-c' is already given, complete all kind of files. + for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do + if [[ ${COMP_WORDS[i]} == -c ]]; then + _filedir + fi + done + + + if [[ "$cur" != -* ]]; then + _filedir 'py?([co])' + else + COMPREPLY=( $( compgen -W "$( _parse_help $1 -h )" -- "$cur" ) ) + fi + + return 0 +} && +complete -F _python python python2 python3 + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/qdbus b/completions/qdbus index 879df68d..879df68d 100644 --- a/contrib/qdbus +++ b/completions/qdbus diff --git a/contrib/qemu b/completions/qemu index 1c7a8da0..03fa5632 100644 --- a/contrib/qemu +++ b/completions/qemu @@ -96,7 +96,7 @@ _qemu() return 0 ;; -runas) - COMPREPLY=( $( compgen -u -- "$cur" ) ) + _allowed_users return 0 ;; esac @@ -121,7 +121,7 @@ _qemu() _filedir fi } && -complete -F _qemu -o filenames qemu +complete -F _qemu qemu # Local variables: # mode: shell-script diff --git a/contrib/quota-tools b/completions/quota-tools index 2b528d92..2b528d92 100644 --- a/contrib/quota-tools +++ b/completions/quota-tools diff --git a/contrib/rcs b/completions/rcs index 42ac8d5a..d859b8a9 100644 --- a/contrib/rcs +++ b/completions/rcs @@ -32,7 +32,7 @@ _rcs() # otherwise, default to directories [[ ${#COMPREPLY[@]} -eq 0 && $1 == ci ]] && _filedir || _filedir -d } && -complete -F _rcs -o filenames ci co rlog rcs rcsdiff +complete -F _rcs ci co rlog rcs rcsdiff # Local variables: # mode: shell-script diff --git a/contrib/rdesktop b/completions/rdesktop index 7acf47a5..7acf47a5 100644 --- a/contrib/rdesktop +++ b/completions/rdesktop diff --git a/contrib/reportbug b/completions/reportbug index 51e37fb7..0c44bd68 100644 --- a/contrib/reportbug +++ b/completions/reportbug @@ -84,7 +84,7 @@ _reportbug() _filedir return 0 } && -complete -F _reportbug -o filenames reportbug +complete -F _reportbug reportbug have querybts && _querybts() @@ -121,7 +121,7 @@ _querybts() www.debian.org' -- "$cur" ) \ $( apt-cache pkgnames -- "$cur" 2> /dev/null) ) } && -complete -F _querybts -o filenames querybts +complete -F _querybts querybts # Local variables: # mode: shell-script diff --git a/contrib/resolvconf b/completions/resolvconf index 9773696d..9773696d 100644 --- a/contrib/resolvconf +++ b/completions/resolvconf diff --git a/contrib/rfkill b/completions/rfkill index 5c51ff9d..5c51ff9d 100644 --- a/contrib/rfkill +++ b/completions/rfkill diff --git a/contrib/ri b/completions/ri index be66d98f..be66d98f 100644 --- a/contrib/ri +++ b/completions/ri diff --git a/contrib/rpcdebug b/completions/rpcdebug index be2a8709..be2a8709 100644 --- a/contrib/rpcdebug +++ b/completions/rpcdebug diff --git a/contrib/rpm b/completions/rpm index 20f98522..bbab0368 100644 --- a/contrib/rpm +++ b/completions/rpm @@ -24,8 +24,6 @@ _rpm_installed_packages() _rpm_groups() { - # TODO: shown completions are wrong but real ones work nevertheless - # http://lists.alioth.debian.org/pipermail/bash-completion-devel/2009-May/001486.html local IFS=$'\n' COMPREPLY=( $( compgen -W "$( rpm -qa $nodig $nosig --queryformat \ '%{group}\n' )" -- "$cur" ) ) @@ -101,6 +99,7 @@ _rpm() return 0 ;; --pipe) + _compopt_o_filenames COMPREPLY=( $( compgen -c -- "$cur" ) ) return 0 ;; @@ -118,9 +117,9 @@ _rpm() _filedir else # complete on capabilities - local IFS=$'\n' - COMPREPLY=( $( compgen -W "$( rpm -qa $nodig $nosig \ - --queryformat='%{providename}\n' )" -- "$cur" ) ) + local IFS=$'\n' + COMPREPLY=( $( compgen -W "$( rpm -qa $nodig $nosig \ + --queryformat='%{providename}\n' )" -- "$cur" ) ) fi return 0 ;; @@ -131,8 +130,7 @@ _rpm() # complete on capabilities local IFS=$'\n' COMPREPLY=( $( compgen -W "$( rpm -qa $nodig $nosig \ - --queryformat='%{requirename}\n' )" \ - -- "$cur" ) ) + --queryformat='%{requirename}\n' )" -- "$cur" ) ) fi return 0 ;; @@ -142,7 +140,7 @@ _rpm() -- "$cur" ) ) return 0 ;; - --define|-D) + --define|-D|--fileid|--hdrid|--pkgid) # argument required but no completions available return 0 ;; @@ -164,7 +162,7 @@ _rpm() --excludepath --ignoresize --oldpackage \ --queryformat --repackage --nosuggests" -- "$cur" ) ) else - _filedir 'rpm' + _filedir '[rs]pm' fi ;; -e|--erase) @@ -180,12 +178,11 @@ _rpm() # options common to all query types opts="$opts --changelog --configfiles --conflicts --docfiles --dump --enhances --filesbypkg --filecaps --fileclass - --filecolor --fileprovide --filerequire --filesbypkg - --info --list --obsoletes --pipe --provides - --queryformat --rcfile --requires --scripts --suggests - --triggeredby --triggers --whatprovides --whatrequires --xml" + --filecolor --fileprovide --filerequire --filesbypkg --info + --list --obsoletes --pipe --provides --queryformat --rcfile + --requires --scripts --suggests --triggers --xml" - if [ "${COMP_LINE#* -*([^ -])f}" != "$COMP_LINE" ]; then + if [[ $COMP_LINE == *\ -@(*([^ -])f|-file )* ]]; then # -qf completion if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W "$opts --dbpath --fscontext \ @@ -193,23 +190,26 @@ _rpm() else _filedir fi - elif [ "${COMP_LINE#* -*([^ -])g}" != "$COMP_LINE" ]; then + elif [[ $COMP_LINE == *\ -@(*([^ -])g|-group )* ]]; then # -qg completion _rpm_groups - elif [ "${COMP_LINE#* -*([^ -])p}" != "$COMP_LINE" ]; then + elif [[ $COMP_LINE == *\ -@(*([^ -])p|-package )* ]]; then # -qp; uninstalled package completion if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W "$opts --ftpport --ftpproxy \ - --httpport --httpproxy" -- "$cur" ) ) + --httpport --httpproxy --nomanifest" -- "$cur" ) ) else - _filedir 'rpm' + _filedir '[rs]pm' fi else # -q; installed package completion if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W "$opts --dbpath --fscontext \ - --last --root --state" -- "$cur" ) ) - elif [ "${COMP_LINE#* -*([^ -])a}" == "$COMP_LINE" ]; then + COMPREPLY=( $( compgen -W "$opts --all --file --fileid + --dbpath --fscontext --ftswalk --group --hdrid --last + --package --pkgid --root --specfile --state + --triggeredby --whatprovides --whatrequires" \ + -- "$cur" ) ) + elif [[ $COMP_LINE != *\ -@(*([^ -])a|-all )* ]]; then _rpm_installed_packages "$nodig" "$nosig" fi fi @@ -219,7 +219,7 @@ _rpm() COMPREPLY=( $( compgen -W "$opts --nopgp --nogpg --nomd5" \ -- "$cur" ) ) else - _filedir 'rpm' + _filedir '[rs]pm' fi ;; -[Vy]*|--verify) @@ -229,12 +229,12 @@ _rpm() --nofiles --noscripts --nomd5 --querytags --specfile \ --whatrequires --whatprovides" -- "$cur" ) ) # check whether we're doing file completion - elif [ "${COMP_LINE#* -*([^ -])f}" != "$COMP_LINE" ]; then + elif [[ $COMP_LINE == *\ -@(*([^ -])f|-file )* ]]; then _filedir - elif [ "${COMP_LINE#* -*([^ -])g}" != "$COMP_LINE" ]; then + elif [[ $COMP_LINE == *\ -@(*([^ -])g|-group )* ]]; then _rpm_groups - elif [ "${COMP_LINE#* -*([^ -])p}" != "$COMP_LINE" ]; then - _filedir 'rpm' + elif [[ $COMP_LINE == *\ -@(*([^ -])p|-package )* ]]; then + _filedir '[rs]pm' else _rpm_installed_packages "$nodig" "$nosig" fi @@ -245,9 +245,9 @@ _rpm() --clean --rmsource --rmspec --test --sign --buildroot \ --target --nobuild --nodeps --nodirtokens" -- "$cur" ) ) elif [[ ${COMP_WORDS[1]} == -b* ]]; then - _filedir 'spec' + _filedir spec else - _filedir '@(t?(ar.)@([gx]z|bz?(2))|tar.@(lzma|Z))' + _filedir '@(t?(ar.)@([gx]z|bz?(2))|tar?(.@(lzma|Z)))' fi ;; --rebuild|--recompile) @@ -255,14 +255,14 @@ _rpm() COMPREPLY=( $( compgen -W "$opts --nodeps --rmsource \ --rmspec --sign --nodirtokens --target" -- "$cur" ) ) else - _filedir '?(no)src.rpm' + _filedir '@(?(no)src.r|s)pm' fi ;; --tarbuild) - _filedir '@(t?(ar.)@([gx]z|bz?(2))|tar.@(lzma|Z))' + _filedir '@(t?(ar.)@([gx]z|bz?(2))|tar?(.@(lzma|Z)))' ;; --resign|--addsign) - _filedir 'rpm' + _filedir '[rs]pm' ;; --setperms|--setgids) _rpm_installed_packages "$nodig" "$nosig" @@ -272,12 +272,12 @@ _rpm() COMPREPLY=( $( compgen -W '--clean --rmsource --rmspec' \ -- "$cur" ) ) else - _filedir 'spec' + _filedir spec fi ;; --import|--dbpath|--root) if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--import --dbpath --root' \ + COMPREPLY=( $( compgen -W '--import --dbpath --root' \ -- "$cur" ) ) else _filedir @@ -287,9 +287,19 @@ _rpm() return 0 } -complete -F _rpm -o filenames rpm rpmbuild +complete -F _rpm rpm rpmbuild } +have gendiff && +_gendiff() +{ + COMPREPLY=() + local cur cword + _get_comp_words_by_ref cur cword + [[ $cword != 1 ]] || _filedir -d +} && +complete -F _gendiff gendiff + # Local variables: # mode: shell-script # sh-basic-offset: 4 diff --git a/contrib/rpmcheck b/completions/rpmcheck index 5d9aada7..5d9aada7 100644 --- a/contrib/rpmcheck +++ b/completions/rpmcheck diff --git a/contrib/rrdtool b/completions/rrdtool index 0b15a23f..0b15a23f 100644 --- a/contrib/rrdtool +++ b/completions/rrdtool diff --git a/contrib/rsync b/completions/rsync index b0f2d106..b0f2d106 100644 --- a/contrib/rsync +++ b/completions/rsync diff --git a/contrib/rtcwake b/completions/rtcwake index c95c1d76..c95c1d76 100644 --- a/contrib/rtcwake +++ b/completions/rtcwake diff --git a/contrib/samba b/completions/samba index 61d78abc..61d78abc 100644 --- a/contrib/samba +++ b/completions/samba diff --git a/contrib/sbcl b/completions/sbcl index a43ec1fc..33671a6e 100644 --- a/contrib/sbcl +++ b/completions/sbcl @@ -11,16 +11,16 @@ _sbcl() # completing an option (may or may not be separated by a space) if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--core --noinform --help --version \ - --sysinit --userinit --eval --noprint --disable-debugger \ - --end-runtime-options --end-toplevel-options ' -- "$cur" ) ) + COMPREPLY=( $( compgen -W '--core --noinform --help --version + --sysinit --userinit --eval --noprint --disable-debugger + --end-runtime-options --end-toplevel-options ' -- "$cur" ) ) else - _filedir + _filedir fi return 0 } && -complete -F _sbcl -o filenames sbcl sbcl-mt +complete -F _sbcl sbcl sbcl-mt # Local variables: # mode: shell-script diff --git a/contrib/screen b/completions/screen index cabc4b7a..952d9766 100644 --- a/contrib/screen +++ b/completions/screen @@ -3,16 +3,9 @@ have screen && _screen_sessions() { - local pattern - - if [ -n "$1" ]; then - pattern=".*$1.*" - else - pattern=".*" - fi - - COMPREPLY=( $( command screen -ls | sed -ne \ - 's|^['$'\t'']\{1,\}\('"$cur"'[0-9]\{1,\}\.[^'$'\t'']\{1,\}\)'"$pattern"'$|\1|p' ) ) + COMPREPLY=( $( compgen -W "$( command screen -ls | sed -ne \ + 's|^\t\{1,\}\([0-9]\{1,\}\.[^\t]\{1,\}\).*'"$1"'.*$|\1|p' )" \ + -- "$cur" ) ) } && _screen() { @@ -36,11 +29,16 @@ _screen() _screen_sessions 'Detached' return 0 ;; - -[dDx]) + -[dD]) # list attached _screen_sessions 'Attached' return 0 ;; + -x) + # list both + _screen_sessions + return 0 + ;; -s) _shells return 0 diff --git a/contrib/service b/completions/service index 9ebd117d..1a36f59b 100644 --- a/contrib/service +++ b/completions/service @@ -19,11 +19,11 @@ _service() # don't complete past 2nd token [ $COMP_CWORD -gt 2 ] && return 0 - [ -d /etc/rc.d/init.d ] && sysvdir=/etc/rc.d/init.d || sysvdir=/etc/init.d - - if [[ $COMP_CWORD -eq 1 ]] && [[ $prev == "service" ]]; then + if [[ $COMP_CWORD -eq 1 && $prev == "service" ]]; then _services else + [ -d /etc/rc.d/init.d ] && \ + sysvdir=/etc/rc.d/init.d || sysvdir=/etc/init.d COMPREPLY=( $( compgen -W '`sed -e "y/|/ /" \ -ne "s/^.*\(U\|msg_u\)sage.*{\(.*\)}.*$/\2/p" \ $sysvdir/${prev##*/} 2>/dev/null`' -- "$cur" ) ) @@ -32,9 +32,11 @@ _service() return 0 } && complete -F _service service -[ -d /etc/init.d/ ] && complete -F _service -o default \ - $(for i in /etc/init.d/*; do - complete -p ${i##*/} &>/dev/null || printf '%s\n' ${i##*/}; done) +for svc in /etc/init.d/*; do + [ ! -x "$svc" ] || complete -p "${svc##*/}" &>/dev/null || \ + complete -F _service -o default "${svc##*/}" +done +unset svc # Local variables: # mode: shell-script diff --git a/completions/sh b/completions/sh new file mode 100644 index 00000000..9c7ca020 --- /dev/null +++ b/completions/sh @@ -0,0 +1,41 @@ +# POSIX sh(1) completion + +have sh && +_sh() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -c) + return 0 + ;; + -o|+o) + COMPREPLY=( $( compgen -W 'allexport errexit ignoreeof monitor + noclobber noglob noexec nolog notify nounset verbose vi + xtrace' -- "$cur" ) ) + return 0 + ;; + 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 0 + elif [[ "$cur" == +* ]]; then + COMPREPLY=( $( compgen -W "${opts//-/+}" -- "$cur" ) ) + return 0 + fi + + _filedir sh +} && +complete -F _sh sh + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/shadow b/completions/shadow index a3451b7b..6aea045b 100644 --- a/contrib/shadow +++ b/completions/shadow @@ -14,7 +14,8 @@ _useradd() # with -u/--uid case $prev in - -c|--comment|-h|--help|-e|--expiredate|-f|--inactive|-k|--key|-p|--password|-u|--uid|-Z|--selinux-user) + -c|--comment|-h|--help|-e|--expiredate|-f|--inactive|-k|--key|\ + -p|--password|-u|--uid|-Z|--selinux-user) return 0 ;; -b|--base-dir|-d|--home|-k|--skel) @@ -64,7 +65,8 @@ _usermod() # with -u/--uid case $prev in - -c|--comment|-d|--home|-e|--expiredate|-f|--inactive|-h|--help|-l|--login|-p|--password|-u|--uid|-Z|--selinux-user) + -c|--comment|-d|--home|-e|--expiredate|-f|--inactive|-h|--help|\ + -l|--login|-p|--password|-u|--uid|-Z|--selinux-user) return 0 ;; -g|--gid) @@ -126,7 +128,8 @@ _chage() _split_longopt && split=true case $prev in - -d|--lastday|-E|--expiredate|-h|--help|-I|--inactive|-m|--mindays|-M|--maxdays|-W|--warndays) + -d|--lastday|-E|--expiredate|-h|--help|-I|--inactive|-m|--mindays|\ + -M|--maxdays|-W|--warndays) return 0 ;; esac @@ -163,7 +166,7 @@ _passwd() return 0 fi - COMPREPLY=( $( compgen -u -- "$cur" ) ) + _allowed_users } && complete -F _passwd passwd @@ -229,7 +232,7 @@ _newusers() _filedir } && -complete -F _newusers -o filenames newusers +complete -F _newusers newusers have pwck && _pwck() @@ -246,7 +249,7 @@ _pwck() _filedir } && -complete -F _pwck -o filenames pwck +complete -F _pwck pwck have groupadd && _groupadd() @@ -316,9 +319,11 @@ _newgrp() COMPREPLY=() if [[ "`_get_cword`" == "-" ]]; then COMPREPLY=( - ) + else + _allowed_groups fi } && -complete -g -F _newgrp newgrp +complete -F _newgrp newgrp have gpasswd && _gpasswd() @@ -385,7 +390,7 @@ _grpck() _filedir } && -complete -F _grpck -o filenames grpck +complete -F _grpck grpck have vipw || have vigr && _vipw() diff --git a/contrib/sitecopy b/completions/sitecopy index 616bc5e4..616bc5e4 100644 --- a/contrib/sitecopy +++ b/completions/sitecopy diff --git a/contrib/smartctl b/completions/smartctl index 74e42816..74e42816 100644 --- a/contrib/smartctl +++ b/completions/smartctl diff --git a/contrib/snownews b/completions/snownews index 9c99ed7c..9c99ed7c 100644 --- a/contrib/snownews +++ b/completions/snownews diff --git a/completions/sqlite3 b/completions/sqlite3 new file mode 100644 index 00000000..b37c55f7 --- /dev/null +++ b/completions/sqlite3 @@ -0,0 +1,39 @@ +# sqlite3(1) completion + +have sqlite3 && +_sqlite3() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + local dbexts='@(sqlite?(3)|?(s?(3))db)' + + case $prev in + -help|-version|-separator|-nullvalue|*.$dbexts) + return 0 + ;; + -init) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-help -init -echo -header -noheader -bail + -interactive -batch -column -csv -html -line -list -separator + -nullvalue -version' -- "$cur" ) ) + return 0 + fi + + _filedir $dbexts +} && +complete -F _sqlite3 sqlite3 + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/ssh b/completions/ssh index b4bafdee..cf966ae5 100644 --- a/contrib/ssh +++ b/completions/ssh @@ -184,6 +184,7 @@ _ssh() done _known_hosts_real -a -F "$configfile" "$cur" if [ $COMP_CWORD -ne 1 ]; then + _compopt_o_filenames COMPREPLY=( "${COMPREPLY[@]}" $( compgen -c -- "$cur" ) ) fi fi @@ -245,14 +246,14 @@ _sftp() } shopt -u hostcomplete && complete -F _sftp sftp -# things we want to escape in remote scp paths -_scp_path_esc="[][(){}<>\",:;^&\!$=?\`|\\ ']" +# things we want to backslash escape in scp paths +_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. _scp_remote_files() { - local IFS=$'\t\n' + local IFS=$'\n' # remove backslash escape from the first colon cur=${cur/\\:/:} @@ -291,7 +292,7 @@ _scp_remote_files() # an optional prefix to add to returned completions. _scp_local_files() { - local IFS=$'\t\n' + local IFS=$'\n' local dirsonly=false if [ "$1" = -d ]; then @@ -415,7 +416,7 @@ _ssh_copy_id() return 0 } -complete -F _ssh_copy_id -o filenames ssh-copy-id +complete -F _ssh_copy_id ssh-copy-id } # Local variables: diff --git a/contrib/sshfs b/completions/sshfs index d7945f88..d7945f88 100644 --- a/contrib/sshfs +++ b/completions/sshfs diff --git a/completions/strace b/completions/strace new file mode 100644 index 00000000..0ee27377 --- /dev/null +++ b/completions/strace @@ -0,0 +1,103 @@ +# bash completion for strace + +have strace && +_strace() +{ + local cur prev offset i syscalls arch unistd + + # check if we're still completing strace + offset=0 + for (( i=1; i <= COMP_CWORD; i++ )); do + case ${COMP_WORDS[$i]} in + -o|-e|-p) + i=$((i+1)) + continue + ;; + -*) + continue + ;; + esac + offset=$i + break + done + + if [ $offset -gt 0 ]; then + # FAIL: _command_offset is not defined anywhere. Guillame? + _command_offset $offset + else + + COMPREPLY=() + _get_comp_words_by_ref cur prev + + case $prev in + -e) + if [[ "$cur" == *=* ]]; then + prev=${cur/=*/} + cur=${cur/*=/} + + # Import arch-specific syscalls -- not foolproof IMHO + #+ --David Paleino + arch=$(command uname -m) + syscalls=$(awk '/^#define __NR/ {print $2}' \ + /usr/include/asm/unistd.h | sed -e \ + 's/__NR_//') + if [ -z "$syscalls" ]; then + if [[ "$arch" == *86 ]]; then + unistd=/usr/include/asm/unistd_32.h + else + unistd=/usr/include/asm/unistd_64.h + fi + syscalls=$(awk '/^#define __NR/ {print $2}' \ + $unistd | sed -e 's/__NR_//') + fi + + case $prev in + trace) + COMPREPLY=( $( compgen -W "$syscalls file process + network signal ipc desc all none" -- "$cur") ) + return 0 + ;; + esac + else + COMPREPLY=( $( compgen -S"=" -W 'trace abbrev verbose raw + signal read write' -- "$cur" ) ) + fi + return 0 + ;; + -o) + _filedir + return 0 + ;; + -p) + _pids + return 0 + ;; + -S) + COMPREPLY=( $( compgen -W 'time calls name nothing' \ + -- "$cur" ) ) + return 0 + ;; + -u) + _allowed_users + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-c -d -f -ff -F --help -i -q \ + -r -t -tt -ttt -T -v -V -x -xx -a -e -o -O -p \ + -s -S -u -E' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -c -- "$cur" ) ) + fi + fi +} && +complete -F _strace -o default strace + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/svk b/completions/svk index c809d2eb..bda5997a 100644 --- a/contrib/svk +++ b/completions/svk @@ -214,7 +214,7 @@ _svk() return 0 } && -complete -F _svk -o filenames svk +complete -F _svk svk # Local variables: # mode: shell-script diff --git a/completions/sysbench b/completions/sysbench new file mode 100644 index 00000000..3b309a9a --- /dev/null +++ b/completions/sysbench @@ -0,0 +1,175 @@ +# bash completion for sysbench + +# We set -o nospace and turn it off in quite a few places for bash < 4 +# reasons; assuming bash >= 4 we could instead not turn it on +# initially but only in the few cases where it's actually needed. + +have sysbench && +_sysbench() +{ + COMPREPLY=() + local cur prev words split=false + _get_comp_words_by_ref -n = cur prev words + + # long options need the "=" (whitespace split doesn't work), but we split + # internally to make processing easier + _split_longopt && split=true + + case $prev in + --num-threads|--max-requests|--max-time|--thread-stack-size| \ + --help|--version|help|version) + return 0 + ;; + --init-rng|--debug|--validate) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) + return 0 + ;; + --test) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'fileio cpu memory threads mutex oltp' \ + -- "$cur" ) ) + return 0 + ;; + --cpu-max-prime) + return 0 + ;; + --file-test-mode) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'seqwr seqrewr seqrd rndrd rndwr rndrw' \ + -- "$cur" ) ) + return 0 + ;; + --file-io-mode) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'sync async fastmmap slowmmap' \ + -- "$cur" ) ) + return 0 + ;; + --file-extra-flags) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'sync dsync direct' -- "$cur" ) ) + return 0 + ;; + --file-fsync-all|--file-fsync-end) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) + return 0 + ;; + --file-fsync-mode) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'fsync fdatasync' -- "$cur" ) ) + return 0 + ;; + --memory-scope) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'global local' -- "$cur" ) ) + return 0 + ;; + --memory-hugetlb) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) + return 0 + ;; + --memory-oper) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'read write none' -- "$cur" ) ) + return 0 + ;; + --memory-access-mode) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'seq rnd' -- "$cur" ) ) + return 0 + ;; + --oltp-test-mode) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'simple complex nontrx sp' -- "$cur" ) ) + return 0 + ;; + --oltp-read-only|--oltp-skip-trx|--oltp-quto-inc|--mysql-ssl) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) ) + return 0 + ;; + --oltp-nontrx-mode) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'select update_key update_nokey insert + delete' -- "$cur" ) ) + return 0 + ;; + --oltp-dist-type) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'uniform gaussian special' -- "$cur" ) ) + return 0 + ;; + --db-driver) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W "$( $1 --test=oltp help 2>/dev/null | + sed -e '/^.*database drivers:/,/^$/!d' \ + -ne 's/^ *\([^ ]*\) .*/\1/p' )" -- "$cur" ) ) + return 0 + ;; + --db-ps-mode) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'auto disable' -- "$cur" ) ) + return 0 + ;; + --mysql-socket) + compopt +o nospace &>/dev/null + _filedir sock + return 0 + ;; + --mysql-table-engine) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'myisam innodb bdb heap ndbcluster + federated' -- "$cur" ) ) + return 0 + ;; + --mysql-engine-trx) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'yes no auto' -- "$cur" ) ) + return 0 + ;; + --*) + $split && return 0 + ;; + esac + + # find out which test we're running + local i test + for (( i=1 ; $i < ${#words[@]}-1 ; i++ )); do + if [[ ${words[i]} == --test* ]]; then + test=${words[i]#*=} + break + fi + done + + local opts="--num-threads= --max-requests= --max-time= --thread-stack-size= + --init-rng= --debug= --validate= --help --version" + + if [[ $test ]]; then + local help=( $( _parse_help $1 "--test=$test help" ) ) + opts="$opts ${help[@]/%/=} prepare run cleanup help version" + else + opts="$opts --test=" + fi + + if [[ "$cur" == -* || ! $test ]]; then + COMPREPLY=( $( compgen -W "$opts" -- "$cur" ) ) + [[ ${#COMPREPLY[@]} == 1 && ${COMPREPLY[0]} != *= ]] && \ + compopt +o nospace &>/dev/null + else + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W "prepare run cleanup help version" \ + -- "$cur" ) ) + fi +} && +complete -F _sysbench -o nospace sysbench + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/sysctl b/completions/sysctl index 41cbd7ee..ac25f4ef 100644 --- a/contrib/sysctl +++ b/completions/sysctl @@ -8,7 +8,8 @@ _sysctl() COMPREPLY=() _get_comp_words_by_ref cur - COMPREPLY=( $( compgen -W "$(sysctl -N -a 2>/dev/null)" -- "$cur" ) ) + COMPREPLY=( $( compgen -W \ + "$( PATH="$PATH:/sbin" sysctl -N -a 2>/dev/null )" -- "$cur" ) ) return 0 } && diff --git a/contrib/sysv-rc b/completions/sysv-rc index 735a4042..735a4042 100644 --- a/contrib/sysv-rc +++ b/completions/sysv-rc diff --git a/contrib/tar b/completions/tar index 400daa62..a5c02490 100644 --- a/contrib/tar +++ b/completions/tar @@ -14,31 +14,30 @@ _tar() fi case ${COMP_WORDS[1]} in - ?(-)[cr]*f) - _filedir - return 0 - ;; - +([^IZzJjy])f) - ext='t@(ar?(.@(Z|gz|bz?(2)|lz?(ma)|xz))|gz|bz?(2)|lz?(ma)|xz)' - regex='t\(ar\(\.\(Z\|gz\|bz2\?\|lzma\|xz\)\)\?\|gz\|bz2\?\|lzma\|xz\)' - ;; - *[Zz]*f) - ext='t?(ar.)@(gz|Z)' - regex='t\(ar\.\)\?\(gz\|Z\)' - ;; - *[Ijy]*f) - ext='t?(ar.)bz?(2)' - regex='t\(ar\.\)\?bz2\?' - ;; - *[J]*f) - ext='t?(ar.)@(lz?(ma)|xz)' - regex='t\(ar\.\)\?\(lzma\|xz\)\?' - ;; - *) - _filedir - return 0 - ;; - + ?(-)[cr]*f) + _filedir + return 0 + ;; + +([^IZzJjy])f) + ext='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))' + regex='\(\(tar\|gem\|spkg\)\(\.\(Z\|[gx]z\|bz?(2)\|lzma\)\)\?\|t\([glx]z\|bz2\?\)\)' + ;; + *[Zz]*f) + ext='@(t?(ar.)|gem.|spkg.)@(gz|Z)' + regex='\(t\(ar\.\)\?\|gem\.\|spkg\.\)\(gz\|Z\)' + ;; + *[Ijy]*f) + ext='@(@(t?(ar.)|gem.)bz?(2)|spkg)' + regex='\(\(t\(ar\.\)\?\|gem\.\)bz2\?\|spkg\)' + ;; + *[J]*f) + ext='@(t?(ar.)|gem.|spkg.)@(lz?(ma)|xz)' + regex='\(t\(ar\.\)\?\|gem\.\|spkg\.\)\(lzma\|xz\)\?' + ;; + *) + _filedir + return 0 + ;; esac if [[ "$COMP_LINE" == *$ext' ' ]]; then @@ -49,7 +48,8 @@ _tar() # devise how to untar and list it untar=t${COMP_WORDS[1]//[^Izjyf]/} - COMPREPLY=( $( compgen -W "$( printf '%s ' $( tar $untar $tar \ + local IFS=$'\n' + COMPREPLY=( $( compgen -W "$( printf '%s\n' $( tar $untar $tar \ 2>/dev/null ) )" -- "$cur" ) ) return 0 fi @@ -60,7 +60,7 @@ _tar() return 0 } [ -n "${COMP_TAR_INTERNAL_PATHS:-}" ] && complete -F _tar -o dirnames tar || - complete -F _tar -o filenames tar + complete -F _tar tar } # Local variables: diff --git a/contrib/tcpdump b/completions/tcpdump index 259f13e0..259f13e0 100644 --- a/contrib/tcpdump +++ b/completions/tcpdump diff --git a/contrib/unace b/completions/unace index 5ceb7646..9d27ef50 100644 --- a/contrib/unace +++ b/completions/unace @@ -14,11 +14,11 @@ _unace() if [ $COMP_CWORD -eq 1 ]; then COMPREPLY=( $( compgen -W 'e l t v x' -- "$cur" ) ) else - _filedir '@(ace|ACE)' + _filedir ace fi fi } && -complete -F _unace -o filenames unace +complete -F _unace unace # Local variables: # mode: shell-script diff --git a/contrib/unrar b/completions/unrar index 3fb24dbb..0a4fe27a 100644 --- a/contrib/unrar +++ b/completions/unrar @@ -16,12 +16,12 @@ _unrar() if [ $COMP_CWORD -eq 1 ]; then COMPREPLY=( $( compgen -W 'e l lb lt p t v vb vt x' -- "$cur" ) ) else - _filedir '@(rar|RAR)' + _filedir rar fi fi } && -complete -F _unrar -o filenames unrar +complete -F _unrar unrar # Local variables: # mode: shell-script diff --git a/contrib/update-alternatives b/completions/update-alternatives index ebed294d..ebed294d 100644 --- a/contrib/update-alternatives +++ b/completions/update-alternatives diff --git a/contrib/util-linux b/completions/util-linux index 8017ebb2..f45ffd56 100644 --- a/contrib/util-linux +++ b/completions/util-linux @@ -17,7 +17,7 @@ _renice() curopt=${COMP_WORDS[COMP_CWORD-$i]} case "$curopt" in -u) - COMPREPLY=( $( compgen -u -- "$cur" ) ) + _allowed_users ;; -g) _pgids diff --git a/contrib/vncviewer b/completions/vncviewer index 296eb8af..296eb8af 100644 --- a/contrib/vncviewer +++ b/completions/vncviewer diff --git a/contrib/vpnc b/completions/vpnc index 722fee3a..722fee3a 100644 --- a/contrib/vpnc +++ b/completions/vpnc diff --git a/contrib/wireless-tools b/completions/wireless-tools index 56ba0db8..56ba0db8 100644 --- a/contrib/wireless-tools +++ b/completions/wireless-tools diff --git a/completions/wodim b/completions/wodim new file mode 100644 index 00000000..abc0ff25 --- /dev/null +++ b/completions/wodim @@ -0,0 +1,118 @@ +# bash completion for cdrecord/wodim + +# We set -o nospace and turn it off in several places for bash < 4 +# reasons; assuming bash >= 4 we could instead not turn it on +# initially but only in the few cases where it's actually needed. + +have cdrecord || have wodim && +_cdrecord() +{ + local cur prev i generic_options track_options track_mode + + COMPREPLY=() + _get_comp_words_by_ref -n = cur prev + + # foo=bar style option + if [[ "$cur" == *=* ]]; then + prev=${cur%%=*} + cur=${cur#*=} + case $prev in + textfile|cuefile|msifile) + compopt +o nospace &>/dev/null + _filedir + ;; + blank) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W 'help all fast track unreserve trtail + unclose session' -- "$cur" ) ) + ;; + driveropts) + if [[ $cur == *=* ]]; then + prev=${cur%%=*} + cur=${cur#*=} + case $prev in + varirec) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W "-2 -1 0 1 2" \ + -- "$cur" ) ) + ;; + gigarec) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W "0.6 0.7 0.8 1.0 1.2 1.3 + 1.4" -- "$cur" ) ) + ;; + tattoofile) + compopt +o nospace &>/dev/null + _filedir + ;; + esac + else + COMPREPLY=( $( compgen -W 'burnfree noburnfree varirec= + gigarec= audiomaster forcespeed noforcespeed speedread + nospeedread singlesession nosinglesession hidecdr + nohidecdr tattooinfo tattoofile=' -- "$cur" ) ) + [[ ${#COMPREPLY[@]} == 1 && ${COMPREPLY[0]} != *= ]] && \ + compopt +o nospace &>/dev/null + fi + ;; + driver) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W "$( $1 driver=help 2>&1 | \ + awk 'NR > 1 { print $1 }' ) help" -- "$cur" ) ) + ;; + minbuf) + compopt +o nospace &>/dev/null + COMPREPLY=( $( compgen -W "$( seq 25 95 2>/dev/null )" \ + -- "$cur" ) ) + ;; + esac + return 0 + 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 [ $COMP_CWORD -gt 1 ]; then + if [ -f "$prev" ]; then + track_mode=1 + else + for (( i=0; i < ${#track_options[@]}; i++ )); do + if [[ "${track_options[i]}" == "$prev" ]]; then + track_mode=1 + break + fi + done + fi + fi + + # files are always eligible completion + _filedir + # track options are always available + COMPREPLY=( "${COMPREPLY[@]}" \ + $( compgen -W '${track_options[@]}' -- "$cur" ) ) + # general options are no more available after file or track option + if [ $track_mode -eq 0 ]; then + COMPREPLY=( "${COMPREPLY[@]}" \ + $( compgen -W '${generic_options[@]}' -- "$cur" ) ) + fi + [[ ${#COMPREPLY[@]} == 1 && ${COMPREPLY[0]} != *= ]] && \ + compopt +o nospace &>/dev/null +} && +complete -F _cdrecord -o nospace cdrecord wodim + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/wol b/completions/wol index 89a1a8ba..89a1a8ba 100644 --- a/contrib/wol +++ b/completions/wol diff --git a/contrib/wtf b/completions/wtf index 2b6c4d01..a611978d 100644 --- a/contrib/wtf +++ b/completions/wtf @@ -25,7 +25,7 @@ _wtf() COMPREPLY=( $( compgen -W "$( cut -f 1 -s $db ) -f" -- "${cur}" ) ) } && -complete -F _wtf -o filenames wtf +complete -F _wtf wtf # Local variables: # mode: shell-script diff --git a/contrib/wvdial b/completions/wvdial index 101112ca..3b135f0a 100644 --- a/contrib/wvdial +++ b/completions/wvdial @@ -3,7 +3,7 @@ have wvdial && _wvdial() { - local cur prev config i IFS=$'\t\n' + local cur prev config i IFS=$'\n' COMPREPLY=() _get_comp_words_by_ref cur prev @@ -23,7 +23,7 @@ _wvdial() ;; *) # start with global and personal config files - config="/etc/wvdial.conf"$'\t'"$HOME/.wvdialrc" + config="/etc/wvdial.conf"$'\n'"$HOME/.wvdialrc" # replace with command line config file if present for (( i=1; i < COMP_CWORD; i++ )); do if [[ "${COMP_WORDS[i]}" == "--config" ]]; then diff --git a/contrib/xhost b/completions/xhost index cec4adcf..cec4adcf 100644 --- a/contrib/xhost +++ b/completions/xhost diff --git a/contrib/xm b/completions/xm index 4087a710..f9f69a29 100644 --- a/contrib/xm +++ b/completions/xm @@ -22,15 +22,16 @@ _xm() COMPREPLY=() _get_comp_words_by_ref cur prev - commands='console create new delete destroy domid domname dump-core \ - list mem-max mem-set migrate pause reboot rename restore \ - resume save shutdown start suspend sysrq trigger top unpause \ - uptime vcpu-list vcpu-pin vcpu-set debug-keys dmesg info log \ - serve sched-credit sched-sedf block-attach block-detach \ - block-list network-attach network-detach network-list \ - vtpm-list vnet-list vnet-create vnet-delete labels addlabel \ - rmlabel getlabel dry-run resources makepolicy loadpolicy \ - cfgbootpolicy dumppolicy help' + 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 [[ $COMP_CWORD -eq 1 ]] ; then COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) ) diff --git a/contrib/xmllint b/completions/xmllint index 82feb4a3..5b9c301c 100644 --- a/contrib/xmllint +++ b/completions/xmllint @@ -18,19 +18,19 @@ _xmllint() return 0 ;; --dtdvalid) - _filedir dtd + _filedir 'dtd?(.gz)' return 0 ;; --relaxng) - _filedir rng + _filedir 'rng?(.gz)' return 0 ;; --schema) - _filedir xsd + _filedir 'xsd?(.gz)' return 0 ;; --schematron) - _filedir sch + _filedir 'sch?(.gz)' return 0 ;; esac @@ -42,9 +42,9 @@ _xmllint() return 0 fi - _filedir '@(*ml|htm|svg)' + _filedir '@(*ml|htm|svg|xs[dl]|rng|wsdl|jnlp)?(.gz)' } && -complete -F _xmllint -o filenames xmllint +complete -F _xmllint xmllint # Local variables: # mode: shell-script diff --git a/contrib/xmlwf b/completions/xmlwf index 7109bcd3..ba02524b 100644 --- a/contrib/xmlwf +++ b/completions/xmlwf @@ -26,9 +26,9 @@ _xmlwf() return 0 fi - _filedir '@(*ml|htm|svg)' + _filedir '@(*ml|htm|svg|xs[dl]|rng|wsdl|jnlp)' } && -complete -F _xmlwf -o filenames xmlwf +complete -F _xmlwf xmlwf # Local variables: # mode: shell-script diff --git a/contrib/xmms b/completions/xmms index 42c5402c..662e2faa 100644 --- a/contrib/xmms +++ b/completions/xmms @@ -14,12 +14,12 @@ _xmms() --enqueue -m --show-main-window -i --sm-client-id \ -v --version' -- "$cur" ) ) else - _filedir '@(mp[23]|MP[23]|ogg|OGG|wav|WAV|pls|m3u|xm|mod|s[3t]m|it|mtm|ult|flac)' + _filedir '@(mp[23]|ogg|wav|pls|m3u|xm|mod|s[3t]m|it|mtm|ult|flac)' fi } && -complete -F _xmms -o filenames xmms +complete -F _xmms xmms # Local variables: # mode: shell-script diff --git a/completions/xmodmap b/completions/xmodmap new file mode 100644 index 00000000..cde9e7e1 --- /dev/null +++ b/completions/xmodmap @@ -0,0 +1,32 @@ +# xmodmap(1) completion + +have xmodmap && +_xmodmap() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -display|-e) + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-display -help -grammar -verbose -quiet -n + -e -pm -pk -pke -pp' -- "$cur" ) ) + return 0 + fi + + _filedir +} && +complete -F _xmodmap xmodmap + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/xrandr b/completions/xrandr index 70de80f7..70de80f7 100644 --- a/contrib/xrandr +++ b/completions/xrandr diff --git a/completions/xrdb b/completions/xrdb new file mode 100644 index 00000000..7307f013 --- /dev/null +++ b/completions/xrdb @@ -0,0 +1,37 @@ +# xrdb(1) completion + +have xrdb && +_xrdb() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -backup|-display|-help) + return 0 + ;; + -cpp|-edit) + _filedir + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-help -display -all -global -screen -screens + -n -quiet -cpp -nocpp -symbols -query -load -override -merge + -remove -retain -edit -backup' -- "$cur" ) ) + return 0 + fi + + _filedir +} && +complete -F _xrdb xrdb + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/xsltproc b/completions/xsltproc index f71d3f11..2782f805 100644 --- a/contrib/xsltproc +++ b/completions/xsltproc @@ -45,7 +45,7 @@ _xsltproc() _filedir '@(xsl|xslt|xml)' fi } && -complete -F _xsltproc -o filenames xsltproc +complete -F _xsltproc xsltproc # Local variables: # mode: shell-script diff --git a/contrib/xz b/completions/xz index 46420b01..89a8ac98 100644 --- a/contrib/xz +++ b/completions/xz @@ -52,11 +52,12 @@ _xz() _expand || return 0 - local IFS=$'\t\n' + local IFS=$'\n' + _compopt_o_filenames COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ $( compgen -d -- "$cur" ) ) } && -complete -F _xz -o filenames xz +complete -F _xz xz # xzdec(1) completion # @@ -88,9 +89,9 @@ _xzdec() $split && return 0 - _filedir xz # no lzma support here as of xz 4.999.8beta + _filedir xz # no lzma support here as of xz 4.999.9beta } && -complete -F _xzdec -o filenames xzdec +complete -F _xzdec xzdec # Local variables: # mode: shell-script diff --git a/contrib/yp-tools b/completions/yp-tools index 7252a129..7252a129 100644 --- a/contrib/yp-tools +++ b/completions/yp-tools diff --git a/contrib/yum-arch b/completions/yum-arch index 3728335c..bb864af4 100644 --- a/contrib/yum-arch +++ b/completions/yum-arch @@ -13,7 +13,7 @@ _yum_arch() _filedir -d fi } && -complete -F _yum_arch -o filenames yum-arch +complete -F _yum_arch yum-arch # Local variables: # mode: shell-script @@ -1,11 +1,11 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for bash-completion 1.2. +# Generated by GNU Autoconf 2.67 for bash-completion 1.3. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -315,7 +315,7 @@ $as_echo X"$as_dir" | test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p @@ -355,19 +355,19 @@ else fi # as_fn_arith -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. +# script with STATUS, using 1 if that was 0. as_fn_error () { - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $1" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -529,7 +529,7 @@ test -n "$DJDIR" || exec 7<&0 </dev/null exec 6>&1 # Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` @@ -548,13 +548,15 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='bash-completion' PACKAGE_TARNAME='bash-completion' -PACKAGE_VERSION='1.2' -PACKAGE_STRING='bash-completion 1.2' +PACKAGE_VERSION='1.3' +PACKAGE_STRING='bash-completion 1.3' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS +helpersdir +bashcompdir am__untar am__tar AMTAR @@ -685,8 +687,9 @@ do fi case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -731,7 +734,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -757,7 +760,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -961,7 +964,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -977,7 +980,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1007,8 +1010,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" ;; *=*) @@ -1016,7 +1019,7 @@ Try \`$0 --help' for more information." # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1034,13 +1037,13 @@ done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" + as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1063,7 +1066,7 @@ do [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -1077,8 +1080,8 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1093,9 +1096,9 @@ test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" + as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" + as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. @@ -1134,11 +1137,11 @@ else fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then @@ -1164,7 +1167,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bash-completion 1.2 to adapt to many kinds of systems. +\`configure' configures bash-completion 1.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1178,7 +1181,7 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages + -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files @@ -1230,7 +1233,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bash-completion 1.2:";; + short | recursive ) echo "Configuration of bash-completion 1.3:";; esac cat <<\_ACEOF @@ -1297,10 +1300,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bash-completion configure 1.2 -generated by GNU Autoconf 2.65 +bash-completion configure 1.3 +generated by GNU Autoconf 2.67 -Copyright (C) 2009 Free Software Foundation, Inc. +Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1314,8 +1317,8 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bash-completion $as_me 1.2, which was -generated by GNU Autoconf 2.65. Invocation command line was +It was created by bash-completion $as_me 1.3, which was +generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ @@ -1425,11 +1428,9 @@ trap 'exit_status=$? { echo - cat <<\_ASBOX -## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## -## ---------------- ## -_ASBOX +## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( @@ -1463,11 +1464,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - cat <<\_ASBOX -## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## -## ----------------- ## -_ASBOX +## ----------------- ##" echo for ac_var in $ac_subst_vars do @@ -1480,11 +1479,9 @@ _ASBOX echo if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## + $as_echo "## ------------------- ## ## File substitutions. ## -## ------------------- ## -_ASBOX +## ------------------- ##" echo for ac_var in $ac_subst_files do @@ -1498,11 +1495,9 @@ _ASBOX fi if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## -## ----------- ## -_ASBOX +## ----------- ##" echo cat confdefs.h echo @@ -1557,7 +1552,12 @@ _ACEOF ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site @@ -1572,7 +1572,11 @@ do { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5 ; } fi done @@ -1648,7 +1652,7 @@ if $ac_cache_corrupted; then $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -1665,16 +1669,22 @@ am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi done if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, @@ -1790,11 +1800,11 @@ am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; esac # Do `set' in a subshell so we don't clobber the current shell's @@ -1816,7 +1826,7 @@ if ( # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - as_fn_error "ls -t appears to fail. Make sure there is not a broken + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi @@ -1826,7 +1836,7 @@ then # Ok. : else - as_fn_error "newly created file is older than distributed files! + as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -2064,7 +2074,7 @@ done $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF @@ -2072,7 +2082,7 @@ SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; @@ -2106,7 +2116,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then - as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi @@ -2122,7 +2132,7 @@ fi # Define the identity of the package. PACKAGE='bash-completion' - VERSION='1.2' + VERSION='1.3' cat >>confdefs.h <<_ACEOF @@ -2162,7 +2172,11 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' -ac_config_files="$ac_config_files Makefile test/Makefile" +bashcompdir=$sysconfdir/bash_completion.d + +helpersdir=$sysconfdir/bash_completion.d/helpers + +ac_config_files="$ac_config_files Makefile completions/Makefile completions/helpers/Makefile test/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -2283,6 +2297,7 @@ DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= +U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' @@ -2445,19 +2460,19 @@ export LANGUAGE (unset CDPATH) >/dev/null 2>&1 && unset CDPATH -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. +# script with STATUS, using 1 if that was 0. as_fn_error () { - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $1" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -2653,7 +2668,7 @@ $as_echo X"$as_dir" | test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p @@ -2706,8 +2721,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bash-completion $as_me 1.2, which was -generated by GNU Autoconf 2.65. Invocation command line was +This file was extended by bash-completion $as_me 1.3, which was +generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -2759,11 +2774,11 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -bash-completion config.status 1.2 -configured by $0, generated by GNU Autoconf 2.65, +bash-completion config.status 1.3 +configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" -Copyright (C) 2009 Free Software Foundation, Inc. +Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -2781,11 +2796,16 @@ ac_need_defaults=: while test $# != 0 do case $1 in - --*=*) + --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; *) ac_option=$1 ac_optarg=$2 @@ -2807,6 +2827,7 @@ do $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; @@ -2817,7 +2838,7 @@ do ac_cs_silent=: ;; # This is an error. - -*) as_fn_error "unrecognized option: \`$1' + -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" @@ -2867,9 +2888,11 @@ for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "completions/Makefile") CONFIG_FILES="$CONFIG_FILES completions/Makefile" ;; + "completions/helpers/Makefile") CONFIG_FILES="$CONFIG_FILES completions/helpers/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; esac done @@ -2905,7 +2928,7 @@ $debug || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. @@ -2922,7 +2945,7 @@ if test "x$ac_cr" = x; then fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' + ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi @@ -2936,18 +2959,18 @@ _ACEOF echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi @@ -3036,20 +3059,28 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// s/^[^=]*=[ ]*$// }' fi @@ -3067,7 +3098,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -3095,7 +3126,7 @@ do [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" @@ -3122,7 +3153,7 @@ $as_echo "$as_me: creating $ac_file" >&6;} case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac @@ -3259,22 +3290,22 @@ s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 +which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} +which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; @@ -3289,7 +3320,7 @@ _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. @@ -3310,7 +3341,7 @@ if test "$no_create" != yes; then exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? + $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 diff --git a/configure.ac b/configure.ac index b6abcac5..0732138f 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,7 @@ AC_PREREQ([2.59]) -AC_INIT([bash-completion], [1.2]) -AM_INIT_AUTOMAKE([foreign dejagnu dist-bzip2 -Wall -Werror]) -AC_CONFIG_FILES([Makefile test/Makefile]) +AC_INIT([bash-completion], [1.3]) +AM_INIT_AUTOMAKE([foreign dist-bzip2 no-dist-gzip -Wall -Werror]) +AC_SUBST(bashcompdir, $sysconfdir/bash_completion.d) +AC_SUBST(helpersdir, $sysconfdir/bash_completion.d/helpers) +AC_CONFIG_FILES([Makefile completions/Makefile completions/helpers/Makefile test/Makefile]) AC_OUTPUT diff --git a/contrib/_subversion b/contrib/_subversion deleted file mode 100644 index 06adf830..00000000 --- a/contrib/_subversion +++ /dev/null @@ -1,429 +0,0 @@ -# Use of this file is deprecated. Upstream completion is available in -# subversion >= 0.12.0, use that instead. - -# svn completion - -have svn && -{ -_svn() -{ - local cur prev commands options command - - COMPREPLY=() - _get_comp_words_by_ref cur prev - - commands='add blame praise annotate ann cat checkout co cleanup commit \ - ci copy cp delete del remove rm diff di export help ? h import \ - info list ls lock log merge mkdir move mv rename ren \ - propdel pdel pd propedit pedit pe propget pget pg \ - proplist plist pl propset pset ps resolved revert \ - status stat st switch sw unlock update up' - - if [[ $COMP_CWORD -eq 1 ]] ; then - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--version' -- $cur ) ) - else - COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) - fi - else - - case $prev in - --config-dir) - _filedir -d - return 0; - ;; - -F|--file|--targets) - _filedir - return 0; - ;; - --encoding) - COMPREPLY=( $( compgen -W '$( iconv --list | \ - sed -e "s@//@@;" )' -- "$cur" ) ) - return 0; - ;; - --editor-cmd|--diff-cmd|--diff3-cmd) - COMP_WORDS=(COMP_WORDS[0] $cur) - COMP_CWORD=1 - _command - return 0; - ;; - esac - - command=${COMP_WORDS[1]} - - if [[ "$cur" == -* ]]; then - # possible options for the command - case $command in - add) - options='--auto-props --no-auto-props \ - --force --targets --no-ignore \ - --non-recursive -N -q --quiet' - ;; - blame|annotate|ann|praise) - options='-r --revisions --username \ - --password --no-auth-cache \ - --non-interactive -v \ - --verbose --incremental --xml' - ;; - cat) - options='-r --revision --username \ - --password --no-auth-cache \ - --non-interactive' - ;; - checkout|co) - options='-r --revision -q --quiet -N \ - --non-recursive --username \ - --password --no-auth-cache \ - --non-interactive \ - --ignore-externals' - ;; - cleanup) - options='--diff3-cmd' - ;; - commit|ci) - options='-m --message -F --file \ - --encoding --force-log -q \ - --quiet --non-recursive -N \ - --targets --editor-cmd \ - --username --password \ - --no-auth-cache \ - --non-interactive --no-unlock' - ;; - copy|cp) - options='-m --message -F --file \ - --encoding --force-log -r \ - --revision -q --quiet \ - --editor-cmd -username \ - --password --no-auth-cache \ - --non-interactive' - ;; - delete|del|remove|rm) - options='--force -m --message -F \ - --file --encoding --force-log \ - -q --quiet --targets \ - --editor-cmd -username \ - --password --no-auth-cache \ - --non-interactive' - ;; - diff|di) - options='-r --revision -x --extensions \ - --diff-cmd --no-diff-deleted \ - -N --non-recursive --username \ - --password --no-auth-cache \ - --non-interactive --force \ - --old --new --notice-ancestry' - ;; - export) - options='-r --revision -q --quiet \ - --username --password \ - --no-auth-cache \ - --non-interactive -N \ - --non-recursive --force \ - --native-eol --ignore-externals' - ;; - import) - options='--auto-props --no-auto-props \ - -m --message -F --file \ - --encoding --force-log -q \ - --quiet --non-recursive \ - --no-ignore --editor-cmd \ - --username --password \ - --no-auth-cache \ - --non-interactive' - ;; - info) - options='--username --password \ - --no-auth-cache \ - --non-interactive -r \ - --revision --xml --targets \ - -R --recursive --incremental' - ;; - list|ls) - options='-r --revision -v --verbose -R \ - --recursive --username \ - --password --no-auth-cache \ - --non-interactive \ - --incremental --xml' - ;; - lock) - options='-m --message -F --file \ - --encoding --force-log \ - --targets --force --username \ - --password --no-auth-cache \ - --non-interactive' - ;; - log) - options='-r --revision -v --verbose \ - --targets --username \ - --password --no-auth-cache \ - --non-interactive \ - --stop-on-copy --incremental \ - --xml -q --quiet --limit' - ;; - merge) - options='-r --revision -N \ - --non-recursive -q --quiet \ - --force --dry-run --diff3-cmd \ - --username --password \ - --no-auth-cache \ - --non-interactive \ - --ignore-ancestry' - ;; - mkdir) - options='-m --message -F --file \ - --encoding --force-log -q \ - --quiet --editor-cmd \ - --username --password \ - --no-auth-cache \ - --non-interactive' - ;; - move|mv|rename|ren) - options='-m --message -F --file \ - --encoding --force-log -r \ - --revision -q --quiet \ - --force --editor-cmd \ - --username --password \ - --no-auth-cache \ - --non-interactive' - ;; - propdel|pdel|pd) - options='-q --quiet -R --recursive -r \ - --revision --revprop \ - --username --password \ - --no-auth-cache \ - --non-interactive' - ;; - propedit|pedit|pe) - options='-r --revision --revprop \ - --encoding --editor-cmd \ - --username --password \ - --no-auth-cache \ - --non-interactive --force' - ;; - propget|pget|pg) - options='-R --recursive -r --revision \ - --revprop --strict --username \ - --password --no-auth-cache \ - --non-interactive' - ;; - proplist|plist|pl) - options='-v --verbose -R --recursive \ - -r --revision --revprop -q \ - --quiet --username --password \ - --no-auth-cache \ - --non-interactive' - ;; - propset|pset|ps) - options='-F --file -q --quiet \ - --targets -R --recursive \ - --revprop --encoding \ - --username --password \ - --no-auth-cache \ - --non-interactive -r \ - --revision --force' - ;; - resolved) - options='--targets -R --recursive -q --quiet' - ;; - revert) - options='--targets -R --recursive -q --quiet' - ;; - status|stat|st) - options='-u --show-updates -v \ - --verbose -N --non-recursive \ - -q --quiet --username \ - --password --no-auth-cache \ - --non-interactive --no-ignore \ - --ignore-externals \ - --incremental --xml' - ;; - switch|sw) - options='--relocate -r --revision -N \ - --non-recursive -q --quiet \ - --username --password \ - --no-auth-cache \ - --non-interactive --diff3-cmd' - ;; - unlock) - options='--targets --force --username \ - --password --no-auth-cache \ - --non-interactive' - ;; - update|up) - options='-r --revision -N \ - --non-recursive -q --quiet \ - --username --password \ - --no-auth-cache \ - --non-interactive \ - --diff3-cmd --ignore-externals' - ;; - esac - options="$options --help -h --config-dir" - - COMPREPLY=( $( compgen -W "$options" -- $cur ) ) - else - if [[ "$command" == @(help|h|\?) ]]; then - COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) - else - _filedir - fi - fi - fi - - return 0 -} -complete -F _svn -o filenames svn - -_svnadmin() -{ - local cur prev commands options mode - - COMPREPLY=() - _get_comp_words_by_ref cur prev - - commands='create deltify dump help ? hotcopy list-dblogs \ - list-unused-dblogs load lslocks lstxns recover rmlocks \ - rmtxns setlog verify' - - if [[ $COMP_CWORD -eq 1 ]] ; then - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--version' -- $cur ) ) - else - COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) - fi - else - case $prev in - --config-dir) - _filedir -d - return 0; - ;; - --fs-type) - COMPREPLY=( $( compgen -W 'fsfs bdb' -- $cur ) ) - return 0; - ;; - esac - - command=${COMP_WORDS[1]} - - if [[ "$cur" == -* ]]; then - # possible options for the command - case $command in - create) - options='--bdb-txn-nosync \ - --bdb-log-keep --config-dir \ - --fs-type' - ;; - deltify) - options='-r --revision -q --quiet' - ;; - dump) - options='-r --revision --incremental \ - -q --quiet --deltas' - ;; - hotcopy) - options='--clean-logs' - ;; - load) - options='--ignore-uuid --force-uuid \ - --parent-dir -q --quiet \ - --use-pre-commit-hook \ - --use-post-commit-hook' - ;; - rmtxns) - options='-q --quiet' - ;; - setlog) - options='-r --revision --bypass-hooks' - ;; - esac - - options="$options --help -h" - COMPREPLY=( $( compgen -W "$options" -- $cur ) ) - else - if [[ "$command" == @(help|h|\?) ]]; then - COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) - else - _filedir - fi - fi - fi - - return 0 -} -complete -F _svnadmin -o default svnadmin - -_svnlook() -{ - local cur prev commands options mode - - COMPREPLY=() - _get_comp_words_by_ref cur - - commands='author cat changed date diff dirs-changed help ? h history \ - info lock log propget pget pg proplist plist pl tree uuid \ - youngest' - - if [[ $COMP_CWORD -eq 1 ]] ; then - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '--version' -- $cur ) ) - else - COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) - fi - else - command=${COMP_WORDS[1]} - - if [[ "$cur" == -* ]]; then - # possible options for the command - case $command in - author|cat|date|dirs-changed|info|log) - options='-r --revision -t \ - --transaction' - ;; - changed) - options='-r --revision -t \ - --transaction --copy-info' - ;; - diff) - options='-r --revision -t \ - --transaction \ - --no-diff-deleted \ - --no-diff-added \ - --diff-copy-from' - ;; - history) - options='-r --revision --show-ids' - ;; - propget|proplist) - options='-r --revision -t \ - --transaction --revprop' - ;; - tree) - options='-r --revision -t \ - --transaction --show-ids \ - --full-paths' - ;; - esac - - options="$options --help -h" - COMPREPLY=( $( compgen -W "$options" -- $cur ) ) - else - if [[ "$command" == @(help|h|\?) ]]; then - COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) - else - _filedir - fi - fi - fi - - return 0 -} -complete -F _svnlook -o default svnlook -} - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/ipmitool b/contrib/ipmitool deleted file mode 100644 index fc4ec71c..00000000 --- a/contrib/ipmitool +++ /dev/null @@ -1,38 +0,0 @@ -# bash completion for ipmitool - -have ipmitool && -_ipmitool() -{ - local cur prev - - COMPREPLY=() - _get_comp_words_by_ref cur prev - - case $prev in - -I) - COMPREPLY=( $( compgen -W 'open imb lan lanplus free' -- "$cur" ) ) - return 0 - ;; - esac - - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-h -V -v -c -d -I -H -p -U -f -S -a \ - -e -C -k -y -K -A -P -E -K -m -b -r -B -T -l -o -O' -- "$cur" ) ) - else - COMPREPLY=( $( compgen -W 'raw i2c spd lan chassis power event \ - mc sdr sensor fru gendev sel pef sol tsol isol user \ - channel session sunoem kontronoem picmg fwum firewall \ - exec set hpm ekanalyzer' -- "$cur" ) ) - fi - -} && -complete -F _ipmitool ipmitool - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/perl b/contrib/perl deleted file mode 100644 index 67996f94..00000000 --- a/contrib/perl +++ /dev/null @@ -1,127 +0,0 @@ -# bash completion for perl - -have perl && -{ -_perlmodules() -{ - COMPREPLY=( $( compgen -P "$prefix" -W "$( perl -e 'sub mods { my ($base,$dir)=@_; return if $base !~ /^\Q$ENV{cur}/; chdir($dir) or return; for (glob(q[*.pm])) {s/\.pm$//; print qq[$base$_\n]}; mods(/^(?:[.\d]+|$Config{archname}-$Config{osname}|auto)$/ ? undef : qq[${base}${_}::],qq[$dir/$_]) for grep {-d} glob(q[*]); } mods(undef,$_) for @INC;' )" -- "$cur" ) ) - __ltrim_colon_completions "$1" -} - -_perl() -{ - local cur prev prefix temp - local optPrefix optSuffix - - COMPREPLY=() - _get_comp_words_by_ref -n : cur prev - prefix="" - - # If option not followed by whitespace, reassign prev and cur - if [[ "$cur" == -?* ]]; then - temp=$cur - prev=${temp:0:2} - cur=${temp:2} - optPrefix=-P$prev - optSuffix=-S/ - prefix=$prev - fi - - # only handle module completion for now - case $prev in - -I|-x) - local IFS=$'\t\n' - COMPREPLY=( $( compgen -d $optPrefix $optSuffix -- "$cur" ) ) - return 0 - ;; - -m|-M) - _perlmodules "$cur" - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-C -s -T -u -U -W -X -h -v -V -c -w -d \ - -D -p -n -a -F -l -0 -I -m -M -P -S -x -i -e ' -- "$cur" ) ) - else - _filedir - fi -} -complete -F _perl -o nospace -o filenames perl - -_perldoc() -{ - local cur prev prefix temp - - COMPREPLY=() - _get_comp_words_by_ref -n : cur prev - prefix="" - - # completing an option (may or may not be separated by a space) - if [[ "$cur" == -?* ]]; then - temp=$cur - prev=${temp:0:2} - cur=${temp:2} - prefix=$prev - fi - - # complete builtin perl functions - case $prev in - -f) - COMPREPLY=( $( compgen -W 'chomp chop chr crypt hex index lc \ - lcfirst length oct ord pack q qq reverse rindex sprintf \ - substr tr uc ucfirst y m pos quotemeta s split study qr abs \ - atan2 cos exp hex int log oct rand sin sqrt srand pop push \ - shift splice unshift grep join map qw reverse sort unpack \ - delete each exists keys values binmode close closedir \ - dbmclose dbmopen die eof fileno flock format getc print \ - printf read readdir rewinddir say seek seekdir select syscall \ - sysread sysseek syswrite tell telldir truncate warn write \ - pack read syscall sysread syswrite unpack vec -X chdir chmod \ - chown chroot fcntl glob ioctl link lstat mkdir open opendir \ - readlink rename rmdir stat symlink umask unlink utime caller \ - continue do dump eval exit goto last next redo return \ - sub wantarray break caller import local my our state package \ - use defined formline reset scalar undef \ - alarm exec fork getpgrp getppid getpriority kill pipe qx \ - setpgrp setpriority sleep system times wait waitpid \ - import no package require use bless dbmclose dbmopen package \ - ref tie tied untie use accept bind connect getpeername \ - getsockname getsockopt listen recv send setsockopt shutdown \ - socket socketpair msgctl msgget msgrcv msgsnd semctl semget \ - semop shmctl shmget shmread shmwrite endgrent endhostent \ - endnetent endpwent getgrent getgrgid getgrnam getlogin \ - getpwent getpwnam getpwuid setgrent setpwent endprotoent \ - endservent gethostbyaddr gethostbyname gethostent \ - getnetbyaddr getnetbyname getnetent getprotobyname \ - getprotobynumber getprotoent getservbyname getservbyport \ - getservent sethostent setnetent setprotoent setservent \ - gmtime localtime time times lock' -- "$cur" ) ) - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-h -v -t -u -m -l -F -X -f -q' -- "$cur" )) - else - # return available modules (unless it is clearly a file) - if [[ "$cur" != */* ]]; then - _perlmodules "$cur" - COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W \ - '$( PAGER=/bin/cat man perl | \ - sed -ne "/perl.*Perl overview/,/perlwin32/p" | \ - awk "\$NF=2 { print \$1}" | command grep perl )' -- "$cur" ) ) - fi - _filedir '@(pl|PL|pm|PM|pod|POD)' - fi -} -complete -F _perldoc -o bashdefault perldoc -} - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/python b/contrib/python deleted file mode 100644 index 9d8fcc9d..00000000 --- a/contrib/python +++ /dev/null @@ -1,58 +0,0 @@ -# bash completion for python - -have python && -_python() -{ - local prev cur i - - COMPREPLY=() - _get_comp_words_by_ref cur prev - - case $prev in - -Q) - COMPREPLY=( $( compgen -W "old new warn warnall" -- "$cur" ) ) - return 0 - ;; - -W) - COMPREPLY=( $( compgen -W "ignore default all module once error" \ - -- "$cur" ) ) - return 0 - ;; - -c) - _filedir '@(py|pyc|pyo)' - return 0 - ;; - !(python|-?)) - [[ ${COMP_WORDS[COMP_CWORD-2]} != -@(Q|W) ]] && _filedir - ;; - esac - - - # if '-c' is already given, complete all kind of files. - for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do - if [[ ${COMP_WORDS[i]} == -c ]]; then - _filedir - fi - done - - - if [[ "$cur" != -* ]]; then - _filedir '@(py|pyc|pyo)' - else - COMPREPLY=( $( compgen -W "- -d -E -h -i -O -Q -S -t -u \ - -U -v -V -W -x -c" -- "$cur" ) ) - fi - - - - return 0 -} && -complete -F _python -o filenames python - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/strace b/contrib/strace deleted file mode 100644 index 9b3e2676..00000000 --- a/contrib/strace +++ /dev/null @@ -1,102 +0,0 @@ -# bash completion for strace - -have strace && -_strace() -{ - local cur prev offset i syscalls arch unistd - - # check if we're still completing strace - offset=0 - for (( i=1; i <= COMP_CWORD; i++ )); do - case ${COMP_WORDS[$i]} in - -o|-e|-p) - i=$((i+1)) - continue - ;; - -*) - continue - ;; - esac - offset=$i - break - done - - if [ $offset -gt 0 ]; then - # FAIL: _command_offset is not defined anywhere. Guillame? - _command_offset $offset - else - - COMPREPLY=() - _get_comp_words_by_ref cur prev - - case $prev in - -e) - if [[ "$cur" == *=* ]]; then - prev=${cur/=*/} - cur=${cur/*=/} - - # Import arch-specific syscalls -- not foolproof IMHO - #+ --David Paleino - arch=$(command uname -m) - syscalls=$(awk '/^#define __NR/ {print $2}' \ - /usr/include/asm/unistd.h | sed -e \ - 's/__NR_//') - if [ -z "$syscalls" ]; then - if [[ "$arch" == *86 ]]; then - unistd=/usr/include/asm/unistd_32.h - else - unistd=/usr/include/asm/unistd_64.h - fi - syscalls=$(awk '/^#define __NR/ {print $2}' \ - $unistd | sed -e 's/__NR_//') - fi - - case $prev in - trace) - COMPREPLY=( $( compgen -W "$syscalls file process \ - network signal ipc desc all none" -- "$cur") ) - return 0 - ;; - esac - else - COMPREPLY=( $( compgen -S"=" -W 'trace abbrev \ - verbose raw signal read write' -- "$cur" ) ) - fi - return 0 - ;; - -o) - _filedir - return 0 - ;; - -p) - _pids - return 0 - ;; - -S) - COMPREPLY=( $( compgen -W 'time calls name nothing' -- "$cur" ) ) - return 0 - ;; - -u) - COMPREPLY=( $( compgen -u -- "$cur" ) ) - return 0 - ;; - esac - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-c -d -f -ff -F --help -i -q \ - -r -t -tt -ttt -T -v -V -x -xx -a -e -o -O -p \ - -s -S -u -E' -- "$cur" ) ) - else - COMPREPLY=( $( compgen -c -- "$cur" ) ) - fi - fi -} && -complete -F _strace -o default strace - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/wodim b/contrib/wodim deleted file mode 100644 index 5fa69a8b..00000000 --- a/contrib/wodim +++ /dev/null @@ -1,84 +0,0 @@ -# bash completion for cdrecord/wodim - -have cdrecord || have wodim && -_cdrecord() -{ - local cur prev i generic_options track_options track_mode - - COMPREPLY=() - _get_comp_words_by_ref cur prev - - # foo=bar style option - if [[ "$cur" == *=* ]]; then - prev=${cur/=*/} - cur=${cur/*=/} - case $prev in - textfile|cuefile) - _filedir - return 0 - ;; - blank) - COMPREPLY=( $( compgen -W 'help all fast \ - track unreserve trtail unclose session' \ - -- "$cur" ) ) - return 0 - ;; - driveropts) - COMPREPLY=( $( compgen -W 'burnfree noburnfree\ - varirec= audiomaster forcespeed noforcespeed\ - speedread nospeedread singlesession \ - nosinglesession hidecdr nohidecdr tattooinfo\ - tattoofile=' -- "$cur" ) ) - return 0 - ;; - esac - fi - - generic_options=(-version -v -V -d -silent -force -immed -dummy \ - -dao -raw -raw96r -raw96p -raw16 -multi -msinfo -toc \ - -atip -fix -nofix -waiti -load -lock -eject -format \ - -setdropts -checkdrive -prcap -inq -scanbus -reset \ - -abort -overburn -ignsize -useinfo -packet -noclose \ - -text debug= kdebug= kd= minbuf= speed= blank= fs= \ - dev= gracetime= timeout= driver= driveropts= \ - defpregap= pktsize= mcn= textfile= cuefile=) - track_options=(-audio -swab -data -mode2 -xa -xa1 -xa2 -xamix -cdi \ - -isosize -pad padsize= -nopad -shorttrack -noshorttrack\ - pregap= -preemp -nopreemp -copy -nocopy -scms tcsize= \ - isrc= index=) - # look if previous was either a file or a track option - track_mode=0 - if [ $COMP_CWORD -gt 1 ]; then - if [ -f "$prev" ]; then - track_mode=1 - else - for (( i=0; i < ${#track_options[@]}; i++ )); do - if [[ "${track_options[i]}" == "$prev" ]]; then - track_mode=1 - break - fi - done - fi - fi - - # files are always eligible completion - _filedir - # track options are always available - COMPREPLY=( "${COMPREPLY[@]}" \ - $( compgen -W '${track_options[@]}' -- "$cur" ) ) - # general options are no more available after file or track option - if [ $track_mode -eq 0 ]; then - COMPREPLY=( "${COMPREPLY[@]}" \ - $( compgen -W '${generic_options[@]}' -- "$cur" ) ) - fi - -} && -complete -F _cdrecord -o filenames cdrecord wodim - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh diff --git a/test/Makefile.am b/test/Makefile.am index d955be8a..82f6df90 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,8 +1,16 @@ DEJATOOL = completion install unit -AM_RUNTESTFLAGS = --outdir log +AM_RUNTESTFLAGS = --outdir log --ignore $(PACKAGE).log EXTRA_DIST = completion \ config \ fixtures \ lib \ unit + +all: + $(mkdir_p) log tmp + +distclean-local: + rm -rf log tmp + +AUTOMAKE_OPTIONS = dejagnu diff --git a/test/Makefile.in b/test/Makefile.in index a1376c9f..aa81fbeb 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -86,6 +86,7 @@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ +bashcompdir = @bashcompdir@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ @@ -94,6 +95,7 @@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +helpersdir = @helpersdir@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ @@ -119,13 +121,14 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ DEJATOOL = completion install unit -AM_RUNTESTFLAGS = --outdir log +AM_RUNTESTFLAGS = --outdir log --ignore $(PACKAGE).log EXTRA_DIST = completion \ config \ fixtures \ lib \ unit +AUTOMAKE_OPTIONS = dejagnu all: all-am .SUFFIXES: @@ -264,7 +267,8 @@ clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-DEJAGNU distclean-generic +distclean-am: clean-am distclean-DEJAGNU distclean-generic \ + distclean-local dvi: dvi-am @@ -327,16 +331,22 @@ uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-DEJAGNU check-am clean clean-generic \ - distclean distclean-DEJAGNU distclean-generic distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ - pdf-am ps ps-am uninstall uninstall-am - + distclean distclean-DEJAGNU distclean-generic distclean-local \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am + + +all: + $(mkdir_p) log tmp + +distclean-local: + rm -rf log tmp # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/test/completion/aclocal.exp b/test/completion/aclocal.exp new file mode 100644 index 00000000..477921a9 --- /dev/null +++ b/test/completion/aclocal.exp @@ -0,0 +1 @@ +assert_source_completions aclocal diff --git a/test/completion/acroread.exp b/test/completion/acroread.exp index c3635ae8..6ee03d6e 100644 --- a/test/completion/acroread.exp +++ b/test/completion/acroread.exp @@ -2,11 +2,11 @@ set test "Completion via _filedir_xspec() should be installed" set cmd "complete -p acroread" send "$cmd\r" -set expected "^$cmd\r\ncomplete -o filenames -F _filedir_xspec acroread\r\n/@$" +set expected "^$cmd\r\ncomplete -F _filedir_xspec acroread\r\n/@$" expect { -re $expected { pass "$test" } -re /@ { fail "$test at prompt" } }; # expect -source "lib/completions/acroread.exp" +source "$::srcdir/lib/completions/acroread.exp" diff --git a/test/completion/autoheader.exp b/test/completion/autoheader.exp new file mode 100644 index 00000000..b797371a --- /dev/null +++ b/test/completion/autoheader.exp @@ -0,0 +1 @@ +assert_source_completions autoheader diff --git a/test/completion/autoreconf.exp b/test/completion/autoreconf.exp new file mode 100644 index 00000000..337d11f7 --- /dev/null +++ b/test/completion/autoreconf.exp @@ -0,0 +1 @@ +assert_source_completions autoreconf diff --git a/test/completion/autoscan.exp b/test/completion/autoscan.exp new file mode 100644 index 00000000..9fc76858 --- /dev/null +++ b/test/completion/autoscan.exp @@ -0,0 +1 @@ +assert_source_completions autoscan diff --git a/test/completion/autoupdate.exp b/test/completion/autoupdate.exp new file mode 100644 index 00000000..f56f4c6d --- /dev/null +++ b/test/completion/autoupdate.exp @@ -0,0 +1 @@ +assert_source_completions autoupdate diff --git a/test/completion/badblocks.exp b/test/completion/badblocks.exp new file mode 100644 index 00000000..74bfcd5d --- /dev/null +++ b/test/completion/badblocks.exp @@ -0,0 +1 @@ +assert_source_completions badblocks diff --git a/test/completion/crontab.exp b/test/completion/crontab.exp new file mode 100644 index 00000000..2a649491 --- /dev/null +++ b/test/completion/crontab.exp @@ -0,0 +1 @@ +assert_source_completions crontab diff --git a/test/completion/dumpe2fs.exp b/test/completion/dumpe2fs.exp new file mode 100644 index 00000000..22d1523c --- /dev/null +++ b/test/completion/dumpe2fs.exp @@ -0,0 +1 @@ +assert_source_completions dumpe2fs diff --git a/test/completion/e2freefrag.exp b/test/completion/e2freefrag.exp new file mode 100644 index 00000000..713ee236 --- /dev/null +++ b/test/completion/e2freefrag.exp @@ -0,0 +1 @@ +assert_source_completions e2freefrag diff --git a/test/completion/e2label.exp b/test/completion/e2label.exp new file mode 100644 index 00000000..2383c98e --- /dev/null +++ b/test/completion/e2label.exp @@ -0,0 +1 @@ +assert_source_completions e2label diff --git a/test/completion/ether-wake.exp b/test/completion/ether-wake.exp new file mode 100644 index 00000000..602ba271 --- /dev/null +++ b/test/completion/ether-wake.exp @@ -0,0 +1 @@ +assert_source_completions ether-wake diff --git a/test/completion/filefrag.exp b/test/completion/filefrag.exp new file mode 100644 index 00000000..eeb5f8ce --- /dev/null +++ b/test/completion/filefrag.exp @@ -0,0 +1 @@ +assert_source_completions filefrag diff --git a/test/completion/finger.exp b/test/completion/finger.exp index cc77abe5..7c7b8a26 100644 --- a/test/completion/finger.exp +++ b/test/completion/finger.exp @@ -1,6 +1 @@ -source "lib/completions/finger.exp" - -# TODO: Dynamic loading of completions. After the tests have run a first time -# and real completion is installed, the tests can be run a second time. -# -# source "lib/completions/finger.exp" +assert_source_completions finger diff --git a/test/completion/freerdp.exp b/test/completion/freerdp.exp new file mode 100644 index 00000000..5ca649a2 --- /dev/null +++ b/test/completion/freerdp.exp @@ -0,0 +1 @@ +assert_source_completions xfreerdp diff --git a/test/completion/growisofs.exp b/test/completion/growisofs.exp new file mode 100644 index 00000000..57cb991b --- /dev/null +++ b/test/completion/growisofs.exp @@ -0,0 +1 @@ +assert_source_completions growisofs diff --git a/test/completion/hping2.exp b/test/completion/hping2.exp new file mode 100644 index 00000000..e9df7c2b --- /dev/null +++ b/test/completion/hping2.exp @@ -0,0 +1 @@ +assert_source_completions hping2 diff --git a/test/completion/iftop.exp b/test/completion/iftop.exp new file mode 100644 index 00000000..5ec1cb57 --- /dev/null +++ b/test/completion/iftop.exp @@ -0,0 +1 @@ +assert_source_completions iftop diff --git a/test/completion/ip.exp b/test/completion/ip.exp new file mode 100644 index 00000000..e80841e8 --- /dev/null +++ b/test/completion/ip.exp @@ -0,0 +1 @@ +assert_source_completions ip diff --git a/test/completion/ipmitool.exp b/test/completion/ipmitool.exp new file mode 100644 index 00000000..a5c72a78 --- /dev/null +++ b/test/completion/ipmitool.exp @@ -0,0 +1 @@ +assert_source_completions ipmitool diff --git a/test/completion/iscsiadm.exp b/test/completion/iscsiadm.exp new file mode 100644 index 00000000..6d760dd4 --- /dev/null +++ b/test/completion/iscsiadm.exp @@ -0,0 +1 @@ +assert_source_completions iscsiadm diff --git a/test/completion/javaws.exp b/test/completion/javaws.exp new file mode 100644 index 00000000..c1c6b106 --- /dev/null +++ b/test/completion/javaws.exp @@ -0,0 +1 @@ +assert_source_completions javaws diff --git a/test/completion/lrzip.exp b/test/completion/lrzip.exp new file mode 100644 index 00000000..60616f00 --- /dev/null +++ b/test/completion/lrzip.exp @@ -0,0 +1 @@ +assert_source_completions lrzip diff --git a/test/completion/lsof.exp b/test/completion/lsof.exp new file mode 100644 index 00000000..98baab04 --- /dev/null +++ b/test/completion/lsof.exp @@ -0,0 +1 @@ +assert_source_completions lsof diff --git a/test/completion/mktemp.exp b/test/completion/mktemp.exp new file mode 100644 index 00000000..b8296865 --- /dev/null +++ b/test/completion/mktemp.exp @@ -0,0 +1 @@ +assert_source_completions mktemp diff --git a/test/completion/sh.exp b/test/completion/sh.exp new file mode 100644 index 00000000..599f3b29 --- /dev/null +++ b/test/completion/sh.exp @@ -0,0 +1 @@ +assert_source_completions sh diff --git a/test/completion/sqlite3.exp b/test/completion/sqlite3.exp new file mode 100644 index 00000000..88195e0d --- /dev/null +++ b/test/completion/sqlite3.exp @@ -0,0 +1 @@ +assert_source_completions sqlite3 diff --git a/test/completion/sysbench.exp b/test/completion/sysbench.exp new file mode 100644 index 00000000..68da0a7a --- /dev/null +++ b/test/completion/sysbench.exp @@ -0,0 +1 @@ +assert_source_completions sysbench diff --git a/test/completion/tune2fs.exp b/test/completion/tune2fs.exp new file mode 100644 index 00000000..db034967 --- /dev/null +++ b/test/completion/tune2fs.exp @@ -0,0 +1 @@ +assert_source_completions tune2fs diff --git a/test/completion/xfreerdp.exp b/test/completion/xfreerdp.exp new file mode 100644 index 00000000..5ca649a2 --- /dev/null +++ b/test/completion/xfreerdp.exp @@ -0,0 +1 @@ +assert_source_completions xfreerdp diff --git a/test/completion/xmodmap.exp b/test/completion/xmodmap.exp new file mode 100644 index 00000000..a80bb027 --- /dev/null +++ b/test/completion/xmodmap.exp @@ -0,0 +1 @@ +assert_source_completions xmodmap diff --git a/test/completion/xrdb.exp b/test/completion/xrdb.exp new file mode 100644 index 00000000..522ac311 --- /dev/null +++ b/test/completion/xrdb.exp @@ -0,0 +1 @@ +assert_source_completions xrdb diff --git a/test/config/bashrc b/test/config/bashrc index ddf06339..fd72b816 100644 --- a/test/config/bashrc +++ b/test/config/bashrc @@ -7,13 +7,12 @@ set -o posix # Unset `command_not_found_handle' as defined on Debian/Ubuntu, because this # troubles and slows down testing unset -f command_not_found_handle - # Set prompt to ignore current root directory; display path starting - # from here. E.g. prompt: /fixtures/@ + # Set fixed prompt `/@' TESTDIR=$(pwd) -export PS1='$(wd=$(pwd); echo ${wd#$TESTDIR}/)@' +export PS1='/@' export PS2='> ' # Configure readline -export INPUTRC=$TESTDIR/config/inputrc +export INPUTRC=$SRCDIR/config/inputrc # When not running via cron, avoid escape junk at beginning of line from # readline, see e.g. http://bugs.gentoo.org/246091 [ "$CRON" ] || export TERM=dummy @@ -31,7 +30,7 @@ unset -v \ COMP_TAR_INTERNAL_PATHS # Load bash testsuite helper functions -. lib/library.sh +. $SRCDIR/lib/library.sh # Local variables: # mode: shell-script diff --git a/test/config/default.exp b/test/config/default.exp index d1c04e71..1eb47a2c 100644 --- a/test/config/default.exp +++ b/test/config/default.exp @@ -1,23 +1,21 @@ - # Set default expect fallback routines +# Set default expect fallback routines expect_after { eof { if {[info exists test]} { fail "$test at eof" - } else { + } elseif {[info level] > 0} { fail "[info level 1] at eof" - }; # if - }; # eof + } else { + fail "eof" + } + } timeout { if {[info exists test]} { fail "$test at timeout" - } else { + } elseif {[info level] > 0} { fail "[info level 1] at timeout" - }; # if - }; # timeout -}; # expect_after() - - - # Call tool_start(), if available -if { [info procs "${tool}_start"] != "" } { - ${tool}_start -}; # if + } else { + fail "timeout" + } + } +} diff --git a/test/fixtures/_filedir/ext/ii.E1 b/test/fixtures/_filedir/ext/ii.E1 new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/fixtures/_filedir/ext/ii.E1 diff --git a/test/fixtures/_known_hosts_real/known_hosts b/test/fixtures/_known_hosts_real/known_hosts index bf39e848..f655eaa3 100644 --- a/test/fixtures/_known_hosts_real/known_hosts +++ b/test/fixtures/_known_hosts_real/known_hosts @@ -4,3 +4,10 @@ doo ike ssh-rsa qwerty1234/Qwerty+1234== jub,10.0.0.1 kyl,100.0.0.2 +[10.10.0.3]:10022 +[blah]:1234 +fd00:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:5555 +fe80::123:0xff:dead:beef%eth0 +1111:2222:3333:4444:5555:6666:xxxx:abab +11xx:2222:3333:4444:5555:6666:xxxx:abab +::42 diff --git a/test/fixtures/acroread/bar b/test/fixtures/acroread/bar new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/fixtures/acroread/bar diff --git a/test/fixtures/acroread/foo.d/.gitignore b/test/fixtures/acroread/foo.d/.gitignore new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/fixtures/acroread/foo.d/.gitignore diff --git a/test/fixtures/acroread/t.pdf b/test/fixtures/acroread/t.pdf new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/fixtures/acroread/t.pdf diff --git a/test/fixtures/man/man1/bar.1.bz2 b/test/fixtures/man/man1/bar.1.bz2 new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/fixtures/man/man1/bar.1.bz2 diff --git a/test/fixtures/man/man1/foo.1 b/test/fixtures/man/man1/foo.1 new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/fixtures/man/man1/foo.1 diff --git a/test/fixtures/man/man3/Bash::Completion.3pm.gz b/test/fixtures/man/man3/Bash::Completion.3pm.gz new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/fixtures/man/man3/Bash::Completion.3pm.gz diff --git a/test/fixtures/scp/known_hosts b/test/fixtures/scp/known_hosts index d54a04d0..2dfa4b6f 100644 --- a/test/fixtures/scp/known_hosts +++ b/test/fixtures/scp/known_hosts @@ -2,3 +2,4 @@ |1|def doo ike ssh-rsa qwerty1234/Qwerty+1234== +[blah]:1234 diff --git a/test/fixtures/sftp/known_hosts b/test/fixtures/sftp/known_hosts index d54a04d0..6538eb4b 100644 --- a/test/fixtures/sftp/known_hosts +++ b/test/fixtures/sftp/known_hosts @@ -2,3 +2,4 @@ |1|def doo ike ssh-rsa qwerty1234/Qwerty+1234== +[10.10.10.10]:2222 diff --git a/test/lib/completion.exp b/test/lib/completion.exp index ea2a3d8d..88e92d50 100644 --- a/test/lib/completion.exp +++ b/test/lib/completion.exp @@ -1,4 +1,4 @@ -source ${srcdir}/lib/library.exp +source $::srcdir/lib/library.exp proc completion_exit {} { @@ -6,6 +6,14 @@ proc completion_exit {} { } +proc completion_init {test_file_name} { + # Call completion_start() only once + if {! [info exists ::BASH_VERSINFO]} { + completion_start + } +} + + proc completion_start {} { start_interactive_test } diff --git a/test/lib/completions/a2ps.exp b/test/lib/completions/a2ps.exp index 796e14cc..77cd07f5 100644 --- a/test/lib/completions/a2ps.exp +++ b/test/lib/completions/a2ps.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/abook.exp b/test/lib/completions/abook.exp index 3f4e301f..43f62729 100644 --- a/test/lib/completions/abook.exp +++ b/test/lib/completions/abook.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/aclocal.exp b/test/lib/completions/aclocal.exp new file mode 100644 index 00000000..da133aa8 --- /dev/null +++ b/test/lib/completions/aclocal.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "aclocal " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/acroread.exp b/test/lib/completions/acroread.exp index 4f11f905..f627d34e 100644 --- a/test/lib/completions/acroread.exp +++ b/test/lib/completions/acroread.exp @@ -1,19 +1,17 @@ proc setup {} { save_env - assert_bash_exec "touch fixtures/shared/default/t.pdf"; # Create temporary files -}; # setup() +} proc teardown {} { - assert_bash_exec "rm fixtures/shared/default/t.pdf"; # Remove temporary files - assert_env_unmodified -}; # teardown() + assert_env_unmodified {/OLDPWD/d} +} setup -assert_complete {"bar bar.d/" foo.d/ t.pdf} "acroread fixtures/shared/default/" +assert_complete_dir {foo.d/ t.pdf} "acroread " $::srcdir/fixtures/acroread sync_after_int diff --git a/test/lib/completions/add_members.exp b/test/lib/completions/add_members.exp index 02cd762d..46c7a688 100644 --- a/test/lib/completions/add_members.exp +++ b/test/lib/completions/add_members.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/alias.exp b/test/lib/completions/alias.exp index e6b88d00..9dba4e62 100644 --- a/test/lib/completions/alias.exp +++ b/test/lib/completions/alias.exp @@ -3,13 +3,13 @@ proc setup {} { assert_bash_exec "alias foo=bar" assert_bash_exec "alias bar='foo foo'" save_env -}; # setup() +} proc teardown {} { assert_bash_exec "unalias -a"; # Remove all aliases assert_env_unmodified -}; # teardown() +} setup @@ -34,7 +34,7 @@ expect { -re "^alias foo\b\b\bfoo=foo\b\b\b$" { fail "$test: Wrong cursor position" } -re /@ { unresolved "$test" } default { unresolved "$test" } -}; # expect +} sync_after_int diff --git a/test/lib/completions/animate.exp b/test/lib/completions/animate.exp index 26065d25..12314d79 100644 --- a/test/lib/completions/animate.exp +++ b/test/lib/completions/animate.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ant.exp b/test/lib/completions/ant.exp index 81294439..de57f24a 100644 --- a/test/lib/completions/ant.exp +++ b/test/lib/completions/ant.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/apache2ctl.exp b/test/lib/completions/apache2ctl.exp index e63abb16..88e53fc2 100644 --- a/test/lib/completions/apache2ctl.exp +++ b/test/lib/completions/apache2ctl.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/apt-build.exp b/test/lib/completions/apt-build.exp index fd09d0eb..01ff04b4 100644 --- a/test/lib/completions/apt-build.exp +++ b/test/lib/completions/apt-build.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/apt-cache.exp b/test/lib/completions/apt-cache.exp index 5336beab..63be48a8 100644 --- a/test/lib/completions/apt-cache.exp +++ b/test/lib/completions/apt-cache.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/apt-get.exp b/test/lib/completions/apt-get.exp index 6bd0f3a2..66887bd0 100644 --- a/test/lib/completions/apt-get.exp +++ b/test/lib/completions/apt-get.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/aptitude.exp b/test/lib/completions/aptitude.exp index dde6d26e..e6e82abb 100644 --- a/test/lib/completions/aptitude.exp +++ b/test/lib/completions/aptitude.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/arch.exp b/test/lib/completions/arch.exp index 9f7114c4..0550c76b 100644 --- a/test/lib/completions/arch.exp +++ b/test/lib/completions/arch.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/arpspoof.exp b/test/lib/completions/arpspoof.exp index 7db79f50..91ef5182 100644 --- a/test/lib/completions/arpspoof.exp +++ b/test/lib/completions/arpspoof.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/aspell.exp b/test/lib/completions/aspell.exp index 4edeb03b..9dd5f61a 100644 --- a/test/lib/completions/aspell.exp +++ b/test/lib/completions/aspell.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/autoconf.exp b/test/lib/completions/autoconf.exp index 4a44b651..53b096db 100644 --- a/test/lib/completions/autoconf.exp +++ b/test/lib/completions/autoconf.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/autoheader.exp b/test/lib/completions/autoheader.exp new file mode 100644 index 00000000..d85d4606 --- /dev/null +++ b/test/lib/completions/autoheader.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "autoheader " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/automake.exp b/test/lib/completions/automake.exp index cf27364a..f875da56 100644 --- a/test/lib/completions/automake.exp +++ b/test/lib/completions/automake.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/autoreconf.exp b/test/lib/completions/autoreconf.exp new file mode 100644 index 00000000..98808fb2 --- /dev/null +++ b/test/lib/completions/autoreconf.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "autoreconf " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/autorpm.exp b/test/lib/completions/autorpm.exp index 99b743ca..2ae4ff80 100644 --- a/test/lib/completions/autorpm.exp +++ b/test/lib/completions/autorpm.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/autoscan.exp b/test/lib/completions/autoscan.exp new file mode 100644 index 00000000..f75da812 --- /dev/null +++ b/test/lib/completions/autoscan.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "autoscan " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/autoupdate.exp b/test/lib/completions/autoupdate.exp new file mode 100644 index 00000000..c83912dd --- /dev/null +++ b/test/lib/completions/autoupdate.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "autoupdate " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/awk.exp b/test/lib/completions/awk.exp index 4288adbf..260dabcc 100644 --- a/test/lib/completions/awk.exp +++ b/test/lib/completions/awk.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/badblocks.exp b/test/lib/completions/badblocks.exp new file mode 100644 index 00000000..d453b5bd --- /dev/null +++ b/test/lib/completions/badblocks.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "badblocks " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/bash.exp b/test/lib/completions/bash.exp index 4caf58fc..bf01e76d 100644 --- a/test/lib/completions/bash.exp +++ b/test/lib/completions/bash.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/bc.exp b/test/lib/completions/bc.exp index c437d037..23c22b62 100644 --- a/test/lib/completions/bc.exp +++ b/test/lib/completions/bc.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/bison.exp b/test/lib/completions/bison.exp index a3dea1e0..4bbb59fa 100644 --- a/test/lib/completions/bison.exp +++ b/test/lib/completions/bison.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/bk.exp b/test/lib/completions/bk.exp index 4915136e..b652e6b0 100644 --- a/test/lib/completions/bk.exp +++ b/test/lib/completions/bk.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/brctl.exp b/test/lib/completions/brctl.exp index d87002a2..57c9edff 100644 --- a/test/lib/completions/brctl.exp +++ b/test/lib/completions/brctl.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/btdownloadcurses.py.exp b/test/lib/completions/btdownloadcurses.py.exp index 9dc0ba5a..71a00de7 100644 --- a/test/lib/completions/btdownloadcurses.py.exp +++ b/test/lib/completions/btdownloadcurses.py.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/btdownloadgui.py.exp b/test/lib/completions/btdownloadgui.py.exp index 03897a53..65f56776 100644 --- a/test/lib/completions/btdownloadgui.py.exp +++ b/test/lib/completions/btdownloadgui.py.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/btdownloadheadless.py.exp b/test/lib/completions/btdownloadheadless.py.exp index 69c62950..3c833bb8 100644 --- a/test/lib/completions/btdownloadheadless.py.exp +++ b/test/lib/completions/btdownloadheadless.py.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/bzip2.exp b/test/lib/completions/bzip2.exp index e5389a2a..2813dd0e 100644 --- a/test/lib/completions/bzip2.exp +++ b/test/lib/completions/bzip2.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/c++.exp b/test/lib/completions/c++.exp index 1fe4bb13..4dffb042 100644 --- a/test/lib/completions/c++.exp +++ b/test/lib/completions/c++.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cancel.exp b/test/lib/completions/cancel.exp index 24ca47c4..f4a03473 100644 --- a/test/lib/completions/cancel.exp +++ b/test/lib/completions/cancel.exp @@ -1,18 +1,18 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup # Adding a print job is successful? -if {[assert_exec {lp -H hold fixtures/shared/default/foo} job "" "untested"]} { +if {[assert_exec {lp -H hold $::srcdir/fixtures/shared/default/foo} job "" "untested"]} { # Yes, adding a print-job is successful; # Retrieve job-id, so we can cancel the job after the test set job_id [lindex [split $job] 3] @@ -22,7 +22,7 @@ if {[assert_exec {lp -H hold fixtures/shared/default/foo} job "" "untested"]} { assert_complete $jobs "cancel " # Remove/cancel the test print job assert_exec "cancel $job_id" -}; # if +} sync_after_int diff --git a/test/lib/completions/cardctl.exp b/test/lib/completions/cardctl.exp index b5d7e88d..9df90f48 100644 --- a/test/lib/completions/cardctl.exp +++ b/test/lib/completions/cardctl.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cat.exp b/test/lib/completions/cat.exp index 46e8775f..01b3659e 100644 --- a/test/lib/completions/cat.exp +++ b/test/lib/completions/cat.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cc.exp b/test/lib/completions/cc.exp index 1d63d006..eb722dea 100644 --- a/test/lib/completions/cc.exp +++ b/test/lib/completions/cc.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cd.exp b/test/lib/completions/cd.exp index 58233575..55bae158 100644 --- a/test/lib/completions/cd.exp +++ b/test/lib/completions/cd.exp @@ -1,18 +1,18 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup set test "Tab should complete" -assert_complete {"bar bar.d/" foo.d/} "cd fixtures/shared/default/" $test +assert_complete {"bar bar.d/" foo.d/} "cd $::srcdir/fixtures/shared/default/" $test sync_after_int @@ -20,16 +20,16 @@ sync_after_int set test "Tab should complete cd at cursor position" # Try completion -set cmd "cd fixtures/shared/default/foo" +set cmd "cd $::srcdir/fixtures/shared/default/foo" append cmd \002\002\002; # \002 = ^B = Move cursor left in bash emacs mode #append cmd \033\0133D; # Escape-[-D = Cursor left send "$cmd\t" expect { - -re "cd fixtures/shared/default/foo\b\b\b\r\n(\.svn/ +|)bar bar.d/ +foo.d/ *(\.svn/ *|)\r\n/@cd fixtures/shared/default/foo\b\b\b$" { pass "$test" } - -re "^cd fixtures/shared/default/foo\b\b\bfoo.d/foo\b\b\b$" { fail "$test: Wrong cursor position" } + -re "cd $::srcdir/fixtures/shared/default/foo\b\b\b\r\n(\.svn/ +|)bar bar.d/ +foo.d/ *(\.svn/ *|)\r\n/@cd $::srcdir/fixtures/shared/default/foo\b\b\b$" { pass "$test" } + -re "^cd $::srcdir/fixtures/shared/default/foo\b\b\bfoo.d/foo\b\b\b$" { fail "$test: Wrong cursor position" } -re /@ { unresolved "$test at prompt" } default { unresolved "$test" } -}; # expect +} sync_after_int @@ -37,11 +37,13 @@ sync_after_int set test "Tab should complete CDPATH" # Set CDPATH +assert_bash_exec "declare -p CDPATH &>/dev/null && OLDCDPATH=\$CDPATH || :" assert_bash_exec "CDPATH=\$PWD"; -assert_complete "fixtures/shared/default/foo.d/" "cd fixtures/shared/default/fo" $test +assert_complete "$::srcdir/fixtures/shared/default/foo.d/" \ + "cd $::srcdir/fixtures/shared/default/fo" $test -nospace -expect-cmd-minus fo sync_after_int # Reset CDPATH -assert_bash_exec "unset CDPATH" +assert_bash_exec "declare -p OLDCDPATH &>/dev/null && CDPATH=\$OLDCDPATH || unset CDPATH && unset OLDCDPATH" teardown diff --git a/test/lib/completions/cdrecord.exp b/test/lib/completions/cdrecord.exp index d369f79d..192d2ded 100644 --- a/test/lib/completions/cdrecord.exp +++ b/test/lib/completions/cdrecord.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/change_pw.exp b/test/lib/completions/change_pw.exp index ca9bcdbd..28301941 100644 --- a/test/lib/completions/change_pw.exp +++ b/test/lib/completions/change_pw.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/check_db.exp b/test/lib/completions/check_db.exp index ca59a715..fe34ead2 100644 --- a/test/lib/completions/check_db.exp +++ b/test/lib/completions/check_db.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/check_perms.exp b/test/lib/completions/check_perms.exp index a58995b0..b40b78fc 100644 --- a/test/lib/completions/check_perms.exp +++ b/test/lib/completions/check_perms.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/chgrp.exp b/test/lib/completions/chgrp.exp index 8dfeea79..e9238bde 100644 --- a/test/lib/completions/chgrp.exp +++ b/test/lib/completions/chgrp.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/chkconfig.exp b/test/lib/completions/chkconfig.exp index e7469b34..dae3b3bd 100644 --- a/test/lib/completions/chkconfig.exp +++ b/test/lib/completions/chkconfig.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/chown.exp b/test/lib/completions/chown.exp index 953b2b02..bc1a8c7f 100644 --- a/test/lib/completions/chown.exp +++ b/test/lib/completions/chown.exp @@ -1,10 +1,12 @@ proc setup {} { + # fake root command to get all users/groups completed at least for now + assert_bash_exec {root_command=sudo} save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -38,12 +40,11 @@ if {!$failed_find_unique_completion} { assert_complete $fulluser:$fullgroup "chown $fulluser:$partgroup" sync_after_int - # One slash should work correctly (doubled here for tcl). - assert_complete $fulluser\\:$fullgroup "chown $fulluser\\:$partgroup" + assert_complete "dot.user:$fullgroup" "chown dot.user:$partgroup" sync_after_int foreach prefix { - "funky\\ user:" "funky\\ user\\:" "funky.user:" "funky\\.user:" "fu\\ nky.user\\:" + "funky\\ user:" "funky.user:" "funky\\.user:" "fu\\ nky.user:" "f\\ o\\ o\\.\\bar:" "foo\\_b\\ a\\.r\\ :" } { set test "Check preserve special chars in $prefix$partgroup<TAB>" diff --git a/test/lib/completions/chsh.exp b/test/lib/completions/chsh.exp index 99262a2c..a26ac93f 100644 --- a/test/lib/completions/chsh.exp +++ b/test/lib/completions/chsh.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ci.exp b/test/lib/completions/ci.exp index 09105eec..15ef2ecc 100644 --- a/test/lib/completions/ci.exp +++ b/test/lib/completions/ci.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/civclient.exp b/test/lib/completions/civclient.exp index 8159c2bc..c0047468 100644 --- a/test/lib/completions/civclient.exp +++ b/test/lib/completions/civclient.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/civserver.exp b/test/lib/completions/civserver.exp index df459688..3739f50e 100644 --- a/test/lib/completions/civserver.exp +++ b/test/lib/completions/civserver.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cksfv.exp b/test/lib/completions/cksfv.exp index a40a5023..2b9be04c 100644 --- a/test/lib/completions/cksfv.exp +++ b/test/lib/completions/cksfv.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cleanarch.exp b/test/lib/completions/cleanarch.exp index e3145e81..a5f3bfe6 100644 --- a/test/lib/completions/cleanarch.exp +++ b/test/lib/completions/cleanarch.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/clisp.exp b/test/lib/completions/clisp.exp index 2bc599ac..dfbad4f3 100644 --- a/test/lib/completions/clisp.exp +++ b/test/lib/completions/clisp.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/clone_member.exp b/test/lib/completions/clone_member.exp index 34b4db57..d83d73bc 100644 --- a/test/lib/completions/clone_member.exp +++ b/test/lib/completions/clone_member.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/co.exp b/test/lib/completions/co.exp index 49fe3a64..215268b6 100644 --- a/test/lib/completions/co.exp +++ b/test/lib/completions/co.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/composite.exp b/test/lib/completions/composite.exp index e39ce72f..aba9af3b 100644 --- a/test/lib/completions/composite.exp +++ b/test/lib/completions/composite.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/config_list.exp b/test/lib/completions/config_list.exp index 5246c860..27699239 100644 --- a/test/lib/completions/config_list.exp +++ b/test/lib/completions/config_list.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/configure.exp b/test/lib/completions/configure.exp index 74afba1b..b4399cb1 100644 --- a/test/lib/completions/configure.exp +++ b/test/lib/completions/configure.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/convert.exp b/test/lib/completions/convert.exp index d8a77e35..07032040 100644 --- a/test/lib/completions/convert.exp +++ b/test/lib/completions/convert.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cowsay.exp b/test/lib/completions/cowsay.exp index dfbefe1a..382f400f 100644 --- a/test/lib/completions/cowsay.exp +++ b/test/lib/completions/cowsay.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cp.exp b/test/lib/completions/cp.exp index 9fe46537..703bf263 100644 --- a/test/lib/completions/cp.exp +++ b/test/lib/completions/cp.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cpio.exp b/test/lib/completions/cpio.exp index b02f2719..93f6f3c1 100644 --- a/test/lib/completions/cpio.exp +++ b/test/lib/completions/cpio.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/createdb.exp b/test/lib/completions/createdb.exp index 1e5cdbe7..aafff1b6 100644 --- a/test/lib/completions/createdb.exp +++ b/test/lib/completions/createdb.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/crontab.exp b/test/lib/completions/crontab.exp new file mode 100644 index 00000000..18e2269f --- /dev/null +++ b/test/lib/completions/crontab.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "crontab " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/cryptsetup.exp b/test/lib/completions/cryptsetup.exp index e94c3ac1..4c20bc5d 100644 --- a/test/lib/completions/cryptsetup.exp +++ b/test/lib/completions/cryptsetup.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/csplit.exp b/test/lib/completions/csplit.exp index 3a66a627..87b89dea 100644 --- a/test/lib/completions/csplit.exp +++ b/test/lib/completions/csplit.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cut.exp b/test/lib/completions/cut.exp index b9bcf6c5..edb558ea 100644 --- a/test/lib/completions/cut.exp +++ b/test/lib/completions/cut.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/cvs.exp b/test/lib/completions/cvs.exp index 2a26da8e..3b2643d3 100644 --- a/test/lib/completions/cvs.exp +++ b/test/lib/completions/cvs.exp @@ -1,7 +1,7 @@ proc setup {} { save_env - assert_bash_exec {OLDHOME=$HOME ; HOME=$TESTDIR/fixtures/cvs} -}; # setup() + assert_bash_exec {OLDHOME=$HOME ; HOME=$SRCDIR/fixtures/cvs} +} proc teardown {} { @@ -9,7 +9,7 @@ proc teardown {} { assert_env_unmodified { /OLDHOME=/d } -}; # teardown() +} setup @@ -27,7 +27,7 @@ send "$cmd\t" expect { -re "^$cmd\r\n.*:pserver:.*\r\n/@$cmd:pserver:.*$" { pass "$test" } default { fail "$test" } -}; # expect +} sync_after_int diff --git a/test/lib/completions/cvsps.exp b/test/lib/completions/cvsps.exp index 1fd4a0a9..6cf95ac1 100644 --- a/test/lib/completions/cvsps.exp +++ b/test/lib/completions/cvsps.exp @@ -1,7 +1,7 @@ proc setup {} { save_env - assert_bash_exec {OLDHOME=$HOME ; HOME=$TESTDIR/fixtures/cvs} -}; # setup() + assert_bash_exec {OLDHOME=$HOME ; HOME=$SRCDIR/fixtures/cvs} +} proc teardown {} { @@ -9,7 +9,7 @@ proc teardown {} { assert_env_unmodified { /OLDHOME=/d } -}; # teardown() +} setup @@ -27,7 +27,7 @@ send "$cmd\t" expect { -re "^$cmd\r\n.*:pserver:.*\r\n/@$cmd:pserver:.*$" { pass "$test" } default { fail "$test" } -}; # expect +} sync_after_int diff --git a/test/lib/completions/date.exp b/test/lib/completions/date.exp index 9d75f5f3..ee970cf7 100644 --- a/test/lib/completions/date.exp +++ b/test/lib/completions/date.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dcop.exp b/test/lib/completions/dcop.exp index 6ed800c5..1e27346b 100644 --- a/test/lib/completions/dcop.exp +++ b/test/lib/completions/dcop.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {dcop} words]} { assert_complete $words "dcop " -}; # if +} sync_after_int diff --git a/test/lib/completions/dd.exp b/test/lib/completions/dd.exp index 400dd143..e02e037c 100644 --- a/test/lib/completions/dd.exp +++ b/test/lib/completions/dd.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -24,7 +24,7 @@ expect -ex "$cmd" expect { -re "^=$" { pass $test } -re {^\\=$} { xfail $test } -}; # expect +} sync_after_int diff --git a/test/lib/completions/df.exp b/test/lib/completions/df.exp index 487d70a9..acf212a9 100644 --- a/test/lib/completions/df.exp +++ b/test/lib/completions/df.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dhclient.exp b/test/lib/completions/dhclient.exp index 42c14c82..6caff5fc 100644 --- a/test/lib/completions/dhclient.exp +++ b/test/lib/completions/dhclient.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dict.exp b/test/lib/completions/dict.exp index 32fb4988..402e0c5c 100644 --- a/test/lib/completions/dict.exp +++ b/test/lib/completions/dict.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/diff.exp b/test/lib/completions/diff.exp index c009f640..918bf7fd 100644 --- a/test/lib/completions/diff.exp +++ b/test/lib/completions/diff.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dir.exp b/test/lib/completions/dir.exp index 6e20d37d..c9f61cd5 100644 --- a/test/lib/completions/dir.exp +++ b/test/lib/completions/dir.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/display.exp b/test/lib/completions/display.exp index 9a9d6901..e9fe766a 100644 --- a/test/lib/completions/display.exp +++ b/test/lib/completions/display.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dnsspoof.exp b/test/lib/completions/dnsspoof.exp index 3223a349..4aefb956 100644 --- a/test/lib/completions/dnsspoof.exp +++ b/test/lib/completions/dnsspoof.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dpkg-deb.exp b/test/lib/completions/dpkg-deb.exp index c8656610..37ece08d 100644 --- a/test/lib/completions/dpkg-deb.exp +++ b/test/lib/completions/dpkg-deb.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dpkg-reconfigure.exp b/test/lib/completions/dpkg-reconfigure.exp index 267594be..0212666b 100644 --- a/test/lib/completions/dpkg-reconfigure.exp +++ b/test/lib/completions/dpkg-reconfigure.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dpkg-source.exp b/test/lib/completions/dpkg-source.exp index a21eff45..a42759b9 100644 --- a/test/lib/completions/dpkg-source.exp +++ b/test/lib/completions/dpkg-source.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dpkg.exp b/test/lib/completions/dpkg.exp index 2bd1fb6e..f358e172 100644 --- a/test/lib/completions/dpkg.exp +++ b/test/lib/completions/dpkg.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -20,7 +20,7 @@ sync_after_int # Build list of installed packages if {[assert_exec {dpkg --get-selections | command grep \[\[:space:\]\]install$ | cut -f1} packages]} { assert_complete $packages "dpkg -L " -}; # if +} sync_after_int diff --git a/test/lib/completions/dropdb.exp b/test/lib/completions/dropdb.exp index e78a2ba7..8f2d5bfb 100644 --- a/test/lib/completions/dropdb.exp +++ b/test/lib/completions/dropdb.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dselect.exp b/test/lib/completions/dselect.exp index f6257294..634db05e 100644 --- a/test/lib/completions/dselect.exp +++ b/test/lib/completions/dselect.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dsniff.exp b/test/lib/completions/dsniff.exp index a0cc43ac..cb8912b6 100644 --- a/test/lib/completions/dsniff.exp +++ b/test/lib/completions/dsniff.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/du.exp b/test/lib/completions/du.exp index d1ffa8ca..6ddeb9b2 100644 --- a/test/lib/completions/du.exp +++ b/test/lib/completions/du.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dumpdb.exp b/test/lib/completions/dumpdb.exp index 240214b3..5b617b11 100644 --- a/test/lib/completions/dumpdb.exp +++ b/test/lib/completions/dumpdb.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/dumpe2fs.exp b/test/lib/completions/dumpe2fs.exp new file mode 100644 index 00000000..e935c504 --- /dev/null +++ b/test/lib/completions/dumpe2fs.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "dumpe2fs " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/e2freefrag.exp b/test/lib/completions/e2freefrag.exp new file mode 100644 index 00000000..1530c9c9 --- /dev/null +++ b/test/lib/completions/e2freefrag.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "e2freefrag " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/e2label.exp b/test/lib/completions/e2label.exp new file mode 100644 index 00000000..8ae7f443 --- /dev/null +++ b/test/lib/completions/e2label.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "e2label " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/enscript.exp b/test/lib/completions/enscript.exp index 7fefabdd..c859b50f 100644 --- a/test/lib/completions/enscript.exp +++ b/test/lib/completions/enscript.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/env.exp b/test/lib/completions/env.exp index f03f5395..4f213748 100644 --- a/test/lib/completions/env.exp +++ b/test/lib/completions/env.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {env --help} "" "" "unsupported"]} { assert_complete_any "env --" -}; # if +} sync_after_int diff --git a/test/lib/completions/ether-wake.exp b/test/lib/completions/ether-wake.exp new file mode 100644 index 00000000..fe1aa174 --- /dev/null +++ b/test/lib/completions/ether-wake.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "ether-wake " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/evince.exp b/test/lib/completions/evince.exp index 22279a26..204467a1 100644 --- a/test/lib/completions/evince.exp +++ b/test/lib/completions/evince.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified {/OLDPWD=/d} -}; # teardown() +} setup @@ -26,7 +26,7 @@ set files { .tga .TGA .tif .TIF .tiff .TIFF .xpm .XPM .xwd .XWD } -assert_complete_dir $files "evince " "fixtures/evince" +assert_complete_dir $files "evince " "$::srcdir/fixtures/evince" sync_after_int diff --git a/test/lib/completions/expand.exp b/test/lib/completions/expand.exp index d5cd6b17..76b6eafa 100644 --- a/test/lib/completions/expand.exp +++ b/test/lib/completions/expand.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {expand --help} "" "" "unsupported"]} { assert_complete_any "expand --" -}; # if +} sync_after_int diff --git a/test/lib/completions/filefrag.exp b/test/lib/completions/filefrag.exp new file mode 100644 index 00000000..fa80cd05 --- /dev/null +++ b/test/lib/completions/filefrag.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "filefrag " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/filesnarf.exp b/test/lib/completions/filesnarf.exp index 53cf01e4..03755056 100644 --- a/test/lib/completions/filesnarf.exp +++ b/test/lib/completions/filesnarf.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/find.exp b/test/lib/completions/find.exp index 4b1728dc..9acda648 100644 --- a/test/lib/completions/find.exp +++ b/test/lib/completions/find.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified {/OLDPWD=/d} -}; # teardown() +} setup @@ -41,7 +41,7 @@ sync_after_int set test "-wholename should complete files/dirs" -set dir fixtures/shared/default +set dir $::srcdir/fixtures/shared/default set files [split [exec bash -c "cd $dir && ls -p"] "\n"] assert_complete_dir $files "find -wholename " $dir @@ -50,28 +50,26 @@ sync_after_int set test "-uid should complete uids" - # Complete set cmd "find -uid " send "$cmd\t" expect { -re "$cmd\r\n\\d+.*/@$cmd$" { pass "$test" } -re /@ { unresolved "$test at prompt" } -re eof { unresolved "eof" } -}; # expect +} sync_after_int set test "-gid should complete gids" - # Complete set cmd "find -gid " send "$cmd\t" expect { -re "$cmd\r\n\\d+.*/@$cmd$" { pass "$test" } -re /@ { unresolved "$test at prompt" } -re eof { unresolved "eof" } -}; # expect +} sync_after_int diff --git a/test/lib/completions/find_member.exp b/test/lib/completions/find_member.exp index 58fac7d2..55672091 100644 --- a/test/lib/completions/find_member.exp +++ b/test/lib/completions/find_member.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/finger.exp b/test/lib/completions/finger.exp index 30f2b080..70e3ed2c 100644 --- a/test/lib/completions/finger.exp +++ b/test/lib/completions/finger.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -16,7 +16,7 @@ set test "Tab should complete usernames" set users {} foreach u [exec bash -c "compgen -A user"] { lappend users $u -}; # foreach +} assert_complete $users "finger " $test @@ -24,7 +24,7 @@ sync_after_int set test "Tab should complete partial username" -assert_complete_partial [exec bash -c "compgen -A user"] "finger" +assert_complete_partial [exec bash -c "compgen -A user"] "finger" -nospace sync_after_int @@ -39,15 +39,15 @@ set hosts {} set char "" foreach h [get_known_hosts] { set first [string range $h 0 0] - if {$char == "" && [string first $first $COMP_WORDBREAKS] == -1} {set char $first} + if {$char == "" && [string first $first $::COMP_WORDBREAKS] == -1} {set char $first} if {$char != ""} { # Only append unique hostnames starting with $char if {$first == $char && [lsearch -exact $hosts "test@$h"] == -1} { # Prefix hosts with username 'test@' lappend hosts "test@$h" - }; # if - }; # if -}; # foreach + } + } +} assert_complete $hosts "finger test@$char" $test diff --git a/test/lib/completions/fmt.exp b/test/lib/completions/fmt.exp index 28570682..7d3cc17f 100644 --- a/test/lib/completions/fmt.exp +++ b/test/lib/completions/fmt.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {fmt --help} "" "" "unsupported"]} { assert_complete_any "fmt -" -}; # if +} sync_after_int diff --git a/test/lib/completions/fold.exp b/test/lib/completions/fold.exp index a5230b03..f447f08b 100644 --- a/test/lib/completions/fold.exp +++ b/test/lib/completions/fold.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {fold --help} "" "" "unsupported"]} { assert_complete_any "fold --" -}; # if +} sync_after_int diff --git a/test/lib/completions/freerdp.exp b/test/lib/completions/freerdp.exp new file mode 100644 index 00000000..be61d459 --- /dev/null +++ b/test/lib/completions/freerdp.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "xfreerdp" + + +sync_after_int + + +teardown diff --git a/test/lib/completions/g++.exp b/test/lib/completions/g++.exp index 4dc2591a..4dbe73f4 100644 --- a/test/lib/completions/g++.exp +++ b/test/lib/completions/g++.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/g4.exp b/test/lib/completions/g4.exp index 203de061..7d575f10 100644 --- a/test/lib/completions/g4.exp +++ b/test/lib/completions/g4.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/g77.exp b/test/lib/completions/g77.exp index 8802aca9..e23745b7 100644 --- a/test/lib/completions/g77.exp +++ b/test/lib/completions/g77.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gcc.exp b/test/lib/completions/gcc.exp index 8e52a120..00097cc2 100644 --- a/test/lib/completions/gcc.exp +++ b/test/lib/completions/gcc.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gcj.exp b/test/lib/completions/gcj.exp index db52d59a..cde07700 100644 --- a/test/lib/completions/gcj.exp +++ b/test/lib/completions/gcj.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gcl.exp b/test/lib/completions/gcl.exp index 7cead846..1846d0d1 100644 --- a/test/lib/completions/gcl.exp +++ b/test/lib/completions/gcl.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gdb.exp b/test/lib/completions/gdb.exp index 982f0878..2e389edb 100644 --- a/test/lib/completions/gdb.exp +++ b/test/lib/completions/gdb.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/genaliases.exp b/test/lib/completions/genaliases.exp index 064eb386..bb4d5e0e 100644 --- a/test/lib/completions/genaliases.exp +++ b/test/lib/completions/genaliases.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/getent.exp b/test/lib/completions/getent.exp index 121f3b38..6500b22d 100644 --- a/test/lib/completions/getent.exp +++ b/test/lib/completions/getent.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gkrellm.exp b/test/lib/completions/gkrellm.exp index f8b0dd4d..009770fc 100644 --- a/test/lib/completions/gkrellm.exp +++ b/test/lib/completions/gkrellm.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gmplayer.exp b/test/lib/completions/gmplayer.exp index d9032698..a110cb2f 100644 --- a/test/lib/completions/gmplayer.exp +++ b/test/lib/completions/gmplayer.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gnatmake.exp b/test/lib/completions/gnatmake.exp index 902aa062..bad4da33 100644 --- a/test/lib/completions/gnatmake.exp +++ b/test/lib/completions/gnatmake.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gpc.exp b/test/lib/completions/gpc.exp index 6c4d0383..71eddacc 100644 --- a/test/lib/completions/gpc.exp +++ b/test/lib/completions/gpc.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gperf.exp b/test/lib/completions/gperf.exp index aa24333e..1cf77678 100644 --- a/test/lib/completions/gperf.exp +++ b/test/lib/completions/gperf.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gpg.exp b/test/lib/completions/gpg.exp index 29fd2244..ea6805fa 100644 --- a/test/lib/completions/gpg.exp +++ b/test/lib/completions/gpg.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gprof.exp b/test/lib/completions/gprof.exp index 592786af..996a1efd 100644 --- a/test/lib/completions/gprof.exp +++ b/test/lib/completions/gprof.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {gprof --help} "" "" "unsupported"]} { assert_complete_any "gprof --" -}; # if +} sync_after_int diff --git a/test/lib/completions/grep.exp b/test/lib/completions/grep.exp index 3814df71..c94ae727 100644 --- a/test/lib/completions/grep.exp +++ b/test/lib/completions/grep.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/growisofs.exp b/test/lib/completions/growisofs.exp new file mode 100644 index 00000000..0f2a0ec7 --- /dev/null +++ b/test/lib/completions/growisofs.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "growisofs " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/grub.exp b/test/lib/completions/grub.exp index 9578e789..b88d1f26 100644 --- a/test/lib/completions/grub.exp +++ b/test/lib/completions/grub.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/gzip.exp b/test/lib/completions/gzip.exp index f212c61a..32acf428 100644 --- a/test/lib/completions/gzip.exp +++ b/test/lib/completions/gzip.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -19,7 +19,7 @@ expect { -re "^$cmd\r\n.*$cmd$" { pass "$test" } -re /@ { unresolved "$test at prompt" } -re eof { unresolved "eof" } -}; # expect +} sync_after_int diff --git a/test/lib/completions/hcitool.exp b/test/lib/completions/hcitool.exp index 9283adff..e6ae0032 100644 --- a/test/lib/completions/hcitool.exp +++ b/test/lib/completions/hcitool.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/head.exp b/test/lib/completions/head.exp index 0d4f6a20..7edb8a1b 100644 --- a/test/lib/completions/head.exp +++ b/test/lib/completions/head.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {head --help} "" "" "unsupported"]} { assert_complete_any "head --" -}; # if +} sync_after_int diff --git a/test/lib/completions/hping2.exp b/test/lib/completions/hping2.exp new file mode 100644 index 00000000..8919626d --- /dev/null +++ b/test/lib/completions/hping2.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "hping2 " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/iconv.exp b/test/lib/completions/iconv.exp index 420e923c..dcce330f 100644 --- a/test/lib/completions/iconv.exp +++ b/test/lib/completions/iconv.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/id.exp b/test/lib/completions/id.exp index 155af52c..b03ee721 100644 --- a/test/lib/completions/id.exp +++ b/test/lib/completions/id.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/identify.exp b/test/lib/completions/identify.exp index 8f38ae47..3347c5cd 100644 --- a/test/lib/completions/identify.exp +++ b/test/lib/completions/identify.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ifdown.exp b/test/lib/completions/ifdown.exp index 68225bb9..7849f3f7 100644 --- a/test/lib/completions/ifdown.exp +++ b/test/lib/completions/ifdown.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/iftop.exp b/test/lib/completions/iftop.exp new file mode 100644 index 00000000..12941610 --- /dev/null +++ b/test/lib/completions/iftop.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "iftop " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/ifup.exp b/test/lib/completions/ifup.exp index 9d717178..2c1c010e 100644 --- a/test/lib/completions/ifup.exp +++ b/test/lib/completions/ifup.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/indent.exp b/test/lib/completions/indent.exp index e8fc32b1..5c5bb1c7 100644 --- a/test/lib/completions/indent.exp +++ b/test/lib/completions/indent.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/info.exp b/test/lib/completions/info.exp index ed769f1a..e7c79e6e 100644 --- a/test/lib/completions/info.exp +++ b/test/lib/completions/info.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/inject.exp b/test/lib/completions/inject.exp index 7c093146..4f95be23 100644 --- a/test/lib/completions/inject.exp +++ b/test/lib/completions/inject.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/insmod.exp b/test/lib/completions/insmod.exp index 8e83f0b4..a312c894 100644 --- a/test/lib/completions/insmod.exp +++ b/test/lib/completions/insmod.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/invoke-rc.d.exp b/test/lib/completions/invoke-rc.d.exp index 4dc9f1d8..d217d17e 100644 --- a/test/lib/completions/invoke-rc.d.exp +++ b/test/lib/completions/invoke-rc.d.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ip.exp b/test/lib/completions/ip.exp new file mode 100644 index 00000000..8f45f6a3 --- /dev/null +++ b/test/lib/completions/ip.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "ip " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/ipmitool.exp b/test/lib/completions/ipmitool.exp new file mode 100644 index 00000000..aa18e3ff --- /dev/null +++ b/test/lib/completions/ipmitool.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "ipmitool " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/ipsec.exp b/test/lib/completions/ipsec.exp index 15617a16..74ef638c 100644 --- a/test/lib/completions/ipsec.exp +++ b/test/lib/completions/ipsec.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ipv6calc.exp b/test/lib/completions/ipv6calc.exp index 74ce95f7..42201f0c 100644 --- a/test/lib/completions/ipv6calc.exp +++ b/test/lib/completions/ipv6calc.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/irb.exp b/test/lib/completions/irb.exp index 81bea6d2..720edfdf 100644 --- a/test/lib/completions/irb.exp +++ b/test/lib/completions/irb.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/iscsiadm.exp b/test/lib/completions/iscsiadm.exp new file mode 100644 index 00000000..104e7c4e --- /dev/null +++ b/test/lib/completions/iscsiadm.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "iscsiadm --mode " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/isql.exp b/test/lib/completions/isql.exp index 87e16bca..ca40faca 100644 --- a/test/lib/completions/isql.exp +++ b/test/lib/completions/isql.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified {/ODBCINI=/d} -}; # teardown() +} setup diff --git a/test/lib/completions/iwconfig.exp b/test/lib/completions/iwconfig.exp index f09719d7..82ae11f3 100644 --- a/test/lib/completions/iwconfig.exp +++ b/test/lib/completions/iwconfig.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/iwlist.exp b/test/lib/completions/iwlist.exp index 80a2c367..43c919ef 100644 --- a/test/lib/completions/iwlist.exp +++ b/test/lib/completions/iwlist.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/iwpriv.exp b/test/lib/completions/iwpriv.exp index f3102cc5..86b1ee95 100644 --- a/test/lib/completions/iwpriv.exp +++ b/test/lib/completions/iwpriv.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/iwspy.exp b/test/lib/completions/iwspy.exp index 5fa0bee5..2894ca4e 100644 --- a/test/lib/completions/iwspy.exp +++ b/test/lib/completions/iwspy.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/jar.exp b/test/lib/completions/jar.exp index 0e11f684..d2cb476b 100644 --- a/test/lib/completions/jar.exp +++ b/test/lib/completions/jar.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/jarsigner.exp b/test/lib/completions/jarsigner.exp index 075e0263..7ea7cb2e 100644 --- a/test/lib/completions/jarsigner.exp +++ b/test/lib/completions/jarsigner.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/java.exp b/test/lib/completions/java.exp index 14610b2f..842501d2 100644 --- a/test/lib/completions/java.exp +++ b/test/lib/completions/java.exp @@ -1,12 +1,12 @@ proc setup {} { - assert_bash_exec {CLASSPATH=$TESTDIR/fixtures/java/a:$TESTDIR/fixtures/java/bashcomp.jar} + assert_bash_exec {CLASSPATH=$SRCDIR/fixtures/java/a:$SRCDIR/fixtures/java/bashcomp.jar} save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -25,7 +25,7 @@ sync_after_int assert_complete "bashcomp.jarred toplevel" \ - "java -cp fixtures/java/bashcomp.jar " + "java -cp $::srcdir/fixtures/java/bashcomp.jar " sync_after_int @@ -37,7 +37,7 @@ assert_no_complete "java -cp \"\" " sync_after_int -assert_complete "a/ bashcomp.jar" "java -jar fixtures/java/" +assert_complete "a/ bashcomp.jar" "java -jar $::srcdir/fixtures/java/" sync_after_int diff --git a/test/lib/completions/javac.exp b/test/lib/completions/javac.exp index 6013de11..948fe8c8 100644 --- a/test/lib/completions/javac.exp +++ b/test/lib/completions/javac.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/javadoc.exp b/test/lib/completions/javadoc.exp index 40c922ca..0af8a3da 100644 --- a/test/lib/completions/javadoc.exp +++ b/test/lib/completions/javadoc.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/javaws.exp b/test/lib/completions/javaws.exp new file mode 100644 index 00000000..cb29c65a --- /dev/null +++ b/test/lib/completions/javaws.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "javaws " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/k3b.exp b/test/lib/completions/k3b.exp index 86942d67..cde14b86 100644 --- a/test/lib/completions/k3b.exp +++ b/test/lib/completions/k3b.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/kdvi.exp b/test/lib/completions/kdvi.exp index 0196049a..fa993f5e 100644 --- a/test/lib/completions/kdvi.exp +++ b/test/lib/completions/kdvi.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified {/OLDPWD=/d} -}; # teardown() +} setup @@ -18,7 +18,7 @@ set files { foo/ .dvi .DVI .dvi.bz2 .DVI.bz2 .dvi.gz .DVI.gz .dvi.Z .DVI.Z } -assert_complete_dir $files "kdvi " "fixtures/kdvi" +assert_complete_dir $files "kdvi " "$::srcdir/fixtures/kdvi" sync_after_int diff --git a/test/lib/completions/kill.exp b/test/lib/completions/kill.exp index ca02650c..1e80fe69 100644 --- a/test/lib/completions/kill.exp +++ b/test/lib/completions/kill.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/killall.exp b/test/lib/completions/killall.exp index 763c8e7d..ae8b3d60 100644 --- a/test/lib/completions/killall.exp +++ b/test/lib/completions/killall.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/kldload.exp b/test/lib/completions/kldload.exp index 0493a10a..a1d87c97 100644 --- a/test/lib/completions/kldload.exp +++ b/test/lib/completions/kldload.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/kldunload.exp b/test/lib/completions/kldunload.exp index 192159a5..476c5104 100644 --- a/test/lib/completions/kldunload.exp +++ b/test/lib/completions/kldunload.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/kpdf.exp b/test/lib/completions/kpdf.exp index 010abcfb..6f0feb68 100644 --- a/test/lib/completions/kpdf.exp +++ b/test/lib/completions/kpdf.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified {/OLDPWD=/d} -}; # teardown() +} setup @@ -17,7 +17,7 @@ setup set files { foo/ .eps .ps .EPS .PS .pdf .PDF } -assert_complete_dir $files "kpdf " "fixtures/kpdf" +assert_complete_dir $files "kpdf " "$::srcdir/fixtures/kpdf" sync_after_int diff --git a/test/lib/completions/kplayer.exp b/test/lib/completions/kplayer.exp index 34c9b3bf..4fdfa672 100644 --- a/test/lib/completions/kplayer.exp +++ b/test/lib/completions/kplayer.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/larch.exp b/test/lib/completions/larch.exp index 076016f2..cefcbe02 100644 --- a/test/lib/completions/larch.exp +++ b/test/lib/completions/larch.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ld.exp b/test/lib/completions/ld.exp index 60377991..ee660fcb 100644 --- a/test/lib/completions/ld.exp +++ b/test/lib/completions/ld.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ldd.exp b/test/lib/completions/ldd.exp index e45d1df7..1c3239c7 100644 --- a/test/lib/completions/ldd.exp +++ b/test/lib/completions/ldd.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/less.exp b/test/lib/completions/less.exp index 269c9b5c..78d6ef14 100644 --- a/test/lib/completions/less.exp +++ b/test/lib/completions/less.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lftp.exp b/test/lib/completions/lftp.exp index a49a1935..bb219650 100644 --- a/test/lib/completions/lftp.exp +++ b/test/lib/completions/lftp.exp @@ -1,12 +1,12 @@ proc setup {} { - assert_bash_exec {HOME=$TESTDIR/fixtures/lftp} + assert_bash_exec {HOME=$SRCDIR/fixtures/lftp} save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lftpget.exp b/test/lib/completions/lftpget.exp index 7d80216e..0eadb6e9 100644 --- a/test/lib/completions/lftpget.exp +++ b/test/lib/completions/lftpget.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lilo.exp b/test/lib/completions/lilo.exp index 505a1470..36ea2c66 100644 --- a/test/lib/completions/lilo.exp +++ b/test/lib/completions/lilo.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/links.exp b/test/lib/completions/links.exp index 9f4896aa..4124e2f4 100644 --- a/test/lib/completions/links.exp +++ b/test/lib/completions/links.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lisp.exp b/test/lib/completions/lisp.exp index 21663628..5131b45d 100644 --- a/test/lib/completions/lisp.exp +++ b/test/lib/completions/lisp.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/list_admins.exp b/test/lib/completions/list_admins.exp index e1c9c4dd..3b412136 100644 --- a/test/lib/completions/list_admins.exp +++ b/test/lib/completions/list_admins.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/list_lists.exp b/test/lib/completions/list_lists.exp index 789ab1a8..a62dca25 100644 --- a/test/lib/completions/list_lists.exp +++ b/test/lib/completions/list_lists.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/list_members.exp b/test/lib/completions/list_members.exp index c93b53d7..8c74cdfb 100644 --- a/test/lib/completions/list_members.exp +++ b/test/lib/completions/list_members.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/list_owners.exp b/test/lib/completions/list_owners.exp index c96e0229..65e3ba8e 100644 --- a/test/lib/completions/list_owners.exp +++ b/test/lib/completions/list_owners.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ln.exp b/test/lib/completions/ln.exp index 34786071..61405020 100644 --- a/test/lib/completions/ln.exp +++ b/test/lib/completions/ln.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/look.exp b/test/lib/completions/look.exp index 53a3c464..8f93db24 100644 --- a/test/lib/completions/look.exp +++ b/test/lib/completions/look.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {look foo | grep ^foo} words]} { assert_complete $words "look foo" -}; # if +} sync_after_int diff --git a/test/lib/completions/lrzip.exp b/test/lib/completions/lrzip.exp new file mode 100644 index 00000000..97bc1235 --- /dev/null +++ b/test/lib/completions/lrzip.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "lrzip " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/ls.exp b/test/lib/completions/ls.exp index db2d41d3..0d16ec03 100644 --- a/test/lib/completions/ls.exp +++ b/test/lib/completions/ls.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,29 @@ setup if {[assert_exec {ls --help} "" "" "unsupported"]} { assert_complete_any "ls --" -}; # if +} + + +sync_after_int + + +set test "~part should complete to ~full/ if existing dir" +# Create list of users, having existing home dir +assert_bash_exec {for u in $(compgen -u); do \ + eval test -d ~$u && echo $u; unset u; done} {} /@ users +find_unique_completion_pair $users part full +assert_complete "~$full/" "ls ~$part" $test -nospace + + +sync_after_int + + +set test "~part should complete to ~full<space> if non-existing dir" +# Create list of users, having non-existing home dir +assert_bash_exec {for u in $(compgen -u); do \ + eval test -d ~$u || echo $u; unset u; done} {} /@ users +find_unique_completion_pair $users part full +assert_complete "~$full " "ls ~$part" $test -nospace sync_after_int diff --git a/test/lib/completions/lsof.exp b/test/lib/completions/lsof.exp new file mode 100644 index 00000000..551bde2a --- /dev/null +++ b/test/lib/completions/lsof.exp @@ -0,0 +1,21 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "lsof " +sync_after_int + +assert_complete_any "lsof -" +sync_after_int + + +teardown diff --git a/test/lib/completions/lvchange.exp b/test/lib/completions/lvchange.exp index ec3886b8..6587a260 100644 --- a/test/lib/completions/lvchange.exp +++ b/test/lib/completions/lvchange.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvcreate.exp b/test/lib/completions/lvcreate.exp index 46dceb79..91cb0d81 100644 --- a/test/lib/completions/lvcreate.exp +++ b/test/lib/completions/lvcreate.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvdisplay.exp b/test/lib/completions/lvdisplay.exp index 5a01a0e5..6fa9c294 100644 --- a/test/lib/completions/lvdisplay.exp +++ b/test/lib/completions/lvdisplay.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvextend.exp b/test/lib/completions/lvextend.exp index 24a63853..ded34695 100644 --- a/test/lib/completions/lvextend.exp +++ b/test/lib/completions/lvextend.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvm.exp b/test/lib/completions/lvm.exp index 1c67825e..91fe0dcd 100644 --- a/test/lib/completions/lvm.exp +++ b/test/lib/completions/lvm.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvmdiskscan.exp b/test/lib/completions/lvmdiskscan.exp index 27e566d4..6553865f 100644 --- a/test/lib/completions/lvmdiskscan.exp +++ b/test/lib/completions/lvmdiskscan.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvreduce.exp b/test/lib/completions/lvreduce.exp index edd5150d..e2708f89 100644 --- a/test/lib/completions/lvreduce.exp +++ b/test/lib/completions/lvreduce.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvremove.exp b/test/lib/completions/lvremove.exp index 1cd63150..8ca1517b 100644 --- a/test/lib/completions/lvremove.exp +++ b/test/lib/completions/lvremove.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvrename.exp b/test/lib/completions/lvrename.exp index 51624222..17179ce9 100644 --- a/test/lib/completions/lvrename.exp +++ b/test/lib/completions/lvrename.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvresize.exp b/test/lib/completions/lvresize.exp index 830b9ab1..2b3e1044 100644 --- a/test/lib/completions/lvresize.exp +++ b/test/lib/completions/lvresize.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvs.exp b/test/lib/completions/lvs.exp index 8b239f5d..e531f7e9 100644 --- a/test/lib/completions/lvs.exp +++ b/test/lib/completions/lvs.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lvscan.exp b/test/lib/completions/lvscan.exp index 841fd0ed..7b09e5e1 100644 --- a/test/lib/completions/lvscan.exp +++ b/test/lib/completions/lvscan.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/lzma.exp b/test/lib/completions/lzma.exp index 79d78854..ba57d10b 100644 --- a/test/lib/completions/lzma.exp +++ b/test/lib/completions/lzma.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -17,7 +17,7 @@ assert_complete_any "lzma " sync_after_int -assert_complete "a/ bashcomp.lzma bashcomp.tlz" "lzma -d fixtures/xz/" +assert_complete "a/ bashcomp.lzma bashcomp.tlz" "lzma -d $::srcdir/fixtures/xz/" sync_after_int diff --git a/test/lib/completions/lzop.exp b/test/lib/completions/lzop.exp index c33e814e..a7d3da25 100644 --- a/test/lib/completions/lzop.exp +++ b/test/lib/completions/lzop.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/m4.exp b/test/lib/completions/m4.exp index 2cc884b3..334132db 100644 --- a/test/lib/completions/m4.exp +++ b/test/lib/completions/m4.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {m4 --help} "" "" "unsupported"]} { assert_complete_any "m4 --" -}; # if +} sync_after_int diff --git a/test/lib/completions/macof.exp b/test/lib/completions/macof.exp index e21b1e77..873ae1da 100644 --- a/test/lib/completions/macof.exp +++ b/test/lib/completions/macof.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mailmanctl.exp b/test/lib/completions/mailmanctl.exp index a69b7650..2924806a 100644 --- a/test/lib/completions/mailmanctl.exp +++ b/test/lib/completions/mailmanctl.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mailsnarf.exp b/test/lib/completions/mailsnarf.exp index df9981b7..9fb937f3 100644 --- a/test/lib/completions/mailsnarf.exp +++ b/test/lib/completions/mailsnarf.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/make.exp b/test/lib/completions/make.exp index 90b9e68b..64a393da 100644 --- a/test/lib/completions/make.exp +++ b/test/lib/completions/make.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/man.exp b/test/lib/completions/man.exp index 62c14c86..c7358c62 100644 --- a/test/lib/completions/man.exp +++ b/test/lib/completions/man.exp @@ -1,17 +1,30 @@ proc setup {} { + assert_bash_exec "export MANPATH=$::srcdirabs/fixtures/man" save_env -}; # setup() +} proc teardown {} { - assert_env_unmodified -}; # teardown() + assert_env_unmodified {/OLDPWD/d} +} setup -assert_complete_any "man man" +assert_complete "bar" "man b" + + +sync_after_int + + +assert_complete_dir oo.1 "man man1/f" $::srcdir/fixtures/man + + +sync_after_int + + +assert_complete "Bash::Completion" "man Bash::C" sync_after_int diff --git a/test/lib/completions/mc.exp b/test/lib/completions/mc.exp index 866161ba..eb97246d 100644 --- a/test/lib/completions/mc.exp +++ b/test/lib/completions/mc.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mcrypt.exp b/test/lib/completions/mcrypt.exp index bfc5d2d2..525ccbc3 100644 --- a/test/lib/completions/mcrypt.exp +++ b/test/lib/completions/mcrypt.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/md5sum.exp b/test/lib/completions/md5sum.exp index 25290b56..54ed6416 100644 --- a/test/lib/completions/md5sum.exp +++ b/test/lib/completions/md5sum.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mdecrypt.exp b/test/lib/completions/mdecrypt.exp index 4e49ae12..8d9d9f59 100644 --- a/test/lib/completions/mdecrypt.exp +++ b/test/lib/completions/mdecrypt.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mencoder.exp b/test/lib/completions/mencoder.exp index 169dcb71..db29f66a 100644 --- a/test/lib/completions/mencoder.exp +++ b/test/lib/completions/mencoder.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/minicom.exp b/test/lib/completions/minicom.exp index 935502f1..dfc96c01 100644 --- a/test/lib/completions/minicom.exp +++ b/test/lib/completions/minicom.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mkdir.exp b/test/lib/completions/mkdir.exp index 43dfec7e..8d8c881d 100644 --- a/test/lib/completions/mkdir.exp +++ b/test/lib/completions/mkdir.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -17,4 +17,10 @@ assert_complete_any "mkdir " sync_after_int +assert_complete {"bar bar.d/" foo.d/} "mkdir $::srcdir/fixtures/shared/default/" + + +sync_after_int + + teardown diff --git a/test/lib/completions/mkfifo.exp b/test/lib/completions/mkfifo.exp index c6343f8d..59412a2e 100644 --- a/test/lib/completions/mkfifo.exp +++ b/test/lib/completions/mkfifo.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mkinitrd.exp b/test/lib/completions/mkinitrd.exp index cfb316e5..007f278d 100644 --- a/test/lib/completions/mkinitrd.exp +++ b/test/lib/completions/mkinitrd.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mkisofs.exp b/test/lib/completions/mkisofs.exp index ad24ea06..98780b1e 100644 --- a/test/lib/completions/mkisofs.exp +++ b/test/lib/completions/mkisofs.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -25,7 +25,7 @@ expect { -re "^$cmd\r\n\\d+.*$cmd$" { pass "$test" } -re /@ { unresolved "$test at prompt" } -re eof { unresolved "eof" } -}; # expect +} sync_after_int @@ -39,7 +39,7 @@ expect { -re "^$cmd\r\n\\d+.*$cmd$" { pass "$test" } -re /@ { unresolved "$test at prompt" } -re eof { unresolved "eof" } -}; # expect +} sync_after_int diff --git a/test/lib/completions/mknod.exp b/test/lib/completions/mknod.exp index 2c58cade..145f4531 100644 --- a/test/lib/completions/mknod.exp +++ b/test/lib/completions/mknod.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mktemp.exp b/test/lib/completions/mktemp.exp new file mode 100644 index 00000000..8b0a3be2 --- /dev/null +++ b/test/lib/completions/mktemp.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "mktemp -" + + +sync_after_int + + +teardown diff --git a/test/lib/completions/mmsitepass.exp b/test/lib/completions/mmsitepass.exp index d69fa202..4dde214f 100644 --- a/test/lib/completions/mmsitepass.exp +++ b/test/lib/completions/mmsitepass.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/module.exp b/test/lib/completions/module.exp index a34667d4..5e36a6da 100644 --- a/test/lib/completions/module.exp +++ b/test/lib/completions/module.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mogrify.exp b/test/lib/completions/mogrify.exp index ef7e18ee..84ceeff5 100644 --- a/test/lib/completions/mogrify.exp +++ b/test/lib/completions/mogrify.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/montage.exp b/test/lib/completions/montage.exp index 736609a5..4d85e1a4 100644 --- a/test/lib/completions/montage.exp +++ b/test/lib/completions/montage.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mount.exp b/test/lib/completions/mount.exp index 38d93e3b..c99d6058 100644 --- a/test/lib/completions/mount.exp +++ b/test/lib/completions/mount.exp @@ -5,11 +5,10 @@ proc setup_dummy_mnt {} { assert_bash_exec {unset COMPREPLY cur} assert_bash_exec {unset -f _mnt} - global TESTDIR assert_bash_exec { \ _mnt() { \ local cur=$(_get_cword); \ - _linux_fstab $(_get_pword) < "$TESTDIR/fixtures/mount/test-fstab"; \ + _linux_fstab $(_get_pword) < "$SRCDIRABS/fixtures/mount/test-fstab"; \ }; \ complete -F _mnt mnt \ } @@ -53,9 +52,9 @@ sync_after_int set test "Check completing nfs mounts" set expected [list /test/path /test/path2 /second/path] set cmd "mount mocksrv:/" -assert_bash_exec {OLDPATH="$PATH"; PATH="$TESTDIR/fixtures/mount/bin:$PATH";} +assert_bash_exec {OLDPATH="$PATH"; PATH="$SRCDIRABS/fixtures/mount/bin:$PATH";} # This needs an explicit cword param or will output "unresolved". -assert_complete $expected $cmd $test "/@" 20 "/" +assert_complete $expected $cmd $test -expect-cmd-minus / sync_after_int assert_bash_exec {PATH="$OLDPATH"; unset -v OLDPATH} @@ -94,7 +93,7 @@ assert_complete {/mnt/nice\ test\\path} {mnt /mnt/nice\ test\\p} sync_after_int assert_complete {{/mnt/nice\ test\\path} {/mnt/nice\ test-path}} \ - {mnt /mnt/nice\ } "" /@ 20 {/mnt/nice\ } + {mnt /mnt/nice\ } "" -expect-cmd-minus {/mnt/nice\ } sync_after_int assert_complete {/mnt/nice\$test-path} {mnt /mnt/nice\$} diff --git a/test/lib/completions/mplayer.exp b/test/lib/completions/mplayer.exp index 69e5d971..9230a86d 100644 --- a/test/lib/completions/mplayer.exp +++ b/test/lib/completions/mplayer.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/msgsnarf.exp b/test/lib/completions/msgsnarf.exp index 74f458ff..c542e33e 100644 --- a/test/lib/completions/msgsnarf.exp +++ b/test/lib/completions/msgsnarf.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mtx.exp b/test/lib/completions/mtx.exp index a518d79f..1de15269 100644 --- a/test/lib/completions/mtx.exp +++ b/test/lib/completions/mtx.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mutt.exp b/test/lib/completions/mutt.exp index 6c727daf..8cb8b0c6 100644 --- a/test/lib/completions/mutt.exp +++ b/test/lib/completions/mutt.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified {/OLDPWD=/d} -}; # teardown() +} setup @@ -19,12 +19,12 @@ sync_after_int set test "mutt should complete mailboxes" set expected {foo/ bar/ muttrc} -assert_complete_dir $expected "mutt -F muttrc -f =" fixtures/mutt +assert_complete_dir $expected "mutt -F muttrc -f =" $::srcdir/fixtures/mutt set test "mutt should complete aliases" set expected {a1 a2} -assert_complete_dir $expected "mutt -F muttrc -A " fixtures/mutt +assert_complete_dir $expected "mutt -F muttrc -A " $::srcdir/fixtures/mutt sync_after_int diff --git a/test/lib/completions/muttng.exp b/test/lib/completions/muttng.exp index 25a474ad..32239128 100644 --- a/test/lib/completions/muttng.exp +++ b/test/lib/completions/muttng.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mv.exp b/test/lib/completions/mv.exp index f2576df7..d65c4868 100644 --- a/test/lib/completions/mv.exp +++ b/test/lib/completions/mv.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/mysqladmin.exp b/test/lib/completions/mysqladmin.exp index 76381587..ae9b8ce8 100644 --- a/test/lib/completions/mysqladmin.exp +++ b/test/lib/completions/mysqladmin.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ncftp.exp b/test/lib/completions/ncftp.exp index ad71f226..52d70756 100644 --- a/test/lib/completions/ncftp.exp +++ b/test/lib/completions/ncftp.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/netstat.exp b/test/lib/completions/netstat.exp index 0e6414d6..e4ef676c 100644 --- a/test/lib/completions/netstat.exp +++ b/test/lib/completions/netstat.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/newlist.exp b/test/lib/completions/newlist.exp index bebf600d..0696ec5e 100644 --- a/test/lib/completions/newlist.exp +++ b/test/lib/completions/newlist.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/nl.exp b/test/lib/completions/nl.exp index 02076dff..b7255ac2 100644 --- a/test/lib/completions/nl.exp +++ b/test/lib/completions/nl.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/nm.exp b/test/lib/completions/nm.exp index 551f49e9..9ce73d45 100644 --- a/test/lib/completions/nm.exp +++ b/test/lib/completions/nm.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ntpdate.exp b/test/lib/completions/ntpdate.exp index 6a6456f4..7a7dd716 100644 --- a/test/lib/completions/ntpdate.exp +++ b/test/lib/completions/ntpdate.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/objcopy.exp b/test/lib/completions/objcopy.exp index acb6539a..29be7e62 100644 --- a/test/lib/completions/objcopy.exp +++ b/test/lib/completions/objcopy.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/objdump.exp b/test/lib/completions/objdump.exp index 5eec35d6..c1f62e35 100644 --- a/test/lib/completions/objdump.exp +++ b/test/lib/completions/objdump.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/od.exp b/test/lib/completions/od.exp index 5838218c..e2712d12 100644 --- a/test/lib/completions/od.exp +++ b/test/lib/completions/od.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/openssl.exp b/test/lib/completions/openssl.exp index 651e5e6d..25fc1367 100644 --- a/test/lib/completions/openssl.exp +++ b/test/lib/completions/openssl.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -19,7 +19,7 @@ expect { -re "^$cmd\r\n.*$cmd$" { pass "$test" } -re /@ { unresolved "$test at prompt" } -re eof { unresolved "eof" } -}; # expect +} sync_after_int diff --git a/test/lib/completions/p4.exp b/test/lib/completions/p4.exp index 369d2c6b..20d8fb6e 100644 --- a/test/lib/completions/p4.exp +++ b/test/lib/completions/p4.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pack200.exp b/test/lib/completions/pack200.exp index f96eff13..537bf327 100644 --- a/test/lib/completions/pack200.exp +++ b/test/lib/completions/pack200.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/paste.exp b/test/lib/completions/paste.exp index 3a4e93be..224d9dd9 100644 --- a/test/lib/completions/paste.exp +++ b/test/lib/completions/paste.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/patch.exp b/test/lib/completions/patch.exp index a44fa130..07e88f15 100644 --- a/test/lib/completions/patch.exp +++ b/test/lib/completions/patch.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/perl.exp b/test/lib/completions/perl.exp index 2199c994..8cd6f957 100644 --- a/test/lib/completions/perl.exp +++ b/test/lib/completions/perl.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -18,7 +18,7 @@ sync_after_int set test "Second argument should file complete" -set cmd "perl foo fixtures/shared/default/f" +set cmd "perl foo $::srcdir/fixtures/shared/default/f" send "$cmd\t" expect { -re "^$cmd\r\nfoo +foo.d/ *\r\n/@${cmd}oo$" { pass "$test" } @@ -31,7 +31,7 @@ sync_after_int set test "-I without space should complete directories" -set cmd "perl -Ifixtures/shared/default/" +set cmd "perl -I$::srcdir/fixtures/shared/default/" send "$cmd\t" expect { -re "^$cmd\r\nbar bar.d/ +foo.d/ *\r\n/@$cmd$" { pass "$test" } @@ -44,7 +44,7 @@ sync_after_int set test "-I with space should complete directories" -set cmd "perl -I fixtures/shared/default/" +set cmd "perl -I $::srcdir/fixtures/shared/default/" send "$cmd\t" expect { -re "^$cmd\r\nbar bar.d/ +foo.d/ *\r\n/@$cmd$" { pass "$test" } @@ -57,7 +57,7 @@ sync_after_int set test "-x without space should complete directories" -set cmd "perl -xfixtures/shared/default/b" +set cmd "perl -x$::srcdir/fixtures/shared/default/b" send "$cmd\t" expect { -re "^${cmd}ar\\\\ bar.d/ *$" { pass "$test" } @@ -70,7 +70,7 @@ sync_after_int set test "-x with space should complete directories" -set cmd "perl -x fixtures/shared/default/b" +set cmd "perl -x $::srcdir/fixtures/shared/default/b" send "$cmd\t" expect { -re "^${cmd}ar\\\\ bar.d/ *$" { pass "$test" } @@ -91,5 +91,30 @@ assert_complete $options "perl -" sync_after_int +assert_no_complete "perl -e " +sync_after_int + +assert_complete_any "perl -V:install" +sync_after_int + +assert_complete_any "perl -V::install" +sync_after_int + +# Assuming that File::Spec and friends are always installed... + +assert_complete_any "perl -MFile" +sync_after_int + +assert_complete_any "perl -MFile::Sp" +sync_after_int + +assert_complete_any "perl -MFile::Spec::Func" +sync_after_int + +assert_complete_any "perl -M-File" +sync_after_int + +assert_complete_any "perl -m-File::" +sync_after_int teardown diff --git a/test/lib/completions/perldoc.exp b/test/lib/completions/perldoc.exp index b3ff83b3..dc1c79c8 100644 --- a/test/lib/completions/perldoc.exp +++ b/test/lib/completions/perldoc.exp @@ -1,22 +1,16 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup -assert_complete_any "perldoc -" - - -sync_after_int - - set test "perldoc should complete word containing colons" set cmd "perldoc File::" send "$cmd\t" @@ -29,7 +23,16 @@ expect { -re "perldoc File::File::" { fail "$test" } -re /@ { unresolved "$test" } default { unresolved "$test" } -}; # expect +} + + +sync_after_int + +set test "- should complete options" +set options { + -h -v -t -u -m -l -F -X -f -q +} +assert_complete $options "perldoc -" sync_after_int diff --git a/test/lib/completions/pgrep.exp b/test/lib/completions/pgrep.exp index 63143acc..c27c4f21 100644 --- a/test/lib/completions/pgrep.exp +++ b/test/lib/completions/pgrep.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pine.exp b/test/lib/completions/pine.exp index 0a0c3f40..622bf064 100644 --- a/test/lib/completions/pine.exp +++ b/test/lib/completions/pine.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ping.exp b/test/lib/completions/ping.exp index b600849b..3e419966 100644 --- a/test/lib/completions/ping.exp +++ b/test/lib/completions/ping.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pkg-config.exp b/test/lib/completions/pkg-config.exp index 477dba08..adf9a301 100644 --- a/test/lib/completions/pkg-config.exp +++ b/test/lib/completions/pkg-config.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pkg_deinstall.exp b/test/lib/completions/pkg_deinstall.exp index 8f3d8c3d..c2b3ae0b 100644 --- a/test/lib/completions/pkg_deinstall.exp +++ b/test/lib/completions/pkg_deinstall.exp @@ -1,18 +1,18 @@ proc setup {} { - assert_bash_exec {PKG_DBDIR=fixtures/pkgtools/db} + assert_bash_exec {PKG_DBDIR=$::srcdir/fixtures/pkgtools/db} save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup -set pkgs [exec bash -c "cd fixtures/pkgtools/db ; compgen -d"] +set pkgs [exec bash -c "cd $::srcdir/fixtures/pkgtools/db ; compgen -d"] assert_complete $pkgs "pkg_deinstall " diff --git a/test/lib/completions/pkg_delete.exp b/test/lib/completions/pkg_delete.exp index b0c1a2a5..37ce4035 100644 --- a/test/lib/completions/pkg_delete.exp +++ b/test/lib/completions/pkg_delete.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pkg_info.exp b/test/lib/completions/pkg_info.exp index 3f253ccf..ad8ed84e 100644 --- a/test/lib/completions/pkg_info.exp +++ b/test/lib/completions/pkg_info.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pkill.exp b/test/lib/completions/pkill.exp index 0333fc94..6faddfc3 100644 --- a/test/lib/completions/pkill.exp +++ b/test/lib/completions/pkill.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/portinstall.exp b/test/lib/completions/portinstall.exp index d70f5db6..ab14afa8 100644 --- a/test/lib/completions/portinstall.exp +++ b/test/lib/completions/portinstall.exp @@ -1,13 +1,13 @@ proc setup {} { - assert_bash_exec {PORTSDIR=fixtures/pkgtools/ports ; sed -e s,PORTSDIR,$PORTSDIR,g $PORTSDIR/INDEX.dist > $PORTSDIR/INDEX ; cp $PORTSDIR/INDEX $PORTSDIR/INDEX-5} + assert_bash_exec {PORTSDIR=$TESTDIR/tmp; sed -e s,PORTSDIR,$PORTSDIR,g $::srcdir/fixtures/pkgtools/ports/INDEX.dist > $PORTSDIR/INDEX; cp $PORTSDIR/INDEX $PORTSDIR/INDEX-5} save_env -}; # setup() +} proc teardown {} { - assert_bash_exec {rm fixtures/pkgtools/ports/INDEX fixtures/pkgtools/ports/INDEX-5} + assert_bash_exec {rm $PORTSDIR/INDEX $PORTSDIR/INDEX-5} assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/portupgrade.exp b/test/lib/completions/portupgrade.exp index cb583923..62b5789d 100644 --- a/test/lib/completions/portupgrade.exp +++ b/test/lib/completions/portupgrade.exp @@ -1,12 +1,12 @@ proc setup {} { assert_bash_exec {PKG_DBDIR=fixtures/pkgtools/db} save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/povray.exp b/test/lib/completions/povray.exp index 1efeeddb..30d58e48 100644 --- a/test/lib/completions/povray.exp +++ b/test/lib/completions/povray.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pr.exp b/test/lib/completions/pr.exp index 5d7a96c3..478017b2 100644 --- a/test/lib/completions/pr.exp +++ b/test/lib/completions/pr.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/psql.exp b/test/lib/completions/psql.exp index 56d56666..3dbffaf2 100644 --- a/test/lib/completions/psql.exp +++ b/test/lib/completions/psql.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ptx.exp b/test/lib/completions/ptx.exp index 2defe049..220243c3 100644 --- a/test/lib/completions/ptx.exp +++ b/test/lib/completions/ptx.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pvchange.exp b/test/lib/completions/pvchange.exp index fd4b73d0..a43ae9cd 100644 --- a/test/lib/completions/pvchange.exp +++ b/test/lib/completions/pvchange.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pvcreate.exp b/test/lib/completions/pvcreate.exp index 47cebf7a..6bc9d4eb 100644 --- a/test/lib/completions/pvcreate.exp +++ b/test/lib/completions/pvcreate.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pvdisplay.exp b/test/lib/completions/pvdisplay.exp index 151064cd..b9db558b 100644 --- a/test/lib/completions/pvdisplay.exp +++ b/test/lib/completions/pvdisplay.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pvmove.exp b/test/lib/completions/pvmove.exp index 81c05e98..24d17006 100644 --- a/test/lib/completions/pvmove.exp +++ b/test/lib/completions/pvmove.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pvremove.exp b/test/lib/completions/pvremove.exp index dd145bf6..1febcf37 100644 --- a/test/lib/completions/pvremove.exp +++ b/test/lib/completions/pvremove.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pvs.exp b/test/lib/completions/pvs.exp index 6e5527e1..e50501a3 100644 --- a/test/lib/completions/pvs.exp +++ b/test/lib/completions/pvs.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/pvscan.exp b/test/lib/completions/pvscan.exp index e92cdbe0..d3b8ad33 100644 --- a/test/lib/completions/pvscan.exp +++ b/test/lib/completions/pvscan.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/python.exp b/test/lib/completions/python.exp index c9d70b43..446e3d09 100644 --- a/test/lib/completions/python.exp +++ b/test/lib/completions/python.exp @@ -1,19 +1,20 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup assert_complete_any "python " +sync_after_int - +assert_complete_any "python -" sync_after_int diff --git a/test/lib/completions/qrunner.exp b/test/lib/completions/qrunner.exp index b8fcf191..0dec16cc 100644 --- a/test/lib/completions/qrunner.exp +++ b/test/lib/completions/qrunner.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/querybts.exp b/test/lib/completions/querybts.exp index dc75cd62..4ed09d8a 100644 --- a/test/lib/completions/querybts.exp +++ b/test/lib/completions/querybts.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/rcs.exp b/test/lib/completions/rcs.exp index 19ae4d50..781ac37f 100644 --- a/test/lib/completions/rcs.exp +++ b/test/lib/completions/rcs.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/rcsdiff.exp b/test/lib/completions/rcsdiff.exp index 8383cdb9..23b009c6 100644 --- a/test/lib/completions/rcsdiff.exp +++ b/test/lib/completions/rcsdiff.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/rdict.exp b/test/lib/completions/rdict.exp index aa132617..5d6ad847 100644 --- a/test/lib/completions/rdict.exp +++ b/test/lib/completions/rdict.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/readelf.exp b/test/lib/completions/readelf.exp index a084a41e..c2d5ee5b 100644 --- a/test/lib/completions/readelf.exp +++ b/test/lib/completions/readelf.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/readonly.exp b/test/lib/completions/readonly.exp index 84be3c96..cf64ca0a 100644 --- a/test/lib/completions/readonly.exp +++ b/test/lib/completions/readonly.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/remove_members.exp b/test/lib/completions/remove_members.exp index 63d6a70e..59f7b6c4 100644 --- a/test/lib/completions/remove_members.exp +++ b/test/lib/completions/remove_members.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/removepkg.exp b/test/lib/completions/removepkg.exp index 7cf98805..882f1e70 100644 --- a/test/lib/completions/removepkg.exp +++ b/test/lib/completions/removepkg.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/renice.exp b/test/lib/completions/renice.exp index c91e0212..fdc859b4 100644 --- a/test/lib/completions/renice.exp +++ b/test/lib/completions/renice.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -19,7 +19,7 @@ expect { -re "$cmd\r\n\\d+.*/@$cmd$" { pass "$test" } -re /@ { unresolved "$test at prompt" } -re eof { unresolved "eof" } -}; # expect +} sync_after_int @@ -33,7 +33,7 @@ expect { -re "$cmd\r\n\\d+.*/@$cmd$" { pass "$test" } -re /@ { unresolved "$test at prompt" } -re eof { unresolved "eof" } -}; # expect +} sync_after_int diff --git a/test/lib/completions/reportbug.exp b/test/lib/completions/reportbug.exp index 1f66df2c..660778f7 100644 --- a/test/lib/completions/reportbug.exp +++ b/test/lib/completions/reportbug.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ri.exp b/test/lib/completions/ri.exp index 160dc9a7..cd138ea0 100644 --- a/test/lib/completions/ri.exp +++ b/test/lib/completions/ri.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/rlog.exp b/test/lib/completions/rlog.exp index cbc06857..87984a8d 100644 --- a/test/lib/completions/rlog.exp +++ b/test/lib/completions/rlog.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/rm.exp b/test/lib/completions/rm.exp index ae670e83..f764a8e7 100644 --- a/test/lib/completions/rm.exp +++ b/test/lib/completions/rm.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/rmdir.exp b/test/lib/completions/rmdir.exp index 2b23a9c5..1a904b64 100644 --- a/test/lib/completions/rmdir.exp +++ b/test/lib/completions/rmdir.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -17,4 +17,10 @@ assert_complete_any "rmdir " sync_after_int +assert_complete {"bar bar.d/" foo.d/} "rmdir $::srcdir/fixtures/shared/default/" + + +sync_after_int + + teardown diff --git a/test/lib/completions/rmlist.exp b/test/lib/completions/rmlist.exp index 91519ee8..d530d117 100644 --- a/test/lib/completions/rmlist.exp +++ b/test/lib/completions/rmlist.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/rpcdebug.exp b/test/lib/completions/rpcdebug.exp index 8629c947..7f1a1c2f 100644 --- a/test/lib/completions/rpcdebug.exp +++ b/test/lib/completions/rpcdebug.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/rpm.exp b/test/lib/completions/rpm.exp index 3ed154a9..82ab28dc 100644 --- a/test/lib/completions/rpm.exp +++ b/test/lib/completions/rpm.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -20,7 +20,7 @@ sync_after_int # Build list of installed packages if {[assert_exec {rpm -qa --qf=%\{NAME\}\n | sort -u} packages]} { assert_complete $packages "rpm -q " -}; # if +} sync_after_int diff --git a/test/lib/completions/rsync.exp b/test/lib/completions/rsync.exp index fb301a35..221d090b 100644 --- a/test/lib/completions/rsync.exp +++ b/test/lib/completions/rsync.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/rtcwake.exp b/test/lib/completions/rtcwake.exp index 0b9a974b..21c05eab 100644 --- a/test/lib/completions/rtcwake.exp +++ b/test/lib/completions/rtcwake.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/sbcl-mt.exp b/test/lib/completions/sbcl-mt.exp index 45e81f79..a80e543b 100644 --- a/test/lib/completions/sbcl-mt.exp +++ b/test/lib/completions/sbcl-mt.exp @@ -1,17 +1,17 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup -assert_complete {bar "bar bar.d/" foo foo.d/} "sbcl-mt fixtures/shared/default/" +assert_complete {bar "bar bar.d/" foo foo.d/} "sbcl-mt $::srcdir/fixtures/shared/default/" sync_after_int diff --git a/test/lib/completions/sbcl.exp b/test/lib/completions/sbcl.exp index b68b2dce..3adeb6bf 100644 --- a/test/lib/completions/sbcl.exp +++ b/test/lib/completions/sbcl.exp @@ -1,17 +1,17 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup -assert_complete {bar "bar bar.d/" foo foo.d/} "sbcl fixtures/shared/default/" +assert_complete {bar "bar bar.d/" foo foo.d/} "sbcl $::srcdir/fixtures/shared/default/" sync_after_int diff --git a/test/lib/completions/scp.exp b/test/lib/completions/scp.exp index efe2b686..e6cbf8e3 100644 --- a/test/lib/completions/scp.exp +++ b/test/lib/completions/scp.exp @@ -1,15 +1,19 @@ proc setup {} { save_env -}; # setup() + # NOTE: Changing dir to $SRCDIR is necessary because file locations in the + # ssh config files (e.g. UserKnownHostsFile) are relative to $SRCDIR. + assert_bash_exec {cd $SRCDIR/fixtures/scp} +} proc teardown {} { + assert_bash_exec {cd $TESTDIR} assert_env_unmodified { /BASH_LINENO=/d /BASH_SOURCE=/d /OLDPWD=/d } -}; # teardown() +} setup @@ -31,7 +35,7 @@ if { # in `$HOME/.ssh/config' or `/etc/ssh_config' set host_pwd "" unsupported $test -}; # if +} # Try completion @@ -41,7 +45,7 @@ sync_after_tab expect { -re "^$cmd$host_pwd.*$" { pass "$test" } -re /@ { unresolved "$test at prompt" } -}; # expect +} sync_after_int @@ -52,16 +56,15 @@ set test "Tab should complete known-hosts" # Build string list of expected completions # Get hostnames and give them a colon (:) suffix # Hosts `gee' and `hus' are defined in ./fixtures/scp/config - # Hosts `doo' and `ike' are defined in ./fixtures/scp/known_hosts + # Hosts `blah', `doo' and `ike' are defined in ./fixtures/scp/known_hosts set expected {} foreach host [get_hosts] { lappend expected "$host:" -}; # foreach -lappend expected doo: gee: hus: ike: +} +lappend expected blah: doo: gee: hus: ike: # Append local filenames lappend expected config known_hosts "spaced\\ \\ conf" -set dir fixtures/scp -assert_complete_dir $expected "scp -F config " $dir +assert_complete $expected "scp -F config " sync_after_int @@ -76,7 +79,7 @@ expect { -re "^$cmd\r\n.*\r\n/@" { pass "$test" } -re /@ { unresolved "$test at prompt" } default { unresolved "$test" } -}; # expect +} sync_after_int @@ -88,30 +91,26 @@ set test "Config file containing space should work" set expected {} foreach host [get_hosts] { lappend expected "$host:" -}; # foreach +} # Hosts `gee', `hus' and `jar' are defined in "./fixtures/scp/spaced conf" - # Hosts `doo' and `ike' are defined in ./fixtures/scp/known_hosts -lappend expected doo: gee: hus: ike: jar: + # Hosts `blah', `doo' and `ike' are defined in ./fixtures/scp/known_hosts +lappend expected blah: doo: gee: hus: ike: jar: # Append local filenames lappend expected config known_hosts "spaced\\ \\ conf" -set dir fixtures/scp -#assert_complete_dir $expected "scp -F 'spaced conf' " $dir -set prompt "/$dir/@" -assert_bash_exec "cd $dir" "" $prompt set cmd "scp -F 'spaced conf' " send "$cmd\t" expect -ex "$cmd\r\n" -if {[match_items [lsort -unique $expected] $test]} { +if {[match_items [lsort -unique $expected] -bash-sort]} { expect { - -re $prompt { pass "$test" } + -re /@ { pass "$test" } -re eof { unresolved "eof" } - }; # expect + } } else { # Expected failure (known bug) because of bash-4 bug in quoted words: # http://www.mail-archive.com/bug-bash@gnu.org/msg06095.html if {[lindex $::BASH_VERSINFO 0] >= 4} {xfail "$test"} {fail "$test"} -}; # if -sync_after_int $prompt +} +sync_after_int assert_bash_exec {cd "$TESTDIR"} diff --git a/test/lib/completions/screen.exp b/test/lib/completions/screen.exp index 985862c1..e5bc4c15 100644 --- a/test/lib/completions/screen.exp +++ b/test/lib/completions/screen.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified {/OLDPWD=/d} -}; # teardown() +} setup @@ -17,33 +17,8 @@ assert_complete_any "screen -" sync_after_int -set test "-c should complete files/dirs" -set dir fixtures/shared/default -set prompt "/$dir/@" -assert_bash_exec "cd $dir" "" $prompt -set cmd "screen -c " -set expected {bar {bar bar.d} foo {foo.d}} -send "$cmd\t" -expect -ex "$cmd" -expect { - -re "\r\nbar\\s+bar bar.d/\\s+foo\\s+foo.d/" { pass "$test" } - # Directories might not be suffixed with a slash (/). This is because - # _filedir only works if `-o filenames' is in effect, which isn't the - # case for `screen' on bash-3, so an expected failure (xfail) - -re "\r\nbar\\s+bar bar.d\\s+foo\\s+foo.d" { - if {[lindex $::BASH_VERSINFO 0] < 4} {xfail "$test"} {fail "$test"} - } - -re "\r\nbar\\s+bar\\\\ bar.d/\\s+foo\\s+foo.d/" { - # On bash-3, the space in `bar bar.d' is escaped with a backslash - # as a side-effect of emulating `-o filenames'. - if {[lindex $::BASH_VERSINFO 0] <= 3} {pass "$test"} {fail "$test"} - } - -re $prompt { unresolved "$test at prompt" } - default { unresolved "$test" } -}; # expect -sync_after_int $prompt -assert_bash_exec {cd "$TESTDIR"} - +assert_complete {bar "bar bar.d/" foo foo.d/} \ + "screen -c $::srcdir/fixtures/shared/default/" "-c should complete files/dirs" sync_after_int diff --git a/test/lib/completions/sed.exp b/test/lib/completions/sed.exp index 8764cfb8..dd480a60 100644 --- a/test/lib/completions/sed.exp +++ b/test/lib/completions/sed.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {sed --help} "" "" "unsupported"]} { assert_complete_any "sed --" -}; # if +} sync_after_int diff --git a/test/lib/completions/seq.exp b/test/lib/completions/seq.exp index b5333ef9..6e5ef8dc 100644 --- a/test/lib/completions/seq.exp +++ b/test/lib/completions/seq.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/service.exp b/test/lib/completions/service.exp index 917c5dcb..f3cf7355 100644 --- a/test/lib/completions/service.exp +++ b/test/lib/completions/service.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/set.exp b/test/lib/completions/set.exp index 2b2d40e9..c14ecff6 100644 --- a/test/lib/completions/set.exp +++ b/test/lib/completions/set.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/sftp.exp b/test/lib/completions/sftp.exp index 24c37cb5..27fe7511 100644 --- a/test/lib/completions/sftp.exp +++ b/test/lib/completions/sftp.exp @@ -1,15 +1,19 @@ proc setup {} { save_env -}; # setup() + # NOTE: Changing dir to $SRCDIR is necessary because file locations in the + # ssh config files (e.g. UserKnownHostsFile) are relative to $SRCDIR. + assert_bash_exec {cd $SRCDIR/fixtures/sftp} +} proc teardown {} { + assert_bash_exec {cd $TESTDIR} assert_env_unmodified { /BASH_LINENO=/d /BASH_SOURCE=/d /OLDPWD=/d } -}; # teardown() +} setup @@ -18,10 +22,9 @@ setup # Build string list of expected completions set expected [get_hosts] # Hosts `gee' and `hus' are defined in ./fixtures/sftp/config - # Hosts `doo' and `ike' are defined in ./fixtures/sftp/known_hosts -lappend expected doo gee hus ike -set dir fixtures/scp -assert_complete_dir $expected "sftp -F config " $dir + # Hosts `10.10.10.10', `doo' and `ike' are defined in ./fixtures/sftp/known_hosts +lappend expected 10.10.10.10 doo gee hus ike +assert_complete $expected "sftp -F config " sync_after_int @@ -36,7 +39,7 @@ expect { -re "^$cmd\r\n.*\r\n/@" { pass "$test" } -re /@ { unresolved "$test at prompt" } default { unresolved "$test" } -}; # expect +} sync_after_int @@ -45,33 +48,17 @@ sync_after_int # Build string list of expected completions # Get hostnames and give them a colon (:) suffix set expected [get_hosts] - # Hosts `gee', `hus' and `jar' are defined in "./fixtures/scp/spaced conf" - # Hosts `doo' and `ike' are defined in ./fixtures/scp/known_hosts -lappend expected doo gee hus ike jar -set dir fixtures/sftp -assert_complete_dir $expected "sftp -F spaced\\ \\ conf " $dir + # Hosts `gee', `hus' and `jar' are defined in "./fixtures/sftp/spaced conf" + # Hosts `10.10.10.10', `doo' and `ike' are defined in ./fixtures/sftp/known_hosts +lappend expected 10.10.10.10 doo gee hus ike jar +assert_complete $expected "sftp -F spaced\\ \\ conf " sync_after_int -set test "-F should complete filename" -set dir fixtures/sftp -set prompt "/$dir/@" -assert_bash_exec "cd $dir" "" $prompt -set cmd "ssh -Fsp" -send "$cmd\t" -expect -ex "$cmd" -expect { - -ex "aced\\ \\ conf" { pass "$test" } - # _filedir works only if `-o filenames' is in effect, which isn't the - # case for `sftp' - -re "aced conf" { xfail "$test" } - -re $prompt { unresolved "$test at prompt" } - default { unresolved "$test" } -}; # expect -sync_after_int $prompt -assert_bash_exec {cd "$TESTDIR"} +assert_complete "-Fspaced\\ \\ conf" "sftp -Fsp" "-F should complete filename" +sync_after_int teardown diff --git a/test/lib/completions/sh.exp b/test/lib/completions/sh.exp new file mode 100644 index 00000000..e1a51bb9 --- /dev/null +++ b/test/lib/completions/sh.exp @@ -0,0 +1,38 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "sh -" + + +sync_after_int + + +assert_complete_any "sh +" + + +sync_after_int + + +assert_complete_any "sh -o " + + +sync_after_int + + +assert_no_complete "sh -c " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/sha1sum.exp b/test/lib/completions/sha1sum.exp index 17519087..c5983044 100644 --- a/test/lib/completions/sha1sum.exp +++ b/test/lib/completions/sha1sum.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/shar.exp b/test/lib/completions/shar.exp index 7ace9d6e..604a2031 100644 --- a/test/lib/completions/shar.exp +++ b/test/lib/completions/shar.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/sitecopy.exp b/test/lib/completions/sitecopy.exp index 49b78918..7e0c87fe 100644 --- a/test/lib/completions/sitecopy.exp +++ b/test/lib/completions/sitecopy.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/smartctl.exp b/test/lib/completions/smartctl.exp index a9eeb956..24919396 100644 --- a/test/lib/completions/smartctl.exp +++ b/test/lib/completions/smartctl.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/snownews.exp b/test/lib/completions/snownews.exp index 7502e587..c8ad6741 100644 --- a/test/lib/completions/snownews.exp +++ b/test/lib/completions/snownews.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/sort.exp b/test/lib/completions/sort.exp index 20516cc8..a130bbc8 100644 --- a/test/lib/completions/sort.exp +++ b/test/lib/completions/sort.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/split.exp b/test/lib/completions/split.exp index b74da369..e13df49a 100644 --- a/test/lib/completions/split.exp +++ b/test/lib/completions/split.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {split --help} "" "" "unsupported"]} { assert_complete_any "split --" -}; # if +} sync_after_int diff --git a/test/lib/completions/spovray.exp b/test/lib/completions/spovray.exp index 30d81853..2b2c33de 100644 --- a/test/lib/completions/spovray.exp +++ b/test/lib/completions/spovray.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/sqlite3.exp b/test/lib/completions/sqlite3.exp new file mode 100644 index 00000000..af1ada82 --- /dev/null +++ b/test/lib/completions/sqlite3.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "sqlite3 " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/ssh.exp b/test/lib/completions/ssh.exp index 91955c1d..1599dccc 100644 --- a/test/lib/completions/ssh.exp +++ b/test/lib/completions/ssh.exp @@ -1,15 +1,19 @@ proc setup {} { save_env -}; # setup() + # NOTE: Changing dir to $SRCDIR is necessary because file locations in the + # ssh config files (e.g. UserKnownHostsFile) are relative to $SRCDIR. + assert_bash_exec {cd $SRCDIR/fixtures/ssh} +} proc teardown {} { + assert_bash_exec {cd $TESTDIR} assert_env_unmodified { /BASH_LINENO=/d /BASH_SOURCE=/d /OLDPWD=/d } -}; # teardown() +} setup @@ -17,19 +21,14 @@ setup set test "Tab should complete both commands and hostname" # Try completion -set dir fixtures/ssh -set prompt "/$dir/@" -assert_bash_exec "cd $dir" "" $prompt set cmd "ssh -F config ls" send "$cmd\t" -set expected "^$cmd\r\n.*ls.*ls_known_host.*\r\n$prompt$cmd$" +set expected "^$cmd\r\n.*ls.*ls_known_host.*\r\n/@$cmd$" expect { -re $expected { pass "$test" } - -re $prompt { unresolved "$test at prompt" } + -re /@ { unresolved "$test at prompt" } default { unresolved "$test" } -}; # expect -sync_after_int $prompt -assert_bash_exec {cd "$TESTDIR"} +} sync_after_int @@ -45,7 +44,7 @@ expect { -re "^$cmd\r\n.*\r\n/@" { pass "$test" } -re /@ { unresolved "$test at prompt" } default { unresolved "$test" } -}; # expect +} sync_after_int @@ -61,30 +60,14 @@ sync_after_int set test "First argument should complete partial hostname" -assert_complete_partial [get_hosts] ssh "" $test /@ 20 \ - [list "ltrim_colon_completions"] +assert_complete_partial [get_hosts] ssh "" $test -ltrim-colon-completions sync_after_int set test "-F should complete filename" -set dir fixtures/ssh -set prompt "/$dir/@" -assert_bash_exec "cd $dir" "" $prompt -set cmd "ssh -Fsp" -send "$cmd\t" -expect -ex "$cmd" -expect { - -ex "aced\\ \\ conf" { pass "$test" } - # _filedir works only if `-o filenames' is in effect, which isn't the - # case for `ssh' - -re "aced conf" { xfail "$test" } - -re $prompt { unresolved "$test at prompt" } - default { unresolved "$test" } -}; # expect -sync_after_int $prompt -assert_bash_exec {cd "$TESTDIR"} +assert_complete "-Fspaced\\ \\ conf" "ssh -Fsp" $test sync_after_int diff --git a/test/lib/completions/sshmitm.exp b/test/lib/completions/sshmitm.exp index b8f8a2c9..13b50673 100644 --- a/test/lib/completions/sshmitm.exp +++ b/test/lib/completions/sshmitm.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/sshow.exp b/test/lib/completions/sshow.exp index 36a6cc2c..074d7b12 100644 --- a/test/lib/completions/sshow.exp +++ b/test/lib/completions/sshow.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/strace.exp b/test/lib/completions/strace.exp index 55004d20..933d1b48 100644 --- a/test/lib/completions/strace.exp +++ b/test/lib/completions/strace.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/strip.exp b/test/lib/completions/strip.exp index 46d9f362..00f4ab9c 100644 --- a/test/lib/completions/strip.exp +++ b/test/lib/completions/strip.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/sudo.exp b/test/lib/completions/sudo.exp index 1299a6da..d6bbbbb6 100644 --- a/test/lib/completions/sudo.exp +++ b/test/lib/completions/sudo.exp @@ -1,17 +1,24 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { - assert_env_unmodified -}; # teardown() + assert_env_unmodified {/OLDPWD/d} +} setup -assert_complete "fixtures/shared/default/foo.d/" "sudo cd fixtures/shared/default/fo" +assert_complete_dir foo.d/ "sudo cd fo" $::srcdir/fixtures/shared/default \ + "" -nospace + + +sync_after_int + + +assert_complete_dir fixtures/ "sudo sh fix" $::srcdir "" -nospace sync_after_int diff --git a/test/lib/completions/svk.exp b/test/lib/completions/svk.exp index a08674dc..a794a008 100644 --- a/test/lib/completions/svk.exp +++ b/test/lib/completions/svk.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/svn.exp b/test/lib/completions/svn.exp index fe40d6f7..d1a08ae4 100644 --- a/test/lib/completions/svn.exp +++ b/test/lib/completions/svn.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/svnadmin.exp b/test/lib/completions/svnadmin.exp index 35e07021..f20d52cf 100644 --- a/test/lib/completions/svnadmin.exp +++ b/test/lib/completions/svnadmin.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/svnlook.exp b/test/lib/completions/svnlook.exp index 33b67052..114435ec 100644 --- a/test/lib/completions/svnlook.exp +++ b/test/lib/completions/svnlook.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/sync_members.exp b/test/lib/completions/sync_members.exp index 4cb84ad8..817432bb 100644 --- a/test/lib/completions/sync_members.exp +++ b/test/lib/completions/sync_members.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/sysbench.exp b/test/lib/completions/sysbench.exp new file mode 100644 index 00000000..2a0fe339 --- /dev/null +++ b/test/lib/completions/sysbench.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "sysbench " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/sysctl.exp b/test/lib/completions/sysctl.exp index e1866f55..6aa9ffe0 100644 --- a/test/lib/completions/sysctl.exp +++ b/test/lib/completions/sysctl.exp @@ -1,19 +1,20 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup if {[assert_exec {sysctl -N -a 2>/dev/null | grep ^kern | sort -u} values]} { - assert_complete $values "sysctl kern" -}; # if + set test "sysctl kern should show completions" + assert_complete $values "sysctl kern" $test -expect-cmd-minus kern +} sync_after_int diff --git a/test/lib/completions/tac.exp b/test/lib/completions/tac.exp index 21230052..d4fe7937 100644 --- a/test/lib/completions/tac.exp +++ b/test/lib/completions/tac.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/tail.exp b/test/lib/completions/tail.exp index c8a82d97..fd685b1a 100644 --- a/test/lib/completions/tail.exp +++ b/test/lib/completions/tail.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {tail --help} "" "" "unsupported"]} { assert_complete_any "tail --" -}; # if +} sync_after_int diff --git a/test/lib/completions/tar.exp b/test/lib/completions/tar.exp index 43c60ff9..37f1ae4b 100644 --- a/test/lib/completions/tar.exp +++ b/test/lib/completions/tar.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/tcpkill.exp b/test/lib/completions/tcpkill.exp index e8cc9c10..d3a45e43 100644 --- a/test/lib/completions/tcpkill.exp +++ b/test/lib/completions/tcpkill.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/tcpnice.exp b/test/lib/completions/tcpnice.exp index 44bb59c6..b4b93097 100644 --- a/test/lib/completions/tcpnice.exp +++ b/test/lib/completions/tcpnice.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/tee.exp b/test/lib/completions/tee.exp index c25057ba..1058bb8e 100644 --- a/test/lib/completions/tee.exp +++ b/test/lib/completions/tee.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/texindex.exp b/test/lib/completions/texindex.exp index d5b8cd77..43b4c09a 100644 --- a/test/lib/completions/texindex.exp +++ b/test/lib/completions/texindex.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/tightvncviewer.exp b/test/lib/completions/tightvncviewer.exp index 6eba24c2..ee987f60 100644 --- a/test/lib/completions/tightvncviewer.exp +++ b/test/lib/completions/tightvncviewer.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/time.exp b/test/lib/completions/time.exp index b114318b..3bed4fdf 100644 --- a/test/lib/completions/time.exp +++ b/test/lib/completions/time.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/touch.exp b/test/lib/completions/touch.exp index f0960ef7..61d22b33 100644 --- a/test/lib/completions/touch.exp +++ b/test/lib/completions/touch.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {touch --help} "" "" "unsupported"]} { assert_complete_any "touch --" -}; # if +} sync_after_int diff --git a/test/lib/completions/tr.exp b/test/lib/completions/tr.exp index 68b11a36..c10c8ba1 100644 --- a/test/lib/completions/tr.exp +++ b/test/lib/completions/tr.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {tr --help} "" "" "unsupported"]} { assert_complete_any "tr --" -}; # if +} sync_after_int diff --git a/test/lib/completions/tune2fs.exp b/test/lib/completions/tune2fs.exp new file mode 100644 index 00000000..df70d904 --- /dev/null +++ b/test/lib/completions/tune2fs.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "tune2fs " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/unace.exp b/test/lib/completions/unace.exp index 0afbaafb..c9d7606e 100644 --- a/test/lib/completions/unace.exp +++ b/test/lib/completions/unace.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/uname.exp b/test/lib/completions/uname.exp index 2179dafd..0c363ab5 100644 --- a/test/lib/completions/uname.exp +++ b/test/lib/completions/uname.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {uname --help} "" "" "unsupported"]} { assert_complete_any "uname --" -}; # if +} sync_after_int diff --git a/test/lib/completions/unexpand.exp b/test/lib/completions/unexpand.exp index 31822561..c9aecc25 100644 --- a/test/lib/completions/unexpand.exp +++ b/test/lib/completions/unexpand.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {unexpand --help} "" "" "unsupported"]} { assert_complete_any "unexpand --" -}; # if +} sync_after_int diff --git a/test/lib/completions/uniq.exp b/test/lib/completions/uniq.exp index 20dbcfac..d516106c 100644 --- a/test/lib/completions/uniq.exp +++ b/test/lib/completions/uniq.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {uniq --help} "" "" "unsupported"]} { assert_complete_any "uniq --" -}; # if +} sync_after_int diff --git a/test/lib/completions/units.exp b/test/lib/completions/units.exp index a40b5f3f..96ec91d1 100644 --- a/test/lib/completions/units.exp +++ b/test/lib/completions/units.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {units --help} "" "" "unsupported"]} { assert_complete_any "units --" -}; # if +} sync_after_int diff --git a/test/lib/completions/unpack200.exp b/test/lib/completions/unpack200.exp index 845701dd..b4360491 100644 --- a/test/lib/completions/unpack200.exp +++ b/test/lib/completions/unpack200.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/unrar.exp b/test/lib/completions/unrar.exp index e66e3c8b..b5e27b21 100644 --- a/test/lib/completions/unrar.exp +++ b/test/lib/completions/unrar.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/unset.exp b/test/lib/completions/unset.exp index a5e7fc9b..42e753cb 100644 --- a/test/lib/completions/unset.exp +++ b/test/lib/completions/unset.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/unshunt.exp b/test/lib/completions/unshunt.exp index 964cac68..96cd5860 100644 --- a/test/lib/completions/unshunt.exp +++ b/test/lib/completions/unshunt.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/update-alternatives.exp b/test/lib/completions/update-alternatives.exp index 10ff4e6d..b94d88c5 100644 --- a/test/lib/completions/update-alternatives.exp +++ b/test/lib/completions/update-alternatives.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/update-rc.d.exp b/test/lib/completions/update-rc.d.exp index 9c2c2464..f2eafea5 100644 --- a/test/lib/completions/update-rc.d.exp +++ b/test/lib/completions/update-rc.d.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/urlsnarf.exp b/test/lib/completions/urlsnarf.exp index c5b26922..ed543629 100644 --- a/test/lib/completions/urlsnarf.exp +++ b/test/lib/completions/urlsnarf.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vdir.exp b/test/lib/completions/vdir.exp index b525c382..c0e5ee43 100644 --- a/test/lib/completions/vdir.exp +++ b/test/lib/completions/vdir.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgcfgbackup.exp b/test/lib/completions/vgcfgbackup.exp index 19ceeeca..b7e509a2 100644 --- a/test/lib/completions/vgcfgbackup.exp +++ b/test/lib/completions/vgcfgbackup.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgcfgrestore.exp b/test/lib/completions/vgcfgrestore.exp index e1c3c3b9..e40cd213 100644 --- a/test/lib/completions/vgcfgrestore.exp +++ b/test/lib/completions/vgcfgrestore.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgchange.exp b/test/lib/completions/vgchange.exp index 645eedb4..b6c0e1df 100644 --- a/test/lib/completions/vgchange.exp +++ b/test/lib/completions/vgchange.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgck.exp b/test/lib/completions/vgck.exp index 67209b15..b4d58aec 100644 --- a/test/lib/completions/vgck.exp +++ b/test/lib/completions/vgck.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgconvert.exp b/test/lib/completions/vgconvert.exp index 065c4828..362c44b6 100644 --- a/test/lib/completions/vgconvert.exp +++ b/test/lib/completions/vgconvert.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgcreate.exp b/test/lib/completions/vgcreate.exp index 7c324e62..4cb7dd45 100644 --- a/test/lib/completions/vgcreate.exp +++ b/test/lib/completions/vgcreate.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgdisplay.exp b/test/lib/completions/vgdisplay.exp index b6bc9125..6a8ed84d 100644 --- a/test/lib/completions/vgdisplay.exp +++ b/test/lib/completions/vgdisplay.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgexport.exp b/test/lib/completions/vgexport.exp index 2ad4230e..2900960f 100644 --- a/test/lib/completions/vgexport.exp +++ b/test/lib/completions/vgexport.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgextend.exp b/test/lib/completions/vgextend.exp index 18a491d2..3c46a8f0 100644 --- a/test/lib/completions/vgextend.exp +++ b/test/lib/completions/vgextend.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgimport.exp b/test/lib/completions/vgimport.exp index e4568f3b..ed04e282 100644 --- a/test/lib/completions/vgimport.exp +++ b/test/lib/completions/vgimport.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgmerge.exp b/test/lib/completions/vgmerge.exp index 8ba5e893..a4f8833b 100644 --- a/test/lib/completions/vgmerge.exp +++ b/test/lib/completions/vgmerge.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgmknodes.exp b/test/lib/completions/vgmknodes.exp index d24552f0..5c9feeb3 100644 --- a/test/lib/completions/vgmknodes.exp +++ b/test/lib/completions/vgmknodes.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgreduce.exp b/test/lib/completions/vgreduce.exp index 887ba8de..f6af3150 100644 --- a/test/lib/completions/vgreduce.exp +++ b/test/lib/completions/vgreduce.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgremove.exp b/test/lib/completions/vgremove.exp index 26dadf95..0dc5eda8 100644 --- a/test/lib/completions/vgremove.exp +++ b/test/lib/completions/vgremove.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgrename.exp b/test/lib/completions/vgrename.exp index 8ddaa758..81438631 100644 --- a/test/lib/completions/vgrename.exp +++ b/test/lib/completions/vgrename.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgs.exp b/test/lib/completions/vgs.exp index a27e3650..22ab176b 100644 --- a/test/lib/completions/vgs.exp +++ b/test/lib/completions/vgs.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgscan.exp b/test/lib/completions/vgscan.exp index 4bb8c35e..ae8168c8 100644 --- a/test/lib/completions/vgscan.exp +++ b/test/lib/completions/vgscan.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vgsplit.exp b/test/lib/completions/vgsplit.exp index 54e7034f..b183cfda 100644 --- a/test/lib/completions/vgsplit.exp +++ b/test/lib/completions/vgsplit.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/vncviewer.exp b/test/lib/completions/vncviewer.exp index 3d47f49f..8c51e0b2 100644 --- a/test/lib/completions/vncviewer.exp +++ b/test/lib/completions/vncviewer.exp @@ -1,13 +1,13 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified { /declare -f _vncviewer_bootstrap/d } -}; # teardown() +} setup diff --git a/test/lib/completions/wc.exp b/test/lib/completions/wc.exp index 8ad2bf8d..b261b6a7 100644 --- a/test/lib/completions/wc.exp +++ b/test/lib/completions/wc.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {wc --help} "" "" "unsupported"]} { assert_complete_any "wc --" -}; # if +} sync_after_int diff --git a/test/lib/completions/webmitm.exp b/test/lib/completions/webmitm.exp index 1d48a3a6..adb97cc2 100644 --- a/test/lib/completions/webmitm.exp +++ b/test/lib/completions/webmitm.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/wget.exp b/test/lib/completions/wget.exp index 245b27be..8e830a12 100644 --- a/test/lib/completions/wget.exp +++ b/test/lib/completions/wget.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/who.exp b/test/lib/completions/who.exp index 73928ef7..6cca6795 100644 --- a/test/lib/completions/who.exp +++ b/test/lib/completions/who.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup @@ -13,7 +13,7 @@ setup if {[assert_exec {who --help} "" "" "unsupported"]} { assert_complete_any "who --" -}; # if +} sync_after_int diff --git a/test/lib/completions/withlist.exp b/test/lib/completions/withlist.exp index 6310466d..e1f91f6a 100644 --- a/test/lib/completions/withlist.exp +++ b/test/lib/completions/withlist.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/wol.exp b/test/lib/completions/wol.exp index 84a2d88d..a4ac9e4e 100644 --- a/test/lib/completions/wol.exp +++ b/test/lib/completions/wol.exp @@ -1,14 +1,14 @@ proc setup {} { # See fixtures/shared/bin/{arp,ifconfig} - assert_bash_exec {OLDPATH="$PATH"; PATH="$TESTDIR/fixtures/shared/bin:$PATH";} + assert_bash_exec {OLDPATH="$PATH"; PATH="$SRCDIR/fixtures/shared/bin:$PATH";} save_env -}; # setup() +} proc teardown {} { assert_env_unmodified assert_bash_exec {PATH="$OLDPATH"; unset -v OLDPATH} -}; # teardown() +} setup diff --git a/test/lib/completions/wtf.exp b/test/lib/completions/wtf.exp index 8250becc..b1693c80 100644 --- a/test/lib/completions/wtf.exp +++ b/test/lib/completions/wtf.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/wvdial.exp b/test/lib/completions/wvdial.exp index 8d4669de..5b52daa8 100644 --- a/test/lib/completions/wvdial.exp +++ b/test/lib/completions/wvdial.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/xfreerdp.exp b/test/lib/completions/xfreerdp.exp new file mode 100644 index 00000000..f61cfcad --- /dev/null +++ b/test/lib/completions/xfreerdp.exp @@ -0,0 +1,28 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +set test "Tab should complete options" +set cmd "xfreerdp --" +send "$cmd\t" +set expected "^$cmd\r\n--data.*--kbd-list.*--plugin\r\n/@$cmd$" +expect { + -re $expected { pass "$test" } + -re /@ { unresolved "$test at prompt" } + default { unresolved "$test" } +} + + +sync_after_int + + +teardown diff --git a/test/lib/completions/xhost.exp b/test/lib/completions/xhost.exp index aeceadb6..82e2e9c6 100644 --- a/test/lib/completions/xhost.exp +++ b/test/lib/completions/xhost.exp @@ -1,24 +1,19 @@ proc setup {} { assert_bash_exec {HOME=$TESTDIR} save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup set test "Tab should complete hostnames" - # Build string list of hostnames -set hosts {} -foreach h [exec bash -c "compgen -A hostname"] { - lappend hosts $h -}; # foreach -assert_complete $hosts "xhost " $test +assert_complete [get_hosts] "xhost " $test sync_after_int @@ -28,13 +23,13 @@ set test "Tab should complete partial hostname" # Build string list of hostnames, starting with the character of the first hostname set hosts {} set char "" -foreach h [exec bash -c "compgen -A hostname"] { +foreach h [get_hosts] { if {$char == ""} {set char [string range $h 0 0]} # Only append hostname if starting with $char if {[string range $h 0 0] == "$char"} { lappend hosts $h - }; # if -}; # foreach + } +} assert_complete $hosts "xhost $char" $test @@ -44,9 +39,9 @@ sync_after_int set test "Tab should complete hostnames prefixed with +" # Build string list of hostnames, prefixed with plus (+) set hosts {} -foreach h [exec bash -c "compgen -A hostname"] { +foreach h [get_hosts] { lappend hosts "+$h" -}; # foreach +} assert_complete $hosts "xhost \+" $test @@ -56,13 +51,13 @@ sync_after_int set test "Tab should complete partial hostname prefixed with +" # Build string list of hostnames, starting with character of first host. set hosts {} -foreach h [exec bash -c "compgen -A hostname"] { +foreach h [get_hosts] { if {$char == ""} {set char [string range $h 0 0]} # Only append hostname if starting with $char if {[string range $h 0 0] == "$char"} { lappend hosts "+$h" - }; # if -}; # foreach + } +} assert_complete $hosts "xhost +$char" @@ -72,9 +67,9 @@ sync_after_int set test "Tab should complete hostnames prefixed with -" # Build string list of hostnames, prefix with minus (-) set hosts {} -foreach h [exec bash -c "compgen -A hostname"] { +foreach h [get_hosts] { lappend hosts "-$h" -}; # foreach +} assert_complete $hosts "xhost -" $test @@ -84,13 +79,13 @@ sync_after_int set test "Tab should complete partial hostname prefixed with -" # Build list of hostnames, starting with character of first host set hosts {} -foreach h [exec bash -c "compgen -A hostname"] { +foreach h [get_hosts] { if {$char == ""} {set char [string range $h 0 0]} # Only append hostname if starting with $char if {[string range $h 0 0] == "$char"} { lappend hosts "-$h" - }; # if -}; # foreach + } +} assert_complete $hosts "xhost -$char" $test diff --git a/test/lib/completions/xmllint.exp b/test/lib/completions/xmllint.exp index 15451471..20daab6d 100644 --- a/test/lib/completions/xmllint.exp +++ b/test/lib/completions/xmllint.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/xmlwf.exp b/test/lib/completions/xmlwf.exp index a996d458..6c306f34 100644 --- a/test/lib/completions/xmlwf.exp +++ b/test/lib/completions/xmlwf.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/xmms.exp b/test/lib/completions/xmms.exp index c4ad64e8..1f1f6d57 100644 --- a/test/lib/completions/xmms.exp +++ b/test/lib/completions/xmms.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/xmodmap.exp b/test/lib/completions/xmodmap.exp new file mode 100644 index 00000000..2bf4da1c --- /dev/null +++ b/test/lib/completions/xmodmap.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "xmodmap " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/xpovray.exp b/test/lib/completions/xpovray.exp index 92cc903d..53a5fcd0 100644 --- a/test/lib/completions/xpovray.exp +++ b/test/lib/completions/xpovray.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/xrandr.exp b/test/lib/completions/xrandr.exp index 649ed43b..14beb762 100644 --- a/test/lib/completions/xrandr.exp +++ b/test/lib/completions/xrandr.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/xrdb.exp b/test/lib/completions/xrdb.exp new file mode 100644 index 00000000..f02625dc --- /dev/null +++ b/test/lib/completions/xrdb.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "xrdb " + + +sync_after_int + + +teardown diff --git a/test/lib/completions/xsltproc.exp b/test/lib/completions/xsltproc.exp index 2470c22e..2c558ff1 100644 --- a/test/lib/completions/xsltproc.exp +++ b/test/lib/completions/xsltproc.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/xvnc4viewer.exp b/test/lib/completions/xvnc4viewer.exp index 3456c3e7..b10e272c 100644 --- a/test/lib/completions/xvnc4viewer.exp +++ b/test/lib/completions/xvnc4viewer.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/xz.exp b/test/lib/completions/xz.exp index 820b0689..6e6b29ca 100644 --- a/test/lib/completions/xz.exp +++ b/test/lib/completions/xz.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { - assert_env_unmodified -}; # teardown() + assert_env_unmodified {/OLDPWD=/d} +} setup @@ -17,14 +17,14 @@ assert_complete_any "xz " sync_after_int -assert_complete "a/ bashcomp.lzma bashcomp.tar.xz bashcomp.tlz bashcomp.xz" \ - "xz -d fixtures/xz/" +assert_complete_dir "a/ bashcomp.lzma bashcomp.tar.xz bashcomp.tlz bashcomp.xz" \ + "xz -d " $::srcdir/fixtures/xz sync_after_int -assert_complete "a/ bashcomp.tar" "xz fixtures/xz/" +assert_complete_dir "a/ bashcomp.tar" "xz " $::srcdir/fixtures/xz sync_after_int diff --git a/test/lib/completions/ypcat.exp b/test/lib/completions/ypcat.exp index f1bd0c0e..a8249dc2 100644 --- a/test/lib/completions/ypcat.exp +++ b/test/lib/completions/ypcat.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/ypmatch.exp b/test/lib/completions/ypmatch.exp index f1695f67..ac264c18 100644 --- a/test/lib/completions/ypmatch.exp +++ b/test/lib/completions/ypmatch.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/yum-arch.exp b/test/lib/completions/yum-arch.exp index defb7bf4..85c47c22 100644 --- a/test/lib/completions/yum-arch.exp +++ b/test/lib/completions/yum-arch.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/completions/yum.exp b/test/lib/completions/yum.exp index 09d7282c..899ecddb 100644 --- a/test/lib/completions/yum.exp +++ b/test/lib/completions/yum.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified -}; # teardown() +} setup diff --git a/test/lib/library.exp b/test/lib/library.exp index c76d9854..491da212 100644 --- a/test/lib/library.exp +++ b/test/lib/library.exp @@ -1,7 +1,8 @@ - # Source `init.tcl' again to restore the `unknown' procedure - # NOTE: DejaGnu has an old `unknown' procedure which unfortunately disables - # tcl auto-loading. +# Source `init.tcl' again to restore the `unknown' procedure +# NOTE: DejaGnu has an old `unknown' procedure which unfortunately disables +# tcl auto-loading. source [file join [info library] init.tcl] +package require cmdline package require textutil::string @@ -22,7 +23,7 @@ proc assert_bash_exec {{aCmd ""} {title ""} {prompt /@} {out -1}} { if {[string length $aCmd] != 0} { send "$aCmd\r" expect -ex "$aCmd\r\n" - }; # if + } if {[string length $title] == 0} {set title $aCmd} expect -ex $prompt set results $expect_out(buffer); # Catch output @@ -33,24 +34,16 @@ proc assert_bash_exec {{aCmd ""} {title ""} {prompt /@} {out -1}} { ] ] if {$out == -1 && [string length $results] > 0} { - if {[info exists multipass_name]} { - fail "ERROR Unexpected output from bash command \"$title\"" - }; # if - send_user "ERROR Unexpected output from bash command \"$title\":\n$results" - }; # if + fail "ERROR Unexpected output from bash command \"$title\"" + } set cmd "echo $?" send "$cmd\r" expect { -ex "$cmd\r\n0\r\n$prompt" {} - $prompt { - if {[info exists multipass_name]} { - fail "ERROR executing bash command \"$title\"" - }; # if - send_user "ERROR executing bash command \"$title\"" - } - }; # expect -}; # assert_bash_exec() + $prompt {fail "ERROR executing bash command \"$title\""} + } +} # Test `type ...' in bash @@ -64,32 +57,45 @@ proc assert_bash_type {command} { expect { -ex 0 { set result true } -ex 1 { set result false; unsupported "$test" } - }; # expect + } expect "/@" return $result -}; # assert_bash_type() +} -# Make sure the expected list is returned by executing the specified command. -# @param list $expected -# @param string $cmd Command given to generate items -# @param string $test (optional) Test title. Default is "$cmd<TAB> should show completions" -# @param string $prompt (optional) Bash prompt. Default is "/@" -# @param integer $size (optional) Chunk size. Default is 20. -# @result boolean True if successful, False if not -proc assert_bash_list {expected cmd {test ""} {prompt /@} {size 20}} { +# Make sure the expected list matches the real list, as returned by executing +# the specified bash command. +# Specify `-sort' if the real list is sorted. +# @param list $expected Expected list items +# @param string $cmd Bash command to execute in order to generate real list +# items +# @param string $test Test title. Becomes "$cmd should show expected output" +# if empty string. +# @param list $args Options: +# -sort Compare list sorted. Default is unsorted +# -prompt Bash prompt. Default is `/@' +# -chunk-size N Compare list N items at a time. Default +# is 20. +proc assert_bash_list {expected cmd test {args {}}} { + array set arg [::cmdline::getoptions args { + {sort "compare list sorted"} + {prompt.arg /@ "bash prompt"} + {chunk-size.arg 20 "compare N list items at a time"} + }] + set prompt $arg(prompt) if {$test == ""} {set test "$cmd should show expected output"} if {[llength $expected] == 0} { assert_no_output $cmd $test $prompt } else { send "$cmd\r" expect -ex "$cmd\r\n" - - if {[match_items $expected $test $prompt $size]} { - expect { - -re $prompt { pass "$test" } - -re eof { unresolved "eof" } - } + if {$arg(sort)} {set bash_sort "-bash-sort"} {set bash_sort ""} + if {[ + eval match_items \$expected $bash_sort -chunk-size \ + \$arg(chunk-size) -end-newline -end-prompt \ + -prompt \$prompt + ]} { + pass "$test" } else { fail "$test" } @@ -97,130 +103,235 @@ proc assert_bash_list {expected cmd {test ""} {prompt /@} {size 20}} { } -proc assert_bash_list_dir {expected cmd dir {test ""} {prompt /@} {size 20}} { - set prompt "/$dir/@" +# Make sure the expected list matches the real list, as returned by executing +# the specified bash command within the specified directory. +# Specify `-sort' if the real list is sorted. +# @param list $expected Expected list items +# @param string $cmd Bash command to generate real list items +# @param string $dir Directory to execute $cmd within +# @param string $test Test title. Becomes "$cmd should show expected output" +# if empty string. +# @param list $args Options: +# -sort Compare list sorted. Default is unsorted +# -prompt Bash prompt. Default is `/@' +# -chunk-size N Compare list N items at a time. Default +# is 20. +proc assert_bash_list_dir {expected cmd dir test {args {}}} { + array set arg [::cmdline::getoptions args { + {sort "compare list sorted"} + {prompt.arg "/@" "bash prompt"} + {chunk-size.arg 20 "compare N list items at a time"} + }] + set prompt $arg(prompt) + if {$arg(sort)} {set arg_sort "-sort"} else {set arg_sort ""} assert_bash_exec "cd $dir" "" $prompt - assert_bash_list $expected $cmd $test $prompt $size + assert_bash_list $expected $cmd $test $arg_sort \ + -chunk-size $arg(chunk-size) -prompt $prompt sync_after_int $prompt assert_bash_exec {cd "$TESTDIR"} -}; # assert_bash_list_dir() +} # Make sure the expected items are returned by TAB-completing the specified -# command. +# command. If the number of expected items is one, expected is: +# +# $cmd<TAB>$expected[<SPACE>] +# +# SPACE is not expected if -nospace is specified. +# +# If the number of expected items is greater than one, expected is: +# +# $cmd<TAB>\n +# $expected\n +# $prompt + ($cmd - AUTO) + longest-common-prefix-of-$expected +# +# AUTO is calculated like this: If $cmd ends with non-whitespace, and +# the last argument of $cmd equals the longest-common-prefix of +# $expected, $cmd minus this argument will be expected. +# +# If the algorithm above fails, you can manually specify the CWORD to be +# subtracted from $cmd specifying `-expect-cmd-minus CWORD'. Known cases where +# this is useful are when: +# - the last whitespace is escaped, e.g. "finger foo\ " or "finger +# 'foo " +# +# If the entire $cmd is expected, specify `-expect-cmd-full'. +# # @param list $expected Expected completions. # @param string $cmd Command given to generate items -# @param string $test (optional) Test title. Default is "$cmd<TAB> should show completions" -# @param string $prompt (optional) Bash prompt. Default is "/@" -# @param integer $size (optional) Chunk size. Default is 20. -# @param string $cword (optional) Last argument of $cmd which is an -# argument-to-complete and to be replaced with the longest common prefix -# of $expected. If empty string (default), `assert_complete' autodetects -# if the last argument is an argument-to-complete by checking if $cmd -# doesn't end with whitespace. Specifying `cword' should only be necessary -# if this autodetection fails, e.g. when the last whitespace is escaped or -# quoted, e.g. "finger foo\ " or "finger 'foo " -# @param list $filters (optional) List of filters to apply to this function to tweak -# the expected completions and argument-to-complete. Possible values: -# - "ltrim_colon_completions" -# @result boolean True if successful, False if not -proc assert_complete {expected cmd {test ""} {prompt /@} {size 20} {cword ""} {filters ""}} { +# @param string $test Test title +# @param list $args Options: +# -prompt PROMPT Bash prompt. Default is `/@' +# -chunk-size CHUNK-SIZE Compare list CHUNK-SIZE items at +# a time. Default is 20. +# -nospace Don't expect space character to be output after completion match. +# Valid only if a single completion is expected. +# -ltrim-colon-completions Left-trim completions with cword containing +# colon (:) +# -expect-cmd-full Expect the full $cmd to be echoed. Expected is: +# +# $cmd<TAB>\n +# $expected\n +# $prompt + $cmd + longest-common-prefix-of-$expected +# +# -expect-cmd-minus DWORD Expect $cmd minus DWORD to be echoed. +# Expected is: +# +# $cmd<TAB>\n +# $expected\n +# $prompt + ($cmd - DWORD) + longest-common-prefix-of-$expected +# +proc assert_complete {expected cmd {test ""} {args {}}} { + set args_orig $args + array set arg [::cmdline::getoptions args { + {prompt.arg "/@" "bash prompt"} + {chunk-size.arg 20 "compare N list items at a time"} + {nospace "don't expect space after completion"} + {ltrim-colon-completions "left-trim completions with cword containing :"} + {expect-cmd-full "Expect full cmd after prompt"} + {expect-cmd-minus.arg "" "Expect cmd minus DWORD after prompt"} + }] if {[llength $expected] == 0} { assert_no_complete $cmd $test + } elseif {[llength $expected] == 1} { + eval assert_complete_one \$expected \$cmd \$test $args_orig } else { - if {$test == ""} {set test "$cmd should show completions"} - send "$cmd\t" - if {[llength $expected] == 1} { - expect -ex "$cmd" - - if {[lsearch -exact $filters "ltrim_colon_completions"] == -1} { - set cur ""; # Default to empty word to complete on - set words [split_words_bash $cmd] - if {[llength $words] > 1} { - # Assume last word of `$cmd' is word to complete on. - set index [expr [llength $words] - 1] - set cur [lindex $words $index] - }; # if - # Remove second word from beginning of single item $expected - if {[string first $cur $expected] == 0} { - set expected [list [string range $expected [string length $cur] end]] - }; # if - }; # if - } else { - expect -ex "$cmd\r\n" - # Make sure expected items are unique - set expected [lsort -unique $expected] - }; # if - - if {[lsearch -exact $filters "ltrim_colon_completions"] != -1} { - # If partial contains colon (:), remove partial from begin of items - # See also: bash_completion.__ltrim_colon_completions() - _ltrim_colon_completions cword expected - }; # if - - if {[match_items $expected $test $prompt $size]} { - if {[llength $expected] == 1} { - pass "$test" - } else { - # Remove optional (partial) last argument-to-complete from `cmd', - # E.g. "finger test@" becomes "finger" - - if {[lsearch -exact $filters "ltrim_colon_completions"] != -1} { - set cmd2 $cmd - } else { - set cmd2 [_remove_cword_from_cmd $cmd $cword] - }; # if - - # Determine common prefix of completions - set common [::textutil::string::longestCommonPrefixList $expected] - #if {[string length $common] > 0} {set common " $common"} - expect { - -ex "$prompt$cmd2$common" { pass "$test" } - -re $prompt { unresolved "$test at prompt" } - -re eof { unresolved "eof" } - }; # expect - }; # if - } else { - fail "$test" - }; # if - }; # if -}; # assert_complete() + eval assert_complete_many \$expected \$cmd \$test $args_orig + } +} + + +# Make sure the expected multiple items are returned by TAB-completing the +# specified command. +# @see assert_complete() +proc assert_complete_many {expected cmd {test ""} {args {}}} { + array set arg [::cmdline::getoptions args { + {prompt.arg "/@" "bash prompt"} + {chunk-size.arg 20 "compare N list items at a time"} + {nospace "don't expect space after completion"} + {ltrim-colon-completions "left-trim completions with cword containing :"} + {expect-cmd-full "Expect full cmd after prompt"} + {expect-cmd-minus.arg "" "Expect cmd minus CWORD after prompt"} + }] + if {$test == ""} {set test "$cmd should show completions"} + set prompt $arg(prompt) + set dword "" + if {$arg(expect-cmd-minus) != ""} {set dword $arg(expect-cmd-minus)} + + send "$cmd\t" + expect -ex "$cmd\r\n" + # Make sure expected items are unique + set expected [lsort -unique $expected] -# @param string $cmd Command to remove cword from -# @param string $cword (optional) Last argument of $cmd which is an -# argument-to-complete and to be deleted. If empty string (default), -# `_remove_cword_from_cmd' autodetects if the last argument is an -# argument-to-complete by checking if $cmd doesn't end with whitespace. -# Specifying `cword' is only necessary if this autodetection fails, e.g. + # Determine common prefix of completions + set common [::textutil::string::longestCommonPrefixList $expected] + + if {$arg(ltrim-colon-completions)} { + # If partial contains colon (:), remove partial from begin of items + _ltrim_colon_completions $cmd expected dword + } + set cmd2 [_remove_cword_from_cmd $cmd $dword $common] + + set prompt "$prompt$cmd2$common" + if {$arg(nospace)} {set endspace ""} else {set endspace "-end-space"} + set endprompt "-end-prompt" + if {[ + eval match_items \$expected -bash-sort -chunk-size \ + \$arg(chunk-size) $endprompt $endspace -prompt \$prompt + ]} { + pass "$test" + } else { + fail "$test" + } +} + + +# Make sure the expected single item is returned by TAB-completing the +# specified command. +# @see assert_complete() +proc assert_complete_one {expected cmd {test ""} {args {}}} { + array set arg [::cmdline::getoptions args { + {prompt.arg "/@" "bash prompt"} + {chunk-size.arg 20 "compare N list items at a time"} + {nospace "don't expect space after completion"} + {ltrim-colon-completions "left-trim completions with cword containing :"} + {expect-cmd-full "Expect full cmd after prompt"} + {expect-cmd-minus.arg "" "Expect cmd minus CWORD after prompt"} + }] + set prompt $arg(prompt) + + if {$test == ""} {set test "$cmd should show completion"} + send "$cmd\t" + expect -ex "$cmd" + if {$arg(ltrim-colon-completions)} { + # If partial contains colon (:), remove partial from begin of items + _ltrim_colon_completions $cmd expected cword + } else { + set cur ""; # Default to empty word to complete on + set words [split_words_bash $cmd] + if {[llength $words] > 1} { + # Assume last word of `$cmd' is word to complete on. + set index [expr [llength $words] - 1] + set cur [lindex $words $index] + } + # Remove second word from beginning of $expected + if {[string first $cur $expected] == 0} { + set expected [list [string range $expected [string length $cur] end]] + } + } + + if {$arg(nospace)} {set endspace ""} else {set endspace "-end-space"} + if {[ + eval match_items \$expected -bash-sort -chunk-size \ + \$arg(chunk-size) $endspace -prompt \$prompt + ]} { + pass "$test" + } else { + fail "$test" + } +} + + +# @param string $cmd Command to remove current-word-to-complete from. +# @param string $dword (optional) Manually specify current-word-to-complete, +# i.e. word to remove from $cmd. If empty string (default), +# `_remove_cword_from_cmd' autodetects if the last argument is the +# current-word-to-complete by checking if $cmd doesn't end with whitespace. +# Specifying `dword' is only necessary if this autodetection fails, e.g. # when the last whitespace is escaped or quoted, e.g. "finger foo\ " or # "finger 'foo " -# @return string Command with cword removed -proc _remove_cword_from_cmd {cmd {cword ""}} { +# @param string $common (optional) Common prefix of expected completions. +# @return string Command with current-word-to-complete removed +proc _remove_cword_from_cmd {cmd {dword ""} {common ""}} { set cmd2 $cmd - # Is $cword specified? - if {[string length $cword] > 0} { - # Remove $cword from end of $cmd - if {[string last $cword $cmd] == [string length $cmd] - [string length $cword]} { - set cmd2 [string range $cmd 0 [expr [string last $cword $cmd] - 1]] - }; # if + # Is $dword specified? + if {[string length $dword] > 0} { + # Remove $dword from end of $cmd + if {[string last $dword $cmd] == [string length $cmd] - [string length $dword]} { + set cmd2 [string range $cmd 0 [expr [string last $dword $cmd] - 1]] + } } else { - # No, $cword not specified; - # Check if last argument is really an-argument-to-complete, i.e. + # No, $dword not specified; + # Check if last argument is really a word-to-complete, i.e. # doesn't end with whitespace. # NOTE: This check fails if trailing whitespace is escaped or quoted, # e.g. "finger foo\ " or "finger 'foo ". Specify parameter - # $cword in those cases. + # $dword in those cases. # Is last char whitespace? if {! [string is space [string range $cmd end end]]} { # No, last char isn't whitespace; - # Remove argument-to-complete from end of $cmd - set cmd2 [lrange [split $cmd] 0 end-1] - append cmd2 " " - }; # if - }; # if + set cmds [split $cmd] + # Does word-to-complete start with $common? + if {[string first $common [lrange $cmds end end]] == 0} { + # Remove word-to-complete from end of $cmd + set cmd2 [lrange $cmds 0 end-1] + append cmd2 " " + } + } + } return $cmd2 -}; # _remove_cword_from_cmd() +} # Escape regexp special characters @@ -253,8 +364,8 @@ proc assert_complete_any {cmd {test ""} {prompt /@}} { } -re $prompt { unresolved "$test at prompt" } eof { unresolved "eof" } - }; # expect -}; # assert_complete_any() + } +} # Make sure the expected files are returned by TAB-completing the @@ -262,18 +373,16 @@ proc assert_complete_any {cmd {test ""} {prompt /@}} { # @param list $expected # @param string $cmd Command given to generate items # @param string $dir Subdirectory to attempt completion in. The directory must be relative from the $TESTDIR and without a trailing slash. E.g. `fixtures/evince' -# @param string $test (optional) Test title. Default is "$cmd<TAB> should show completions" -# @param string $prompt (optional) Bash prompt. Default is "/@" -# @param integer $size (optional) Chunk size. Default is 20. -# @param string $cword (optional) Last word of $cmd to complete. See: assert_complete() +# @param string $test Test title +# @param list $args See: assert_complete() # @result boolean True if successful, False if not -proc assert_complete_dir {expected cmd dir {test ""} {size 20} {cword ""}} { - set prompt "/$dir/@" +proc assert_complete_dir {expected cmd dir {test ""} {args {}}} { + set prompt "/@" assert_bash_exec "cd $dir" "" $prompt - assert_complete $expected $cmd $test $prompt $size $cword + assert_complete $expected $cmd $test $args sync_after_int $prompt assert_bash_exec {cd "$TESTDIR"} -}; # assert_complete_dir +} @@ -284,14 +393,9 @@ proc assert_complete_dir {expected cmd dir {test ""} {size 20} {cword ""}} { # @param list $expected List of all completions. # @param string $cmd Command given to generate items # @param string $partial Word to complete -# @param string $test (optional) Test title. Default is "$cmd<TAB> should show completions" -# @param string $prompt (optional) Bash prompt. Default is "/@" -# @param integer $size (optional) Chunk size. Default is 20. -# @param list $filters (optional) List of filters to apply to this function to tweak -# the expected completions and argument-to-complete. -# @see assert_complete() -# @result boolean True if successful, False if not -proc assert_complete_partial {expected cmd {partial ""} {test ""} {prompt /@} {size 20} {filters ""}} { +# @param string $test Test title +# @param list $args See: assert_complete() +proc assert_complete_partial {expected cmd {partial ""} {test ""} {args {}}} { if {$test == ""} {set test "$cmd should complete partial argument"} if {[llength $expected] == 0} { unresolved "$test" @@ -301,39 +405,54 @@ proc assert_complete_partial {expected cmd {partial ""} {test ""} {prompt /@} {s set expected [lsort -unique $expected] foreach item $expected { if {$partial == ""} {set partial [string range $item 0 0]} - # Only append item if starting with $partial + # Only append item if starting with $partial if {[string range $item 0 [expr [string length $partial] - 1]] == "$partial"} { lappend pick $item - }; # if - }; # foreach - assert_complete $pick "$cmd $partial" $test $prompt $size $partial $filters - }; # if -}; # assert_complete_partial() + } + } + # NOTE: The `eval' is necessary to flatten the $args list + # See also: http://wiki.tcl.tk/11787 - {expand} + eval assert_complete \$pick \"\$cmd \$partial\" \$test $args; #" + } +} +# If cword contains colon (:), left-trim completions with cword +# @param string $cmd Command to complete +# @param list $items Reference to list of completions to trim +# @param string $dword Reference to variable to contain word to remove from +# expected cmd. # See also: bash_completion._ltrim_colon_completions -proc _ltrim_colon_completions {cword items} { - upvar 1 $cword cword_out +proc _ltrim_colon_completions {cmd items dword} { upvar 1 $items items_out + upvar 1 $dword dword_out + + set cur ""; # Default to empty word to complete on + set words [split_words_bash $cmd] + if {[llength $words] > 1} { + # Assume last word of `$cmd' is word to complete on. + set index [expr [llength $words] - 1] + set cur [lindex $words $index] + } # If word-to-complete contains a colon, # and bash-version < 4, # or bash-version >= 4 and COMP_WORDBREAKS contains a colon if { - [string first : $cword_out] > -1 && ( + [string first : $cur] > -1 && ( [lindex $::BASH_VERSINFO 0] < 4 || ([lindex $::BASH_VERSINFO 0] >= 4 && [string first ":" $::COMP_WORDBREAKS] > -1) ) } { + set dword_out $cur for {set i 0} {$i < [llength $items_out]} {incr i} { set item [lindex $items_out $i] - if {[string first $cword_out $item] == 0} { + if {[string first $cur $item] == 0} { # Strip colon-prefix - lset items_out $i [string range $item [string length $cword_out] end] - }; # if - }; # for - #set cword_out "" - }; # if -}; # _ltrim_colon_completions() + lset items_out $i [string range $item [string length $cur] end] + } + } + } +} # Make sure the bash environment hasn't changed between now and the last call @@ -370,7 +489,7 @@ proc assert_env_unmodified {{sed ""} {file ""} {diff ""}} { append diff "\r\n" } else { set diff "" - }; # if + } # Execute diff @@ -392,11 +511,11 @@ proc assert_env_unmodified {{sed ""} {file ""} {diff ""}} { # Remove possible `\r\n[wd]@' from end of diff if {[string last "\r\n[wd]@" $diff] == [string length $diff] - [string length "\r\n[wd]@"]} { set diff [string range $diff 0 [expr [string last "\r\n[wd]@" $diff] - 1]] - }; # if + } send_user $diff; } - }; # expect -}; # assert_env_unmodified() + } +} # Make sure the specified command executed from within Tcl/Expect. @@ -426,10 +545,10 @@ proc assert_exec {cmd {stdout ''} {test ''} {failcmd "unresolved"}} { unsupported "$test" } else { $failcmd "$test" - }; # if - }; # if + } + } return $result -}; # assert_exec() +} # Check that no completion is attempted on a certain command. @@ -439,7 +558,7 @@ proc assert_exec {cmd {stdout ''} {test ''} {failcmd "unresolved"}} { proc assert_no_complete {{cmd} {test ""}} { if {[string length $test] == 0} { set test "$cmd shouldn't complete" - }; # if + } send "$cmd\t" expect -ex "$cmd" @@ -451,8 +570,8 @@ proc assert_no_complete {{cmd} {test ""}} { -re "^$endguard$" { pass "$test" } default { fail "$test" } timeout { fail "$test" } - }; # expect -}; # assert_no_complete() + } +} # Check that no output is generated on a certain command. @@ -483,7 +602,7 @@ proc assert_no_output {{cmd} {test ""} {prompt /@}} { proc assert_source_completions {command {file ""}} { if {[is_bash_completion_installed_for $command]} { if {[string length $file] == 0} { - set file "lib/completions/$command.exp" + set file "$::srcdir/lib/completions/$command.exp" } source $file } else { @@ -510,23 +629,23 @@ proc get_known_hosts {{cword ''}} { assert_bash_exec "_known_hosts_real '$cword'; echo_array COMPREPLY" \ {} /@ result return $result -}; # get_known_hosts() +} # Get hostnames # @return list Hostnames # @see get_known_hosts() proc get_hosts {} { - set hosts [exec bash -c "compgen -A hostname"] + set hosts [exec bash -c "compgen -A hostname | sort -u"] # NOTE: Circumventing var `avahi_hosts' and appending directly to `hosts' # causes an empty element to be inserted in `hosts'. # -- FVu, Fri Jul 17 23:11:46 CEST 2009 set avahi_hosts [get_hosts_avahi] if {[llength $avahi_hosts] > 0} { lappend hosts $avahi_hosts - }; # if + } return $hosts -}; # get_hosts() +} # Get hostnames according to avahi @@ -540,9 +659,9 @@ proc get_hosts_avahi {} { # No, retrieving hosts yields error; # Reset hosts set hosts {} - }; # if + } return $hosts -}; # get_hosts_avahi() +} # Get signals @@ -558,21 +677,22 @@ proc get_signals {} { set signal [string range $signal 3 end] # Add signal (with dash (-) prefix) to list lappend signals -$signal - }; # if - }; # foreach + } + } return $signals -}; # get_signals() +} # Initialize tcl globals with bash variables proc init_tcl_bash_globals {} { - global BASH_VERSINFO BASH_VERSION COMP_WORDBREAKS + global BASH_VERSINFO BASH_VERSION COMP_WORDBREAKS LC_CTYPE assert_bash_exec {printf "%s" "$COMP_WORDBREAKS"} {} /@ COMP_WORDBREAKS assert_bash_exec {printf "%s " "${BASH_VERSINFO[@]}"} "" /@ BASH_VERSINFO set BASH_VERSINFO [eval list $BASH_VERSINFO] assert_bash_exec {printf "%s" "$BASH_VERSION"} "" /@ BASH_VERSION assert_bash_exec {printf "%s" "$TESTDIR"} "" /@ TESTDIR -}; # init_tcl_bash_globals() + assert_bash_exec {eval $(locale); printf "%s" "$LC_CTYPE"} "" /@ LC_CTYPE +} # Check whether completion is installed for the specified command by executing @@ -590,22 +710,44 @@ proc is_bash_completion_installed_for {command} { } expect "/@" return $result -}; # is_bash_completion_installed_for() +} # Detect if test suite is running under Cygwin/Windows proc is_cygwin {} { expr {[string first [string tolower [exec uname -s]] cygwin] >= 0} -}; # is_cygwin() +} -# Expect items. +# Expect items, a limited number (20) at a time. # Break items into chunks because `expect' seems to have a limited buffer size -# @param list $items -# @param integer $size Chunk size +# @param list $items Expected list items +# @param list $args Options: +# -bash-sort Compare list bash-sorted. Default is +# unsorted +# -prompt PROMPT Bash prompt. Default is `/@' +# -chunk-size CHUNK-SIZE Compare list CHUNK-SIZE items at +# a time. Default is 20. +# -end-newline Expect newline after last item. +# Default is not. +# -end-prompt Expect prompt after last item. +# Default is not. +# -end-space Expect single space after last item. +# Default is not. Valid only if +# `end-newline' not set. # @result boolean True if successful, False if not -proc match_items {items test {prompt /@} {size 20}} { - set items [bash_sort $items] +proc match_items {items {args {}}} { + array set arg [::cmdline::getoptions args { + {bash-sort "compare list sorted"} + {prompt.arg "/@" "bash prompt"} + {chunk-size.arg 20 "compare N list items at a time"} + {end-newline "expect newline after last item"} + {end-prompt "expect prompt after last item"} + {end-space "expect space ater last item"} + }] + set prompt $arg(prompt) + set size $arg(chunk-size) + if {$arg(bash-sort)} {set items [bash_sort $items]} set result false for {set i 0} {$i < [llength $items]} {set i [expr {$i + $size}]} { # For chunks > 1, allow leading whitespace @@ -614,28 +756,43 @@ proc match_items {items test {prompt /@} {size 20}} { set item "[lindex $items [expr {$i + $j}]]" _escape_regexp_chars item append expected $item - if {[llength $items] > 1} {append expected {\s+}}; - }; # for + if {[llength $items] > 1} {append expected {\s+}} + } if {[llength $items] == 1} { + if {$arg(end-prompt)} {set end $prompt} {set end ""} + # Both trailing space and newline are specified? + if {$arg(end-newline) && $arg(end-space)} { + # Indicate both trailing space or newline are ok + set expected2 "|^$expected $end$"; # Include space + append expected "\r\n$end"; # Include newline + } else { + if {$arg(end-newline)} {append expected "\r\n$end"} + if {$arg(end-space)} {append expected " $end"} + set expected2 "" + } expect { - -re "^$expected\r\n$" { set result true } - # NOTE: The optional space ( ?) depends on whether -o nospace is active - -re "^$expected ?$" { set result true } + -re "^$expected$$expected2" { set result true } -re "^$prompt$" {set result false; break } - "\r\n" { set result false; break } default { set result false; break } timeout { set result false; break } - }; # expect + } } else { + set end "" + if {$arg(end-prompt) && $i + $j == [llength $items]} { + set end "$prompt" + _escape_regexp_chars end + # \$ matches real end of expect_out buffer + set end "$end\$" + } expect { - -re "^$expected" { set result true } + -re "^$expected$end" { set result true } default { set result false; break } timeout { set result false; break } - }; # expect - }; # if - }; # for + } + } + } return $result -}; # match_items() +} @@ -651,10 +808,10 @@ proc realcommand {cmd} { set result [exec readlink -f $path] } else { set result $path - }; # if - }; # if + } + } return $result -}; # realcommand() +} # Generate filename to save environment to. @@ -674,10 +831,10 @@ proc gen_env_filename {{file ""} {seq 1}} { # Remove possible '.exp' suffix from filename if {[string last ".exp" $file] == [string length $file] - [string length ".exp"]} { set file [string range $file 0 [expr [string last ".exp" $file] - 1]] - }; # if - }; # if + } + } return "\$TESTDIR/tmp/$file.env$seq~" -}; # gen_env_filename() +} # Save the environment for later comparison @@ -685,7 +842,7 @@ proc gen_env_filename {{file ""} {seq 1}} { # `gen_env_filename()'. proc save_env {{file ""}} { _save_env [gen_env_filename $file 1] -}; # save_env() +} # Save the environment for later comparison @@ -693,16 +850,16 @@ proc save_env {{file ""}} { # @see assert_env_unmodified() proc _save_env {{file ""}} { assert_bash_exec "{ set; declare -F; shopt -p; } > \"$file\"" -}; # _save_env() +} # Source bash_completion package proc source_bash_completion {} { - assert_bash_exec {BASH_COMPLETION_DIR=$(cd "$TESTDIR/.."; pwd)/contrib} + assert_bash_exec {BASH_COMPLETION_DIR=$(cd "$SRCDIR/.."; pwd)/completions} assert_bash_exec {BASH_COMPLETION_COMPAT_DIR=$BASH_COMPLETION_DIR} - assert_bash_exec {BASH_COMPLETION=$(cd "$TESTDIR/.."; pwd)/bash_completion} + assert_bash_exec {BASH_COMPLETION=$(cd "$SRCDIR/.."; pwd)/bash_completion} assert_bash_exec {source "$BASH_COMPLETION"} -}; # source_bash_completion() +} # Split line into words, disregarding backslash escapes (e.g. \b (backspace), @@ -727,7 +884,7 @@ proc split_words_bash {line} { set part [string range $part 0 [expr [string length $part] - [string length "\\"] - 1]] # Indicate glue on next run set glue_next true - }; # if + } # Must `part' be appended to latest word (= glue)? if {[llength $words] > 0 && [string is true $glue]} { # Yes, join `part' to latest word; @@ -738,11 +895,11 @@ proc split_words_bash {line} { # No, don't append word to latest word; # Append `part' as separate word lappend words $part - }; # if + } set glue $glue_next - }; # foreach + } return $words -}; # split_words_bash() +} # Given a list of items this proc finds a (part, full) pair so that when @@ -814,19 +971,22 @@ proc find_unique_completion_pair {{list} {partName} {fullName}} { # Start bash running as test environment. proc start_bash {} { - global TESTDIR TOOL_EXECUTABLE spawn_id + global TESTDIR TOOL_EXECUTABLE spawn_id env srcdirabs set TESTDIR [pwd] + set srcdirabs [file normalize $::srcdir]; # Absolute srcdir # If `--tool_exec' option not specified, use "bash" if {! [info exists TOOL_EXECUTABLE]} {set TOOL_EXECUTABLE bash} - exp_spawn $TOOL_EXECUTABLE --rcfile config/bashrc - assert_bash_exec {} "$TOOL_EXECUTABLE --rcfile config/bashrc" + set env(SRCDIR) $::srcdir + set env(SRCDIRABS) $::srcdirabs + exp_spawn $TOOL_EXECUTABLE --rcfile $::srcdir/config/bashrc + assert_bash_exec {} "$TOOL_EXECUTABLE --rcfile $::srcdir/config/bashrc" # Bash < 3.2.41 has a bug where 'history' disappears from SHELLOPTS # whenever a shopt setting is sourced or eval'ed. Disabling 'history' # makes it not show in tests "Environment should not be modified" # for bash < 3.2.41. # -- FVu, Tue Sep 15 22:52:00 CEST 2009 assert_bash_exec {is_bash_version_minimal 3 2 41 || set +o history} -}; # start_bash() +} # Redirect xtrace output to a file. @@ -896,7 +1056,7 @@ proc sync_after_tab {} { # installed, so that "^$cdm.*$" doesn't match too early - before # comp_install has finished sleep .4 -}; # sync_after_tab() +} # Return current working directory with `TESTDIR' stripped @@ -905,4 +1065,4 @@ proc wd {} { global TESTDIR # Remove `$TESTDIR' prefix from current working directory set wd [string replace [pwd] 0 [expr [string length $TESTDIR] - 1]]/ -}; # wd() +} diff --git a/test/lib/unit.exp b/test/lib/unit.exp index de870332..e113e1b5 100644 --- a/test/lib/unit.exp +++ b/test/lib/unit.exp @@ -1,4 +1,4 @@ -source lib/library.exp +source $::srcdir/lib/library.exp proc unit_exit {} { @@ -7,6 +7,14 @@ proc unit_exit {} { } +proc unit_init {test_file_name} { + # Call unit_start() only once + if {! [info exists ::BASH_VERSINFO]} { + unit_start + } +} + + proc unit_start {} { start_interactive_test } diff --git a/test/unit/__expand_tilde_by_ref.exp b/test/unit/__expand_tilde_by_ref.exp index d4a75d11..abd549cb 100644 --- a/test/unit/__expand_tilde_by_ref.exp +++ b/test/unit/__expand_tilde_by_ref.exp @@ -8,14 +8,14 @@ proc setup {home user} { set _home [string trim $_home] assert_bash_exec {echo "$USER"} {} /@ _user set _user [string trim $_user] -}; # setup() +} proc teardown {} { assert_env_unmodified { /var=/d } -}; # teardown() +} setup home user @@ -37,7 +37,7 @@ sync_after_int set test "~user should return /home/user" -set cmd [format {var="~%s"; __expand_tilde_by_ref var; printf "%%s" "$var"} $user] +set cmd [format {var="~%s"; __expand_tilde_by_ref var; printf "%%s\n" "$var"} $user] assert_bash_list "$home" $cmd $test @@ -45,7 +45,7 @@ sync_after_int set test "~/foo should return /home/user/foo" -set cmd {var='~/foo'; __expand_tilde_by_ref var; printf "%s" "$var"} +set cmd {var='~/foo'; __expand_tilde_by_ref var; printf "%s\n" "$var"} assert_bash_list "$home/foo" $cmd $test @@ -53,7 +53,7 @@ sync_after_int set test "~user/bar should return /home/user/bar" -set cmd [format {var="~%s/bar"; __expand_tilde_by_ref var; printf "%%s" "$var"} $user] +set cmd [format {var="~%s/bar"; __expand_tilde_by_ref var; printf "%%s\n" "$var"} $user] assert_bash_list "$home/bar" $cmd $test @@ -61,7 +61,7 @@ sync_after_int set test "~user/\$HOME should return /home/user/\$HOME" -set cmd [format {var="~%s/\$HOME"; __expand_tilde_by_ref var; printf "%%s" "$var"} $user] +set cmd [format {var="~%s/\$HOME"; __expand_tilde_by_ref var; printf "%%s\n" "$var"} $user] assert_bash_list "$home/\$HOME" $cmd $test @@ -69,7 +69,7 @@ sync_after_int set test "'~user/a b' should return '/home/user/a b'" -set cmd [format {var="~%s/a b"; __expand_tilde_by_ref var; printf "%%s" "$var"} $user] +set cmd [format {var="~%s/a b"; __expand_tilde_by_ref var; printf "%%s\n" "$var"} $user] assert_bash_list [list [format {%s/a b} $home]] $cmd $test @@ -77,7 +77,7 @@ sync_after_int set test "~user/* should return /home/user/*" -set cmd [format {var="~%s/*"; __expand_tilde_by_ref var; printf "%%s" "$var"} $user] +set cmd [format {var="~%s/*"; __expand_tilde_by_ref var; printf "%%s\n" "$var"} $user] assert_bash_list "$home/\*" $cmd $test diff --git a/test/unit/_count_args.exp b/test/unit/_count_args.exp index da61bdb6..b615cab8 100644 --- a/test/unit/_count_args.exp +++ b/test/unit/_count_args.exp @@ -1,7 +1,7 @@ proc setup {} { assert_bash_exec {unset COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS} save_env -}; # setup() +} proc teardown {} { @@ -12,7 +12,7 @@ proc teardown {} { d } } -}; # teardown() +} setup @@ -26,7 +26,7 @@ sync_after_int set test "a b| should set args to 1"; # | = cursor position -set cmd {COMP_WORDS=(a b); COMP_CWORD=1; COMP_LINE='a b'; COMP_POINT=3; _count_args; echo -n $args} +set cmd {COMP_WORDS=(a b); COMP_CWORD=1; COMP_LINE='a b'; COMP_POINT=3; _count_args; echo $args} assert_bash_list 1 $cmd $test @@ -34,7 +34,7 @@ sync_after_int set test "a b|c should set args to 1"; # | = cursor position -set cmd {COMP_WORDS=(a bc); COMP_CWORD=1; COMP_LINE='a bc'; COMP_POINT=3; _count_args; echo -n $args} +set cmd {COMP_WORDS=(a bc); COMP_CWORD=1; COMP_LINE='a bc'; COMP_POINT=3; _count_args; echo $args} assert_bash_list 1 $cmd $test @@ -42,7 +42,7 @@ sync_after_int set test "a b c| should set args to 2"; # | = cursor position -set cmd {COMP_WORDS=(a b c); COMP_CWORD=2; COMP_LINE='a b c'; COMP_POINT=4; _count_args; echo -n $args} +set cmd {COMP_WORDS=(a b c); COMP_CWORD=2; COMP_LINE='a b c'; COMP_POINT=4; _count_args; echo $args} assert_bash_list 2 $cmd $test @@ -50,7 +50,7 @@ sync_after_int set test "a b| c should set args to 1"; # | = cursor position -set cmd {COMP_WORDS=(a b c); COMP_CWORD=1; COMP_LINE='a b c'; COMP_POINT=3; _count_args; echo -n $args} +set cmd {COMP_WORDS=(a b c); COMP_CWORD=1; COMP_LINE='a b c'; COMP_POINT=3; _count_args; echo $args} assert_bash_list 1 $cmd $test @@ -58,7 +58,7 @@ sync_after_int set test "a b -c| d should set args to 2"; # | = cursor position -set cmd {COMP_WORDS=(a b -c d); COMP_CWORD=2; COMP_LINE='a b -c d'; COMP_POINT=6; _count_args; echo -n $args} +set cmd {COMP_WORDS=(a b -c d); COMP_CWORD=2; COMP_LINE='a b -c d'; COMP_POINT=6; _count_args; echo $args} assert_bash_list 2 $cmd $test diff --git a/test/unit/_filedir.exp b/test/unit/_filedir.exp index 204d31cf..de494084 100644 --- a/test/unit/_filedir.exp +++ b/test/unit/_filedir.exp @@ -20,17 +20,17 @@ proc setup {} { # directories containing `*' or `\' aren't allowed on Cygwin/Windows if {! [is_cygwin]} { # Create directory `a*b' - assert_bash_exec {(cd fixtures/_filedir && [ ! -d a\*b ] && mkdir a\*b && touch a\*b/j || true)} + assert_bash_exec {(cd $TESTDIR/tmp && [ ! -d a\*b ] && mkdir a\*b && touch a\*b/j || true)} # Create directory `a\b' - assert_bash_exec {(cd fixtures/_filedir && [ ! -d a\\b ] && mkdir a\\b && touch a\\b/g || true)} + assert_bash_exec {(cd $TESTDIR/tmp && [ ! -d a\\b ] && mkdir a\\b && touch a\\b/g || true)} } } proc teardown {} { if {! [is_cygwin]} { - assert_bash_exec {(cd fixtures/_filedir && rm -- a\\b/g && rmdir a\\b/ || true)} - assert_bash_exec {(cd fixtures/_filedir && rm -- a\*b/j && rmdir a\*b/ || true)} + assert_bash_exec {(cd $TESTDIR/tmp && rm -- a\\b/g && rmdir a\\b/ || true)} + assert_bash_exec {(cd $TESTDIR/tmp && rm -- a\*b/j && rmdir a\*b/ || true)} } assert_bash_exec {unset COMPREPLY cur} assert_bash_exec {unset -f _f _g} @@ -56,7 +56,7 @@ foreach name {f f2} { set test "completing $name ab/ should return e" set cmd "$name ab/" - assert_complete_dir e $cmd "fixtures/_filedir" $test + assert_complete_dir e $cmd "$::srcdir/fixtures/_filedir" $test sync_after_int @@ -64,7 +64,7 @@ foreach name {f f2} { set test "completing $name a\\ b/ should return i" set cmd "$name a\\ b/" - assert_complete_dir i $cmd "fixtures/_filedir" $test + assert_complete_dir i $cmd "$::srcdir/fixtures/_filedir" $test sync_after_int @@ -72,7 +72,7 @@ foreach name {f f2} { set test "completing $name a\\\'b/ should return c" set cmd "$name a\\\'b/" - assert_complete_dir c $cmd "fixtures/_filedir" $test + assert_complete_dir c $cmd "$::srcdir/fixtures/_filedir" $test sync_after_int @@ -80,7 +80,7 @@ foreach name {f f2} { set test "completing $name a\\\"b/ should return d"; #" set cmd "$name a\\\"b/"; #" - assert_complete_dir d $cmd "fixtures/_filedir" $test + assert_complete_dir d $cmd "$::srcdir/fixtures/_filedir" $test sync_after_int @@ -88,8 +88,8 @@ foreach name {f f2} { set test "completing $name a\\\$b/ should return h" set cmd "$name a\\\$b/" - assert_complete_dir "\b\b\b\b\b$::TESTDIR/fixtures/_filedir/a\\\\\$b/h" \ - $cmd "fixtures/_filedir" $test + assert_complete_dir "\b\b\b\b\b$::srcdirabs/fixtures/_filedir/a\\\\\$b/h" \ + $cmd "$::srcdir/fixtures/_filedir" $test sync_after_int @@ -101,7 +101,7 @@ foreach name {f f2} { if {! [is_cygwin]} { set test "completing $name a\\\\b/ should return g" set cmd "$name a\\\\b/" - assert_complete_dir g $cmd "fixtures/_filedir" $test + assert_complete_dir g $cmd "$TESTDIR/tmp" $test sync_after_int @@ -110,7 +110,7 @@ foreach name {f f2} { set test "completing $name a\\&b/ should return f" set cmd "$name a\\&b/" - assert_complete_dir f $cmd "fixtures/_filedir" $test + assert_complete_dir f $cmd "$::srcdir/fixtures/_filedir" $test sync_after_int @@ -118,7 +118,7 @@ foreach name {f f2} { set test "completing $name a\$ should return a\\\$b/" set cmd "$name a\$" - assert_complete_dir "\b\\\\\$b/" $cmd "fixtures/_filedir" $test + assert_complete_dir "\b\\\\\$b/" $cmd "$::srcdir/fixtures/_filedir" $test -nospace sync_after_int @@ -132,21 +132,21 @@ foreach name {f f2} { [lindex $::BASH_VERSINFO 2] < 35 )} { set cmd "$name 'ab/" - assert_complete_dir {e'} $cmd "fixtures/_filedir" + assert_complete_dir {e'} $cmd "$::srcdir/fixtures/_filedir" sync_after_int set cmd "$name 'a b/" - assert_complete_dir {i'} $cmd "fixtures/_filedir" + assert_complete_dir {i'} $cmd "$::srcdir/fixtures/_filedir" sync_after_int set cmd "$name 'a\"b/"; #" - assert_complete_dir {d'} $cmd "fixtures/_filedir" + assert_complete_dir {d'} $cmd "$::srcdir/fixtures/_filedir" sync_after_int @@ -154,9 +154,9 @@ foreach name {f f2} { set cmd "$name 'a\$b/" if {[lindex $::BASH_VERSINFO 0] == 4} { - assert_complete_dir {h'} $cmd "fixtures/_filedir" + assert_complete_dir {h'} $cmd "$::srcdir/fixtures/_filedir" } else { - assert_complete_dir "\b\b\b\b$::TESTDIR/fixtures/_filedir/a\$b/h'" $cmd "fixtures/_filedir" + assert_complete_dir "\b\b\b\b$::srcdirabs/fixtures/_filedir/a\$b/h'" $cmd "$::srcdir/fixtures/_filedir" } @@ -166,8 +166,8 @@ foreach name {f f2} { # Execute these tests only when not running on Cygwin/Windows, because # directories containing `*' or `\' aren't allowed on Cygwin/Windows if {! [is_cygwin]} { - set cmd "$name 'a\\b/" - assert_complete_dir {g'} $cmd "fixtures/_filedir" + set cmd "$name '$TESTDIR/tmp/a\\b/" + assert_complete_dir {g'} $cmd "$TESTDIR/tmp" sync_after_int @@ -175,63 +175,63 @@ foreach name {f f2} { set cmd "$name 'a&b/" - assert_complete_dir {f'} $cmd "fixtures/_filedir" + assert_complete_dir {f'} $cmd "$::srcdir/fixtures/_filedir" sync_after_int set cmd "$name \"ab/"; #" - assert_complete_dir {e"} $cmd "fixtures/_filedir"; #" + assert_complete_dir {e"} $cmd "$::srcdir/fixtures/_filedir"; #" sync_after_int set cmd "$name \"a b/"; #" - assert_complete_dir {i"} $cmd "fixtures/_filedir"; #" + assert_complete_dir {i"} $cmd "$::srcdir/fixtures/_filedir"; #" sync_after_int set cmd "$name \"a'b/"; #" - assert_complete_dir {c"} $cmd "fixtures/_filedir"; #" + assert_complete_dir {c"} $cmd "$::srcdir/fixtures/_filedir"; #" sync_after_int set cmd "$name \"a\\\"b/"; #" - assert_complete_dir {d"} $cmd "fixtures/_filedir"; #" + assert_complete_dir {d"} $cmd "$::srcdir/fixtures/_filedir"; #" sync_after_int set cmd "$name \"a\\\$b/"; #" - assert_complete_dir "\b\b\b\b\b$::TESTDIR/fixtures/_filedir/a\\\\\$b/h\\\"" $cmd "fixtures/_filedir" + assert_complete_dir "\b\b\b\b\b$::srcdirabs/fixtures/_filedir/a\\\\\$b/h\\\"" $cmd "$::srcdir/fixtures/_filedir" sync_after_int set cmd "$name \"a\\b/"; #" - assert_complete_dir "\b\b\bb/e\\\"" $cmd "fixtures/_filedir" + assert_complete_dir "\b\b\bb/e\\\"" $cmd "$::srcdir/fixtures/_filedir" sync_after_int set cmd "$name \"a\\\\b/"; #" - assert_complete_dir {g"} $cmd "fixtures/_filedir"; #" + assert_complete_dir {g"} $cmd "$TESTDIR/tmp"; #" sync_after_int set cmd "$name \"a&b/"; #" - assert_complete_dir {f"} $cmd "fixtures/_filedir"; #" + assert_complete_dir {f"} $cmd "$::srcdir/fixtures/_filedir"; #" sync_after_int @@ -242,23 +242,27 @@ foreach name {f f2} { set test "completing with filter '.e1' should show completions" -assert_complete_dir {ee.e1 foo/ gg.e1} "g " "fixtures/_filedir/ext" $test +assert_complete_dir {ee.e1 foo/ gg.e1 ii.E1} "g " "$::srcdir/fixtures/_filedir/ext" $test sync_after_int -set test "completing f aé should return g when LC_CTYPE=C" -# Backup/set LC_CTYPE -assert_bash_exec {OLD_CTYPE=$LC_CTYPE; LC_CTYPE=C} -if {[lindex $::BASH_VERSINFO 0] > 3} { - assert_complete_dir g "f aé/" "fixtures/_filedir" +set test "completing f aé should return g" +# Execute this test only on bash >= 4 with LC_CTYPE matching *UTF-8* +# See also: http://www.mail-archive.com/bash-completion-devel\ +# @lists.alioth.debian.org/msg02265.html +# Don't execute this test on expect-5.44 cause it will segfault +# See also: Alioth #312792 +if { + [lindex $::BASH_VERSINFO 0] >= 4 && + [string first "UTF-8" $::LC_CTYPE] != -1 && + [string first 5.44 [exp_version]] != 0 +} { + assert_complete_dir g "f aé/" "$::srcdir/fixtures/_filedir" } else { - assert_complete_dir "\b\b\b\b$'a\\\\303\\\\251/g'" "f aé/" \ - "fixtures/_filedir" + unsupported "$test" } -# Restore LC_CTYPE -assert_bash_exec {[[ $OLD_CTYPE ]] && LC_CTYPE=$OLD_CTYPE || unset LC_CTYPE} sync_after_int diff --git a/test/unit/_get_comp_words_by_ref.exp b/test/unit/_get_comp_words_by_ref.exp index 22561e7f..2ddcef23 100644 --- a/test/unit/_get_comp_words_by_ref.exp +++ b/test/unit/_get_comp_words_by_ref.exp @@ -1,7 +1,7 @@ proc setup {} { assert_bash_exec {unset COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS} save_env -}; # setup() +} proc teardown {} { @@ -15,7 +15,7 @@ proc teardown {} { d } } -}; # teardown() +} setup @@ -105,7 +105,7 @@ if { set cmd {COMP_WORDS=(a "'" b c); COMP_CWORD=3} } else { set cmd {COMP_WORDS=(a "'b c"); COMP_CWORD=1} -}; # if +} append cmd {; COMP_LINE="a 'b c"; COMP_POINT=6; _get_comp_words_by_ref cur prev; echo "$cur $prev"} send "$cmd\r" expect -ex "$cmd\r\n" @@ -118,7 +118,7 @@ expect { [lindex $::BASH_VERSINFO 2] < 35 } {xfail "$test"} {fail "$test"} } -}; # expect +} sync_after_int @@ -133,7 +133,7 @@ if { set cmd {COMP_WORDS=(a "\"" b c); COMP_CWORD=3} } else { set cmd {COMP_WORDS=(a "\"b c"); COMP_CWORD=1} -}; # if +} append cmd {; COMP_LINE="a \"b c"; COMP_POINT=6} assert_bash_exec $cmd set cmd {_get_comp_words_by_ref cur prev; echo "$cur $prev"}; @@ -148,7 +148,7 @@ expect { [lindex $::BASH_VERSINFO 2] < 35 } {xfail "$test"} {fail "$test"} } -}; # expect +} sync_after_int @@ -161,7 +161,7 @@ if {[lindex $::BASH_VERSINFO 0] <= 3} { } else { set cmd {add_comp_wordbreak_char :; COMP_WORDS=(a b : c); COMP_CWORD=3} set expected {"c :"} -}; # if +} append cmd {; COMP_LINE='a b:c'; COMP_POINT=5} # NOTE: Split-send cmd to prevent backspaces (\008) in output assert_bash_exec $cmd $test @@ -177,7 +177,7 @@ if {[lindex $::BASH_VERSINFO 0] <= 3} { set cmd {COMP_WORDS=(a "b:c"); COMP_CWORD=1} } else { set cmd {COMP_WORDS=(a b : c); COMP_CWORD=3} -}; # if +} append cmd {; COMP_LINE='a b:c'; COMP_POINT=5} assert_bash_exec $cmd $test set cmd {_get_comp_words_by_ref -n : cur prev; echo "$cur $prev"} @@ -192,7 +192,7 @@ if {[lindex $::BASH_VERSINFO 0] <= 3} { set cmd {COMP_WORDS=(a b c:); COMP_CWORD=2} } else { set cmd {COMP_WORDS=(a b c :); COMP_CWORD=3} -}; # if +} append cmd {; COMP_LINE='a b c:'; COMP_POINT=6} assert_bash_exec $cmd $test set cmd {_get_comp_words_by_ref -n : cur prev; echo "$cur $prev"} @@ -202,6 +202,21 @@ assert_bash_list {"c: b"} $cmd $test sync_after_int +set test {a b:c | with WORDBREAKS -= :}; # | = cursor position +if {[lindex $::BASH_VERSINFO 0] <= 3} { + set cmd {COMP_WORDS=(a b:c ''); COMP_CWORD=2} +} else { + set cmd {COMP_WORDS=(a b : c ''); COMP_CWORD=4} +} +append cmd {; COMP_LINE='a b:c '; COMP_POINT=6} +assert_bash_exec $cmd $test +set cmd {_get_comp_words_by_ref -n : cur prev; echo "$cur $prev"} +assert_bash_list {" b:c"} $cmd $test + + +sync_after_int + + set test {a :| with WORDBREAKS -= : should return :}; # | = cursor position set cmd {COMP_WORDS=(a :); COMP_CWORD=1; COMP_LINE='a :'; COMP_POINT=3} assert_bash_exec $cmd @@ -217,7 +232,7 @@ if {[lindex $::BASH_VERSINFO 0] <= 3} { set cmd {COMP_WORDS=(a "b::"); COMP_CWORD=1} } else { set cmd {COMP_WORDS=(a b ::); COMP_CWORD=2} -}; # if +} append cmd {; COMP_LINE='a b::'; COMP_POINT=5} assert_bash_exec $cmd set cmd {_get_comp_words_by_ref -n : cur prev; echo "$cur $prev"} @@ -232,7 +247,7 @@ sync_after_int set test "a -n| should return -n"; # | = cursor position set cmd {COMP_WORDS=(a -n); COMP_CWORD=1; COMP_LINE='a -n'; COMP_POINT=4} assert_bash_exec $cmd -set cmd {_get_comp_words_by_ref cur; printf %s $cur} +set cmd {_get_comp_words_by_ref cur; printf "%s\n" $cur} assert_bash_list -n $cmd $test @@ -256,7 +271,7 @@ if {[lindex $::BASH_VERSINFO] <= 3} { } else { set cmd {COMP_WORDS=(a b = c); COMP_CWORD=3} set expected c -}; # if +} append cmd {; COMP_LINE='a b=c'; COMP_POINT=5} assert_bash_exec $cmd set cmd {_get_comp_words_by_ref cur prev; echo "$cur"} @@ -286,7 +301,7 @@ expect { -ex "\$(b c/@" { pass "$test" } # Expected failure on bash-4 -ex "c/@" { xfail "$test" } -}; # expect +} sync_after_int @@ -303,7 +318,7 @@ expect { -ex "\$(b c\\ d/@" { pass "$test" } # Expected failure on bash-4 -ex "c\\ d/@" { xfail "$test" } -}; # expect +} sync_after_int @@ -318,7 +333,7 @@ if { set cmd {COMP_WORDS=(a "'" b "&" c); COMP_CWORD=4} } else { set cmd {COMP_WORDS=(a "'b&c"); COMP_CWORD=1} -}; # if +} append cmd {; COMP_LINE="a 'b&c"; COMP_POINT=6} assert_bash_exec $cmd set cmd {_get_comp_words_by_ref cur prev; printf %s "$cur"} @@ -333,7 +348,7 @@ expect { [lindex $::BASH_VERSINFO 2] < 35 } {xfail "$test"} {fail "$test"} } -}; # expect +} sync_after_int diff --git a/test/unit/_get_cword.exp b/test/unit/_get_cword.exp index 1e6e9bfb..ce749cec 100644 --- a/test/unit/_get_cword.exp +++ b/test/unit/_get_cword.exp @@ -1,7 +1,7 @@ proc setup {} { assert_bash_exec {unset COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS} save_env -}; # setup() +} proc teardown {} { @@ -12,7 +12,7 @@ proc teardown {} { d } } -}; # teardown() +} setup @@ -30,7 +30,7 @@ sync_after_int set test "a b| should return b"; # | = cursor position -set cmd {COMP_WORDS=(a b); COMP_CWORD=1; COMP_LINE='a b'; COMP_POINT=3; _get_cword} +set cmd {COMP_WORDS=(a b); COMP_CWORD=1; COMP_LINE='a b'; COMP_POINT=3; _get_cword; echo} assert_bash_list b $cmd $test @@ -65,7 +65,7 @@ sync_after_int set test "a b|c should return b"; # | = cursor position -set cmd {COMP_WORDS=(a bc); COMP_CWORD=1; COMP_LINE='a bc'; COMP_POINT=3; _get_cword} +set cmd {COMP_WORDS=(a bc); COMP_CWORD=1; COMP_LINE='a bc'; COMP_POINT=3; _get_cword; echo} assert_bash_list b $cmd $test @@ -73,7 +73,7 @@ sync_after_int set test {a b\ c| should return b\ c}; # | = cursor position -set cmd {COMP_WORDS=(a 'b\ c'); COMP_CWORD=1; COMP_LINE='a b\ c'; COMP_POINT=6; _get_cword} +set cmd {COMP_WORDS=(a 'b\ c'); COMP_CWORD=1; COMP_LINE='a b\ c'; COMP_POINT=6; _get_cword; echo} assert_bash_list {"b\\ c"} $cmd $test @@ -81,7 +81,7 @@ sync_after_int set test {a b\| c should return b\ }; # | = cursor position -set cmd {COMP_WORDS=(a 'b\ c'); COMP_CWORD=1; COMP_LINE='a b\ c'; COMP_POINT=4; _get_cword} +set cmd {COMP_WORDS=(a 'b\ c'); COMP_CWORD=1; COMP_LINE='a b\ c'; COMP_POINT=4; _get_cword; echo} assert_bash_list {"b\\"} $cmd $test @@ -89,7 +89,7 @@ sync_after_int set test {a "b\| should return "b\ }; # | = cursor position -set cmd {COMP_WORDS=(a '"b\'); COMP_CWORD=1; COMP_LINE='a "b\'; COMP_POINT=5; _get_cword} +set cmd {COMP_WORDS=(a '"b\'); COMP_CWORD=1; COMP_LINE='a "b\'; COMP_POINT=5; _get_cword; echo} assert_bash_list {"\"b\\"} $cmd $test @@ -105,7 +105,7 @@ if { set cmd {COMP_WORDS=(a "'" b c); COMP_CWORD=3} } else { set cmd {COMP_WORDS=(a "'b c"); COMP_CWORD=1} -}; # if +} append cmd {; COMP_LINE="a 'b c"; COMP_POINT=6; _get_cword} send "$cmd\r" expect -ex "$cmd\r\n" @@ -118,7 +118,7 @@ expect { [lindex $::BASH_VERSINFO 2] < 35 } {xfail "$test"} {fail "$test"} } -}; # expect +} sync_after_int @@ -133,7 +133,7 @@ if { set cmd {COMP_WORDS=(a "\"" b c); COMP_CWORD=3} } else { set cmd {COMP_WORDS=(a "\"b c"); COMP_CWORD=1} -}; # if +} append cmd {; COMP_LINE="a \"b c"; COMP_POINT=6; _get_cword}; send "$cmd\r" expect -ex "$cmd\r\n" @@ -146,7 +146,7 @@ expect { [lindex $::BASH_VERSINFO 2] < 35 } {xfail "$test"} {fail "$test"} } -}; # expect +} sync_after_int @@ -159,8 +159,8 @@ if {[lindex $::BASH_VERSINFO 0] <= 3} { } else { set cmd {add_comp_wordbreak_char :; COMP_WORDS=(a b : c); COMP_CWORD=3} set expected c -}; # if -append cmd {; COMP_LINE='a b:c'; COMP_POINT=5; _get_cword} +} +append cmd {; COMP_LINE='a b:c'; COMP_POINT=5; _get_cword; echo} assert_bash_list $expected $cmd $test @@ -172,8 +172,8 @@ if {[lindex $::BASH_VERSINFO 0] <= 3} { set cmd {COMP_WORDS=(a "b:c"); COMP_CWORD=1} } else { set cmd {COMP_WORDS=(a b : c); COMP_CWORD=3} -}; # if -append cmd {; COMP_LINE='a b:c'; COMP_POINT=5; _get_cword :} +} +append cmd {; COMP_LINE='a b:c'; COMP_POINT=5; _get_cword :; echo} assert_bash_list b:c $cmd $test @@ -185,8 +185,8 @@ if {[lindex $::BASH_VERSINFO 0] <= 3} { set cmd {COMP_WORDS=(a b c:); COMP_CWORD=2} } else { set cmd {COMP_WORDS=(a b c :); COMP_CWORD=3} -}; # if -append cmd {; COMP_LINE='a b c:'; COMP_POINT=6; _get_cword :} +} +append cmd {; COMP_LINE='a b c:'; COMP_POINT=6; _get_cword :; echo} assert_bash_list c: $cmd $test @@ -194,7 +194,7 @@ sync_after_int set test {a :| with WORDBREAKS -= : should return :}; # | = cursor position -set cmd {COMP_WORDS=(a :); COMP_CWORD=1; COMP_LINE='a :'; COMP_POINT=3; _get_cword :} +set cmd {COMP_WORDS=(a :); COMP_CWORD=1; COMP_LINE='a :'; COMP_POINT=3; _get_cword :; echo} assert_bash_list : $cmd $test @@ -206,8 +206,8 @@ if {[lindex $::BASH_VERSINFO 0] <= 3} { set cmd {COMP_WORDS=(a "b::"); COMP_CWORD=1} } else { set cmd {COMP_WORDS=(a b ::); COMP_CWORD=2} -}; # if -append cmd {; COMP_LINE='a b::'; COMP_POINT=5; _get_cword :} +} +append cmd {; COMP_LINE='a b::'; COMP_POINT=5; _get_cword :; echo} assert_bash_list b:: $cmd $test @@ -217,7 +217,7 @@ sync_after_int # This test makes sure `_get_cword' doesn't use `echo' to return it's value, # because -n might be interpreted by `echo' and thus will not be returned. set test "a -n| should return -n"; # | = cursor position -set cmd {COMP_WORDS=(a -n); COMP_CWORD=1; COMP_LINE='a -n'; COMP_POINT=4; _get_cword} +set cmd {COMP_WORDS=(a -n); COMP_CWORD=1; COMP_LINE='a -n'; COMP_POINT=4; _get_cword; echo} assert_bash_list -n $cmd $test @@ -225,7 +225,7 @@ sync_after_int set test {a b>c| should return c}; # | = cursor position -set cmd {COMP_WORDS=(a b \> c); COMP_CWORD=3; COMP_LINE='a b>c'; COMP_POINT=5; _get_cword} +set cmd {COMP_WORDS=(a b \> c); COMP_CWORD=3; COMP_LINE='a b>c'; COMP_POINT=5; _get_cword; echo} assert_bash_list c $cmd $test @@ -239,8 +239,8 @@ if {[lindex $::BASH_VERSINFO] <= 3} { } else { set cmd {COMP_WORDS=(a b = c); COMP_CWORD=3} set expected c -}; # if -append cmd {; COMP_LINE='a b=c'; COMP_POINT=5; _get_cword} +} +append cmd {; COMP_LINE='a b=c'; COMP_POINT=5; _get_cword; echo} assert_bash_list $expected $cmd $test @@ -248,7 +248,7 @@ sync_after_int set test {a *| should return *}; # | = cursor position -set cmd {COMP_WORDS=(a \*); COMP_CWORD=1; COMP_LINE='a *'; COMP_POINT=4; _get_cword} +set cmd {COMP_WORDS=(a \*); COMP_CWORD=1; COMP_LINE='a *'; COMP_POINT=4; _get_cword; echo} assert_bash_list * $cmd $test @@ -264,7 +264,7 @@ expect { -ex "\$(b c/@" { pass "$test" } # Expected failure on bash-4 -ex "c/@" { xfail "$test" } -}; # expect +} sync_after_int @@ -279,7 +279,7 @@ expect { -ex "\$(b c\\ d/@" { pass "$test" } # Expected failure on bash-4 -ex "c\\ d/@" { xfail "$test" } -}; # expect +} sync_after_int @@ -294,7 +294,7 @@ if { set cmd {COMP_WORDS=(a "'" b "&" c); COMP_CWORD=4} } else { set cmd {COMP_WORDS=(a "'b&c"); COMP_CWORD=1} -}; # if +} append cmd {; COMP_LINE="a 'b&c"; COMP_POINT=6; _get_cword} send "$cmd\r" expect -ex "$cmd\r\n" @@ -307,7 +307,7 @@ expect { [lindex $::BASH_VERSINFO 2] < 35 } {xfail "$test"} {fail "$test"} } -}; # expect +} sync_after_int diff --git a/test/unit/_known_hosts_real.exp b/test/unit/_known_hosts_real.exp index 152cf885..604b2d5e 100644 --- a/test/unit/_known_hosts_real.exp +++ b/test/unit/_known_hosts_real.exp @@ -1,6 +1,9 @@ proc setup {} { + # NOTE: Changing dir to $SRCDIR is necessary because file locations in the + # ssh config files (e.g. UserKnownHostsFile) are relative to $SRCDIR. + assert_bash_exec {cd $SRCDIR} save_env -}; # setup() +} proc teardown {} { @@ -8,7 +11,8 @@ proc teardown {} { /COMPREPLY=/d /OLDHOME=/d } -}; # teardown() + assert_bash_exec {cd $TESTDIR} +} setup @@ -17,10 +21,10 @@ setup set test "Hosts should be put in COMPREPLY" set hosts [get_hosts] # Hosts `gee', `hus' and `jar' are defined in ./fixtures/_known_hosts_real/config - # doo, ike, jub, 10.0.0.1, kyl and 100.0.0.2 in ./fixtures/_known_hosts_real/known_hosts -lappend hosts doo gee hus ike jar jub kyl 10.0.0.1 100.0.0.2 + # doo, ike, jub, 10.0.0.1, kyl, 100.0.0.2, 10.10.0.3, blah, and bunch of IPv6 test cases in ./fixtures/_known_hosts_real/known_hosts +lappend hosts blah doo gee hus ike jar jub kyl 10.0.0.1 100.0.0.2 10.10.0.3 fd00:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:5555 fe80::123:0xff:dead:beef%eth0 1111:2222:3333:4444:5555:6666:xxxx:abab 11xx:2222:3333:4444:5555:6666:xxxx:abab ::42 set cmd {unset COMPREPLY; _known_hosts_real -aF fixtures/_known_hosts_real/config ''; echo_array COMPREPLY} -assert_bash_list $hosts $cmd $test +assert_bash_list $hosts $cmd $test -sort sync_after_int @@ -29,16 +33,16 @@ sync_after_int set test "Hosts should have username prefix and colon suffix" set hosts [get_hosts] # Hosts `gee', `hus' and `jar' are defined in ./fixtures/_known_hosts_real/config - # doo, ike jub, 10.0.0.1, kyl and 100.0.0.2 in ./fixtures/_known_hosts_real/known_hosts -lappend hosts doo gee hus ike jar jub kyl 10.0.0.1 100.0.0.2 + # doo, ike, jub, 10.0.0.1, kyl, 100.0.0.2, 10.10.0.3, blah, and bunch of IPv6 test cases in ./fixtures/_known_hosts_real/known_hosts +lappend hosts blah doo gee hus ike jar jub kyl 10.0.0.1 100.0.0.2 10.10.0.3 fd00:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:5555 fe80::123:0xff:dead:beef%eth0 1111:2222:3333:4444:5555:6666:xxxx:abab 11xx:2222:3333:4444:5555:6666:xxxx:abab ::42 set hosts [lsort -ascii $hosts] set expected {} foreach host $hosts { lappend expected "user@$host:" -}; # foreach +} # Call _known_hosts set cmd {unset COMPREPLY; _known_hosts_real -acF fixtures/_known_hosts_real/config 'user@'; echo_array COMPREPLY} -assert_bash_list $expected $cmd $test +assert_bash_list $expected $cmd $test -sort sync_after_int @@ -66,7 +70,7 @@ expect { -re "^$hosts_config\r\n/@$" { fail "$test (known hosts file)" } -re /@ { unresolved "$test at prompt" } default { unresolved "$test" } -}; # expect +} sync_after_int @@ -79,7 +83,7 @@ set hosts [get_hosts] lappend hosts two three set hosts [join [bash_sort $hosts] "\\s+"] # Setup environment -set cmd {OLDHOME=$HOME; HOME=$TESTDIR} +set cmd {OLDHOME=$HOME; HOME=$SRCDIRABS} send "$cmd\r" expect -ex "$cmd\r\n/@" # Call _known_hosts @@ -89,7 +93,7 @@ expect -ex "$cmd\r\n" expect { -re "^$hosts\r\n/@$" { pass "$test" } default { unresolved "$test" } -}; # expect +} # Teardown environment set cmd {HOME=$OLDHOME} send "$cmd\r" @@ -103,11 +107,11 @@ set test "Empty COMP_KNOWN_HOSTS_WITH_HOSTFILE should omit HOSTFILE" assert_bash_exec "COMP_KNOWN_HOSTS_WITH_HOSTFILE=" set hosts [get_hosts_avahi] # Hosts `gee', `hus' and `jar' are defined in ./fixtures/_known_hosts_real/config - # doo, ike, jub, 10.0.0.1, kyl and 100.0.0.2 in ./fixtures/_known_hosts_real/known_hosts -lappend hosts doo gee hus ike jar jub kyl 10.0.0.1 100.0.0.2 + # doo, ike, jub, 10.0.0.1, kyl, 100.0.0.2, 10.10.0.3, blah, and bunch of IPv6 test cases in ./fixtures/_known_hosts_real/known_hosts +lappend hosts blah doo gee hus ike jar jub kyl 10.0.0.1 100.0.0.2 10.10.0.3 fd00:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:5555 fe80::123:0xff:dead:beef%eth0 1111:2222:3333:4444:5555:6666:xxxx:abab 11xx:2222:3333:4444:5555:6666:xxxx:abab ::42 # Call _known_hosts set cmd {unset COMPREPLY; _known_hosts_real -aF fixtures/_known_hosts_real/config ''; echo_array COMPREPLY} -assert_bash_list $hosts $cmd $test +assert_bash_list $hosts $cmd $test -sort sync_after_int assert_bash_exec "unset -v COMP_KNOWN_HOSTS_WITH_HOSTFILE" diff --git a/test/unit/_parse_help.exp b/test/unit/_parse_help.exp new file mode 100644 index 00000000..4beb28d2 --- /dev/null +++ b/test/unit/_parse_help.exp @@ -0,0 +1,73 @@ +# By Stephen Gildea, October 2010. + +proc setup {} { + save_env +} + +proc teardown {} { + assert_env_unmodified { + /declare -f fn/d + } +} + +setup + + +set cmd {fn() { printf '%s\n' ""; }; _parse_help fn} +assert_bash_list "" $cmd "empty" +sync_after_int + +set cmd {fn() { printf '%s\n' "no dashes here"; }; _parse_help fn} +assert_bash_list "" $cmd "no dashes" +sync_after_int + +set cmd {fn() { printf '%s\n' "internal-dash"; }; _parse_help fn} +assert_bash_list "" $cmd "internal dash 1" +sync_after_int + +set cmd {fn() { printf '%s\n' "no -leading-dashes"; }; _parse_help fn} +assert_bash_list "" $cmd "no leading dash" +sync_after_int + +set cmd {fn() { printf '%s\n' "-one dash"; }; _parse_help fn} +assert_bash_list "-one" $cmd "one dash" +sync_after_int + +set cmd {fn() { printf '%s\n' " -space dash"; }; _parse_help fn} +assert_bash_list "-space" $cmd "one dash after space" +sync_after_int + +set cmd {fn() { printf '%s\n' "-one -two dashes"; }; _parse_help fn} +assert_bash_list "-one\n-two" $cmd "two dashes, space-separated" +sync_after_int + +set cmd {fn() { printf '%s\n' "-one,-t dashes"; }; _parse_help fn} +assert_bash_list "-one\n-t" $cmd "two dashes, comma-separated" +sync_after_int + +set cmd {fn() { printf '%s\n' "-one dash-inside"; }; _parse_help fn} +assert_bash_list "-one" $cmd "internal dash 2" +sync_after_int + +set cmd {fn() { printf '%s\n' "--long-arg=value"; }; _parse_help fn} +assert_bash_list "--long-arg" $cmd "value stripped" +sync_after_int + +set cmd {fn() { printf '%s\n' "--long-arg=-value"; }; _parse_help fn} +assert_bash_list "--long-arg" $cmd "value not seen as option" +sync_after_int + +set cmd {fn() { printf '%s\n' "--long-arg=-value,--opt2=val"; }; _parse_help fn} +assert_bash_list "--long-arg\n--opt2" $cmd "two options with values" +sync_after_int + +set cmd {fn() { printf '%s\n' "-m,--mirror"; }; _parse_help fn} +assert_bash_list "-m\n--mirror" $cmd "short + long" +sync_after_int + +set cmd {fn() { printf '%s\n' "-T/--upload-file"; }; _parse_help fn} +assert_bash_list "-T\n--upload-file" $cmd "short + long, slash separated" +sync_after_int + + +teardown diff --git a/test/unit/_tilde.exp b/test/unit/_tilde.exp new file mode 100644 index 00000000..2e22b848 --- /dev/null +++ b/test/unit/_tilde.exp @@ -0,0 +1,51 @@ +# @param string $part Reference to variable to hold partial unique username +# @param string $full Reference to variable to hold full unique username +proc setup {part full} { + upvar $part _part + upvar $full _full + + assert_bash_exec {compgen -u} {} /@ users + find_unique_completion_pair $users _part _full + save_env +} + + +proc teardown {} { + assert_env_unmodified { + /COMPREPLY=/d + } +} + + +setup part full + + +set test "function should run without errors" +assert_bash_exec {_tilde > /dev/null} $test + + +sync_after_int + + +set test "function should not pollute environment" +# NOTE: A possible environment pollution is detected by assert_env_modified() in teardown() +assert_bash_exec {foo() { local aa="~"; _tilde "$aa"; }; foo; unset foo} $test + + +sync_after_int + + +set test "~full should complete to ~full unmodified" +set cmd [format {_tilde "~%s"; printf "%%s\n" "${COMPREPLY[@]}"} $full] +assert_bash_list "~$full" $cmd $test + + +sync_after_int + + +set test "~part should complete to ~full" +set cmd [format {_tilde "~%s"; printf "%%s\n" "${COMPREPLY[@]}"} $part] +assert_bash_list "~$full" $cmd $test + + +teardown diff --git a/test/unit/compgen.exp b/test/unit/compgen.exp index 6673bf0e..6e6f79c6 100644 --- a/test/unit/compgen.exp +++ b/test/unit/compgen.exp @@ -1,11 +1,11 @@ proc setup {} { save_env -}; # setup() +} proc teardown {} { assert_env_unmodified {/OLDPWD/d} -}; # teardown() +} setup @@ -17,10 +17,9 @@ if {[lindex $::BASH_VERSINFO 0] <= 3} { } else { set test {compgen -f a\\\'b/ on bash-4 should return a\'b/c}; set cmd {compgen -f a\\\'b/} -}; # if -set dir fixtures/compgen -set prompt "/$dir/@" -assert_bash_exec "cd $dir" "" $prompt +} +set dir $::srcdir/fixtures/compgen +assert_bash_exec "cd $dir" send "$cmd\r" expect -ex "$cmd\r\n" expect { @@ -37,13 +36,13 @@ expect { if {[lindex $::BASH_VERSINFO 0] <= 3 } \ {pass $test} else {fail $test} } - -re $prompt { pass "$test" } + -re /@ { pass "$test" } -re eof { unresolved "eof" } -}; # expect -sync_after_int $prompt +} +sync_after_int assert_bash_exec {cd "$TESTDIR"} -#assert_bash_list_dir {a\\\'b/c} $cmd fixtures/compgen +#assert_bash_list_dir {a\\\'b/c} $cmd $::srcdir/fixtures/compgen sync_after_int |