--- /dev/null
+# poldek(1) completion
+#
+_poldek()
+{
+ local cur prev
+ cur=${COMP_WORDS[COMP_CWORD]}
+
+ COMPREPLY=()
+
+ case "${COMP_WORDS[1]}" in
+ -@(e|-erase))
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '--nodeps --nofollow --test' -- $cur ) )
+ else
+ _xfunc rpm _rpm_installed_packages
+ fi
+ return 0
+ ;;
+ esac
+
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+
+ case "$prev" in
+ -@(n|-sn))
+ COMPREPLY=( $( poldek -l | awk "/^$cur/{print \$1}" ) )
+ return 0
+ ;;
+ esac
+
+ case "$cur" in
+ --verify*=*,*)
+ local p=${cur#--verify=*,}
+ p=${p//\\} # those backslashes propagate!!! -- kill them
+ # somewhy bash escapes equal sign, so we must match the backslash too
+ COMPREPLY=( $( compgen -P "${p%,*}," -W 'deps conflicts file-conflicts file-orphans file-missing-deps' -- "${cur##*,}" ) )
+ return 0
+ ;;
+ --verify*)
+ # somewhy bash escapes equal sign, so we must match the backslash too
+ COMPREPLY=( $( compgen -P --verify= -W 'deps conflicts file-conflicts file-orphans file-missing-deps' -- "${cur#--verify*=}" ) )
+ return 0
+ ;;
+ --*)
+ COMPREPLY=( $( compgen -W '
+ --mkidx --makeidx --mt --nocompress --nodesc --nodiff --notimestamp
+ --dn --dt --sn --prefix --source --st --clean --clean-pkg
+ --clean-whole --cleana --sl --stl --update --up --update-whole
+ --upa --caplookup --pset --downgrade --install --reinstall
+ --upgrade --install-dist --reinstall-dist --root --upgrade-dist
+ --dump --dumpn --fetch --follow --force --fresh --greedy --hold
+ --ignore --justdb --mercy --nodeps --nohold --noignore --nofollow
+ --parsable-tr-summary --pm-force --pm-nodeps --pmopt --promoteepoch
+ --uniq --test --erase --greedy --nodeps --nofollow --test --verify=
+ --priconf --split --split-out --ask --cachedir --cmd --conf --log
+ --noask --noconf --pmcmd --runas --shell --skip-installed --sudocmd
+ --upconf --help --usage --version
+ ' -- $cur ) )
+ ;;
+ *)
+ COMPREPLY=( $( compgen -W '-F -N -O -P -Q -V -e -i -l -m -n -q -r -s -t -u -v' -- $cur ) )
+ ;;
+ esac
+
+ return 0
+} &&
+complete -F _poldek $nospace $filenames poldek
--- /dev/null
+# vim:ft=spec
+# TODO
+# - use mkinitrd and update for geninitrd
+# - fix vim not to mark this file as bash
+Summary: bash-completion offers programmable completion for bash
+Summary(pl.UTF-8): Programowalne uzupełnianie nazw dla basha
+Name: bash-completion
+Version: 2.1
+Release: 4
+Epoch: 1
+License: GPL v2+
+Group: Applications/Shells
+Source0: http://bash-completion.alioth.debian.org/files/%{name}-%{version}.tar.bz2
+# Source0-md5: 4e2a9f11a4042a38ee79ddcd048e8b9e
+Source1: %{name}-poldek.sh
+# https://bugs.launchpad.net/ubuntu/+source/mysql-dfsg-5.0/+bug/106975
+Source3: http://launchpadlibrarian.net/19164189/mysqldump
+# Source3-md5: 09e4885be92e032400ed702f39925d85
+Source4: http://svn.php.net/viewvc/pear2/sandbox/PEAR_BashCompletion/trunk/pear?revision=285425&view=co?/pear
+# Source4-md5: 8ce77e4459e2c45e2096da8d03c8f43d
+Patch0: %{name}-rpm-cache.patch
+Patch1: pear.patch
+URL: http://bash-completion.alioth.debian.org/
+BuildRequires: sed >= 4.0
+Requires(triggerpostun): sed >= 4.0
+Requires: bash >= 4.1
+Requires: pld-release
+Obsoletes: bash-completion-rpm-cache
+Conflicts: rpm < 4.4.9-44
+BuildArch: noarch
+BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%description
+bash-completion is a collection of shell functions that take advantage
+of the programmable completion feature of bash 4.1 and later.
+
+%description -l pl.UTF-8
+bash-completion jest kolekcją funkcji shella, które opierają się na
+wbudowanych rozszerzeniach basha 4.1 lub późniejszego umożliwiającego
+dopełnianie parametrów linii poleceń.
+
+%prep
+%setup -q
+cp -p '%{SOURCE4}' completions/pear
+%patch0 -p1
+%patch1 -p1
+
+# cleanup backups after patching
+find '(' -name '*~' -o -name '*.orig' ')' -print0 | xargs -0 -r -l512 rm -f
+
+# update path
+%{__sed} -i -e 's#${BASH_SOURCE\[0\]%/\*}#%{_datadir}/%{name}#' completions/perl
+
+%build
+%configure
+%{__make}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d
+
+%{__make} install -j1 \
+ INSTALL="install -p" \
+ profiledir=/etc/shrc.d \
+ DESTDIR=$RPM_BUILD_ROOT
+
+cp -p %{SOURCE1} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/poldek
+cp -p %{SOURCE3} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/mysqldump
+cp -p completions/pear $RPM_BUILD_ROOT%{_datadir}/%{name}/completions
+
+# util-linux
+%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/{cal,chsh,dmesg,eject,hexdump,hwclock,ionice,look,newgrp,renice,rtcwake,su}
+# No package matches '*/apache2ctl'
+%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/apache2ctl
+# No PLD package or no such binary to complete on
+%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/{larch,lisp,monodevelop,[pg]4,cowsay,cowthink,cpan2dist}
+%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/{mkinitrd,rpmcheck}
+# FreeBSD stuff
+%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/{kldload,portupgrade}
+# Debian stuff
+%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/{apt-build,dselect,reportbug,alternatives,update-alternatives,lintian,lintian-info}
+# NetworkManager stuff
+%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/nmcli
+
+
+# do not generate autodeps
+chmod a-x $RPM_BUILD_ROOT%{_datadir}/%{name}/helpers/perl
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%triggerpostun -- %{name} < 20050721-3.9
+sed -i -e '/^# START bash completion/,/^# END bash completion/d' /etc/bashrc
+
+%files
+%defattr(644,root,root,755)
+%doc AUTHORS CHANGES README
+/etc/shrc.d/bash_completion.sh
+%dir %{_sysconfdir}/bash_completion.d
+%dir %{_datadir}/%{name}
+%{_datadir}/%{name}/bash_completion
+%dir %{_datadir}/%{name}/completions
+%{_datadir}/%{name}/completions/*
+%dir %{_datadir}/%{name}/helpers
+%attr(755,root,root) %{_datadir}/%{name}/helpers/perl
+%{_npkgconfigdir}/bash-completion.pc
--- /dev/null
+# PLD Linux builder(1) script completion
+
+# get active spec file from commandline
+# caller should make $spec local variable
+# TODO: it gets it wrong if some option arg is found before spec itself
+_builder_get_spec()
+{
+ local i
+ spec=
+ for (( i=1; i < ${#words[@]}-1; i++ )); do
+ if [[ ${words[i]} != -* ]]; then
+ spec=${words[i]}
+ break
+ fi
+ done
+ [[ ! -f $spec ]] && return 0
+}
+
+_builder()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -r)
+ COMPREPLY=( $( compgen -W '$( git tag )' -- "$cur" ) )
+ return 0
+ ;;
+ --with|--without)
+ local spec bconds
+ _builder_get_spec
+ bconds=$(
+ awk '
+ /^%changelog/ { exit }
+ /^%bcond_with/{
+ print $2
+ }' $spec
+ )
+ COMPREPLY=( $( compgen -W "$bconds" -- "$cur" ) )
+ return 0
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) )
+ else
+ _filedir spec
+ fi
+} &&
+complete -F _builder builder