74 lines
2.0 KiB
Plaintext
74 lines
2.0 KiB
Plaintext
#compdef zypper
|
|
#
|
|
# Copyright (C) 2009 Holger Macht <holger@homac.de>
|
|
#
|
|
# This file is released under the GPLv2.
|
|
#
|
|
# Based on the 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 "$@"
|