diff options
Diffstat (limited to 'completions/_yum')
-rw-r--r-- | completions/_yum | 144 |
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 |