about summary refs log tree commit diff
path: root/Completion/openSUSE/Command/_zypper
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2011-04-30 16:58:26 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2011-04-30 16:58:26 +0000
commitf8e254aa85cdf79c48a44d4d42f905478aaa9c37 (patch)
treeef7cbdbec03bb06af90b63aeef5b2cd0ba35c56e /Completion/openSUSE/Command/_zypper
parent2938c58c82ddbd342e0750c15be2ced12bf98e3c (diff)
downloadzsh-f8e254aa85cdf79c48a44d4d42f905478aaa9c37.tar.gz
zsh-f8e254aa85cdf79c48a44d4d42f905478aaa9c37.tar.xz
zsh-f8e254aa85cdf79c48a44d4d42f905478aaa9c37.zip
İsmail Dönmez: 29020: new openSUSE completions
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 "$@"