summaryrefslogtreecommitdiffstats
path: root/completions/_yum
diff options
context:
space:
mode:
Diffstat (limited to 'completions/_yum')
-rw-r--r--completions/_yum144
1 files changed, 144 insertions, 0 deletions
diff --git a/completions/_yum b/completions/_yum
new file mode 100644
index 0000000..224ea25
--- /dev/null
+++ b/completions/_yum
@@ -0,0 +1,144 @@
+# yum(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated. Upstream completion is available in
+# yum > 3.2.25, use that instead.
+
+_yum_list()
+{
+ if [[ $1 == all ]]; then
+ # Try to strip in between headings like "Available Packages"
+ # This will obviously only work for English :P
+ COMPREPLY=($(yum -d 0 -C list $1 "$cur*" 2>/dev/null |
+ command sed -ne '/^Available /d' -e '/^Installed /d' -e '/^Updated /d' \
+ -e 's/[[:space:]].*//p'))
+ else
+ # Drop first line (e.g. "Updated Packages")
+ COMPREPLY=($(yum -d 0 -C list $1 "$cur*" 2>/dev/null |
+ command sed -ne 1d -e 's/[[:space:]].*//p'))
+ fi
+}
+
+_yum_repolist()
+{
+ # -d 0 causes repolist to output nothing as of yum 3.2.22:
+ # http://yum.baseurl.org/ticket/83
+ # Drop first ("repo id repo name") and last ("repolist: ...") rows
+ yum --noplugins -C repolist $1 2>/dev/null |
+ command sed -ne '/^repo\s\s*id/d' -e '/^repolist:/d' -e 's/[[:space:]].*//p'
+}
+
+_yum_plugins()
+{
+ command ls /usr/lib/yum-plugins/*.py{,c,o} 2>/dev/null |
+ command sed -ne 's|.*/\([^./]*\)\.py[co]\{0,1\}$|\1|p' | sort -u
+}
+
+_yum()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ local special i
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ if [[ ${words[i]} == @(install|update|upgrade|remove|erase|deplist|info) ]]; then
+ special=${words[i]}
+ break
+ fi
+ done
+
+ if [[ -v special ]]; then
+ # TODO: install|update|upgrade should not match *src.rpm
+ if [[ $cur == @(*/|[.~])* && \
+ $special == @(deplist|install|update|upgrade) ]]; then
+ _filedir rpm
+ return
+ fi
+ case $special in
+ install)
+ _yum_list available
+ return
+ ;;
+ deplist | info)
+ _yum_list all
+ return
+ ;;
+ upgrade | update)
+ _yum_list updates
+ return
+ ;;
+ remove | erase)
+ # _rpm_installed_packages is not arch-qualified
+ _yum_list installed
+ return
+ ;;
+ esac
+ fi
+
+ case $prev in
+ list)
+ COMPREPLY=($(compgen -W 'all available updates installed extras
+ obsoletes recent' -- "$cur"))
+ ;;
+ clean)
+ COMPREPLY=($(compgen -W 'packages headers metadata cache dbcache
+ all' -- "$cur"))
+ ;;
+ repolist)
+ COMPREPLY=($(compgen -W 'all enabled disabled' -- "$cur"))
+ ;;
+ localinstall | localupdate)
+ # TODO: should not match *src.rpm
+ _filedir rpm
+ ;;
+ -d | -e)
+ COMPREPLY=($(compgen -W '{0..10}' -- "$cur"))
+ ;;
+ -c)
+ _filedir
+ ;;
+ --installroot)
+ _filedir -d
+ ;;
+ --enablerepo)
+ COMPREPLY=($(compgen -W '$(_yum_repolist disabled)' -- "$cur"))
+ ;;
+ --disablerepo)
+ COMPREPLY=($(compgen -W '$(_yum_repolist enabled)' -- "$cur"))
+ ;;
+ --disableexcludes)
+ COMPREPLY=($(compgen -W '$(_yum_repolist all) all main' \
+ -- "$cur"))
+ ;;
+ --enableplugin | --disableplugin)
+ COMPREPLY=($(compgen -W '$(_yum_plugins)' -- "$cur"))
+ ;;
+ --color)
+ COMPREPLY=($(compgen -W 'always auto never' -- "$cur"))
+ ;;
+ -R | -x | --exclude)
+ # argument required but no completions available
+ return
+ ;;
+ -h | --help | --version)
+ # no other options useful with these
+ return
+ ;;
+ *)
+ COMPREPLY=($(compgen -W 'install update check-update upgrade
+ remove erase list info provides whatprovides clean makecache
+ groupinstall groupupdate grouplist groupremove groupinfo
+ search shell resolvedep localinstall localupdate deplist
+ repolist help' -- "$cur"))
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _yum yum
+
+# ex: filetype=sh