1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-19 11:31:26 +01:00

31571: Completion/Unix/Command/_vcsh: Update

This commit is contained in:
Richard Hartmann 2013-07-24 16:51:39 +02:00
parent e282fd8ecb
commit f9851d817f
2 changed files with 137 additions and 16 deletions

View file

@ -1,3 +1,7 @@
2013-07-24 Richard Hartmann <richih.mailinglist@gmail.com>
* 31571: Completion/Unix/Command/_vcsh: Update
2013-07-24 Peter Stephenson <p.stephenson@samsung.com>
* Src/hist.c: 31570: with HIST_REDUCE_BLANKS don't truncate

View file

@ -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 "$@"