c875723bef
This way it's clearer to users that an argument is expected. It's likely that this commit does not catch all such cases, but it should do it for most of the affected commands I have installed.
153 lines
4.5 KiB
Bash
153 lines
4.5 KiB
Bash
# Use of this file is deprecated. Upstream completion is available in
|
|
# yum > 3.2.25, use that instead.
|
|
|
|
# yum(8) completion
|
|
|
|
have yum || return
|
|
|
|
_yum_list()
|
|
{
|
|
if [[ "$1" == all ]] ; then
|
|
# Try to strip in between headings like "Available Packages"
|
|
# This will obviously only work for English :P
|
|
COMPREPLY=( $( yum -d 0 -C list $1 "$cur*" 2>/dev/null | \
|
|
sed -ne '/^Available /d' -e '/^Installed /d' -e '/^Updated /d' \
|
|
-e 's/[[:space:]].*//p' ) )
|
|
else
|
|
# Drop first line (e.g. "Updated Packages")
|
|
COMPREPLY=( $( yum -d 0 -C list $1 "$cur*" 2>/dev/null | \
|
|
sed -ne 1d -e 's/[[:space:]].*//p' ) )
|
|
fi
|
|
}
|
|
|
|
_yum_repolist()
|
|
{
|
|
# -d 0 causes repolist to output nothing as of yum 3.2.22:
|
|
# http://yum.baseurl.org/ticket/83
|
|
# Drop first ("repo id repo name") and last ("repolist: ...") rows
|
|
yum --noplugins -C repolist $1 2>/dev/null | \
|
|
sed -ne '/^repo\s\s*id/d' -e '/^repolist:/d' -e 's/[[:space:]].*//p'
|
|
}
|
|
|
|
_yum_plugins()
|
|
{
|
|
command ls /usr/lib/yum-plugins/*.py{,c,o} 2>/dev/null \
|
|
| sed -ne 's|.*/\([^./]*\)\.py[co]\{0,1\}$|\1|p' | sort -u
|
|
}
|
|
|
|
_yum()
|
|
{
|
|
local cur prev words cword split
|
|
_init_completion -s || return
|
|
|
|
local special i
|
|
for (( i=0; i < ${#words[@]}-1; i++ )); do
|
|
if [[ ${words[i]} == @(install|update|upgrade|remove|erase|deplist|info) ]]; then
|
|
special=${words[i]}
|
|
fi
|
|
done
|
|
|
|
if [ -n "$special" ]; then
|
|
# TODO: install|update|upgrade should not match *src.rpm
|
|
if [[ "$cur" == @(*/|[.~])* && \
|
|
"$special" == @(deplist|install|update|upgrade) ]]; then
|
|
_filedir rpm
|
|
return 0
|
|
fi
|
|
case $special in
|
|
install)
|
|
_yum_list available
|
|
return 0
|
|
;;
|
|
deplist|info)
|
|
_yum_list all
|
|
return 0
|
|
;;
|
|
upgrade|update)
|
|
_yum_list updates
|
|
return 0
|
|
;;
|
|
remove|erase)
|
|
# _rpm_installed_packages is not arch-qualified
|
|
_yum_list installed
|
|
return 0
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
case $prev in
|
|
list)
|
|
COMPREPLY=( $( compgen -W 'all available updates \
|
|
installed extras obsoletes recent' -- $cur ) )
|
|
;;
|
|
clean)
|
|
COMPREPLY=( $( compgen -W 'packages headers metadata \
|
|
cache dbcache all' -- $cur ) )
|
|
;;
|
|
repolist)
|
|
COMPREPLY=( $( compgen -W 'all enabled disabled' -- $cur ) )
|
|
;;
|
|
localinstall|localupdate)
|
|
# TODO: should not match *src.rpm
|
|
_filedir rpm
|
|
;;
|
|
-d|-e)
|
|
COMPREPLY=( $( compgen -W '{0..10}' -- $cur ) )
|
|
;;
|
|
-c)
|
|
_filedir
|
|
;;
|
|
--installroot)
|
|
_filedir -d
|
|
;;
|
|
--enablerepo)
|
|
COMPREPLY=( $( compgen -W '$( _yum_repolist disabled )' -- $cur ) )
|
|
;;
|
|
--disablerepo)
|
|
COMPREPLY=( $( compgen -W '$( _yum_repolist enabled )' -- $cur ) )
|
|
;;
|
|
--disableexcludes)
|
|
COMPREPLY=( $( compgen -W '$( _yum_repolist all ) all main' \
|
|
-- $cur ) )
|
|
;;
|
|
--enableplugin|--disableplugin)
|
|
COMPREPLY=( $( compgen -W '$( _yum_plugins )' -- $cur ))
|
|
;;
|
|
--color)
|
|
COMPREPLY=( $( compgen -W 'always auto never' -- $cur ))
|
|
;;
|
|
-R|-x|--exclude)
|
|
# argument required but no completions available
|
|
return 0
|
|
;;
|
|
-h|--help|--version)
|
|
# no other options useful with these
|
|
return 0
|
|
;;
|
|
*)
|
|
COMPREPLY=( $( compgen -W 'install update check-update upgrade \
|
|
remove erase list info provides whatprovides clean makecache \
|
|
groupinstall groupupdate grouplist groupremove groupinfo \
|
|
search shell resolvedep localinstall localupdate deplist \
|
|
repolist help' -- $cur ) )
|
|
;;
|
|
esac
|
|
|
|
$split && return 0
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) )
|
|
[[ $COMPREPLY == *= ]] && compopt -o nospace
|
|
return 0
|
|
fi
|
|
} &&
|
|
complete -F _yum yum
|
|
|
|
# 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
|