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