From: Scott Murray <semurray@ntlworld.com>
To: zsh-users@sunsite.dk
Subject: Completion for yum
Date: Sat, 05 Nov 2005 23:30:46 +0000 [thread overview]
Message-ID: <436D40A6.6090605@ntlworld.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 359 bytes --]
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
[-- Attachment #2: _yum --]
[-- Type: text/plain, Size: 7135 bytes --]
#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 "$@"
next reply other threads:[~2005-11-05 23:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-05 23:30 Scott Murray [this message]
2005-11-06 16:46 ` Peter Stephenson
2011-04-10 14:57 cat.in.136
2011-04-11 8:47 ` Peter Stephenson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=436D40A6.6090605@ntlworld.com \
--to=semurray@ntlworld.com \
--cc=zsh-users@sunsite.dk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).