Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] Completion/Unix/Command/_vcsh: Update
- X-seq: zsh-workers 31571
- From: Richard Hartmann <richih.mailinglist@xxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: [PATCH] Completion/Unix/Command/_vcsh: Update
- Date: Wed, 24 Jul 2013 16:51:39 +0200
- Cc: Richard Hartmann <richih.mailinglist@xxxxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed;        d=gmail.com; s=20120113;        h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references;        bh=kow1dSStX1+s3sS0onRPn2teAfQD8vSCMvewYanx3dk=;        b=xrgMF4QkzOPV0kPtfkwWM7CserXwC//XWIaQSHUK6zAwGdE1A6TugseibbrvNPRf/i         6U0HxlS3PdzCFR8nbe75/cU51c7/m4rBidh0hAzB/g4gMOGPEsWX+bg//8j/emyMh/Pl         wSo2aff++rEn962z3vhE0znMS/ta9jpJ4TRf3Ef4PePFBeKRVkyoG8Eon061S2/XIgzq         BxnS/a0dBZxMSSAewsX0OM3qG/9i+7JzwbtRFqcRcRZBe5/srxh6TP3/l6vKLYJUcJlx         xKAFtfH8vrqRti9+HDoTYvjoIgBA9HSgqM7K98+M4xWrM0BEajaMdx5JRv/F7VZxGfo1         r7Ig==
- In-reply-to: <CAD77+gQ8xZtzAtYsFqHM2pevAx4Tu-npX8ew_BNdNsPd+cnozQ@mail.gmail.com>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <CAD77+gQ8xZtzAtYsFqHM2pevAx4Tu-npX8ew_BNdNsPd+cnozQ@mail.gmail.com>
---
 Completion/Unix/Command/_vcsh |  149 ++++++++++++++++++++++++++++++++++++-----
 1 file changed, 133 insertions(+), 16 deletions(-)
diff --git a/Completion/Unix/Command/_vcsh b/Completion/Unix/Command/_vcsh
index 89588e4..47dbd9e 100644
--- a/Completion/Unix/Command/_vcsh
+++ b/Completion/Unix/Command/_vcsh
@@ -1,18 +1,135 @@
 #compdef vcsh
 
-_arguments \
-	':subcommand:((
-		clone\:"clone from repo"
-		help\:"display help"
-		delete\:"delete repo"
-		enter\:"Enter repo; spawn new \$SHELL"
-		init\:"init & clone from repo"
-		list\:"list all repos"
-		list-tracked\:"list all files tracked by vcsh"
-		list-tracked-by\:"list files tracked by a repo"
-		rename\:"rename repo"
-		run\:"run command on repo"
-		setup\:"set up repo with recommended settings"
-		write-gitignore\:"write .gitignore.d/foo via git ls-files"
-		\<REPO\>\:"Run git command directly"
-	))'
+function __vcsh_repositories () {
+	local expl
+	local -a repos
+	repos=( ${(f)"$(command vcsh list)"} )
+	_describe -t repos 'repositories' repos
+}
+
+function __vcsh_not_implemented_yet () {
+	_message "Subcommand completion '${1#*-}': not implemented yet"
+}
+
+function _vcsh-clone () {
+	__vcsh_not_implemented_yet "$0" #TODO
+}
+
+function _vcsh-delete () {
+	(( CURRENT == 2 )) && __vcsh_repositories
+}
+
+function _vcsh-enter () {
+	(( CURRENT == 2 )) && __vcsh_repositories
+}
+
+function _vcsh-help () {
+	_nothing
+}
+
+function _vcsh-init () {
+	_nothing
+}
+
+function _vcsh-list () {
+	_nothing
+}
+
+function _vcsh-list-tracked () {
+	_nothing
+}
+
+function _vcsh-list-tracked-by () {
+	(( CURRENT == 2 )) && __vcsh_repositories
+}
+
+function _vcsh-pull () {
+	_nothing
+}
+
+function _vcsh-push () {
+	_nothing
+}
+
+function _vcsh-rename () {
+	(( CURRENT == 2 )) && __vcsh_repositories
+	(( CURRENT == 3 )) && _message "new repository name"
+	(( CURRENT > 3 )) && _nothing
+}
+
+function _vcsh-run () {
+	(( CURRENT == 2 )) && __vcsh_repositories
+	if (( CURRENT >= 3 )); then
+		words=( "${(@)words[3,-1]}" )
+		(( CURRENT -= 2 ))
+		_complete
+	fi
+}
+
+function _vcsh-upgrade () {
+	(( CURRENT == 2 )) && __vcsh_repositories
+}
+
+function _vcsh-version () {
+	_nothing
+}
+
+function _vcsh-which () {
+	_files
+}
+
+function _vcsh-write-gitignore () {
+	(( CURRENT == 2 )) && __vcsh_repositories
+}
+
+function _vcsh () {
+	local curcontext="${curcontext}"
+	local state vcshcommand
+	local -a args subcommands
+
+	subcommands=(
+		"clone:clone an existing repository"
+		"delete:delete an existing repository"
+		"enter:enter repository; spawn new <\$SHELL>"
+		"help:display help"
+		"init:initialize an empty repository"
+		"list:list all local vcsh repositories"
+		"list-tracked:list all files tracked by vcsh"
+		"list-tracked-by:list files tracked by a repository"
+		"pull:pull from all vcsh remotes"
+		"rename:rename a repository"
+		"run:run command with <\$GIT_DIR> and <\$GIT_WORK_TREE> set"
+		"upgrade:upgrade repository to currently recommended settings"
+		"version:print version information"
+		"which:find <substring> in name of any tracked file"
+		"write-gitignore:write .gitignore.d/<repo> via git ls-files"
+	)
+
+	args=(
+		'-c[source <file> prior to other configuration files]:config files:_path_files'
+		'-d[enable debug mode]'
+		'-v[enable verbose mode]'
+		'*:: :->subcommand_or_options_or_repo'
+	)
+
+	_arguments -C ${args} && return
+
+	if [[ ${state} == "subcommand_or_options_or_repo" ]]; then
+		if (( CURRENT == 1 )); then
+			_describe -t subcommands 'vcsh sub-commands' subcommands
+			__vcsh_repositories
+		else
+			vcshcommand="${words[1]}"
+			if ! (( ${+functions[_vcsh-$vcshcommand]} )); then
+				# There is no handler function, so this is probably the name
+				# of a repository. Act accordingly.
+				_dispatch git git
+			else
+				curcontext="${curcontext%:*:*}:vcsh-${vcshcommand}:"
+				_call_function ret _vcsh-${vcshcommand}
+			fi
+		fi
+	fi
+}
+
+_vcsh "$@"
-- 
1.7.10.4
Messages sorted by:
Reverse Date,
Date,
Thread,
Author