Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Completion for yum
- X-seq: zsh-users 9648
- From: Scott Murray <semurray@xxxxxxxxxxxx>
- To: zsh-users@xxxxxxxxxx
- Subject: Completion for yum
- Date: Sat, 05 Nov 2005 23:30:46 +0000
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
Hi Zsh-Users,
I am a Fedora Core user and have been annoyed by the lack completion
for yum (the apt equivalent for FC and some other distros).
So I've developed a compdef fopr yum which I attach.
It is comprehensive and seems to work (for me).
What is the process for getting this tested and included among the
compdefs provided with Zsh?
regards Scott
#compdef yum
# Main dispatcher
_yum()
{
local curcontext="$curcontext" state lstate line
local comp_num='compadd "$expl[@]" -S0 -r "0-9" - ""'
_arguments -s \
{-h,--help}'[show the help message]' \
{-t,--tolerant}'[be tolerant of errors]' \
'-C[Run entirely from cache]' \
'-c[Config file location]:Yum conf file:_files' \
'-R[Maximum command wait time (in minutes)]:Max wait time' \
'-d[Debug level (0-10)]:Debug level' \
'-e[Error level (0-10)]:Error level' \
'-y[Answer yes for all questions]' \
'--installroot=[Set install root]:Install Root:_files -/' \
'--enablerepo=[Enable or or more repositories]:Repos to enable' \
'--disablerepo=[Disable one or more repositories]:Disable Repos' \
'--exclude=[Exclude package(s) by name or glob]:Exclude Repos' \
'--version[Show yum version]' \
'--obseletes[Enable obsoletes processing during updates]' \
'--noplugins[Disable yum plugins]' \
'*::yum command:_yum_command'
}
(( $+functions[_yum_command] )) || _yum_command()
{
local -a _yum_cmds
_yum_cmds=(
"install:Install the latest version of a package or group of packages"
"erase:Remove an installed package (with its dependencies)"
"remove:Remove an installed package (with its dependencies)"
"clean:Clean local yum cache"
"deplist:Gives a list of all dependencies for a package"
"check-update:Check if any updates are available"
"info:Get description of available packages"
"list:Is used to list various information about packages"
"groupinfo:Get info on package groups"
"groupinstall:Install a package group or groups"
"groupremove:Remove a package group or groups"
"grouplist:List package groups"
"groupupdate:Update a package group or groups"
"localinstall:Install packages with local rpm files"
"localupdate:Update packages with local rpm files"
"makecache:Makes a local yum cache"
"provides:Find out which package provides some feature or file"
"whatprovides:Find out which package provides some feature or file"
"resolvedep:List packages providing the specified dependencies"
"search:Find any packages matching pattern"
"shell:Enter the 'yum shell'"
"update:Update one or more packages"
"upgrade:Upgrade one or more packages"
)
if (( CURRENT == 1 )); then
_describe -t commands 'yum command' _yum_cmds || compadd "$@"
else
local curcontext="$curcontext"
cmd="${${_yum_cmds[(r)$words[1]:*]%%:*}}"
# Deal with any aliases
case $cmd in
remove) cmd="erase";;
whatprovides) cmd="provides";;
upgrade) cmd="update";;
esac
if (( $#cmd )); then
curcontext="${curcontext%:*:*}:yum-${cmd}:"
local update_policy
zstyle -s ":completion:${curcontext}:" cache-policy update_policy
if [[ -z "$update_policy" ]]; then
zstyle ":completion:${curcontext}:" cache-policy _yum_caching_policy
fi
_call_function ret _yum_$cmd || _message 'no more arguments'
else
_message "unknown yum command: $words[1]"
fi
return ret
fi
}
# Fills the installed pkg cache
_yum_all_pkgs()
{
if ( [[ ${+_all_pkgs} -eq 0 ]] || _cache_invalid ALL ) &&
! _retrieve_cache ALL;
then
local prog="yum -C list all | sed 's/\s.*//' | grep '\.'"
_all_pkgs=( $(_call_program allpackages $prog 2>/dev/null) )
_store_cache ALL _all_pkg
fi
}
# Fills the installed pkg cache
_yum_installed_pkgs()
{
if ( [[ ${+_installed_pkgs} -eq 0 ]] || _cache_invalid INSTALLED ) &&
! _retrieve_cache INSTALLED;
then
local prog="yum -C list installed | sed 's/\s.*//' | grep '\.'"
_installed_pkgs=( $(_call_program ipackages $prog 2>/dev/null) )
_store_cache INSTALLED _installed_pkgs
fi
}
# Fills the available pkg cache
_yum_available_pkgs()
{
if ( [[ ${+_available_pkgs} -eq 0 ]] || _cache_invalid AVAILABLE ) &&
! _retrieve_cache AVAILABLE;
then
local prog="yum -C list available | sed 's/\s.*//' | grep '\.'"
_available_pkgs=( $(_call_program apackages $prog 2>/dev/null) )
_store_cache AVAILABLE _available_pkgs
fi
}
# Fills the upgrade pkg cache
_yum_upgrade_pkgs()
{
if ( [[ ${+_upgrade_pkgs} -eq 0 ]] || _cache_invalid UPGRADE ) &&
! _retrieve_cache UPGRADE;
then
local prog="yum -C list upgrade | sed 's/\s.*//' | grep '\.'"
_upgrade_pkgs=( $(_call_program upackages $prog 2>/dev/null) )
_store_cache UPGRADE _upgrade_pkgs
fi
}
# Completion function for erase|remove
(( $+functions[_yum_erase] )) || _yum_erase()
{
_yum_installed_pkgs
compadd "$@" -a -- _installed_pkgs
}
# Completion function for install
(( $+functions[_yum_install] )) || _yum_install()
{
_yum_available_pkgs
compadd "$@" -a -- _available_pkgs
}
# Completion function for localinstall
(( $+functions[_yum_localinstall] )) || _yum_localinstall()
{
_files -g '(#i)*.rpm(-.)'
}
# Completion function for localupdate
(( $+functions[_yum_localupdate] )) || _yum_localupdate()
{
_files -g '(#i)*.rpm(-.)'
}
# Completion function for update/upgrade
(( $+functions[_yum_update] )) || _yum_update()
{
_yum_upgrade_pkgs
compadd "$@" -a -- _upgrade_pkgs
}
# Completion function for deplist
(( $+functions[_yum_deplist] )) || _yum_deplist()
{
_yum_available_pkgs
compadd "$@" -a -- _available_pkgs
}
_yum_all()
{
_yum_all_pkgs
compadd "$@" -a -- _all_pkgs
}
_yum_list_or_info()
{
local -a listlist
listlist=(
"all:all packages in repositories"
"available:packages available in repositories"
"updates:packages with updates available"
"installed:installed packages"
"extras:packages installed that are not available in any yum repository"
"obsoletes:packages installed that are obsoleted"
"recent:packages recently added to repositories"
)
if (( CURRENT == 2 )); then
_describe -t yum-list-subcmds "Yum info/list sub-commands" listlist || _yum_all
else
local subcmd
subcmd="${${listlist[(r)$words[2]:*]%%:*}}"
# Deal with any aliases
case $subcmd in
installed) _yum_erase;;
available) _yum_install;;
updates) _yum_update;;
esac
fi
}
# Completion function for list
(( $+functions[_yum_list] )) || _yum_list()
{
_yum_list_or_info
}
# Completion function for info
(( $+functions[_yum_info] )) || _yum_info()
{
_yum_list_or_info
}
# Completion function for provides|whatprovides
(( $+functions[_yum_provides] )) || _yum_provides()
{
_files
}
# Completion function for resolvedep
(( $+functions[_yum_resolvedep] )) || _yum_resolvedep()
{
_files
}
# Completion function for clean
(( $+functions[_yum_clean] )) || _yum_clean()
{
local -a cleanlist
cleanlist=(
"all:all cache"
"cache:all cache"
"dbcache:DB cache"
"headers:cache headers"
"packages:cache packages"
"metadata:cache meta-data"
)
if (( CURRENT == 2 )); then
_describe -t yum-clean-subcmds "Yum clean sub-commands" cleanlist
fi
}
_yum_caching_policy()
{
local _yumrepomds
# rebuild if cache is more than a week old
oldp=( "$1"(mw+1) )
(( $#oldp )) && return 0
_yumrepomds=( /var/cache/yum/**/repomd.xml )
if (( $#__yumrepomds )); then
for repo in $_yumrepomds; do
[[ "$repo" -nt "$1" ]] && return 0
done
fi
return 1
}
_yum "$@"
Messages sorted by:
Reverse Date,
Date,
Thread,
Author