summaryrefslogtreecommitdiff
path: root/Completion/openSUSE/Command/_zypper
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/openSUSE/Command/_zypper')
-rw-r--r--Completion/openSUSE/Command/_zypper73
1 files changed, 73 insertions, 0 deletions
diff --git a/Completion/openSUSE/Command/_zypper b/Completion/openSUSE/Command/_zypper
new file mode 100644
index 000000000..57f942de4
--- /dev/null
+++ b/Completion/openSUSE/Command/_zypper
@@ -0,0 +1,73 @@
+#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 "$@"