From 281dfc7f62f347fc137190db6e736a07ecb490e6 Mon Sep 17 00:00:00 2001
From: Daniel Friesel <derf@derf.homelinux.org>
Date: Tue, 2 Sep 2008 22:43:38 +0200
Subject: zsh completion: Use cool zshcompsys features

---
 provides/zsh/completions/_envstore | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

(limited to 'provides/zsh')

diff --git a/provides/zsh/completions/_envstore b/provides/zsh/completions/_envstore
index f75a223..1b8a862 100644
--- a/provides/zsh/completions/_envstore
+++ b/provides/zsh/completions/_envstore
@@ -5,8 +5,9 @@
 ## https://derf.homelinux.org/~derf/dotfiles/completion/_envstore
 ## see also: http://git.cloudconnected.org/?p=envstore.git;a=summary
 
-local arguments_action arguments_action_nofile
-local arguments_save arguments_rm arguments_eval
+local -a arguments_action arguments_action_nofile
+local -a arguments_save arguments_rm arguments_eval
+local lstate
 
 arguments_action=(
 	'1:action:(clear eval rm save show)'
@@ -19,16 +20,16 @@ arguments_action_nofile=(
 # Also, don't complete parameters marked 'special', since they're usually
 # specific to the current shell
 arguments_save=(
-	'2:parameter:_parameters -g "(scalar|integer)*export"'
+	'2:parameter:->param'
 )
 arguments_rm=(
-	'2:parameter:($(envstore eval -e | cut -d " " -f 2 | cut -d "=" -f 1))'
+	'2:saved parameter:->saved_param'
 )
 arguments_eval=(
 	'2::option:(-e)'
 )
 
-if [[ $CURRENT -ge 3 ]] {
+if (( CURRENT >= 3 )) {
 	case ${words[2]} in 
 		eval)  _arguments -s $arguments_eval ;;
 		rm)    _arguments -s $arguments_rm ;;
@@ -39,3 +40,17 @@ if [[ $CURRENT -ge 3 ]] {
 } else {
 	_arguments -s $arguments_action_nofile
 }
+
+while [[ -n $state ]]; do
+	lstate=$state
+	state=''
+	case $lstate in
+		param)
+			_parameters -g '(scalar|integer)*export'
+		;;
+		saved_param)
+			_wanted parameter expl 'saved parameter' \
+			compadd $(envstore eval -e | cut -d ' ' -f 2 | cut -d '=' -f 1)
+		;;
+	esac
+done
-- 
cgit v1.2.3