From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26046 invoked from network); 5 Nov 2005 23:31:05 -0000 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 5 Nov 2005 23:31:05 -0000 Received: (qmail 86429 invoked from network); 5 Nov 2005 23:30:58 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 5 Nov 2005 23:30:58 -0000 Received: (qmail 20820 invoked by alias); 5 Nov 2005 23:30:51 -0000 Mailing-List: contact zsh-users-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 9648 Received: (qmail 20810 invoked from network); 5 Nov 2005 23:30:51 -0000 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by sunsite.dk with SMTP; 5 Nov 2005 23:30:51 -0000 Received: (qmail 85436 invoked from network); 5 Nov 2005 23:30:50 -0000 Received: from mta09-winn.ispmail.ntl.com (81.103.221.49) by a.mx.sunsite.dk with SMTP; 5 Nov 2005 23:30:50 -0000 Received: from aamta11-winn.ispmail.ntl.com ([81.103.221.35]) by mta09-winn.ispmail.ntl.com with ESMTP id <20051105233049.FATO8609.mta09-winn.ispmail.ntl.com@aamta11-winn.ispmail.ntl.com> for ; Sat, 5 Nov 2005 23:30:49 +0000 Received: from [192.168.99.100] (really [81.104.164.40]) by aamta11-winn.ispmail.ntl.com with ESMTP id <20051105233048.HACS8928.aamta11-winn.ispmail.ntl.com@[192.168.99.100]> for ; Sat, 5 Nov 2005 23:30:48 +0000 Message-ID: <436D40A6.6090605@ntlworld.com> Date: Sat, 05 Nov 2005 23:30:46 +0000 From: Scott Murray User-Agent: Mozilla/5.00 (Macintosh; U; PPC) X-Accept-Language: en-us, en MIME-Version: 1.0 To: zsh-users@sunsite.dk Subject: Completion for yum Content-Type: multipart/mixed; boundary="------------010408040808030502020106" X-Spam-Checker-Version: SpamAssassin 3.0.4 (2005-06-05) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,MULTI_REMOVAL_1WORD autolearn=ham version=3.0.4 This is a multi-part message in MIME format. --------------010408040808030502020106 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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 --------------010408040808030502020106 Content-Type: text/plain; name="_yum" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="_yum" #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 "$@" --------------010408040808030502020106--