#compdef zypper # # Copyright (C) 2009 Holger Macht # # 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.1 # # Main dispatcher _zypper() { 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 zypper help | while read -A hline; do # start parsing with "Global Options:" [[ $hline =~ "^Global Options:" ]] && tag=1 [[ $tag = 0 ]] && continue [[ $hline[1] =~ ^\t\t\t\t ]] && 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 } _zypper_cmd_do() { local hline local -a cmdlist local tag=0 _call_program help-commands 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 _describe -t zypper-commands 'zypper command' cmdlist else _complete fi } # Code to make sure _zypper is run when we load it _zypper "$@"