From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9176 invoked by alias); 15 Jan 2014 23:22:27 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 32257 Received: (qmail 14132 invoked from network); 15 Jan 2014 23:22:22 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 Date: Thu, 16 Jan 2014 00:04:22 +0100 From: Holger Macht To: zsh-workers@zsh.org Cc: Thomas Mitterfellner Subject: Updated zypper completion file Message-ID: <20140115230422.GC19100@homac.site> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="UHN/qo2QbUvPLonB" Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-bounce-key: webpack.hosteurope.de;holger@homac.de;1389828143;80be484d; --UHN/qo2QbUvPLonB Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hello, attached is an updated version of the completion file for zypper. It includes support for repository and package names, thanks to Thomas Mitterfellner. Please include as soon as time permits. Best regards, Holger --UHN/qo2QbUvPLonB Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=_zypper #compdef zypper # # Copyright (C) 2009 Holger Macht # Copyright (C) 2013 Thomas Mitterfellner # # This file is released under the GPLv2. # # Based on the zsh guide from http://zsh.dotsrc.org/Guide/zshguide06.html # # Toggle verbose completions: zstyle ':completion:*:zypper:*' verbose no # zstyle ':completion:*:zypper-subcommand:*' verbose no # # version 0.2 # # Main dispatcher function _zypper_caching_policy () { # rebuild if cache is more than a week old if test /var/cache/zypp/raw -nt "$1"; then return 0 else return 1 fi } _zypper() { typeset -A opt_args local context curcontext="$curcontext" state line if (( CURRENT > 2 )) && [[ ${words[2]} != "help" ]]; then # Remember the subcommand name local cmd=${words[2]} # Set the context for the subcommand. curcontext="${curcontext%:*:*}:zypper-subcommand" # Narrow the range of words we are looking at to exclude `zypper' (( CURRENT-- )) shift words _zypper_cmd_do $cmd else local hline local -a cmdlist local tag=0 _call_program help-commands LANG=C zypper help | sed -e ':a;N;$!ba;s/\n\t\t\t\t/ /g' | while read -A hline; do # start parsing with "Global Options:" [[ $hline =~ "^Global Options:" ]] && tag=1 [[ $tag = 0 ]] && continue # all commands have to start with lower case letters [[ $hline[1] =~ ^[A-Z] ]] && continue (( ${#hline} < 2 )) && continue # cut comma at end of command hline[1]=`echo $hline[1] | sed -e 's/\(^.*\),/\1/'` # ${hline[1]%,} truncates the last ',' cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}") done _describe -t zypper-commands 'zypper command' cmdlist fi } _all_repos() { local -a repos repos=( $(zypper -q lr | tail -n +3 | cut -d'|' -f 2) ) _describe -t repos 'Available repositories' repos && return } _enabled_repos() { repos=( $(zypper -x lr | grep 'enabled="1"' | cut -d\" -f 2) ) _describe -t repos 'Available repositories' repos && return } _disabled_repos() { repos=( $(zypper -x lr | grep 'enabled="0"' | cut -d\" -f 2) ) _describe -t repos 'Available repositories' repos && return } _zypper_cmd_do() { typeset -A opt_args local context state line local hline local -a cmdlist local tag=0 local curcontext="$curcontext" zstyle ":completion:${curcontext}:" use-cache on zstyle ":completion:${curcontext}:" cache-policy _zypper_caching_policy _call_program help-commands LANG=C zypper help $cmd | while read -A hline; do # start parsing from "Options:" [[ $hline =~ "^Command options:" ]] && tag=1 [[ $tag = 0 ]] && continue # Option has to start with a '-' [[ $hline[1] =~ ^- ]] || continue (( ${#hline} < 2 )) && continue cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}") done if [ -n "$cmdlist" ]; then local -a repos # special completion lists for certain options (mainly repos) case ${words[CURRENT - 1]} in --from) repos=( $(zypper -x lr | grep 'enabled="1"' | cut -d\" -f 2) ) _describe -t repos 'Available repositories' repos && return ;; (--enable|-e) case $cmd in (mr|modifyrepo) _disabled_repos && return ;; esac ;; (--disable|-d) case $cmd in (mr|modifyrepo) _enabled_repos && return ;; esac ;; (--type|-t) local -a types case $cmd in (if|info|se|search|in|install) types=( pattern srcpackage package patch ) _describe -t types 'Package types' types && return ;; esac ;; esac # all options available for the active main command _describe -t zypper-commands 'zypper command' cmdlist case $cmd in (lr|repos) _all_repos ;; (in|install) local expl _description files expl 'RPM files' _files "$expl[@]" -g '*.(#i)rpm(.)' ;; esac # only suggest packages if at least one character is given if [[ ${words[CURRENT]} =~ "^[0-9a-zA-Z]" ]] ; then local -a pkglist if ( [[ ${+_zypp_all_raw} -eq 0 ]] || _cache_invalid ZYPPER_ALL_RAW ) && ! _retrieve_cache ZYPPER_ALL_RAW; then _zypp_all_raw=$(zypper -x -q se | grep '